agentscope-ai / agentscope-ai/agentscope-java

[Bug]:ReActAgent 在流式输出(stream)时存在严重的文本块内容累积重复问题

Abierto
#846 7 comentarios 0 reacciones 0 asignados Ver en GitHub
area/core/agent bug
Lenguaje dominante
Java
Estrellas
5.6k
Forks
1.3k
Merge medio
4 d 12 h
PR fusionados (30 d)
77

Descripción

问题描述 (Description)
在使用 ReActAgent 配合 DashScopeChatModel (如 qwen3-max) 进行流式调用时,我发现 REASONING 事件返回的 Msg 对象在多轮迭代(Iteration)中会不断累加之前的 TextBlock。

在 ReAct 的“思考 -> 工具调用 -> 结果返回 -> 再次思考”循环中,每一轮产生的 REASONING 事件都包含了之前所有轮次的文本内容。这导致前端在实现“打字机”效果时,会反复接收并显示已经输出过的文字。

核心痛点 (Key Issues)
内容累加:event.getMessage().getContent() 返回的是全量 Block 列表,而不是当前迭代产生的增量 Block。

HINT 信息干扰:系统注入的上下文(如当前时间 timestamp)会被模型复读并包含在 TextBlock 中,且随迭代多次重复出现。

缺少增量标识:目前很难在不自行实现复杂 Hash 过滤的情况下,从 REASONING 事件中准确提取“仅限本次生成”的文字碎片。

我的实现环境 (Context)
框架版本: AgentScope Java SDK 1.0.9 相关版本

模型: qwen3-max (DashScopeChatModel)

模式: ReActAgent 开启 stream(true)

复现代码片段 (My Code)

// 当前后端处理逻辑
return agent.stream(Msg.builder().textContent(userQuery).build())
.filter(e -> e.getType() == EventType.REASONING)
.flatMapIterable(event -> {
// 这里 msg.getContent() 在第二轮迭代时会包含第一轮的所有 TextBlock
// 导致前端收到重复段落
return event.getMessage().getContent().stream()
.filter(block -> block instanceof TextBlock)
.map(block -> convertToResponse(block))
.toList();
});

期待的解决方案 (Suggestions)
框架层去重:ReActAgent 在流式模式下,是否可以只在 Event 中发送该阶段新增的 ContentBlock?

状态标识:在 ContentBlock 或 Event 中增加一个 isIncremental 或 iterationId 标识,方便开发者过滤。

最佳实践:如果这是设计使然,官方是否能提供一个标准的、优雅的流式增量提取示例?

证据截图 (Screenshots)

Image

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.