2026-04-15

在 Python 中使用 DeepSeek V4:从零到生产

DeepSeek V4 提供了完全兼容 OpenAI 的 API,所以在 Python 中不用学新 SDK:标准的 openai 库就能直接调用,只需要把 base URL 和 API Key 换成 DeepSeek 的即可。这篇中文教程带你从安装 SDK 开始,完成第一次 chat completion、流式响应、function calling,以及如何在大规模调用下控制 tokens 成本。

1. 安装 SDK 并配置 API Key

不需要任何 DeepSeek 专属包,官方的 openai Python SDK 原生就能对接 DeepSeek。用 pip 安装后,把 API Key 放进环境变量里,不要硬编码进代码。

API Key 可以在 DeepSeek 官方控制台申请,或者通过 /pricing 获取官方折扣版本(同样的接口,价格更低)。放进 shell 变量 DEEPSEEK_API_KEY 即可。

pip install "openai>=1.40.0" python-dotenv
echo "DEEPSEEK_API_KEY=sk-..." >> .env

2. 第一次 chat completion 调用

创建 OpenAI 客户端时把 base_url 指向 DeepSeek 的 endpoint。chat.completions.create 的调用方式和 OpenAI 完全一致,只是模型名不同:deepseek-chat 是通用模型,deepseek-reasoner 针对推理场景做了优化。

import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()

client = OpenAI(
    api_key=os.environ["DEEPSEEK_API_KEY"],
    base_url="https://api.deepseek.com/v1",
)

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "You are a concise technical assistant."},
        {"role": "user", "content": "Write a Python one-liner to flatten a nested list."},
    ],
    temperature=0.2,
)

print(response.choices[0].message.content)
print("tokens used:", response.usage.total_tokens)

3. 流式响应:构建低延迟的聊天界面

在聊天 UI、CLI 或 agent 循环里,你希望 tokens 一生成就立即出现。传入 stream=True,然后遍历返回的 chunk 即可。每个 chunk 都是 OpenAI 兼容的 delta 对象。

stream = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{"role": "user", "content": "Explain MoE in 3 sentences."}],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

4. Function calling(tool use)

DeepSeek V4 完整支持 OpenAI 风格的 tool use:你声明 JSON Schema,模型决定何时调用工具,你执行后把结果回传下一轮。V4 在稳定性上比 V3 有明显提升,agent 循环的破裂率低得多。

永远要把模型返回的工具参数当作不可信输入,执行前用 pydantic 或 jsonschema 做校验。

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Get the current weather for a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{"role": "user", "content": "Weather in Tokyo?"}],
    tools=tools,
)

call = response.choices[0].message.tool_calls[0]
# call.function.name == "get_weather"
# call.function.arguments == '{"city":"Tokyo"}'

5. 控制 tokens 成本

DeepSeek 按输入和输出 tokens 分别计费,输出大概是输入的 2 倍,这和 OpenAI、Anthropic 的策略一致。system prompt 和完整历史都会算进输入 tokens,长对话如果不截断,账单会涨得很快。

三个实用做法:system prompt 写短且稳定(便于缓存)、对话超过 6k tokens 后对历史做摘要、给 max_tokens 设一个合理上限。需要更低单价可以走 /pricing 的官方折扣 Key。

FAQ

需要安装 DeepSeek 专属 Python SDK 吗?

不需要。标准 openai 包通过修改 base_url 就能工作,LangChain、LlamaIndex、Instructor 等库同样支持。

deepseek-chat 和 deepseek-reasoner 怎么选?

日常任务用 deepseek-chat;数学、严密逻辑、长链推理场景再切换到 deepseek-reasoner。

Python 里怎么做异步?

用 AsyncOpenAI 代替 OpenAI,其余 API 形态一致,直接 await 就行。

怎样买到更便宜的 API Key?

/pricing 提供官方折扣 Key,与官方同接口、同 context window,只是价格更低。

Python + DeepSeek V4 几乎是 2026 年最顺手的 LLM 组合:你熟悉的 SDK、接近 GPT-4o 的质量、小团队真能负担得起的单价。