You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ConversationBufferMemory的ConversationalRetrievalChain报TypeError错误

ConversationalRetrievalChain 搭配 ConversationBufferMemory 报错解决

问题描述

运行Langchain的ConversationalRetrievalChain并结合ConversationBufferMemory时,触发错误:TypeError: tuple indices must be integers or slices, not str。错误根源在langchain/chains/conversational_retrieval/base.py第25行,该行代码human = "Human: " + human_s尝试拼接字符串与元组,但实际传入的human_s是('content', '用户所提问题')格式的元组,程序预期它是纯字符串格式的用户问题。

问题代码

embedder = get_embedder()
logger.info("loading vector store from {}".format(vector_store_path))
vector_store = FAISS.load_local(vector_store_path, embeddings=embedder)
llm = get_llm()
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
qa_chain = ConversationalRetrievalChain.from_llm(
    retriever=vector_store.as_retriever(),
    llm=llm,
    memory=memory, verbose=True
)
while True:
    question = input("You:")
    result = qa_chain({'question': question})
    response = result['answer']
    print(response)

解决方法

方法1:修改内存配置,存储纯字符串对话历史

问题出在ConversationBufferMemory的return_messages=True参数,该参数会让内存存储Message对象而非纯字符串,导致后续解析时出现元组格式异常。去掉该参数即可:

# 修改后的内存初始化代码
memory = ConversationBufferMemory(memory_key="chat_history")

方法2:升级Langchain到最新版本

部分旧版本Langchain存在Message对象解析为元组的bug,升级到最新版本可修复该问题:

pip install --upgrade langchain

内容的提问来源于stack exchange,提问作者Hanan Shteingart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:57:06