Skip to content

v1.7.0

Choose a tag to compare

@github-actions github-actions released this 10 Jun 18:36
· 232 commits to main since this release

定位助手防命令编造 — 三层防护机制

问题

定位助手在分析运维问题时,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,修改 agentBasePrompt
  • pkg/ai/agent.go — 新增 RetrievedContent 追踪,改 RunAgent 签名
  • pkg/ai/intent.go — 新增 validateTroubleshootResponse,修复 normalizeAgentResponse
  • frontend/.../TroubleshootingPanel.tsx — 修复前端 JSON 拆包
  • pkg/ai/validate_test.go — 新增验证函数单元测试
  • pkg/ai/integration_validate_test.go — 新增端到端集成测试