From f002571629beb498b30dd13664cd1efd5127c5a8 Mon Sep 17 00:00:00 2001 From: zhuyongxin Date: Thu, 25 Jun 2026 09:55:02 +0800 Subject: [PATCH] =?UTF-8?q?refactor(ai-ops):=20=E5=A2=9E=E5=BC=BA=20lookup?= =?UTF-8?q?=5Fknowledge=20=E5=B7=A5=E5=85=B7=E6=8F=8F=E8=BF=B0=E5=B9=B6?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=B7=A5=E5=85=B7=E4=BC=98=E5=85=88=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 主要改动 1. 增强 lookup_knowledge 工具描述 - 参考 queryLogs 的详细描述格式 - 添加 IMPORTANT 关键词强调优先使用场景 - 详细列举 4 种查询场景及示例: * 错误码定义(ERR_TIMEOUT) * 接口文档(payment-gateway) * 排障步骤(支付超时排查) * 配置说明(HikariCP) - 保留性能优势说明(L0 < 10ms, L1 200-500ms) 2. 调整工具数组顺序 - 将 lookupKnowledgeTool 提前到第 2 位(仅次于 dateTimeTools) - Mock 模式顺序:dateTimeTools → lookupKnowledgeTool → queryMetricsTools → queryLogsTools - 真实模式顺序:dateTimeTools → lookupKnowledgeTool → queryMetricsTools → internalDocsTools - 弃用工具(internalDocsTools)放在最后 ## 设计目标 解决 Executor 优先选择 queryLogsTools 的问题: - 工具描述对等:lookup_knowledge 与 queryLogs 同等详细 - 位置优先:知识库查询排在日志查询之前 - 明确引导:IMPORTANT 关键词强调使用时机 ## 预期效果 Executor 在遇到错误码、配置项、排障问题时,应优先调用 lookup_knowledge, 而不是直接查询日志。 --- .../com/superbiz/agent/service/AiOpsService.java | 5 +++-- .../com/superbiz/agent/tool/LookupKnowledgeTool.java | 12 +++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/superbiz/agent/service/AiOpsService.java b/src/main/java/com/superbiz/agent/service/AiOpsService.java index 72dfb50..0d0e630 100644 --- a/src/main/java/com/superbiz/agent/service/AiOpsService.java +++ b/src/main/java/com/superbiz/agent/service/AiOpsService.java @@ -146,14 +146,15 @@ public class AiOpsService { /** * 动态构建方法工具数组 * 根据 cls.mock-enabled 决定是否包含 QueryLogsTools + * 工具顺序:知识库查询优先,日志查询次之,弃用工具最后 */ private Object[] buildMethodToolsArray() { if (queryLogsTools != null) { // Mock 模式:包含 QueryLogsTools - return new Object[]{dateTimeTools, internalDocsTools, queryMetricsTools, queryLogsTools, lookupKnowledgeTool}; + return new Object[]{dateTimeTools, lookupKnowledgeTool, queryMetricsTools, queryLogsTools}; } else { // 真实模式:不包含 QueryLogsTools(由 MCP 提供日志查询功能) - return new Object[]{dateTimeTools, internalDocsTools, queryMetricsTools, lookupKnowledgeTool}; + return new Object[]{dateTimeTools, lookupKnowledgeTool, queryMetricsTools, internalDocsTools}; } } } diff --git a/src/main/java/com/superbiz/agent/tool/LookupKnowledgeTool.java b/src/main/java/com/superbiz/agent/tool/LookupKnowledgeTool.java index d7b1e8b..3aa64db 100644 --- a/src/main/java/com/superbiz/agent/tool/LookupKnowledgeTool.java +++ b/src/main/java/com/superbiz/agent/tool/LookupKnowledgeTool.java @@ -30,9 +30,15 @@ public class LookupKnowledgeTool { * @param query 查询关键词 * @return 查询结果 */ - @Tool(description = "查询内部知识库文档。采用两阶段检索:L0 精确匹配关键词(< 10ms),L1 语义检索补充(200-500ms)。" + - "支持查询错误码定义、接口文档、排障步骤、配置说明等。" + - "参数 query: 查询关键词或描述,例如 'ERR_TIMEOUT'、'支付超时排查'") + @Tool(description = "查询内部知识库文档,获取错误码定义、接口文档、排障步骤、配置说明等背景信息。" + + "采用两阶段检索:L0 精确匹配关键词(< 10ms),L1 语义检索补充(200-500ms)。" + + "IMPORTANT: 遇到错误码、接口名、配置项、排障问题时,优先使用此工具。" + + "支持的查询场景:" + + "1) 错误码定义 - 查询错误码的含义和处理方法,例如 'ERR_TIMEOUT'、'ERR_CONNECTION_REFUSED';" + + "2) 接口文档 - 查询 API 接口定义、参数说明、返回格式,例如 'payment-gateway'、'/api/v1/orders';" + + "3) 排障步骤 - 查询故障诊断流程、最佳实践,例如 '支付超时排查'、'数据库连接池配置';" + + "4) 配置说明 - 查询系统配置、中间件参数,例如 'HikariCP'、'Redis 集群配置'。" + + "参数 query: 查询关键词或描述") public LookupResult lookupKnowledge(String query) { // 生成请求ID用于追踪 String requestId = java.util.UUID.randomUUID().toString().substring(0, 8);