4 Commits 74eba7b6e5 ... 071ffcbe50

Author SHA1 Message Date
  liuzhiheng 071ffcbe50 update 1 week ago
  liuzhiheng 15407308fa Merge branch 'lzh_knowledge_1202' of https://git.yishihui.com/yangxiaohui/kg_agent into lzh_knowledge_1202 1 week ago
  liuzhiheng 90afb6a243 update 1 week ago
  liuzhiheng 50b3bd45c0 prompt update 1 week ago

+ 8 - 12
knowledge_v2/function_knowledge.py

@@ -138,11 +138,7 @@ class FunctionKnowledge:
         
         try:
             prompt_template = self._load_prompt("function_generate_query_prompt.md")
-            prompt = prompt_template.format(
-                question=question,
-                post_info=post_info,
-                persona_info=persona_info
-            )
+            prompt = prompt_template.replace("{question}", question)
             
             logger.info("→ 调用Gemini生成Query...")
             query = generate_text(prompt=prompt)
@@ -189,7 +185,7 @@ class FunctionKnowledge:
                 return cached_tool
         
         try:
-            all_tool_infos = get_all_tool_infos()
+            all_tool_infos = self._load_prompt("all_tools_infos.md")
             if not all_tool_infos:
                 logger.info("  工具库为空,无可用工具")
                 return "None"
@@ -198,14 +194,14 @@ class FunctionKnowledge:
             logger.info(f"  当前可用工具数: {tool_count}")
                 
             prompt_template = self._load_prompt("function_knowledge_select_tools_prompt.md")
-            prompt = prompt_template.format(
-                query=query,
-                tool_infos=all_tool_infos
-            )
+            prompt = prompt_template.replace("{all_tool_infos}", all_tool_infos)
             
             logger.info("→ 调用Gemini选择工具...")
-            tool_name = generate_text(prompt=prompt)
-            tool_name = tool_name.strip()
+            result = generate_text(prompt=prompt)
+            result_json = json.loads(result)
+            tool_name = result_json.get('工具名', '')
+            tool_mcp_name = result_json.get('工具调用ID', '')
+            tool_instructions = result_json.get('使用方法', '')
             
             logger.info(f"✓ 选择结果: {tool_name}")
             

+ 79 - 10
knowledge_v2/prompt/function_knowledge_select_tools_prompt.md

@@ -1,20 +1,89 @@
-你是一个工具选择专家。你的任务是根据用户的查询语句,从给定的工具列表中选择最合适的一个工具。
+# 角色定位
+你是一个工具匹配专家,负责根据用户需求从MCP工具库中找到最合适的工具。
 
-用户查询:
-{query}
+# 核心任务
+1. 接收上游输入的需求query
+2. 理解需求的核心意图(用户想找什么、解决什么问题)
+3. 查询MCP工具库,匹配最相关的工具
+4. 返回工具信息或"无工具"
+
+# MCP工具库信息
 
-可用工具列表:
 {all_tool_infos}
 
+# 匹配规则
+
+## 匹配逻辑
+1. **需求本质识别**:理解需求背后的真实意图
+   - 示例:"谐音梗这个选题灵感怎么来的" → 真实意图是"寻找热门选题的来源/依据"
+   - 不关注具体关键词(如"谐音梗"),而关注用户想解决什么问题
+2. **需求类型分类**:判断需求属于哪种类型
+   - 寻找灵感/选题来源 → 需要热搜词/榜单类工具
+   - 分析特定词的热度/趋势 → 需要趋势分析类工具
+   - 寻找内容案例/参考 → 需要内容搜索/爬取类工具
+   - 生成创意内容 → 需要大模型/AI生成类工具
+3. **工具能力匹配**:根据需求类型,对比工具的核心能力
+   - 看工具能否解决该类型的问题(如"提供热门选题")
+4. **选择最优工具**:返回能力最匹配的1个工具,无匹配则返回"无工具"
+
+## 匹配标准
+- 关键词匹配:需求核心词是否在工具介绍中出现或相关
+- 功能匹配:工具能力是否覆盖需求要解决的问题
+
+### 需求意图映射表
+| 需求意图关键信号 | 需求类型 | 对应工具类型 |
+|----------------|---------|------------|
+| "灵感怎么来的"、"选题来源"、"找选题" | 寻找选题灵感 | 热搜词榜单工具 |
+| "这个词热不热"、"趋势如何"、"热度分析" | 关键词趋势分析 | 热搜词搜索工具 |
+| "找案例"、"参考内容"、"爆款笔记" | 内容案例搜索 | 内容爬取工具 |
+
+## 无匹配判定
+当MCP工具库中没有任何工具能解决该需求时,直接返回空json对象。
 
-请判断是否有工具可以解决用户的查询。
-- 如果有,请返回该工具名及工具调用ID。
-- 如果没有合适的工具,请返回 "None"。
+# 输出格式
+json格式,字段定义如下:
+'''json
+{
+    "工具名": "工具名称",
+    "工具调用ID": "调用ID",
+    "使用方法": "简要说明如何使用该工具解决用户需求"
+}
+'''
 
-输出JSON格式,不要包含任何解释。
+## 无匹配时
 '''json
 {
-    "工具名": "",
-    "工具调用ID": ""
+
 }
 '''
+
+# 执行要求
+1. 只返回1个最优工具,不返回多个备选
+2. 严格按照输出格式返回结果
+3. 使用方法要具体,说明如何用该工具解决当前需求
+
+# 示例
+
+## 示例1:成功匹配
+需求输入:什么工具能找到教资查分这个灵感点?
+
+输出:
+工具名:新红热搜词搜索
+工具调用ID:new_red_hot_search_words_search
+使用方法:输入关键词"教资查分",获取该词在小红书的热度值、近90天趋势曲线、相关笔记数据,判断是否为热门选题点。
+{
+    "工具名": "新红热搜词搜索",
+    "工具调用ID": "工具调用ID:new_red_hot_search_words_search",
+    "使用方法": "输入关键词"教资查分",获取该词在小红书的热度值、近90天趋势曲线、相关笔记数据,判断是否为热门选题点。"
+}
+
+## 示例2:无匹配
+需求输入:哪里可以找到股票实时行情数据?
+
+输出:
+{
+
+}
+
+# 上游输入的需求query
+{query}