Files
sless/internal/ai/prompts.go
T

77 lines
4.9 KiB
Go

// internal/ai/prompts.go
// Дата: 2026-03-12
// Шаблоны system-промптов для каждого уровня анализа (1–5).
// Уровень 0 — AI не вызывается вообще (проверка в analyzer.go).
package ai
import "fmt"
// systemPrompts — system prompt для каждого уровня.
// Каждый уровень строго ограничен своей областью — не расширять без явного указания.
var systemPrompts = map[int]string{
1: `Ты — анализатор Terraform конфигурации. Твоя задача: ТОЛЬКО синтаксический анализ.
Найди синтаксические ошибки в HCL: опечатки в ключевых словах, незакрытые блоки, неверные типы значений, невалидные атрибуты.
НЕ давай рекомендаций по улучшению, НЕ анализируй логику, НЕ комментируй архитектуру.
Формат ответа: список найденных ошибок или "✓ Синтаксических ошибок не обнаружено."`,
2: `Ты — анализатор Terraform конфигурации. Твоя задача: синтаксис + базовые проблемы.
1. Синтаксические ошибки в HCL.
2. Базовые проблемы: неиспользуемые переменные/ресурсы, пустые обязательные значения, дублирующиеся ресурсы.
НЕ анализируй зависимости, архитектуру, безопасность.
Формат: список проблем с пометкой [SYNTAX] или [BASIC], или "✓ Проблем не обнаружено."`,
3: `Ты — анализатор Terraform конфигурации. Твоя задача: синтаксис + базовые проблемы + зависимости.
1. Синтаксические ошибки.
2. Базовые проблемы (неиспользуемые ресурсы, пустые значения).
3. Анализ зависимостей: потенциальные race conditions при apply/destroy, неявные зависимости, проблемы с порядком создания ресурсов.
НЕ давай рекомендаций по безопасности или рефакторингу.
Формат: список проблем с пометкой [SYNTAX], [BASIC] или [DEPS], или "✓ Проблем не обнаружено."`,
4: `Ты — анализатор Terraform конфигурации. Твоя задача: полный анализ + безопасность.
1. Синтаксические ошибки.
2. Базовые проблемы.
3. Зависимости и порядок операций.
4. Безопасность и best practices: открытые порты (0.0.0.0/0), избыточные права доступа, незашифрованные ресурсы, жёстко заданные секреты.
Формат: список проблем с пометкой [SYNTAX], [BASIC], [DEPS] или [SECURITY], или "✓ Проблем не обнаружено."`,
5: `Ты — старший DevOps-инженер, проводишь полный аудит Terraform конфигурации.
Анализируй:
1. Синтаксические ошибки.
2. Базовые проблемы.
3. Зависимости и порядок операций.
4. Безопасность и best practices.
5. Оптимизация: возможности для рефакторинга, использование модулей, устаревшие паттерны, альтернативные подходы.
Давай конкретные рекомендации с примерами кода где уместно.
Формат: список проблем и рекомендаций с пометкой [SYNTAX], [BASIC], [DEPS], [SECURITY] или [OPT].`,
}
// levelNames — человекочитаемые названия уровней для вывода.
var levelNames = map[int]string{
0: "OFF",
1: "SYNTAX",
2: "BASIC",
3: "MODERATE",
4: "DETAILED",
5: "FULL",
}
// BuildPrompt формирует финальный промпт для отправки в LLM.
// planText — вывод terraform plan (текст или JSON).
func BuildPrompt(level int, planText string) string {
sysPrompt, ok := systemPrompts[level]
if !ok {
sysPrompt = systemPrompts[1]
}
return fmt.Sprintf("%s\n\nTerraform plan output:\n```\n%s\n```", sysPrompt, planText)
}
// LevelName возвращает название уровня для вывода пользователю.
func LevelName(level int) string {
name, ok := levelNames[level]
if !ok {
return "UNKNOWN"
}
return name
}