DeepSeek API接入全攻略|5分钟搞定,开发者必看

手把手教你接入DeepSeek API,支持Python/Node.js/curl,含流式输出、Function Calling、多轮对话、错误处理完整代码示例

📅 更新时间:2026-05-23⏱️ 阅读时长:15分钟👨‍💻 面向开发者

📑 目录

  • 1. DeepSeek API概述与定价
  • 2. 获取API Key(1分钟)
  • 3. Python接入(最详细)
  • 4. Node.js接入
  • 5. curl命令行测试
  • 6. 流式输出实现
  • 7. Function Calling实战
  • 8. 多轮对话与上下文管理
  • 9. 错误处理与重试机制
  • 10. 从OpenAI迁移到DeepSeek(只需改2行)

1. DeepSeek API概述与定价

DeepSeek API提供与OpenAI完全兼容的接口格式,支持Chat Completions、Function Calling、JSON输出等主流功能。2026年5月永久降价后,成为市面上性价比最高的大模型API。

💰 最新定价(2026年5月31日起生效):

  • deepseek-chat(V4-Pro):输入 ¥1/M token,输出 ¥2/M token
  • deepseek-reasoner(推理):输入 ¥4/M token,输出 ¥16/M token
  • • 上下文长度:128K token
  • • 完全兼容OpenAI SDK,零迁移成本

与OpenAI API的主要区别只有两个:base_url 改为 https://api.deepseek.comapi_key 换成DeepSeek的。其他参数、格式、返回值完全一致。

2. 获取API Key(1分钟)

  1. 步骤1:访问 platform.deepseek.com 并登录
  2. 步骤2:点击左侧菜单「API Keys」
  3. 步骤3:点击「创建 API Key」按钮
  4. 步骤4:复制生成的Key(格式:sk-xxxxxxxxxxxxxxxx),只显示一次
  5. 步骤5:妥善保存Key,建议使用环境变量存储
# 推荐使用环境变量存储API Key
export DEEPSEEK_API_KEY="sk-your-api-key-here"

⚠️ 安全提醒:

  • • 不要将API Key硬编码在代码中
  • • 不要将Key提交到Git仓库
  • • 建议使用 .env 文件 + .gitignore 管理
  • • 定期轮换API Key

3. Python接入(最详细)

安装依赖

pip install openai

基础调用

import os
from openai import OpenAI

# 初始化客户端
client = OpenAI(
    api_key=os.environ.get("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": "用Python写一个快速排序"}
    ],
    temperature=0.7,
    max_tokens=2000
)

# 打印结果
print(response.choices[0].message.content)

# 查看token用量
print(f"输入token: {response.usage.prompt_tokens}")
print(f"输出token: {response.usage.completion_tokens}")
print(f"总token: {response.usage.total_tokens}")

流式输出

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)

JSON输出模式

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "user", "content": "列出5个Python框架,返回JSON格式"}
    ],
    response_format={"type": "json_object"},
    temperature=0
)

import json
data = json.loads(response.choices[0].message.content)
print(json.dumps(data, indent=2, ensure_ascii=False))

4. Node.js接入

安装依赖

npm install openai

完整示例

import OpenAI from 'openai';

const client = new OpenAI({
  apiKey: process.env.DEEPSEEK_API_KEY,
  baseURL: 'https://api.deepseek.com'
});

async function main() {
  const response = await client.chat.completions.create({
    model: 'deepseek-chat',
    messages: [
      { role: 'system', content: '你是一个前端开发专家' },
      { role: 'user', content: 'Vue3和React哪个好?' }
    ],
    temperature: 0.7,
    max_tokens: 2000
  });

  console.log(response.choices[0].message.content);
  console.log(`Token usage: ${response.usage.total_tokens}`);
}

main();

流式输出

const stream = await client.chat.completions.create({
  model: 'deepseek-chat',
  messages: [{ role: 'user', content: '用JavaScript实现防抖函数' }],
  stream: true
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content || '');
}

5. curl命令行测试

最快速的测试方式,无需安装任何依赖:

curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DEEPSEEK_API_KEY" \
  -d '{
    "model": "deepseek-chat",
    "messages": [
      {"role": "system", "content": "你是一个有用的AI助手"},
      {"role": "user", "content": "你好,介绍一下你自己"}
    ],
    "stream": false
  }'

6. 流式输出实现详解

流式输出是ChatGPT类产品的核心体验——回答像打字一样逐字出现。DeepSeek的流式输出与OpenAI完全一致:

