m9_22458869 2024-08-16 00:31 采纳率: 0%
浏览 11

langchain 中ConversationalRetrievalChain 如何获得记忆,memory里面的内容正确显示。但是整个对话没有记忆功能

ConversationalRetrievalChain 的记忆功能怎么样使用呢,我看日志都保存了历史记录为什么llm的回答就像失意了一样
环境:
python 3.11.0
chromadb 0.5.5
langchain 0.2.12
langchain-community 0.2.10
我的使用方法是:

vectordb = configure_retriever(uploaded_files)
    llm = ChatOpenAI(model_name = "gpt-3.5-turbo", temperature = 0,openai_api_key = openai_api_key,base_url = openai_api_base)
    read_chat_from_csv()
    retriever=vectordb.as_retriever()
    # retriever 是文档embedding,memory 是历史数据
    qa = ConversationalRetrievalChain.from_llm(
        llm,
        retriever=retriever,
        memory=memory
    )
    result = qa({"question": question})

memory的输出如下:

memory: chat_memory=InMemoryChatMessageHistory(messages=[HumanMessage(content='我很喜欢北京'), AIMessage(content='请问有什么我可以帮您解答的吗?'), HumanMessage(content='我喜欢那座城市'),
 AIMessage(content='您可以选择以下几个方面:\n\n1. **历史和文化**:天安门广场和故宫博物院展示了北京的历史和文化。\n2. **自然景观**:颐和园的皇家园林和什刹海的美丽湖泊。\n3. **现代与传统的
结合**:王府井步行街展示了现代北京的繁华与传统。\n4. **地方美食**:北京菜如炸酱面和北京烤鸭的美味。\n5. **京剧艺术**:观看京剧表演体验中国传统艺术。'), HumanMessage(content='你好我叫bili
后面回答我问题的时候都要加上我的称呼'), AIMessage(content='我不知道。'), HumanMessage(content='就是在回答我的问题之期加上bili'), AIMessage(content='抱歉,我不知道。bili'), HumanMessage(co
ntent='好的就是这样回答我'), AIMessage(content='当然,请问你有什么问题需要帮助的吗?'), HumanMessage(content='请继续叫我的名字'), AIMessage(content='抱歉,我不知道您的名字。')]) return_me
ssages=True memory_key='chat_history'

网页段界面如下:

  • 写回答

2条回答 默认 最新

  • 一直免费一直爽 2024-08-16 08:43
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从您提供的代码和信息来看,您已经正确地设置了ConversationalRetrievalChain的记忆功能。但是,您提到的问题可能是由于以下原因导致的:

    1. 模型没有正确理解记忆:确保您的模型在处理问题时能够识别并使用历史对话记录中的信息。这可能需要对模型进行微调或训练,以便更好地理解上下文。

    2. 记忆存储方式:您使用的是InMemoryChatMessageHistory,这意味着对话历史记录将存储在内存中。当程序结束时,这些数据将被清除。如果您希望保留这些数据,可以考虑将其保存到文件或数据库中。

    3. 模型限制:OpenAI的GPT-3.5模型在某些情况下可能无法很好地处理长篇对话。尝试缩短对话历史记录,或者使用其他更适合处理长文本的模型。

    4. 温度参数:您将温度设置为0,这意味着模型将始终选择概率最高的答案,而不是考虑其他可能性。尝试降低温度值,例如设置为0.5,以允许模型在生成回答时考虑更多的可能性。

    要解决这个问题,您可以尝试以下方法:

    1. 调整模型的温度参数,例如将其设置为0.5。

    2. 检查模型是否正确理解了历史对话记录中的信息。您可以通过查看模型的回答来判断它是否使用了相关的历史信息。

    3. 如果可能的话,尝试使用其他模型,如GPT-4,它可能在处理长对话方面表现更好。

    4. 如果您希望保留对话历史记录,可以考虑将其保存到文件或数据库中,以便在程序重新启动时可以重新加载。

    评论

报告相同问题?

问题事件

  • 修改了问题 8月16日
  • 创建了问题 8月16日