环境
- 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() 的变更对后续调用立即生效。
环境
问题描述
调用 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() 的变更对后续调用立即生效。