快速结论:当 LangChain 流式合并 Mistral 返回的内联引用(reference)内容块时,merge_lists 会在字符串元素上做 "index" in e_left 判断,随后按下标访问字符导致 TypeError: string indices must be integers。优先排查流式返回中是否混入了 str 与引用字典并存的内容块。
适用环境:Issue 中确认的环境为 Linux、Python 3.11.13、langchain_core 1.2.5、langchain 1.2.0、langchain_mistralai 1.1.1、langgraph 1.0.5,模型为 mistral-medium-2505(开启 streaming)。未提供 CUDA、显卡信息。
最快修复方案:暂无确认的一步修复方案。Issue 中提出的修复方向是在访问 e_left["index"] 前增加 isinstance(e_left, dict) 判断,可优先尝试;该修复尚处 PR 阶段,未标记为已合并验证。
注意事项:仅做类型判断可避免崩溃,但流式输出中 str 与引用字典混合的类型不一致问题依然存在;Issue 讨论中认为应让 stream 的输出结构对齐 invoke(返回 {"type": "text", "text": "..."} 形式),否则最终结果结构可能仍不符合预期。
问题场景
用户在使用 LangGraph 的 create_react_agent(Mistral 模型 + 例如 Tavily 等可被引用的工具)时开启流式模式,模型返回内联引用(citations)内容。复现代码直接调用了 langchain_core.utils._merge.merge_lists,将包含字符串与 {"type": "reference", ...} 字典的列表与新的引用块合并时触发报错。
报错原文
File ".../langchain_core/utils/_merge.py", line 114, in <listcomp>
if "index" in e_left and e_left["index"] == e["index"]
~~~~~~~^^^^^^^^^
TypeError: string indices must be integers, not 'str'
原因分析
可能原因(Issue 维护者给出的根因):merge_lists 中的守卫条件 "index" in e_left 在 e_left 为字符串时执行的是子串包含判断,而非字典键查找。当某个字符串元素恰好包含 "index" 子串时,该判断为真,随后 e_left["index"] 以字符串下标访问,抛出 TypeError。同时,流式返回将 str 与引用字典交织输出,而 invoke 返回的是 list[dict],两者类型结构不一致是该问题的背景成因。
环境排查
- 确认
langchain_core与langchain_mistralai版本(Issue 环境为 1.2.5 与 1.1.1),核对是否已包含相关修复。 - 确认是否开启 streaming,以及模型是否配置为返回引用(citations)。
- 确认模型类型(Issue 使用
mistral-medium-2505,推测其他返回引用的 Mistral 模型同样受影响)。 - 若使用
create_react_agent,确认langgraph版本及工具(如 Tavily)返回结果是否被模型引用。 - 抓取流式返回的原始内容块,确认是否同时存在
str与dict类型元素。
解决步骤
- 先用最简复现确认问题:调用
merge_lists,merged中包含字符串与{"type": "reference", "index": 0, "reference_ids": [...]},other为另一个引用字典,观察是否抛出上述TypeError。 - 检查所用
langchain_core是否已修复该merge_lists的类型判断逻辑;若未修复,可优先尝试在merge_lists中为"index" in e_left前补充isinstance(e_left, dict)守卫(Issue 中提出的修复方向,对应 PR 尚待合并)。 - 若目标是获得与
invoke一致的稳定结构,关注使流式输出采用{"type": "text", "text": "..."}形式的改动(Issue 讨论中提出的方向),避免str与引用字典混排。 - 在本地临时修改后,用 Issue 的最简复现与完整 agent 调用分别验证。
验证方法
重新运行最小复现,确认 merge_lists 不再抛出 TypeError;再运行 agent 的流式调用,确认最终聚合结果与 invoke 的结构一致、引用块被正确合并。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


