# Prompt 配置化改进总结 **日期**: 2026-06-24 **改进**: 从 YAML 配置改为 Markdown 文件 --- ## 改进原因 YAML 格式存在以下问题: 1. **多行字符串缩进敏感**:容易出现格式错误 2. **转义字符复杂**:代码块、表格需要转义处理 3. **可读性差**:长文本在 YAML 中难以阅读和维护 Markdown 格式优势: - ✅ 原生支持代码块、表格、列表 - ✅ 无需转义,所见即所得 - ✅ 版本控制 diff 更清晰 - ✅ 编辑器语法高亮支持好 --- ## 最终方案 ### 文件结构 ``` src/main/resources/prompts/ ├── planner-prompt.md # Planner Agent 系统提示词 ├── executor-prompt.md # Executor Agent 系统提示词 └── supervisor-prompt.md # Supervisor Agent 系统提示词 ``` ### 加载方式 ```java @Configuration public class AiOpsPromptProperties { @PostConstruct public void loadPrompts() { planner = loadPromptFromFile("prompts/planner-prompt.md"); executor = loadPromptFromFile("prompts/executor-prompt.md"); supervisor = loadPromptFromFile("prompts/supervisor-prompt.md"); } private String loadPromptFromFile(String path) throws IOException { ClassPathResource resource = new ClassPathResource(path); return new String(resource.getInputStream().readAllBytes(), StandardCharsets.UTF_8); } } ``` ### 使用方式 ```java @Autowired private AiOpsPromptProperties promptProperties; // 直接使用 .systemPrompt(promptProperties.getPlanner()) ``` --- ## 编译验证 ```bash mvn clean compile -DskipTests ``` ✅ **结果**: BUILD SUCCESS --- ## 完整改动清单 | 文件 | 改动 | |------|------| | `AiOpsService.java` | 注入 `LookupKnowledgeTool` + `AiOpsPromptProperties` | | `AiOpsPromptProperties.java` | 从 Markdown 文件加载 Prompt(使用 `@PostConstruct`)| | `prompts/planner-prompt.md` | 新增:Planner 系统提示词 | | `prompts/executor-prompt.md` | 新增:Executor 系统提示词(含工具选择指南)| | `prompts/supervisor-prompt.md` | 新增:Supervisor 系统提示词 | | ~~`YamlPropertySourceFactory.java`~~ | 已删除(不再需要)| | ~~`prompts/ai-ops-prompts.yml`~~ | 已删除(改用 Markdown)| --- ## Executor Prompt 关键改进 新增工具选择指南: ```markdown - 根据查询内容选择合适的工具: * 精确关键词(错误码、配置项名称)→ 优先使用 lookup_knowledge,未找到时降级到 queryInternalDocs * 模糊概念、故障流程 → 直接使用 queryInternalDocs * 告警数据 → queryPrometheusAlerts * 日志数据 → queryLogs ``` 降级策略: - `lookup_knowledge` 未找到 → 自动降级到 `queryInternalDocs` - 确保查询不会因为知识库缺少内容而失败