77 lines
4.9 KiB
Go
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
|
|
}
|