agentscope-ai / agentscope-ai/agentscope-java

updateToolGroups() does not take effect on existing ReActAgent instance

Aberta
#1,203 4 comentários 0 reações 0 responsáveis Ver no GitHub
area/core/agent bug
Linguagem predominante
Java
Estrelas
5.6k
Forks
1.3k
Merge médio
4d 12h
PRs com merge (30d)
77

Descrição

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

Guia de contribuição

Abrir o guia de contribuição

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.