Skip to content

updateToolGroups() does not take effect on existing ReActAgent instance #1203

@catshcroZhang

Description

@catshcroZhang

环境

  • 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() 的变更对后续调用立即生效。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions