复制后 格式化下 填入环境变量即可运行
在传统聊天机器人中,对话往往是“无状态”的——每次对话都独立处理,无法记住上下文。本教程将使用LangChain框架,构建一个能够记住对话历史的智能聊天机器人。
pip install langchain langchain-openai python-dotenv
OPENAI_API_KEY = "your-api-key"
# 或使用本地模型(如Llama2)的配置
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
from langchain_openai import ChatOpenAI
# 初始化大语言模型
llm = ChatOpenAI(temperature=0.5) # 控制回答随机性
# 创建对话记忆模块
memory = ConversationBufferMemory()
conversation = ConversationChain(
llm=llm,
memory=memory,
verbose=True # 显示内部思考过程
)
print("机器人:您好!我是您的AI助手,输入'exit'退出对话")
whileTrue:
user_input = input("您:")
if user_input.lower() == 'exit':
print("对话已存档,下次再见!")
break
response = conversation.predict(input=user_input)
print(f"机器人:{response}")
LangChain 提供多种记忆模式:
from langchain.memory import ConversationSummaryMemory
summary_memory = ConversationSummaryMemory(llm=llm)
conversation = ConversationChain(llm=llm, memory=summary_memory)
# 保存对话历史到文件
import json
with open('chat_history.json', 'w') as f:
json.dump(memory.load_memory_variables({}), f)
# 从文件加载历史
with open('chat_history.json') as f:
memory.save_context({}, json.load(f))
from langchain.agents import Tool
from langchain.utilities import GoogleSearchAPIWrapper
search = GoogleSearchAPIWrapper()
tools = [
Tool(
name="Web Search",
func=search.run,
description="当需要实时信息时使用"
)
]
# 结合搜索功能的对话链
conversation_with_search = initialize_agent(
tools,
llm,
agent="conversational-react-description",
memory=memory
)
| 参数 | 说明 | 推荐值 |
|---|---|---|
| temperature | 控制回答创造性 | 0.2-0.7 |
| max_token_limit | 记忆存储上限 | 2000 |
| k (窗口记忆) | 保留最近对话轮数 | 3-5 |
对话示例:
用户:我计划去巴黎旅行
机器人:巴黎是个浪漫的城市!需要我推荐景点吗?
用户:是的,请推荐三个必去的地方
机器人:1. 埃菲尔铁塔 2. 卢浮宫 3. 巴黎圣母院
用户:你刚才说的第一个景点是什么?
机器人:您指的是埃菲尔铁塔,建议日落时分参观...

