前言
DS2API 是一款轻量级、高性能的全栈中间件,能将 DeepSeek 网页端对话能力转换为 OpenAI、Claude、Gemini 兼容的通用 API。后端使用 Go 语言全量实现,自带 React WebUI 管理台,支持多账号轮询、Docker 部署、Vercel Serverless 等多种方式。
简单来说:有了它,你就能用 DeepSeek 的网页账号,对外提供标准 OpenAI/Claude/Gemini 格式的 API 接口,直接对接各种 AI 客户端和开发框架。
项目地址:https://github.com/CJackHwang/ds2api
当前最新版本:v4.1.2(2026.04.28 发布)
核心功能一览
| 能力 | 说明 |
|---|---|
| OpenAI 兼容 | 支持 /v1/chat/completions、/v1/responses、/v1/embeddings、/v1/files 等接口 |
| Claude 兼容 | 支持 /anthropic/v1/messages 等 Claude 原生接口,可直接接入 Claude Code |
| Gemini 兼容 | 支持 /v1beta/models/* 的 generateContent 和 streamGenerateContent |
| 多账号轮询 | 自动 Token 刷新,支持邮箱/手机号双登录方式 |
| 并发队列控制 | 每账号 in-flight 上限 + 等待队列,动态计算建议并发值 |
| DeepSeek PoW | 纯 Go 高性能实现,毫秒级响应 |
| Tool Calling | 防泄漏处理,结构化增量输出 |
| WebUI 管理台 | /admin 单页应用,中英文双语、深色模式 |
| 运维探针 | GET /healthz(存活)、GET /readyz(就绪) |
支持的模型
OpenAI 接口模型
| 模型类型 | 模型 ID | thinking | search |
|---|---|---|---|
| default | deepseek-v4-flash | 默认开启 | ❌ |
| default | deepseek-v4-flash-nothinking | 永久关闭 | ❌ |
| expert | deepseek-v4-pro | 默认开启 | ❌ |
| expert | deepseek-v4-pro-nothinking | 永久关闭 | ❌ |
| default | deepseek-v4-flash-search | 默认开启 | ✅ |
| default | deepseek-v4-flash-search-nothinking | 永久关闭 | ✅ |
| expert | deepseek-v4-pro-search | 默认开启 | ✅ |
| expert | deepseek-v4-pro-search-nothinking | 永久关闭 | ✅ |
| vision | deepseek-v4-vision | 默认开启 | ❌ |
| vision | deepseek-v4-vision-nothinking | 永久关闭 | ❌ |
| vision | deepseek-v4-vision-search | 默认开启 | ✅ |
| vision | deepseek-v4-vision-search-nothinking | 永久关闭 | ✅ |
此外还支持常见的模型别名映射(如 gpt-4.1、o3、claude-* 等),方便旧客户端直接兼容。
部署方式优先级建议
推荐按以下顺序选择:
- 下载 Release 构建包:最省事,产物已编译完成,适合大多数用户 👈 推荐新手
- Docker / GHCR 镜像部署:适合需要容器化、编排或云环境部署
- Vercel 部署:适合已有 Vercel 环境且接受其平台约束的场景
- 本地源码运行:适合开发、调试或需要自行修改代码
方式一:下载 Release 构建包(推荐新手)
这是最简单的方式,不需要安装 Go 或 Node.js,直接下载编译好的二进制文件即可运行。
第一步:下载对应平台的压缩包
前往 GitHub Release 页面下载对应平台的包:
支持的平台:
| 平台 | 架构 | 文件格式 |
|---|---|---|
| Linux | amd64 / arm64 / armv7 | .tar.gz |
| macOS | amd64 / arm64 | .tar.gz |
| Windows | amd64 / arm64 | .zip |
第二步:解压并配置
# 解压(以 Linux amd64 为例)
tar -xzf ds2api_v4.1.2_linux_amd64.tar.gz
cd ds2api_v4.1.2_linux_amd64
# 复制配置模板
cp config.example.json config.json
第三步:编辑配置文件
使用你喜欢的编辑器打开 config.json,需要填写以下关键信息:
{
"keys": [
"your-api-key-1"
],
"accounts": [
{
"name": "主账号",
"email": "your-email@example.com",
"password": "your-password"
}
]
}
必须修改的字段:
keys:设置你对外提供 API 的访问密钥(客户端调用时使用)accounts:填入你的 DeepSeek 账号信息(支持邮箱或手机号登录)
第四步:启动服务
./ds2api
默认访问地址:http://127.0.0.1:5001
WebUI 管理台:http://127.0.0.1:5001/admin
方式二:Docker 部署
适合熟悉 Docker 的用户,方便进行容器化管理和编排。
第一步:拉取镜像并准备配置
# 拉取最新镜像
docker pull ghcr.io/cjackhwang/ds2api:latest
# 克隆仓库(获取 docker-compose.yml 和配置模板)
git clone https://github.com/CJackHwang/ds2api.git
cd ds2api
# 复制模板
cp .env.example .env
cp config.example.json config.json
第二步:编辑环境变量和配置
编辑 .env 文件,至少设置以下内容:
# 管理密钥(必填,请改成强密码)
DS2API_ADMIN_KEY=your-strong-password
# 宿主机端口(可选,默认 6011 映射到容器 5001)
DS2API_HOST_PORT=6011
编辑 config.json,填入你的 DeepSeek 账号和 API 密钥(同方式一)。
第三步:启动
# 启动
docker-compose up -d
# 查看日志
docker-compose logs -f
# 更新镜像
docker-compose up -d --build
默认宿主机端口 6011 映射到容器内 5001,访问地址:http://你的IP:6011/admin
方式三:Vercel 部署
适合已有 Vercel 环境的用户,无需自己的服务器。
第一步:Fork 仓库
将项目 Fork 到你自己的 GitHub 账号下。
第二步:在 Vercel 导入项目
第三步:配置环境变量
在 Vercel Project Settings → Environment Variables 中配置:
| 变量 | 说明 | 是否必填 |
|---|---|---|
| DS2API_ADMIN_KEY | 管理密钥 | ✅ 必填 |
| DS2API_CONFIG_JSON | 配置内容(JSON 或 Base64) | 推荐填写 |
推荐方式:先在本地编辑好 config.json,再转成 Base64 粘贴:
base64 < config.json | tr -d '\n'
将输出的 Base64 字符串粘贴到 DS2API_CONFIG_JSON 环境变量中。
第四步:部署
点击部署按钮,等待构建完成即可。访问地址为 Vercel 分配的域名 + /admin。
注意:Vercel 上流式请求采用”Go prepare + Node stream”的混合链路,以保证 SSE 实时性。
方式四:本地源码运行
适合开发者或需要自行修改代码的用户。
前置要求
- Go 1.26+
- Node.js 20.19+ 或 22.12+(仅在需要构建 WebUI 时)
步骤
# 1. 克隆仓库
git clone https://github.com/CJackHwang/ds2api.git
cd ds2api
# 2. 配置
cp config.example.json config.json
# 编辑 config.json
# 3. 启动
go run ./cmd/ds2api
首次启动时,若 static/admin 不存在,会自动构建 WebUI(需要 Node.js)。
如需编译为二进制文件:
go build -o ds2api ./cmd/ds2api
./ds2api
配置文件详解
配置文件 config.json 的核心字段说明:
| 字段 | 说明 |
|---|---|
| keys / api_keys | 客户端访问密钥。api_keys 支持 name 和 remark 元信息 |
| accounts | DeepSeek 托管账号,支持 email 或 mobile 登录,可配置代理、名称和备注 |
| model_aliases | 模型别名映射(OpenAI / Claude / Gemini 共用) |
| runtime | 账号并发、队列与 Token 刷新策略,可通过 Admin API 热更新 |
| auto_delete.mode | 请求结束后的远端会话清理策略:none / single / all |
| thinking_injection | 思考增强提示词(默认开启) |
| current_input_file | 长上下文拆分上传策略(默认开启) |
完整配置请参考项目中的 config.example.json。
Nginx 反向代理配置
如果你需要在 Nginx 后部署,必须关闭缓冲以保证 SSE 流式响应正常:
server {
listen 443 ssl;
server_name api.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1:5001;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_cache off;
chunked_transfer_encoding on;
tcp_nodelay on;
}
}
Linux systemd 服务化
让 DS2API 在后台持续运行,并开机自启。
1. 复制文件到目标目录
sudo mkdir -p /opt/ds2api
sudo cp ds2api config.json /opt/ds2api/
sudo cp -r static/admin /opt/ds2api/static/admin
2. 创建 systemd 服务文件
# /etc/systemd/system/ds2api.service
[Unit]
Description=DS2API (Go)
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/ds2api
Environment=PORT=5001
Environment=DS2API_CONFIG_PATH=/opt/ds2api/config.json
Environment=DS2API_ADMIN_KEY=your-admin-key-here
ExecStart=/opt/ds2api/ds2api
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
3. 启动与管理
# 加载服务配置
sudo systemctl daemon-reload
# 设置开机自启
sudo systemctl enable ds2api
# 启动服务
sudo systemctl start ds2api
# 查看状态
sudo systemctl status ds2api
# 查看日志
sudo journalctl -u ds2api -f
# 重启服务
sudo systemctl restart ds2api
部署后验证
无论使用哪种部署方式,启动后建议依次检查:
# 1. 存活探针
curl -s http://127.0.0.1:5001/healthz
# 预期: {"status":"ok"}
# 2. 就绪探针
curl -s http://127.0.0.1:5001/readyz
# 预期: {"status":"ready"}
# 3. 模型列表
curl -s http://127.0.0.1:5001/v1/models
# 预期: {"object":"list","data":[...]}
# 4. 管理台页面
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:5001/admin
# 预期: 200
# 5. 测试 API 调用
curl http://127.0.0.1:5001/v1/chat/completions \
-H "Authorization: Bearer your-api-key-1" \
-H "Content-Type: application/json" \
-d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"hello"}]}'
鉴权模式说明
调用业务接口时支持两种鉴权模式:
| 模式 | 说明 |
|---|---|
| 托管账号模式 | 传入 config.keys 中的 key,由服务自动轮询选择账号 |
| 直通 Token 模式 | 传入的 Token 不在 config.keys 中时,直接作为 DeepSeek Token 使用 |
还支持通过请求头 X-Ds2-Target-Account 指定使用某个托管账号(值为 email 或 mobile)。
并发模型
每账号可用并发 = DS2API_ACCOUNT_MAX_INFLIGHT(默认 2)
建议并发值 = 账号数量 × 每账号并发上限
等待队列上限 = DS2API_ACCOUNT_MAX_QUEUE(默认 = 建议并发值)
429 阈值 = in-flight + 等待队列 ≈ 账号数量 × 4
当 in-flight 槽位满时请求进入等待队列,不会立即返回 429;超出总承载上限后才返回 429 Too Many Requests。
常见问题排查
Docker 部署后面板打不开?
- 检查端口是否一致:
PORT改成非 5001 时,访问地址也要对应修改 - 检查开发 compose 的 WebUI 静态文件:是否需要先构建一次
./scripts/build-webui.sh
Vercel Go 构建失败?
- 进入 Vercel Project Settings → Build and Development Settings
- 清空自定义 Go Build Flags / Build Command
- 若必须设置 ldflags,使用
-ldflags="-s -w"(保证它是一个参数) - 重新部署(建议清缓存后 Redeploy)
Claude Code 接入注意事项
ANTHROPIC_BASE_URL推荐直接指向 DS2API 根地址(如http://127.0.0.1:5001)ANTHROPIC_API_KEY需要与 config.json 中的 keys 一致- 如设置了系统代理,需对 DS2API 地址配置
NO_PROXY=127.0.0.1,localhost
总结
DS2API 是一个非常实用的开源工具,它让你能将 DeepSeek 网页端的对话能力转化为标准 API 接口,从而无缝对接 OpenAI、Claude、Gemini 等生态。无论是个人使用还是团队协作,都有合适的部署方式可选。
如果你在使用过程中遇到问题,可以前往项目的 GitHub Issues 反馈。
免责声明:本项目基于逆向方式实现,仅供学习、研究、个人实验和内部验证使用,请勿用于违反服务条款或法律法规的场景。