📋 流式输出要点:

  • • 设置 stream: true 开启流式
  • • 返回的是SSE(Server-Sent Events)格式的数据流
  • • 每个chunk包含 choices[0].delta.content
  • • 最后一个chunk的 finish_reason 为 "stop"
  • • 适合Web前端的逐字渲染体验

在Web前端中,可以使用Fetch API配合ReadableStream来实现流式渲染,具体实现可参考我们的 DeepSeek使用教程

7. Function Calling实战

Function Calling让AI能够调用外部函数,是实现AI Agent的基础能力。DeepSeek完整支持OpenAI格式的Function Calling:

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "user", "content": "北京今天天气怎么样?"}
    ],
    tools=[{
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的天气信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名称"
                    }
                },
                "required": ["city"]
            }
        }
    }],
    tool_choice="auto"
)

# 检查是否需要调用函数
message = response.choices[0].message
if message.tool_calls:
    for tool_call in message.tool_calls:
        print(f"函数名: {tool_call.function.name}")
        print(f"参数: {tool_call.function.arguments}")
        # 在这里调用实际函数并返回结果

8. 多轮对话与上下文管理

多轮对话的关键是在每次请求中传入完整的对话历史。DeepSeek支持最长128K token的上下文:

# 维护对话历史
messages = [
    {"role": "system", "content": "你是一个Python编程助手"}
]

# 第一轮
messages.append({"role": "user", "content": "什么是装饰器?"})
response = client.chat.completions.create(model="deepseek-chat", messages=messages)
assistant_msg = response.choices[0].message.content
messages.append({"role": "assistant", "content": assistant_msg})

# 第二轮(上下文自动延续)
messages.append({"role": "user", "content": "给我写一个计时器装饰器的例子"})
response = client.chat.completions.create(model="deepseek-chat", messages=messages)
print(response.choices[0].message.content)

💡 上下文管理技巧:

  • • 对话过长时,及时截断早期消息,避免token浪费
  • • 用摘要代替完整历史:当对话超过10轮,让模型总结前文
  • • 估算token消耗:1个中文字≈1.5 token
  • • 设置max_tokens防止输出过长

9. 错误处理与重试机制

import time
from openai import APIError, RateLimitError, APITimeoutError

def call_deepseek_with_retry(messages, max_retries=3):
    """带重试机制的DeepSeek API调用"""
    for attempt in range(max_retries):
        try:
            response = client.chat.completions.create(
                model="deepseek-chat",
                messages=messages,
                timeout=30  # 30秒超时
            )
            return response
        
        except RateLimitError:
            # 速率限制,等待后重试
            wait_time = 2 ** attempt  # 指数退避:1s, 2s, 4s
            print(f"速率限制,{wait_time}秒后重试...")
            time.sleep(wait_time)
        
        except APITimeoutError:
            # 请求超时
            print(f"请求超时,重试 {attempt + 1}/{max_retries}")
            time.sleep(1)
        
        except APIError as e:
            # 其他API错误
            print(f"API错误: {e}")
            if e.status_code >= 500:
                time.sleep(2)  # 服务端错误,等待重试
            else:
                raise  # 客户端错误,直接抛出
    
    raise Exception(f"重试{max_retries}次后仍然失败")
错误码含义处理方式
400请求参数错误检查参数格式
401API Key无效检查Key是否正确
429速率限制指数退避重试
500服务端错误等待后重试
503服务不可用等待后重试

10. 从OpenAI迁移到DeepSeek(只需改2行)

如果你已经在使用OpenAI API,迁移到DeepSeek只需要修改两行代码:

✅ 迁移对照表:

# 修改前(OpenAI)
client = OpenAI(api_key="sk-openai-xxx")  # ❌ 删除
# base_url 默认为 https://api.openai.com/v1  # ❌ 删除
# 修改后(DeepSeek)
client = OpenAI(
    api_key="sk-deepseek-xxx",              # ✅ 换Key
    base_url="https://api.deepseek.com"      # ✅ 换URL
)
# 其他代码完全不用改!

需要注意的微小差异:DeepSeek的 model 参数使用 "deepseek-chat" 而非 "gpt-4o"。所有其他参数(temperature、max_tokens、top_p等)完全一致。

🚀 开始使用DeepSeek API

注册即送500万token,API价格低至 ¥1/百万token

获取API Key →

📖 相关推荐

🧰 AI Toolbox

AI is transforming every industry. Whether you're a developer, creator, or professional, we've gathered the best AI tools from around the world to boost your productivity and spark creativity. Updated daily.

© 2025 AI Toolbox · Bilingual AI Tools Directory

v1.2.0