⚡ DS2API:把 DeepSeek Web 变成 OpenAI/Claude/Gemini 兼容 API,3.9k Stars 的全栈方案
项目地址:CJackHwang/ds2api | ⭐ 3,900 Stars | 🛠 Go + React | 作者:CJackHwang
老实说,DeepSeek 的网页版聊天体验其实不错,但如果你想把它接入现有的 OpenAI SDK、Claude Code 或者 LangChain 流程,就麻烦了。
DS2API 干的事很直接:把 DeepSeek Web 对话能力转换成 OpenAI、Claude、Gemini 三套兼容 API。后端 Go 实现,Vercel 流式桥接用 Node Runtime,前端 React WebUI 管理台。
3.9k Stars、1.1k Forks、920 commits,活跃度非常高。
一、你能得到什么
DS2API 启动后,你的客户端可以像调用 OpenAI 一样调用 DeepSeek:
| 协议 | 端点 | 支持情况 |
|------|------|----------|
| OpenAI | /v1/chat/completions、/v1/responses、/v1/embeddings、/v1/files | ✅ 完整 |
| Claude | /anthropic/v1/messages、/v1/messages | ✅ 含 token 计数 |
| Gemini | /v1beta/models/{model}:generateContent、:streamGenerateContent | ✅ 流式/非流式 |
| Ollama | /api/tags、/api/show、/api/version | ✅ 兼容 |
| 管理台 | /admin WebUI + REST API | ✅ 配置/账号/代理管理 |
支持的模型映射:
deepseek-v4-flash → GPT、Claude Sonnet 等 alias
deepseek-v4-pro → Claude Opus、o3 等 alias
deepseek-v4-vision → 视觉模型
deepseek-v4-flash-search → 带联网搜索
所有 alias 可自定义覆盖。
二、四种部署方式,选一个就行
方式一:下载 Release 二进制(最快)
去 Releases 下载对应平台的构建包:
# Linux x86_64
wget https://github.com/CJackHwang/ds2api/releases/latest/download/ds2api-linux-amd64.tar.gz
tar xzf ds2api-linux-amd64.tar.gz
# 配置
cp config.example.json config.json
# 编辑 config.json,填入你的 DeepSeek 账号和 API Keys
# 运行
./ds2api
默认监听 :5001,访问 http://localhost:5001/admin 进入管理台。
方式二:Docker 运行
# 拉取镜像
docker pull ghcr.io/cjackhwang/ds2api:latest
# 准备配置
cp config.example.json config.json
# 编辑 config.json
# 运行
docker run -d \
--name ds2api \
-p 5001:5001 \
-v $(pwd)/config.json:/app/config.json \
ghcr.io/cjackhwang/ds2api:latest
# 查看日志
docker logs -f ds2api
如果不想挂载配置文件,可以用 Base64 环境变量传配置:
DS2API_CONFIG_JSON="$(base64 < config.json | tr -d '\n')"
docker run -d \
--name ds2api \
-p 5001:5001 \
-e DS2API_CONFIG_JSON="$DS2API_CONFIG_JSON" \
ghcr.io/cjackhwang/ds2api:latest
方式三:Vercel 一键部署

