agentscope-ai / agentscope-ai/agentscope-java

updateToolGroups() does not take effect on existing ReActAgent instance

未关闭
#1,203 4 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
area/core/agent bug
主要语言
Java
星标
5.6k
派生
1.3k
平均合并
4 天 12 小时
30 天内合并 PR
77

描述

---
环境
- AgentScope Java: 1.0.11
- Model: Ollama (qwen3.5:9b-q4_K_M)
- JDK: 17

---
问题描述

调用 toolkit.updateToolGroups() 后,已创建的 ReActAgent 实例在后续调用中仍然使用旧的工具列表,新激活的工具组对 LLM 不可见。

---
复现步骤

Toolkit toolkit = new Toolkit();
toolkit.createToolGroup("basic", "Basic Tools", true);
toolkit.createToolGroup("admin", "Admin Tools", false);
toolkit.registration().tool(new BasicTools()).group("basic").apply();
toolkit.registration().tool(new AdminTools()).group("admin").apply();

ReActAgent agent = ReActAgent.builder()
.name("Assistant").model(model).toolkit(toolkit).build();

// 运行时动态开启 admin 工具组
toolkit.updateToolGroups(List.of("admin"), true);

// 此后调用 agent,admin 工具对 LLM 不可见
agent.call(Msg.builder().textContent("查看系统日志").build()).block();

---
调试结论

通过 PreReasoningEvent Hook 验证:

hook: PreReasoningEvent → toolkit.getToolSchemas().size()
// updateToolGroups 前:2(只有 basic 工具)
// updateToolGroups 后:4(basic + admin 工具)✅ toolkit 状态已更新

toolkit.getToolSchemas() 显示工具数量确实变化,说明 toolkit 对象状态正确更新。但 LLM 收到的实际工具列表未变化——即使换用更强的模型(9b)并向 Memory 注入 SYSTEM 消息提示工具变更,LLM 仍无法调用新工具。

推测原因:ReActAgent 在 build 时将工具 schema 缓存到内部状态,call() 时直接使用缓存值而非重新读取 toolkit。

---
当前 Workaround

工具组变更后重建 agent:

toolkit.updateToolGroups(List.of("admin"), true);
agent = ReActAgent.builder()
.name("Assistant").model(model).toolkit(toolkit).build();

---
期望行为

每次 agent.call() 时应从 toolkit 实时读取当前激活的工具 schema,使 updateToolGroups() 的变更对后续调用立即生效。

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。