agentscope-ai / agentscope-ai/agentscope-java

AutoContextMemory导致工具重复调用,直到maxIters才结束,触发压缩后有概率出现这个问题

Đang mở
#1,482 3 bình luận 1 reaction 0 người được giao Xem trên GitHub
area/ext/memory bug
Ngôn ngữ chính
Java
Star
5.6k
Fork
1.3k
Merge trung bình
4 ngày 12 giờ
Pull request đã merge (30 ngày)
77

Mô tả

以下为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”压成普通摘要,模型看不到结构化工具结果,就容易再次调用同一个工具。

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.