DeepSeek API 概述与定价

DeepSeek API 是目前性价比最高的大模型 API 之一。它完全兼容 OpenAI SDK,开发者只需修改 base_url 即可无缝切换。API 提供两个核心模型:deepseek-chat(对应 V3 系列)和 deepseek-reasoner(对应 R1 系列)。截至 2026 年 7 月,DeepSeek 的 API 定价仅为同类产品的十分之一左右:输入约 ¥1/百万 token,输出约 ¥2/百万 token。对于中小型应用,每月几十元就能覆盖大量请求。

基础调用示例

DeepSeek API 兼容 OpenAI SDK,安装和调用非常简单:

pip install openai
from openai import OpenAI

client = OpenAI(
    api_key="sk-your-deepseek-api-key",
    base_url="https://api.deepseek.com"
)

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "你是一个有帮助的AI助手。"},
        {"role": "user", "content": "请用一句话介绍人工智能。"}
    ],
    temperature=0.7,
    max_tokens=200
)

print(response.choices[0].message.content)

DeepSeek API 也支持在 OpenAI Playground 的 Custom Endpoint 模式中配置使用。将 Base URL 设置为 https://api.deepseek.com/v1 即可在熟悉的界面中测试各种提示词。

流式输出详解

流式输出(Streaming)是实现打字机效果的关键技术。它让用户能实时看到 AI 的回复,大幅降低感知延迟:

stream = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{"role": "user", "content": "写一首关于编程的五言绝句"}],
    stream=True
)

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

流式输出在聊天应用、代码生成等场景中至关重要。建议所有面向用户的 AI 应用都启用流式输出,配合 SSE(Server-Sent Events)推送到前端。在生产环境中,注意处理网络中断重连和流式超时问题。

Function Calling 实战

Function Calling 让 AI 能够调用外部工具和 API。这是构建 Agent 应用的核心能力:

tools = [{
    "type": "function",
    "function": {
        "name": "get_stock_price",
        "description": "获取指定股票的实时价格",
        "parameters": {
            "type": "object",
            "properties": {
                "symbol": {
                    "type": "string",
                    "description": "股票代码,如 AAPL、GOOGL"
                }
            },
            "required": ["symbol"]
        }
    }
}]

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{"role": "user", "content": "苹果股票现在多少钱?"}],
    tools=tools
)

tool_call = response.choices[0].message.tool_calls[0]
print(f"调用函数: {tool_call.function.name}")
print(f"参数: {tool_call.function.arguments}")

在生产环境中使用 Function Calling 时,需要注意:工具描述要清晰准确、参数校验不可省略、工具调用结果要妥善反馈给模型、避免循环调用导致无限递归。

速率限制与错误处理

DeepSeek API 有速率限制(Rate Limit),超出限制会返回 429 错误。生产环境中必须实现健壮的错误处理和重试机制:

import time
from openai import RateLimitError, APIError

def call_with_retry(messages, max_retries=5):
    for attempt in range(max_retries):
        try:
            return client.chat.completions.create(
                model="deepseek-chat",
                messages=messages
            )
        except RateLimitError as e:
            wait = 2 ** attempt  # 指数退避
            print(f"速率限制,等待 {wait} 秒后重试...")
            time.sleep(wait)
        except APIError as e:
            if e.status_code >= 500:
                wait = 2 ** attempt
                print(f"服务器错误,等待 {wait} 秒后重试...")
                time.sleep(wait)
            else:
                raise
    raise Exception("达到最大重试次数")

关键策略:指数退避(Exponential Backoff)、随机抖动(Jitter)避免雷鸣羊群效应、设置最大重试次数、区分可重试错误(429/5xx)和不可重试错误(4xx)。

多模型选择策略

DeepSeek 提供两个核心模型:deepseek-chat(V3)deepseek-reasoner(R1)。V3 模型适合大多数通用任务——对话、翻译、摘要、代码生成等。它的响应速度快,性价比高。R1 模型擅长深度推理,在数学、编程、逻辑推理等需要严谨思考的任务上表现卓越,但响应时间较长、成本略高。一个实用的策略是:默认使用 V3,当任务需要深度推理时切换到 R1。你也可以设置一个简单的路由器:

def select_model(user_message):
    reasoning_keywords = ["推理", "证明", "数学", "逻辑", "分析"]
    if any(kw in user_message for kw in reasoning_keywords):
        return "deepseek-reasoner"
    return "deepseek-chat"

model = select_model("帮我证明勾股定理")
print(f"选择模型: {model}")

生产环境最佳实践

重试与降级:除了指数退避重试,还应实现降级策略。当 DeepSeek API 不可用时,自动切换到备用模型或返回缓存结果。请求缓存:对于重复查询,使用 Redis 或内存缓存结果,减少 API 调用次数和成本。语义缓存(对相似问题命中缓存)比精确匹配缓存更实用。连接池管理:复用 HTTP 连接,避免每次请求都建立新连接。httpx 和 OpenAI SDK 默认支持连接池。请求队列:对于高并发场景,使用消息队列(如 Redis Queue)异步处理请求,平滑流量尖峰。日志与监控:记录每次 API 调用的延迟、token 消耗和状态码,设置告警规则。这不仅能追踪成本,还能及时发现异常。

成本优化方案

控制 token 消耗是降低 API 成本的关键:使用更短的系统提示词(system prompt 每次请求都会计入 token)、限制 max_tokens 输出长度、对历史对话进行摘要压缩而非保留完整上下文、缓存高频问题的回复。另一个省成本的方法是使用 DeepSeek 的开源模型进行本地部署——对于大批量离线任务,本地推理比调用 API 更经济。对于需要高频调用的小型应用,建议设置每日预算告警,避免意外超支。

想动手编排 Agent 工具链?

探索技能链编排 →