本文将演示使用大语言模型自制聊天机器人。主要的内容有:
- 如何让机器人具有记忆
- 如何使用
langgraph
自动记录聊天历史
我们将同时使用
llama3.1
和deepseek
做演示。由于langchain
可能对不同大模型支持程度不同,不同大模型的特点也不同,所以这个对比并不能说明哪个模型更好。
准备
在正式开始撸代码之前,需要准备一下编程环境。
-
计算机
本文涉及的所有代码可以在没有显存的环境中执行。 我使用的机器配置为:- CPU: Intel i5-8400 2.80GHz
- 内存: 16GB
-
Visual Studio Code 和 venv
这是很受欢迎的开发工具,相关文章的代码可以在Visual Studio Code
中开发和调试。 我们用python
的venv
创建虚拟环境, 详见:
在Visual Studio Code中配置venv。 -
Ollama
在Ollama
平台上部署本地大模型非常方便,基于此平台,我们可以让langchain
使用llama3.1
、qwen2.5
等各种本地大模型。详见:
在langchian中使用本地部署的llama3.1大模型 。
通过历史记录了解上下文
大模型本身不具备记忆功能,通常我们在调用大模型时,将聊天历史也喂给大模型,这样大模型就可以理解上下文,而产生记忆能力。
ChatModel
(例如:ChatOllama
) 是 LangChain“Runnable”
的实例,这意味着它们公开了一个用于与其交互的标准接口。比如 .invoke
方法。
下面我们做一下测试:
def chat(model_name):
model = ChatOllama(model=model_name,temperature=0.3,verbose=True)
response = model.invoke([HumanMessage(content="Hi! I'm Bob")])
print(f'chat_with_no_memory:\n{
response.content}')
# We can see that it doesn't take the previous conversation turn into context, and cannot answer the question. This makes for a terrible chatbot experience!
response = model.invoke([HumanMessage(content="What's my name?")])
print(f'chat_with_no_memory 2:\n{
response.content}')
def chat_with_memory(model_name):
'''具有记忆功能'''
model = ChatOllama