使用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
相关产品推荐
相关产品推荐

