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.com,api_key 换成DeepSeek的。其他参数、格式、返回值完全一致。
2. 获取API Key(1分钟)
- 步骤1:访问 platform.deepseek.com 并登录
- 步骤2:点击左侧菜单「API Keys」
- 步骤3:点击「创建 API Key」按钮
- 步骤4:复制生成的Key(格式:
sk-xxxxxxxxxxxxxxxx),只显示一次 - 步骤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 | 请求参数错误 | 检查参数格式 |
| 401 | API 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等)完全一致。