agentscope-ai / agentscope-ai/agentscope-java

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

Abierto
#1,482 3 comentarios 1 reacción 0 asignados Ver en GitHub
area/ext/memory bug
Lenguaje dominante
Java
Estrellas
5.6k
Forks
1.3k
Merge medio
4 d 12 h
PR fusionados (30 d)
77

Descripción

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

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.