agentscope-ai / agentscope-ai/agentscope-java
AutoContextMemory导致工具重复调用,直到maxIters才结束,触发压缩后有概率出现这个问题
- 主要语言
- Java
- 星标
- 5.6k
- 派生
- 1.3k
- 平均合并
- 4 天 12 小时
- 30 天内合并 PR
- 77
描述
以下为AI分析结果:
两个高风险点:AutoContextHook 会重写 PreReasoningEvent 的输入消息;AutoContextMemory 多处注释提到“保留 ToolUseBlock 结构”。如果压缩后的上下文记忆仍带历史 ToolUseBlock, ReAct 循环很可能把它当作新的待执行工具请求。
更具体的线索:大消息摘要路径会把 ToolUseBlock 原样放回压缩后的 message,注释还明确说“preserve ToolUseBlock structure”。这对 API 消息格式也许是为了配对工具结果,但对 ReAct的“是否有工具调用需要执行”的判定很危险。
工具执行后会立刻进入下一次 reasoning,而 AutoContextHook 在这次 reasoning 前调用压缩。也就是说压缩可能发生在“工具结果刚写入 memory、模型还没基于这个 tool_result生成最终回答”之间;如果这时把当前轮 tool_use/tool_result 压成普通摘要,模型很容易把它当作历史叙述而不是刚返回的工具结果,从而再次请求同一个工具。
问题根因在 AutoContextHook 的 PreReasoningEvent:工具执行结果刚写入 memory 后,下一轮 reasoning 前会触发压缩。原实现直接走 compressIfNeeded(),可能把“当前轮尚未被模型消费的tool_use/tool_result”压成普通摘要,模型看不到结构化工具结果,就容易再次调用同一个工具。
贡献指南
评估
这个 Issue 还没有评估数据。