DeepSeek + LangChain 开发教程
LangChain 是构建 LLM 应用最流行的框架。本教程从零开始,教你用 DeepSeek 模型 + LangChain 构建完整的 AI 应用。
开始学习为什么选择 DeepSeek + LangChain?
DeepSeek 提供极高性能和极低价格的 API 服务,LangChain 提供成熟的 LLM 应用开发框架。两者结合,让 AI 应用开发变得简单高效。
环境准备
在开始编码之前,需要准备好 Python 开发环境和必要的依赖包。
1.1 安装 Python
确保你的系统已安装 Python 3.9 或更高版本。推荐使用 Python 3.11+,以获得更好的性能。
1.2 创建虚拟环境(推荐)
使用虚拟环境可以隔离项目依赖,避免与其他项目冲突。
1.3 安装 LangChain 和依赖
1.4 获取 DeepSeek API Key
访问 platform.deepseek.com,注册并登录后,在「API Keys」页面创建密钥。建议将 API Key 设置为环境变量:
安全提示
永远不要在代码中硬编码 API Key。使用环境变量或 .env 文件管理敏感信息。将 .env 文件添加到 .gitignore 中。
基础调用 — 用 LangChain 调用 DeepSeek
LangChain 通过 ChatOpenAI 类兼容 OpenAI 格式的 API。只需修改 base_url 和 model 参数,即可接入 DeepSeek。
2.1 最简单的调用
2.2 流式输出
流式输出可以让 AI 像打字一样逐字返回内容,用户体验更好。
2.3 使用 DeepSeek R1 推理模型
DeepSeek R1 是推理增强模型,在数学、逻辑、编程等复杂任务上表现更优。调用方式与 V3 完全相同,只需修改模型名。
模型选择建议
- deepseek-chat(V3):日常对话、内容写作、翻译、通用代码生成,性价比最高
- deepseek-reasoner(R1):数学推理、复杂逻辑分析、算法设计、科学研究
Chain 链式调用
Chain 是 LangChain 的核心抽象。它将多个组件串联起来,形成可复用的处理流程。从简单的 LLMChain 到复杂的 SequentialChain,一步步构建你的 AI 工作流。
3.1 LLMChain — 最简单的链
LLMChain 将 PromptTemplate 和 LLM 组合在一起,是最基础的链式调用模式。
3.2 SequentialChain — 顺序执行多个链
SequentialChain 将多个步骤串联起来,前一步的输出作为后一步的输入。
3.3 使用 LCEL(LangChain Expression Language)
LCEL 是 LangChain 推荐的链构建方式,使用管道符 | 组合组件,代码更简洁、更易读。
ConversationChain 对话记忆
Memory 是对话系统的核心。LangChain 提供多种记忆组件,让 DeepSeek 能够记住上下文,实现自然的多轮对话。
4.1 ConversationBufferMemory — 完整记忆
保留所有对话历史。适合短对话,对话过长时 token 消耗会增加。
4.2 ConversationBufferWindowMemory — 滑动窗口记忆
只保留最近 K 轮对话,避免 token 消耗过大。适合长对话场景。
4.3 ConversationSummaryMemory — 摘要记忆
用 LLM 自动总结历史对话,保留关键信息的同时控制 token 消耗。
4.4 使用 RunnableWithMessageHistory(推荐方式)
LangChain 新版本推荐使用 RunnableWithMessageHistory,更灵活、更可控。
记忆组件选择建议
- 短对话(<10 轮):ConversationBufferMemory,保留全部上下文
- 长对话(>10 轮):ConversationBufferWindowMemory 或 ConversationSummaryMemory
- 生产环境:推荐 RunnableWithMessageHistory,结合 Redis 等外部存储
Agent 工具调用
Agent 是 LangChain 最强大的功能之一。它让 LLM 能够自主决策,选择并调用外部工具来完成复杂任务。
5.1 自定义工具 — 计算器
使用 @tool 装饰器定义自定义工具,让 Agent 在需要时调用。
5.2 网络搜索工具
集成 Tavily 搜索 API,让 Agent 能够实时搜索互联网获取最新信息。
Agent 开发注意事项
- temperature 设为 0:Agent 需要确定性输出,避免随机性导致工具调用失败
- 工具描述要清晰:docstring 中的描述直接影响 Agent 是否正确调用工具
- 安全第一:eval() 仅用于演示,生产环境请使用安全的表达式解析器
- 使用 langgraph:LangGraph 是 LangChain 推荐的 Agent 框架,比旧版 AgentExecutor 更稳定
RAG 检索增强生成
RAG(Retrieval-Augmented Generation)让 DeepSeek 基于你的私有文档回答问题。这是构建企业知识库问答系统的核心技术。
6.1 完整 RAG 流程
从文档加载到向量存储到检索问答,完整的 RAG 实现过程。
6.2 使用本地 Embedding 模型
如果不想依赖 OpenAI Embedding API,可以使用本地模型。
RAG 优化建议
- chunk_size 调优:太小丢失上下文,太大检索精度下降。中文文档建议 300-800 字符
- 混合检索:结合关键词检索(BM25)和向量检索,提升召回率
- 重排序:在检索后使用 Cross-Encoder 对结果进行重排序
- 引用溯源:在 prompt 中要求模型引用具体文档片段,增强可信度
与 Ollama 本地模型集成
如果你使用 Ollama 本地运行 DeepSeek 模型,LangChain 同样提供了无缝集成。数据完全本地处理,隐私安全有保障。
7.1 使用 ChatOllama 连接本地模型
7.2 本地 Ollama + RAG
将本地 Ollama 模型与 RAG 流程结合,构建完全本地化的知识库问答系统。
本地部署注意事项
- Ollama 服务运行中:确保 Ollama 在后台运行,默认监听 localhost:11434
- 模型已下载:使用
ollama list确认模型已存在 - Embedding 模型:本地 RAG 需要单独的 Embedding 模型,如 nomic-embed-text 或 bge-m3
- 性能取决于硬件:8B 模型在消费级 GPU 上运行良好,CPU 推理速度较慢
完整项目示例 — 智能客服机器人
将前面学到的所有知识整合起来,构建一个完整的智能客服机器人。具备对话记忆、知识库检索、工具调用和流式输出能力。
8.1 项目结构
8.2 config.py — 配置文件
8.3 tools.py — 自定义工具
8.4 knowledge.py — 知识库管理
8.5 chatbot.py — 核心聊天逻辑
8.6 main.py — 主入口
8.7 运行项目
DeepSeek 更多教程
继续探索 DeepSeek 的使用、部署和模型知识。