欣淇
发布于 2026-05-09 / 2 阅读
0
0

⚡ DS2API:把 DeepSeek Web 变成 OpenAI/Claude/Gemini 兼容 API

⚡ 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 一键部署

![Deploy with Vercel](https://vercel.com/new/clone?repository-url=https://github.com/CJackHwang/ds2api)

或者手动操作:

# 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

  • Dashboard:实时请求统计、并发状态
  • 账号管理:添加/删除/测试 DeepSeek 账号
  • API Keys:管理客户端访问密钥
  • 代理管理:配置 HTTP/SOCKS5 代理池
  • 运行时设置:并发限制、token 刷新间隔热更新
  • 对话记录:查看服务器端缓存的历史会话
  • 抓包工具:Raw Sample 捕获,方便调试
  • 管理台支持中英文双语和深色模式。

    七、运维与监控

    # 健康检查
    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"
    

    八、踩坑记录

  • DeepSeek 账号需要保持登录状态:DS2API 会自动刷新 token,但如果密码改了或账号被踢,需要重新配置
  • 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 Web 转成 OpenAI/Claude/Gemini 三套 API
  • 四种部署方式:二进制、Docker、Vercel、源码
  • 多账号轮询 + 并发队列控制
  • WebUI 管理台,配置/账号/代理全可视化
  • 支持 Tool Calling、联网搜索、PoW、视觉模型
  • 3.9k Stars,920 commits,社区活跃
  • 如果你有 DeepSeek 账号又想把它接入现有的 AI 工作流,DS2API 是目前最完整的方案。

    标签:#DeepSeek #API #Go #开源 #AI


    评论