当前位置: 首页 > news >正文

基于DeepSeek API构建带记忆的对话系统:技术实现详解

引言

在现代AI应用中,能够记住对话历史的聊天系统变得越来越重要。无论是客服机器人、个人助手还是技术咨询系统,上下文记忆能力都是提升用户体验的关键。本文将介绍如何使用DeepSeek API和LangChain框架,构建一个具有记忆功能的对话系统。

技术栈概览

我们主要使用以下工具:

  • DeepSeek API:国内领先的大语言模型服务
  • LangChain:用于构建基于LLM的应用程序的框架
  • 内存存储:简单的对话历史记录方式

环境准备

首先确保已安装必要的Python库:

pip install langchain-openai langchain-core

代码解析

1. 初始化DeepSeek模型

model = ChatOpenAI(model_name="deepseek-chat",openai_api_key=os.getenv("DEEPSEEK_API_KEY"), # 需要你提前准备好 api keyopenai_api_base="https://api.deepseek.com/v1"
)

这里我们配置了DeepSeek的聊天模型,API密钥从环境变量获取,确保安全性。

2. 构建对话模板

prompt = ChatPromptTemplate.from_messages([("system", "你是世界级技术专家"), # 随便啦MessagesPlaceholder(variable_name="history"),("user", "{input}")
])

这个模板定义了对话结构:

  1. 系统角色设定:将AI设为"世界级技术专家"
  2. 历史消息占位符:用于插入之前的对话
  3. 用户输入:最新的用户消息

3. 创建可运行链

runnable = prompt | model

使用LangChain的管道操作符(|)将提示模板和模型连接起来,形成一个可执行的链。

4. 实现对话历史存储

store = {}def get_session_history(session_id: str) -> BaseChatMessageHistory:if session_id not in store:store[session_id] = InMemoryChatMessageHistory()return store[session_id]

我们使用内存中的字典来存储不同会话的历史记录,每个会话ID对应一个独立的历史记录。

5. 添加历史记录功能

with_message_history = RunnableWithMessageHistory(runnable=runnable,get_session_history=get_session_history,input_messages_key="input",history_messages_key="history",
)

RunnableWithMessageHistory包装器为我们的链添加了历史记录功能,自动管理对话上下文的存储和检索。

6. 测试对话系统

# 第一次对话
response = with_message_history.invoke({"session_id": "123","input": "我是 Bob",},config={"configurable": {"session_id": "123"}}
)# 第二次对话,测试记忆功能
response1 = with_message_history.invoke({"session_id": "123","input": "你知道我的名字吗?",},config={"configurable": {"session_id": "123"}}
)print(response1.content)

应用场景

这种带记忆的对话系统可用于:

  • 个性化客服:记住用户偏好和历史问题
  • 教育辅导:跟踪学习进度和之前的错误
  • 技术咨询:保持复杂问题的上下文
  • 心理辅导:建立连续的对话关系

进阶优化

  1. 持久化存储:将内存存储替换为数据库,如Redis或MongoDB
  2. 记忆窗口:限制记忆的对话轮数,避免上下文过长
  3. 记忆摘要:对长对话生成摘要而非存储全部内容
  4. 多模态记忆:扩展支持图像、文件等更多类型的记忆

完整代码

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_openai import ChatOpenAI
from langchain_core.chat_history import BaseChatMessageHistory, InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
import os# 初始化DeepSeek模型
model = ChatOpenAI(model_name="deepseek-chat",openai_api_key=os.getenv("DEEPSEEK_API_KEY"),openai_api_base="https://api.deepseek.com/v1"
)# 构建对话模板
prompt = ChatPromptTemplate.from_messages([("system", "你是世界级技术专家"),MessagesPlaceholder(variable_name="history"),("user", "{input}")
])# 创建可运行链
runnable = prompt | model# 实现对话历史存储
store = {}def get_session_history(session_id: str) -> BaseChatMessageHistory:if session_id not in store:store[session_id] = InMemoryChatMessageHistory()return store[session_id]# 添加历史记录功能
with_message_history = RunnableWithMessageHistory(runnable=runnable,get_session_history=get_session_history,input_messages_key="input",history_messages_key="history",
)# 测试对话
response = with_message_history.invoke({"session_id": "123", "input": "我是 Bob"},config={"configurable": {"session_id": "123"}}
)response1 = with_message_history.invoke({"session_id": "123", "input": "你知道我的名字吗?"},config={"configurable": {"session_id": "123"}}
)print(response1.content)

结语

通过DeepSeek API和LangChain框架,我们轻松构建了一个具有记忆功能的对话系统。这种架构不仅适用于简单的聊天应用,还可以扩展为复杂的企业级解决方案。随着DeepSeek模型的不断升级,开发者可以期待更强大的上下文理解和记忆能力。

希望这篇技术博客能帮助你快速上手构建带记忆的AI对话系统!

http://www.xdnf.cn/news/516691.html

相关文章:

  • 网络的知识的一些概念
  • 代码案例分析
  • 文件IO之标准IO
  • AGI大模型(23):LangChain框架快速入门之LangChain介绍
  • Linux基础指令
  • 目标检测评估指标mAP详解:原理与代码
  • Python文件IO、pip管理及内置模块实战解析
  • 编译原理--期末复习
  • 论文学习:《引入TEC - LncMir,通过对RNA序列的深度学习来预测lncRNA - miRNA的相互作用》
  • 王者荣耀游戏测试场景题
  • RISC-V 开发板 MUSE Pi Pro V2D图像加速器测试,踩坑介绍
  • 20250518 强化命题
  • Vue3学习(Vue3.3新特性——defineOptions宏)
  • 基于 AT89C51 的多路智力竞赛抢答器设计与实现
  • 【ComfyUI】关于ComfyUI的一些基础知识和入门设置以及快捷键小技巧【简单易懂】
  • 【Vue篇】数据秘语:从watch源码看响应式宇宙的蝴蝶效应
  • etcd基础
  • 2026武汉门窗门业移门木门铝艺门智能锁展会3月国博举办
  • OpenCV-图像分割
  • 基于 STM32 的全自动洗车监控系统设计与实现
  • AI Agent开发第70课-彻底消除RAG知识库幻觉(4)-解决知识库问答时语料“总重复”问题
  • 【Linux网络编程】Socket编程-Socket理论入门
  • 【深度学习】#12 计算机视觉
  • 31、魔法生物图鉴——React 19 Web Workers
  • 系分论文《论信息系统缓存的分析和应用》
  • 从代码学习深度学习 - 近似训练 PyTorch版
  • 什么是着色器 Shader
  • fme条件属性值
  • 【LLIE专题】基于Retinex理论的transformer暗光增强
  • Spark,数据提取和保存