[Bug]: Streaming responses broken since 0.14.0 for ContextChatEngine and similar classes

当你在 LlamaIndex 0.14.0 至 0.14.24 之间使用 ContextChatEngine 、 CondenseQuestionChatEngine 或 CondensePlusContextChatEngine ,并通过 astream_chat(...).async_respo

快速结论:当你在 LlamaIndex 0.14.0 至 0.14.24 之间使用 ContextChatEngineCondenseQuestionChatEngineCondensePlusContextChatEngine,并通过 astream_chat(...).async_response_gen() 或流式接口读取回复时,会发现流式输出失效,只收到 1 个 chunk;优先确认 llama-index 版本,并升级到 0.14.25。

适用环境:Issue 已确认工具为 LlamaIndex,触发版本为 >= 0.14.0,修复版本为 0.14.25;复现环境中使用了 OpenAIEmbeddingVectorStoreIndexContextChatEngine。Issue 未提供操作系统、Python 版本、CUDA、显卡或其他依赖版本信息。

最快修复方案:将 llama-index 升级到 0.14.25。该版本由维护者在评论中明确说明 “Fixed in 0.14.25”。

注意事项:该问题影响的是非结构化默认 program(output_cls=None)的流式输出路径;结构化 program 仍保持原有的“收集完成后一次性 yield”的行为。Issue 未验证降级到 0.13.6 之外的临时替代方案;如果暂时无法升级,可使用 0.13.6 验证是否为同一问题,但不建议长期停留在旧版本。

问题场景

用户在 LlamaIndex 0.14.0 及之后的版本中运行 ContextChatEngineCondenseQuestionChatEngineCondensePlusContextChatEngine,调用 astream_chat() 后通过 async_response_gen() 逐 token 读取回复。与 0.13.6 相比,流式输出不再逐块返回,而是整个回复只产生一次迭代,实际表现为 Looped over 1

报错原文

[Bug]: Streaming responses broken since 0.14.0 for ContextChatEngine and similar classes

## Looped over 1

该 Issue 没有抛出异常或 traceback,核心现象是流式响应退化为单次返回。

原因分析

根因已由社区定位到 v0.14.0 的 refine 重构,集中在 response_synthesizers/refine.py,而 context.pytypes.pybase.pyschema.py 与 v0.13.6 相比没有变化。

具体链路如下:

  • DefaultRefineProgram.astream_call/stream_call 的非结构化分支(output_cls=None)被三个 chat engine 共用。该分支会把来自 LLM 的每个 token 累积到本地 answer,直到流结束才 yield 一个 StructuredRefineResponse
  • 随后 _aupdate_response/_update_response 把这个单元素 generator 交给 _get_attribute_from_object_async_generator,后者将其耗尽,并在最后只 yield 一次。

因此,即使底层的 llm.astream_chat(...) 仍在流式输出,synthesizer 之上的调用方也只能收到一个 chunk。作为对比,v0.13.6 中的 _arefine_response_single 会直接透传 LLM 流,所以旧版流式正常。

环境排查

  • 确认已安装的 llama-index 版本,尤其是是否处于 >= 0.14.0 且小于 0.14.25。
  • 确认是否使用 ContextChatEngineCondenseQuestionChatEngineCondensePlusContextChatEngine
  • 确认是否通过 astream_chat() 配合 async_response_gen() 消费流式响应。
  • 确认是否使用非结构化默认 refine program,即未指定 output_cls
  • Issue 未提供 Python、CUDA、PyTorch、显卡或操作系统信息,这些项目无需作为本问题的必要排查项。

解决步骤

  1. 查看当前 llama-index 版本:如果版本为 0.14.00.14.24,则可能命中该回归。
  2. 将 llama-index 升级到 0.14.25。维护者在 Issue 评论中明确说明 “Fixed in 0.14.25”,该版本修复了非结构化默认 program 的流式透传问题。
  3. 升级后重新运行最小复现代码,重点观察 tokens 计数是否恢复为多次迭代,而不是 1
  4. 如果所在环境暂时不能升级到 0.14.25,可先用 llama-index == 0.13.6 验证现象是否消失,以确认问题确实来自 0.14.x 的 refine 重构。

验证方法

使用 Issue 中的最小复现代码运行:调用 ContextChatEngine.from_defaults(...) 后执行 astream_chat("what is in the document?"),并统计 async_response_gen() 产生的 token 数量。在 0.13.6 下该数字通常为 10 到 100 数量级;在未修复的 0.14.x 下为 1。升级到 0.14.25 后,如果该数字恢复为多次迭代,并且终端输出呈现逐步流式打印,即可确认问题已解决。

参考来源

run-llama/llama_index #22749

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 24934

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注