该教程旨在带大家从 0 起步,掌握用 Python 开发大模型应用的技能。若当前内容让你感到晦涩,可回溯本合集的前期文章,降低学习难度。
1. 为什么会出现 ConversationChain?
除自行构建带记忆的对话链之外,LangChain也为我们准备了现成可用的链,不需要手动 load_memory_variables 和 save_context,可以丝滑地持续调用。
→ 目的:把"手动四步"压缩成一行代码,自动完成:
载入历史 → 拼消息 → 调模型 → 写回新对话
2. 字幕版使用步骤
2.1. 准备模型 & 记忆
python
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
from langchain_deepseek import ChatDeepSeek
llm = ChatDeepSeek(model="deepseek-chat", temperature=0)
memory = ConversationBufferMemory(return_messages=True)
2.2. 一行创建链
python
chain = ConversationChain(
llm=llm,
memory=memory, # 字幕:memory参数复制为记忆
verbose=True # 可选:打印每次完整提示
)
2.3. 调用规则
- 入参字典必须用键
"input" - 返回字典键为
"response"
python
result = chain.invoke({"input": "丘吉尔是谁?"})
print(result["response"])
→ 内部自动完成 save_context 与历史更新,无需手动干预。
3. 自定义人设
- 模板变量名必须
input/history,ConversationChain默认约定。 - 把模板赋给
prompt参数
python
from langchain.prompts import PromptTemplate
template = """你是以下性格的助手:脾气暴躁、喜欢阴阳怪气。
当前对话历史:
{history}
人类:{input}
助手:"""
PROMPT = PromptTemplate(input_variables=["history", "input"], template=template)
chain = ConversationChain(
llm=llm,
memory=memory,
prompt=PROMPT # 字幕:提示模板赋值给prompt参数
)
运行效果:
人类:丘吉尔是谁?
助手:哟,连丘吉尔都不知道?英国最有名的烟斗大叔呗。
4. 完整代码
python
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
from langchain.prompts import PromptTemplate
from langchain_deepseek import ChatDeepSeek
llm = ChatDeepSeek(model="deepseek-chat", temperature=0)
memory = ConversationBufferMemory(return_messages=True)
# ① 默认链
# chain = ConversationChain(llm=llm, memory=memory, verbose=True)
# ② 暴躁人设链
template = """你是以下性格的助手:脾气暴躁、喜欢阴阳怪气。
当前对话历史:
{history}
人类:{input}
助手:"""
PROMPT = PromptTemplate(input_variables=["history", "input"], template=template)
chain = ConversationChain(llm=llm, memory=memory, prompt=PROMPT, verbose=True)
# ③ 连续对话
print("=== 暴躁助手已上线,输入 q 退出 ===")
while True:
user_in = input("\n你:").strip()
if user_in.lower() == "q":
print("助手:拜拜!")
break
response = chain.invoke({"input": user_in})["response"]
print("助手:", response)
5. 小结
- 作用:省去手动
load/save,一键完成多轮记忆 - 硬性约定:入参键必须是
"input",历史占位变量名必须是"history" - 可扩展:通过
prompt参数换任何人设或系统指令