或者手动操作:
# 1. Fork 项目到你的 GitHub
# 2. 在 Vercel 导入仓库
# 3. 设置环境变量:
# - DS2API_ADMIN_KEY=你的管理密钥
# - DS2API_CONFIG_JSON=Base64 编码的配置文件
# 4. 部署完成后访问 /admin 配置账号
Vercel 部署后,流式请求走 Node Runtime 桥接(/v1/chat/completions),非流式请求走 Go Serverless Function。
方式四:本地源码运行
需要 Go 1.22+ 和 Node 18+:
# 克隆
git clone https://github.com/CJackHwang/ds2api.git
cd ds2api
# 配置
cp config.example.json config.json
# 安装前端依赖并构建 WebUI
cd webui
npm install
npm run build
cd ..
# 构建 Go 后端
go build -o ds2api ./cmd/ds2api
# 运行
./ds2api
或者用开发模式(自动热重载):
# 安装 air
go install github.com/air-verse/air@latest
# 启动开发服务器
air
三、配置文件详解
config.json 是唯一配置源:
{
"keys": [
"sk-your-api-key-1",
"sk-your-api-key-2"
],
"accounts": [
{
"name": "主账号",
"email": "your-email@example.com",
"password": "your-password"
},
{
"mobile": "12345678901",
"password": "your-password"
}
],
"model_aliases": {
"gpt-4o": "deepseek-v4-flash",
"claude-sonnet-4-6": "deepseek-v4-flash",
"o3": "deepseek-v4-pro"
},
"runtime": {
"account_max_inflight": 2,
"global_max_inflight": 0,
"token_refresh_interval_hours": 6
}
}
关键字段说明:
| 字段 | 说明 |
|------|------|
| keys | 客户端访问 API 的 token 列表 |
| accounts | DeepSeek 网页版账号(邮箱/手机号登录) |
| model_aliases | 第三方模型 ID → DeepSeek 模型映射 |
| runtime.account_max_inflight | 每账号最大并发请求数(默认 2) |
| runtime.global_max_inflight | 全局最大并发(0 = 不限制) |
| admin.jwt_expire_hours | 管理台 JWT 过期时间 |
四、鉴权模式
DS2API 支持两种鉴权行为,取决于你传的 token 是否在 config.keys 中:
托管账号模式(token 在 keys 列表中):
curl http://localhost:5001/v1/chat/completions \
-H "Authorization: Bearer sk-your-api-key-1" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-flash",
"messages": [{"role": "user", "content": "Hello"}]
}'
→ DS2API 自动从账号池轮询可用账号,用该账号的 DeepSeek Web session 发起请求。
直通 token 模式(token 不在 keys 列表中):
curl http://localhost:5001/v1/chat/completions \
-H "Authorization: Bearer sk-ant-xxx" \
-H "Content-Type: application/json" \
-d '{"model": "deepseek-v4-flash", "messages": [...]}'
→ 直接把你的 token 作为 DeepSeek API token 使用,不走账号池。
指定特定账号:
curl ... -H "X-Ds2-Target-Account: your-email@example.com"
五、客户端接入示例
OpenAI Python SDK
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:5001/v1", # DS2API 地址
api_key="sk-your-api-key"
)
response = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "用 Python 写一个快排"}],
stream=True
)
for chunk in response:
print(chunk.choices[0].delta.content or "", end="")
Anthropic SDK(Claude Code)
import anthropic
client = anthropic.Anthropic(
base_url="http://localhost:5001",
api_key="sk-your-api-key"
)
message = client.messages.create(
model="claude-sonnet-4-6", # 会自动映射到 deepseek-v4-flash
max_tokens=1024,
messages=[{"role": "user", "content": "解释一下什么是 RAG"}]
)
print(message.content[0].text)
Claude Code CLI 接入:
export ANTHROPIC_BASE_URL="http://localhost:5001"
export ANTHROPIC_API_KEY="sk-your-api-key"
claude
DS2API 会自动把 Claude 的模型 ID(如 claude-sonnet-4-6)映射到 DeepSeek 的对应模型。
Google Gemini SDK
import google.generativeai as genai
genai.configure(
api_key="sk-your-api-key",
transport="rest",
client_options={"api_endpoint": "localhost:5001"}
)
model = genai.GenerativeModel("gemini-2.0-flash")
response = model.generate_content("讲个冷笑话")
print(response.text)
cURL 直调
# OpenAI 格式
curl http://localhost:5001/v1/chat/completions \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-flash",
"messages": [{"role": "user", "content": "你好"}],
"stream": true
}'
# Claude 格式
curl http://localhost:5001/v1/messages \
-H "x-api-key: sk-your-api-key" \
-H "Content-Type: application/json" \
-H "Anthropic-Version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "你好"}]
}'
# Gemini 格式
curl http://localhost:5001/v1beta/models/gemini-2.0-flash:generateContent \
-H "x-goog-api-key: sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{"contents": [{"parts": [{"text": "你好"}]}]}'
六、管理台 WebUI
启动后访问 http://localhost:5001/admin:
管理台支持中英文双语和深色模式。
七、运维与监控
# 健康检查
curl http://localhost:5001/healthz
# → {"status": "ok"}
curl http://localhost:5001/readyz
# → {"status": "ready"}
# 查看账号队列状态
curl http://localhost:5001/admin/queue/status \
-H "Authorization: Bearer your-admin-key"
# 测试所有账号连通性
curl -X POST http://localhost:5001/admin/accounts/test-all \
-H "Authorization: Bearer your-admin-key"
八、踩坑记录
2. PoW 计算:DeepSeek Web 有 Proof of Work(工作量证明),DS2API 用纯 Go 实现(DeepSeekHashV1),毫秒级完成
3. Tool Calling 兼容性:DS2API 对 DSML 外壳做了多层兼容——<|DSML|tool_calls>、、旧式 canonical XML 都支持
4. Vercel 免费版限制:Serverless Function 有 10s 超时,长时间流式对话建议用 Docker 部署
5. 引用标记:流式输出默认隐藏 [citation:N] 占位符,非流式输出转换为 Markdown 引用链接
6. 配置文件热更新:通过 Admin API PUT /admin/settings 可热更新运行时参数,无需重启
九、总结
如果你有 DeepSeek 账号又想把它接入现有的 AI 工作流,DS2API 是目前最完整的方案。
标签:#DeepSeek #API #Go #开源 #AI