fix(tier2): 服务态从 Toolkit.tool_groups 抠九工具(修 chat run 起手即崩)
B1 控制面真驱 :8200 暴露:每个 chat run 起手即抛 RuntimeError「无法从 Toolkit 抠出 FunctionTool 列表」→ 服务态生成零产出(M3 没写任何文件、SSE 只有心跳、4 次 attempt 全 null verdict)。P4 只验了服务能启 + BackendStore 往返,从没真跑过一回合 chat,故此 bug 一直潜伏。 根因:_extract_function_tools 按 tools/_tools/function_tools 扁平探测,但 2.0.2 Toolkit 把工具按组 存 self.tool_groups(构造传入的 tools 被包进 "basic" 组,group.tools 是 list[ToolBase];源码 tool/_toolkit.py:127-135 + :515)。修:先从所有 tool_groups 收 .tools(得九个 FunctionTool), 旧扁平探测降为兜底。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
9945e2aa9a
commit
01a3229a9e
@ -113,7 +113,20 @@ def _extract_function_tools(toolkit: Any) -> list:
|
||||
2.0.2 Toolkit 内部把工具存在 `tools`(dict[str, ToolBase])或等价结构;不同小版本字段名可能微调,
|
||||
故按几个候选名探测,全失败则诚实抛(让启动期就暴露,而非运行期静默少工具)。
|
||||
"""
|
||||
# Toolkit 把注册的工具放在内部映射里(2.0.2:Toolkit.tools 为 dict[name->ToolBase])。按候选探测,容错。
|
||||
# 2.0.2 Toolkit 把注册的工具按【组】存在 self.tool_groups:每个 ToolGroup 的 .tools 是 list[ToolBase];
|
||||
# build_toolkit 传给 Toolkit(tools=...) 的九工具被 __init__ 包进默认 "basic" 组(源码核验
|
||||
# tool/_toolkit.py:127-135 建 basic 组 tools=tools or []、:515 for tool in group.tools)。
|
||||
# 故从所有组收 .tools 即得九个 FunctionTool 实例(MCP 客户端在 group.mcps、不走这里——服务态 MCP 另议)。
|
||||
# 2026-06-24 实证修复:此前按 tools/_tools/function_tools 扁平探测全空 → 每个 chat run 起手即抛、
|
||||
# 服务态生成零产出(B1 控制面真驱时暴露;P4 只验了服务能启,从没真跑过一回合 chat)。
|
||||
groups = getattr(toolkit, "tool_groups", None)
|
||||
if groups:
|
||||
extracted: list = []
|
||||
for group in groups:
|
||||
extracted.extend(getattr(group, "tools", None) or [])
|
||||
if extracted:
|
||||
return extracted
|
||||
# 兜底:旧扁平探测路径(不同小版本若把工具放扁平映射时仍可用)。
|
||||
for attr in ("tools", "_tools", "function_tools"):
|
||||
container = getattr(toolkit, attr, None)
|
||||
if isinstance(container, dict) and container:
|
||||
@ -121,7 +134,7 @@ def _extract_function_tools(toolkit: Any) -> list:
|
||||
if isinstance(container, (list, tuple)) and container:
|
||||
return list(container)
|
||||
raise RuntimeError(
|
||||
"无法从 tier2 Toolkit 抠出 FunctionTool 列表(探测 tools/_tools/function_tools 均空):"
|
||||
"无法从 tier2 Toolkit 抠出 FunctionTool 列表(tool_groups[*].tools 与 tools/_tools/function_tools 均空):"
|
||||
"AgentScope 2.0.2 Toolkit 内部结构可能与预期不符,请核对 build_toolkit 产物结构后调整 _extract_function_tools。"
|
||||
)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user