010.ConversationChain 一键记忆链:字幕版实现与暴躁助手实战

该教程旨在带大家从 0 起步,掌握用 Python 开发大模型应用的技能。若当前内容让你感到晦涩,可回溯本合集的前期文章,降低学习难度。


1. 为什么会出现 ConversationChain?

除自行构建带记忆的对话链之外,LangChain也为我们准备了现成可用的链,不需要手动 load_memory_variablessave_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 / historyConversationChain 默认约定。
  • 把模板赋给 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. 小结

  1. 作用:省去手动 load/save,一键完成多轮记忆
  2. 硬性约定:入参键必须是 "input",历史占位变量名必须是 "history"
  3. 可扩展:通过 prompt 参数换任何人设或系统指令
相关推荐
小碗细面12 分钟前
Anthropic 官方指南:构建 Skills 的秘密都在这里
aigc·ai编程
卡尔AI工坊13 分钟前
2026年3月,我实操后最推荐的3个AI开源项目
人工智能·开源·ai编程
序安InToo15 分钟前
第6课|注释与代码风格
后端·操作系统·嵌入式
xyy12315 分钟前
C#: Newtonsoft.Json 到 System.Text.Json 迁移避坑指南
后端
洋洋技术笔记17 分钟前
Spring Boot Web MVC配置详解
spring boot·后端
JxWang0518 分钟前
VS Code 配置 Markdown 环境
后端
navms21 分钟前
搞懂线程池,先把 Worker 机制啃明白
后端
JxWang0521 分钟前
离线数仓的优化及重构
后端
Nyarlathotep011322 分钟前
gin01:初探gin的启动
后端·go
JxWang0523 分钟前
安卓手机配置通用多屏协同及自动化脚本
后端