DeepSeek API 与 LangChain 框架接入实战

说明: 本文介绍如何在 LangChain 框架中接入 DeepSeek API


1. 概述(Summary)

用 LLM 搭建一个 Agent,通常都要先回答一个很实际的问题:我怎么把一款能力强、成本低的模型,以最低成本接入到我的应用代码里,而不用从零写一套客户端?

本文给出当你想在 LangChain 生态里使用 DeepSeek 作为模型供应商时,最简单可行的答案。

核心思路是:DeepSeek API 与 OpenAI API 格式完全兼容。因此,在 LangChain 中使用 DeepSeek 最便捷的方式,就是直接复用现有的 OpenAI SDK 集成(langchain-openai,只需把 base_url 指向 DeepSeek、并配上 DeepSeek 的 API Key 即可。不需要自定义适配器,不需要新增依赖,也不需要自己实现协议代码。

读完本文,你将拥有一份可直接运行的最小程序,它能够:

  • 通过 API Key 向 DeepSeek 平台完成身份认证;
  • 用 system / human / AI 的角色构造一段对话消息;
  • 通过 LangChain 的 ChatOpenAI 调用 deepseek-v4-flash 模型;
  • 打印出模型的回复。

这是 DeepSeek + LangChain 的"Hello, World",也是后续一切更高级 Agent(工具调用、记忆、检索、图编排)的地基。


2. 说明(Description)

2.1 我们要做什么

我们希望用 Python 通过 LangChain 的抽象层,向 DeepSeek 模型发送一段对话提示并拿到文本回复。程序应当做到:

  1. 从环境变量中加载敏感配置(API Key),而不是写死在代码里;
  2. 初始化一个与 DeepSeek 通信的 LangChain 聊天模型客户端;
  3. 构造一个简短的多轮风格消息列表(系统指令 + 用户问题);
  4. 同步调用模型并打印结果。

描述:技术说明 —— 要做什么、用什么 SDK、逻辑如何实现

2.2 我们要用哪个 SDK

我们安装任何专门的 DeepSeek Python 包,而是复用以下组件:

组件包名作用
聊天模型客户端langchain-openaiChatOpenAILangChain 的 OpenAI 兼容聊天封装
消息类型langchain-coreSystemMessageHumanMessageAIMessage带类型的聊天消息
环境变量加载python-dotenvload_dotenv.env 中的密钥读入 os.environ

为什么这样可行: DeepSeek 在其地址 https://api.deepseek.com 上提供 与 OpenAI Chat Completions API 相同的请求/响应结构ChatOpenAI 只需要三个指向正确位置的值:modelapi_keybase_url。把这三个值换掉,同一份 LangChain 代码调用的就变成了 DeepSeek 而非 OpenAI。

2.3 逻辑如何实现

load_dotenv()
      │
      ▼
ChatOpenAI(model, api_key, base_url="https://api.deepseek.com/v1", temperature)
      │
      ▼
messages = [ SystemMessage, HumanMessage ]   # 带类型的聊天历史
      │
      ▼
model.invoke(messages)                        # 同步发起对 DeepSeek 的 HTTP 请求
      │
      ▼
resp.content  ──►  print()

流程刻意保持线性、同步。invoke() 会阻塞,直到 DeepSeek 返回完整的消息,非常适合脚本、Notebook 和测试。(DeepSeek 同样支持 stream=True,以及 LangChain 的 .stream() / .ainvoke() 用于流式与异步 —— 本文不展开,但后续很容易加上。)

从官方知识库核实,并延伸说明的内容:

  • 兼容 OpenAI 与 Anthropic: 只需修改 base_urlapi_key,即可用 OpenAI SDK Anthropic SDK 访问 DeepSeek。
  • 官方 base URL:
    • OpenAI 格式 → https://api.deepseek.com
    • Anthropic 格式 → https://api.deepseek.com/anthropic
  • 当前模型: deepseek-v4-flashdeepseek-v4-pro。这些别名会自动解析到最新快照(DeepSeek-V4-Flash-0731DeepSeek-V4-Pro-0813),调用方式不变。
  • API Key 获取地址: https://platform.deepseek.com/api_keys
  • 推理能力: DeepSeek 模型支持 thinking / reasoning_effort 参数,可开启逐步推理(如需,可通过额外参数传入)。
  • Agent 工具生态: DeepSeek 提供 Harness(开发者预览),并可直接作为 Claude Code / GitHub Copilot / OpenCode 等工具的后端模型。

本文引用的官方知识库链接:


3. 代码细节(Code Details)

3.1 完整实现

下面是完整、可直接运行的程序(agent_basic_deepseek.py)。它刻意保持极简,方便你 30 秒从头读到尾。

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage

load_dotenv()
model = ChatOpenAI(
    model="deepseek-v4-flash",
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url="https://api.deepseek.com/v1",
    temperature=0.7,
)

messages = [
    SystemMessage(content="You are a helpful assistant."),
    HumanMessage(
        content="Show me your power, give me a list of what you're available to do.")
]

resp = model.invoke(messages)
print(resp.content)

3.2 分步讲解

1. 导入依赖

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
  • os 在运行时读取环境变量;
  • load_dotenv() 从本地 .env 文件加载密钥;
  • ChatOpenAI 是我们要"改装"给 DeepSeek 用的 OpenAI 兼容聊天客户端;
  • 三个 *Message 类是 LangChain 对聊天角色的类型化表示。

2. 加载环境并配置客户端

load_dotenv()
model = ChatOpenAI(
    model="deepseek-v4-flash",
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url="https://api.deepseek.com/v1",
    temperature=0.7,
)
  • model="deepseek-v4-flash" 选择快速、低成本的 DeepSeek V4 flash 模型;
  • api_key=os.getenv("DEEPSEEK_API_KEY") 让密钥不进入源码版本库;
  • base_url="https://api.deepseek.com/v1"唯一一行把 OpenAI 客户端重定向到 DeepSeek 的代码(官方文档写的是 https://api.deepseek.com,两者都可用,因为 /v1 是 API 版本路径);
  • temperature=0.7 控制随机性 —— 事实类任务调低,创意类任务调高。

3. 构造对话

messages = [
    SystemMessage(content="You are a helpful assistant."),
    HumanMessage(
        content="Show me your power, give me a list of what you're available to do.")
]
  • SystemMessage 设定助手的行为/人设;
  • HumanMessage 是用户的提示词。(AIMessage 表示模型上一次的回复 —— 当你需要回灌聊天历史时很有用。)

4. 调用并打印

resp = model.invoke(messages)
print(resp.content)
  • model.invoke(messages) 同步发起对 DeepSeek 的 HTTP 请求,返回一个 AIMessage 对象;
  • resp.content 即生成的文本字符串。

3.3 前置条件与环境配置

# 1. (推荐)创建虚拟环境
python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate

# 2. 安装依赖
pip install langchain-openai langchain-core python-dotenv

# 3. 在项目根目录创建 .env 文件
echo "DEEPSEEK_API_KEY=sk-your-real-key-here" > .env

⚠️ 安全提示: 切勿提交你的真实 API Key。原 agent_basic_deepseek.md 中出现的 sk-... 只是占位示例 —— 请把它放在 .env 里,并将 .env 加入 .gitignore

3.4 运行程序

python agent_basic_deepseek.py

预期行为:脚本打印出 DeepSeek 的回复,列出助手能做的事情。若出现鉴权错误,请检查 DEEPSEEK_API_KEY 是否已在环境中设置,以及你的 DeepSeek 账户是否有 API 额度。


小结

这就是全部地基:一个客户端、三个配置值、一份带类型的消息列表、一次 invoke() 调用。 在这之上,你可以把这个骨架逐步长成一个真正的 Agent —— 加上 tools 做函数调用、把模型包进 Runnable 链、挂载 MemorySaver 实现对话记忆,或用 LangGraph 编排多步流程。所有这些高级模式,都依然从上面那行 ChatOpenAI(..., base_url="https://api.deepseek.com/v1") 起步。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