DeepSeek API 完整文档
DeepSeek API 全面接入指南:从基础调用到高级功能,涵盖 Chat Completions、Streaming、Function Calling、R1 推理模型、Token 计算、错误处理与多语言 SDK 示例。兼容 OpenAI SDK,迁移零成本。
开始学习API 概览
DeepSeek API 提供与 OpenAI 完全兼容的接口格式,你可以使用任何 OpenAI SDK 直接调用,只需修改 base_url 和 api_key 即可。
Base URL 与认证
速率限制
| 请求频率 (RPM) | 默认 500 次/分钟(可联系官方提升) |
| 并发连接数 | 默认 100 个并发请求 |
| Token 速率 (TPM) | 默认 500,000 TPM |
支持模型
| 模型名称 | API 参数值 | 说明 |
|---|---|---|
| DeepSeek V3 | deepseek-chat |
旗舰对话模型,通用场景最优选择 |
| DeepSeek R1 | deepseek-reasoner |
推理增强模型,数学/逻辑/编程场景 |
价格表
| 模型 | 输入 (每百万 Token) | 输出 (每百万 Token) | 上下文窗口 |
|---|---|---|---|
| deepseek-chat (V3) | $0.27 (缓存命中 $0.07) | $1.10 | 160K |
| deepseek-reasoner (R1) | $0.55 (缓存命中 $0.14) | $2.19 | 128K |
Chat Completions 接口
Chat Completions 是 DeepSeek API 最核心的接口,支持文本对话、代码生成、内容创作等全部对话场景。兼容 OpenAI Chat Completions API 格式。
接口端点
请求参数
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| model | string | 是 | - | 模型 ID:deepseek-chat 或 deepseek-reasoner |
| messages | array | 是 | - | 对话消息列表,每条包含 role 和 content |
| temperature | float | 否 | 1.0 | 采样温度,范围 0~2。越高越随机,越低越确定 |
| top_p | float | 否 | 1.0 | 核采样参数,范围 0~1。建议与 temperature 二选一调整 |
| max_tokens | integer | 否 | 4096 | 最大输出 token 数。V3 最大 8K,R1 最大 32K |
| stream | boolean | 否 | false | 是否启用流式输出(SSE) |
| frequency_penalty | float | 否 | 0 | 频率惩罚,范围 -2~2。正值降低重复内容概率 |
| presence_penalty | float | 否 | 0 | 存在惩罚,范围 -2~2。正值鼓励谈论新话题 |
| stop | string/array | 否 | null | 停止词,最多 16 个。遇到停止词时立即终止输出 |
| tools | array | 否 | null | Function Calling 工具定义列表 |
响应格式
finish_reason 常见值:stop(正常结束)、length(达到 max_tokens 限制)、content_filter(内容被过滤)、tool_calls(触发了函数调用)。
多轮对话
DeepSeek API 通过 messages 数组实现多轮对话。每次请求将完整的对话历史发送给模型,模型会根据上下文理解对话意图并给出连贯回复。
消息角色 (Role)
| role | 说明 |
|---|---|
| system | 系统提示词,用于设定对话的风格、角色、边界和规则。放在 messages 数组的第一条。 |
| user | 用户消息,即用户输入的问题或指令。 |
| assistant | 助手消息,即模型之前生成的回复。需要将历史 assistant 消息一并传入以维持对话上下文。 |
多轮对话示例
上下文窗口管理
DeepSeek V3 支持 160K token 上下文窗口,R1 支持 128K。当对话历史过长时,需要管理上下文:
- 滑动窗口:只保留最近 N 轮对话,丢弃最早的消息
- 摘要压缩:用模型对早期对话生成摘要,替换原始消息
- 关键消息保留:始终保留 system prompt 和用户的核心问题,仅裁剪中间对话
- Token 计数:每次请求前估算总 token 数,确保不超过上下文窗口
流式输出 (Streaming)
流式输出让模型逐个 token 返回结果,用户无需等待完整响应,可以实时看到生成内容。对于长文本生成和聊天应用,流式输出显著提升用户体验。
SSE 格式说明
DeepSeek 流式输出基于 Server-Sent Events (SSE) 协议。每个 chunk 以 data: 开头,以 \n\n 结束。每个 chunk 包含一个 JSON 对象,其中的 choices[0].delta.content 字段包含增量文本。
Python 流式示例
JavaScript (Node.js) 流式示例
如何解析 SSE 流
如果你不使用 SDK 而是直接通过 HTTP 请求获取流式数据,需要手动解析 SSE 格式:
- 按行读取响应体,每行以
data:开头 - 遇到
data: [DONE]表示流结束 - 解析 data 后的 JSON 字符串,提取
choices[0].delta.content - 空行用于分隔不同的事件(chunk)
Function Calling (函数调用)
Function Calling 让模型能够智能地决定何时调用外部函数,并将用户自然语言转换为结构化的函数参数。这是构建 AI Agent 和工具调用场景的核心能力。
工具定义格式
在请求中通过 tools 参数定义可用的函数。每个函数需要 name、description 和 parameters(JSON Schema 格式)。
Function Calling 工作流程
- 发送请求:将用户消息和 tools 定义一起发送给 DeepSeek API
- 模型决策:模型判断是否需要调用函数。如果需要,返回 finish_reason="tool_calls" 和函数调用信息
- 执行函数:开发者根据模型返回的函数名和参数,在自己的代码中执行相应函数
- 返回结果:将函数执行结果作为 tool role 消息,追加到 messages 中再次发送给模型
- 模型回复:模型根据函数返回结果,生成最终的自然语言回复
Python 完整示例
DeepSeek R1 (Reasoner) API
DeepSeek R1 是推理增强模型,在数学、编程、逻辑推理等场景中表现优异。API 调用方式与 deepseek-chat 基本一致,但有独特的思考过程输出。
R1 接口端点
思考过程 (reasoning_content)
R1 模型在生成最终答案前,会先进行内部推理。在流式输出中,推理过程通过 reasoning_content 字段返回,推理完成后才返回 content 字段。
R1 与 Chat API 的区别
| 特性 | deepseek-chat (V3) | deepseek-reasoner (R1) |
|---|---|---|
| 上下文窗口 | 160K tokens | 128K tokens |
| 最大输出 | 8K tokens | 32K tokens (含推理) |
| 推理过程 | 不暴露 | 通过 reasoning_content 暴露 |
| temperature | 支持 (0~2) | 不支持(固定推理策略) |
| Function Calling | 支持 | 推荐使用 V3 处理工具调用 |
| 适用场景 | 通用对话、内容创作、翻译 | 数学证明、算法设计、逻辑推理 |
R1 最佳实践
- R1 不需要复杂的 system prompt,简洁的指令即可获得最佳效果
- 推理过程会消耗 tokens,注意 max_tokens 设置要足够(建议 8000+)
- 非流式调用时,reasoning_content 会包含在完整响应中
- 对于简单对话,建议使用 V3 以节省成本和延迟;复杂推理任务才使用 R1
Token 计算
理解 Token 计算是控制 API 成本和管理上下文窗口的关键。DeepSeek 使用与 OpenAI 兼容的 tokenizer,你可以使用 tiktoken 库进行精确计算。
Token 估算规则
| 内容类型 | Token 估算 |
|---|---|
| 英文文本 | 1 token ~ 4 个英文字符,或 ~ 0.75 个英文单词 |
| 中文文本 | 1 个中文字符 ~ 1.5~2 个 token |
| 代码 | 1 token ~ 3~4 个代码字符(因缩进和符号而异) |
使用 tiktoken 精确计算
上下文窗口与 max_tokens 限制
| 模型 | 上下文窗口 | 最大输出 token |
|---|---|---|
| deepseek-chat (V3) | 160,000 tokens | 8,192 tokens (默认 4,096) |
| deepseek-reasoner (R1) | 128,000 tokens | 32,768 tokens (含推理过程) |
提示
每次请求的 total_tokens = prompt_tokens + completion_tokens。确保 prompt_tokens + max_tokens 不超过模型的上下文窗口上限。可通过 API 返回的 usage 字段查看实际消耗。
错误码与异常处理
了解 DeepSeek API 的错误码和异常处理策略,确保你的应用在生产环境中稳定可靠。
HTTP 状态码
| 状态码 | 含义 | 说明与处理方式 |
|---|---|---|
| 200 | 成功 | 请求正常处理 |
| 400 | 请求格式错误 | 参数格式不正确、缺少必填字段、JSON 解析失败等。检查请求体格式 |
| 401 | 认证失败 | API Key 无效、过期或未传入。检查 Authorization Header |
| 402 | 余额不足 | 账户余额不足以完成本次请求。前往 platform.deepseek.com 充值 |
| 429 | 速率限制 | 请求频率超过限制。降低请求频率或联系官方提升配额 |
| 500 | 服务器内部错误 | DeepSeek 服务端临时故障。建议重试,使用指数退避策略 |
| 503 | 服务不可用 | 服务器繁忙或维护中。等待后重试,建议最长等待 60 秒 |
错误响应格式
重试策略:指数退避
多语言 SDK 示例
DeepSeek API 兼容 OpenAI SDK,你可以使用任何语言的 OpenAI 客户端库。以下是各主流语言的完整示例代码。
Python (openai 包)
Node.js (openai 包)
curl
Go
Java
最佳实践
总结 DeepSeek API 使用中的关键最佳实践,帮助你在生产环境中高效、稳定、经济地使用 DeepSeek 模型。
1. System Prompt 设计
- 明确角色定位:告诉模型"你是谁"(如"你是一个专业的 Python 编程助手")
- 设定输出格式:要求模型以特定格式输出(JSON、Markdown 表格、代码块等)
- 约束行为边界:明确告诉模型不能做什么(如"不要猜测不确定的信息")
- 保持简洁:system prompt 过长会占用上下文窗口,建议控制在 200~500 字
2. Temperature 调优
| Temperature | 适用场景 |
|---|---|
| 0.0 ~ 0.3 | 代码生成、数学计算、数据提取、翻译——需要精确和一致性的场景 |
| 0.5 ~ 0.8 | 内容创作、头脑风暴、通用对话——平衡创造性和一致性 |
| 0.9 ~ 1.5 | 创意写作、故事生成、诗歌——需要高度多样性和创造性 |
3. 上下文窗口优化
- 只传入必要的对话历史,避免无效的往返消息
- 对长文档使用 RAG 方案,而非直接拼接全文
- 利用 system prompt 传递持久化指令,避免在每条 user 消息中重复
- 监控 usage.total_tokens,提前预警接近上下文窗口上限
4. 成本控制
- 合理设置 max_tokens,避免不必要的长输出浪费
- 利用缓存命中(Cache Hit)降低输入成本:重复的 system prompt 和历史消息可享受缓存折扣
- 对简单任务使用较小的 max_tokens 和低 temperature
- 在开发阶段使用 token 计数工具预估成本,设置预算告警
- 设置 API Key 的每月消费限额,避免意外超支
5. 并发请求管理
- 使用连接池复用 HTTP 连接,减少握手开销
- 实现请求队列,控制并发数不超过限制(默认 100)
- 对批量任务使用异步调用(Python asyncio / Node.js Promise.all)
- 监控 429 错误频率,动态调整并发数
- 为不同类型的请求设置不同的优先级队列
DeepSeek 更多教程
继续探索 DeepSeek 的使用、部署和模型知识。