Repository navigation
v1.7.0
定位助手防命令编造 — 三层防护机制
问题
定位助手在分析运维问题时,LLM 经常返回知识库中不存在的编造命令,原因是:
- Prompt 允许"通用知识补充"作为兜底
- 要求固定输出 5-15 条命令,即使知识库只有 2 条匹配
- 没有任何代码层面验证命令是否来自检索到的文档
修复内容
Prompt 层
- 删除"通用知识补充"后门,明确禁止编造命令
- 删除"5-15 条命令"的硬性数量要求,改为按文档内容决定
source字段从 SHOULD 改为 MUST,要求每条命令标注来源文档和行号- 修复
agentBasePrompt中的 Markdown 格式指令与DefaultTroubleshootPrompt的 JSON 格式冲突 - 删除硬编码的"用中文回答"指令,由各模式 Prompt 自行控制语言
追踪层
- 新增
RetrievedContent在 Agent 循环中记录grep_knowledge/read_knowledge_file工具实际检索到的文档内容和文件名 RunAgent返回签名扩展为(string, *RetrievedContent, error)- 修复 "No matches found" 等非结果行被误解析为检索内容的问题
验证层
- 新增
validateTroubleshootResponse后处理函数:- 无检索内容 → 清空所有 commands 和 steps
- 有检索内容 → 逐条验证命令来源(
source字段优先,两词模糊匹配兜底) - 无法溯源的命令被剥离并输出 warn 日志
Bug 修复
- 修复
normalizeAgentResponse将完整的 troubleshoot JSON(含steps/commands/summary)错误拆包为纯文本 - 修复前端
preprocessContent同样的 JSON 拆包 bug,导致结构化步骤和命令卡片无法渲染
涉及文件
pkg/config/defaults.go— 重写 DefaultTroubleshootPrompt,修改 agentBasePromptpkg/ai/agent.go— 新增 RetrievedContent 追踪,改 RunAgent 签名pkg/ai/intent.go— 新增 validateTroubleshootResponse,修复 normalizeAgentResponsefrontend/.../TroubleshootingPanel.tsx— 修复前端 JSON 拆包pkg/ai/validate_test.go— 新增验证函数单元测试pkg/ai/integration_validate_test.go— 新增端到端集成测试