Explorar el Código

fix: hidden context params in goal tool

Talegorithm hace 1 día
padre
commit
2d2750c59c

+ 7 - 2
agent/core/runner.py

@@ -890,7 +890,7 @@ class AgentRunner:
                     tc.get("function", {}).get("name") == "goal"
                     for tc in tool_calls
                 )
-                logger.debug(f"[Auto Root Goal] goal_tree.goals={len(goal_tree.goals)}, has_goal_call={has_goal_call}, tool_calls={[tc.get('function', {}).get('name') for tc in tool_calls]}")
+                logger.debug(f"[Auto Root Goal] Before tool execution: goal_tree.goals={len(goal_tree.goals)}, has_goal_call={has_goal_call}, tool_calls={[tc.get('function', {}).get('name') for tc in tool_calls]}")
                 if not has_goal_call:
                     mission = goal_tree.mission
                     root_desc = mission[:200] if len(mission) > 200 else mission
@@ -992,7 +992,8 @@ class AgentRunner:
                             merged_tags = {**config.knowledge.default_tags, **existing_tags}
                             tool_args["tags"] = merged_tags
                         if config.knowledge.default_scopes:
-                            tool_args.setdefault("scopes", config.knowledge.default_scopes)
+                            existing_scopes = tool_args.get("scopes") or []
+                            tool_args["scopes"] = existing_scopes + config.knowledge.default_scopes
                     elif tool_name == "knowledge_search":
                         if config.knowledge.default_search_types and "types" not in tool_args:
                             tool_args["types"] = config.knowledge.default_search_types
@@ -1017,6 +1018,10 @@ class AgentRunner:
                         }
                     )
 
+                    # 如果是 goal 工具,记录执行后的状态
+                    if tool_name == "goal" and goal_tree:
+                        logger.debug(f"[Goal Tool] After execution: goal_tree.goals={len(goal_tree.goals)}, current_id={goal_tree.current_id}")
+
                     # 跟踪保存的知识 ID
                     if tool_name == "knowledge_save" and isinstance(tool_result, dict):
                         metadata = tool_result.get("metadata", {})

+ 11 - 1
agent/tools/builtin/knowledge.py

@@ -95,7 +95,17 @@ async def knowledge_search(
         )
 
 
-@tool(hidden_params=["context"])
+@tool(
+    hidden_params=["context", "owner"],
+    inject_params={
+        "owner": lambda ctx: ctx.get("knowledge_config", {}).get("owner") if ctx else None,
+        "tags": lambda ctx, args: {
+            **ctx.get("knowledge_config", {}).get("default_tags", {}),
+            **(args.get("tags") or {})
+        } if ctx else args.get("tags"),
+        "scopes": lambda ctx, args: (args.get("scopes") or []) + (ctx.get("knowledge_config", {}).get("default_scopes") or []) if ctx else args.get("scopes"),
+    }
+)
 async def knowledge_save(
     task: str,
     content: str,

+ 2 - 2
agent/tools/builtin/subagent.py

@@ -579,7 +579,7 @@ async def _run_agents(
 
 # ===== 工具定义 =====
 
-@tool(description="创建 Agent 执行任务")
+@tool(description="创建 Agent 执行任务", hidden_params=["context"])
 async def agent(
     task: Union[str, List[str]],
     messages: Optional[Union[Messages, List[Messages]]] = None,
@@ -646,7 +646,7 @@ async def agent(
     )
 
 
-@tool(description="评估目标执行结果是否满足要求")
+@tool(description="评估目标执行结果是否满足要求", hidden_params=["context"])
 async def evaluate(
     messages: Optional[Messages] = None,
     target_goal_id: Optional[str] = None,

+ 1 - 1
agent/trace/goal_tool.py

@@ -15,7 +15,7 @@ if TYPE_CHECKING:
 
 # ===== LLM 可调用的 goal 工具 =====
 
-@tool(description="管理执行计划,添加/完成/放弃目标,切换焦点")
+@tool(description="管理执行计划,添加/完成/放弃目标,切换焦点", hidden_params=["context"])
 async def goal(
     add: Optional[str] = None,
     reason: Optional[str] = None,

+ 1 - 1
examples/research/research.prompt

@@ -7,7 +7,7 @@ $system$
 你是最顶尖的AI助手,可以拆分并调用工具逐步解决复杂问题。
 
 $user$
-帮我调研一下,新产品面世时候怎么营销推广“投放”?是openclaw的社区产品,目标用户可能是使用openclaw等agent的科技尝鲜者。独特价值是给纷繁缭乱的各种agent skill提供社区评价。投放我不了解,我不知道一个产品走向市场都要做什么,我只是听过投放这个词,希望你帮我系统调研和讲解一下。
+帮我调研一下,新产品面世时候怎么营销推广
 
 - 先规划调研计划,再逐步完成调研
 - 要有可靠的依据(例如行业大牛的博客、榜单等等),要尽量全面,而不是随便选择一个平台深入