Files
ds2api/README.MD

5.2 KiB
Raw Blame History

DS2API

License Stars Forks Version Docker

语言 / Language: 中文 | English

将 DeepSeek Web 对话能力转换为 OpenAI 与 Claude 兼容 API。当前仓库后端为 Go 全量实现,前端保留 React WebUI构建产物托管于 static/admin)。

当前实现边界

  • 后端Gocmd/, api/, internal/),不再依赖 Python 运行时
  • 前端React 管理台(源码在 webui/,运行时托管静态构建)
  • 部署本地运行、Docker、Vercel Serverless

核心能力

  • OpenAI 兼容:/v1/models/v1/chat/completions
  • Claude 兼容:/anthropic/v1/models/anthropic/v1/messages/anthropic/v1/messages/count_tokens
  • 多账号轮询与自动 token 刷新
  • DeepSeek PoWWASM计算
  • Admin API配置管理、账号测试、导入导出、Vercel 同步
  • WebUI/admin 单页应用托管
  • 运维探针:/healthz/readyz

模型支持

OpenAI 接口

模型 thinking search
deepseek-chat false false
deepseek-reasoner true false
deepseek-chat-search false true
deepseek-reasoner-search true true

Claude 接口

模型 默认映射
claude-sonnet-4-20250514 deepseek-chat
claude-sonnet-4-20250514-fast deepseek-chat
claude-sonnet-4-20250514-slow deepseek-reasoner

可通过配置中的 claude_mappingclaude_model_mapping 覆盖映射。

快速开始

1) 本地运行

要求Go 1.25+

git clone https://github.com/CJackHwang/ds2api.git
cd ds2api

cp config.example.json config.json
# 编辑 config.json

go run ./cmd/ds2api

默认地址:http://localhost:5001

如果访问 /admin 提示未构建 WebUI请执行

./scripts/build-webui.sh

2) Docker 运行

cp .env.example .env
# 编辑 .env

docker-compose up -d
docker-compose logs -f

3) Vercel 部署

  • 入口:api/index.go
  • 路由重写:vercel.json
  • 至少配置:
  • DS2API_ADMIN_KEY
  • DS2API_CONFIG_JSONJSON 字符串或 Base64

配置说明

config.json 示例

{
  "keys": ["your-api-key-1", "your-api-key-2"],
  "accounts": [
    {
      "email": "user@example.com",
      "password": "your-password",
      "token": ""
    },
    {
      "mobile": "12345678901",
      "password": "your-password",
      "token": ""
    }
  ],
  "claude_model_mapping": {
    "fast": "deepseek-chat",
    "slow": "deepseek-reasoner"
  }
}

环境变量(核心)

变量 用途
PORT 服务端口,默认 5001
LOG_LEVEL 日志级别:DEBUG/INFO/WARN/ERROR
DS2API_ACCOUNT_MAX_INFLIGHT 每个账号最大并发 in-flight 请求数,默认 2
DS2API_ACCOUNT_CONCURRENCY 同上别名(兼容旧写法)
DS2API_ADMIN_KEY Admin 登录密钥,默认 admin
DS2API_JWT_SECRET Admin JWT 签名密钥(可选)
DS2API_JWT_EXPIRE_HOURS Admin JWT 过期小时数,默认 24
DS2API_CONFIG_PATH 配置文件路径,默认 config.json
DS2API_CONFIG_JSON 直接注入配置JSON 或 Base64
DS2API_WASM_PATH PoW wasm 文件路径
DS2API_STATIC_ADMIN_DIR 管理台静态文件目录
VERCEL_TOKEN Vercel 同步 token可选
VERCEL_PROJECT_ID Vercel 项目 ID可选
VERCEL_TEAM_ID Vercel 团队 ID可选

鉴权与账号模式

调用业务接口时(/v1/*, /anthropic/*)支持两种模式:

  1. 托管账号模式:Bearerx-api-key 使用 config.keys 中的 key。
  2. 直通 token 模式:当传入 token 不在 config.keys 中时,服务直接把它当作 DeepSeek token 使用。

可选请求头:X-Ds2-Target-Account,用于指定托管账号。

并发建议值

  • 系统建议并发值按账号池动态计算:账号数量 × 每账号并发上限
  • 默认每账号并发上限是 2,因此默认建议值是 账号数量 × 2
  • 可通过 DS2API_ACCOUNT_MAX_INFLIGHT(或 DS2API_ACCOUNT_CONCURRENCY)手动覆盖每账号并发上限
  • GET /admin/queue/status 会返回 max_inflight_per_accountrecommended_concurrency

Tool Call 适配说明

当前实现对 toolcall 做了防泄漏处理:

  • tools + stream=true 时,服务端会先缓冲正文片段
  • 若识别到工具调用,会只输出结构化 tool_calls,不透传原始 JSON 文本
  • 若最终不是工具调用,再一次性输出普通文本
  • 解析器支持混合文本、fenced JSON、function.arguments 字符串等格式

文档与测试

  • API 文档:API.md / API.en.md
  • 部署文档:DEPLOY.md / DEPLOY.en.md
  • 贡献指南:CONTRIBUTING.md / CONTRIBUTING.en.md
go test ./...

免责声明

本项目基于逆向方式实现,仅供学习与研究使用。稳定性和可用性不作保证,请勿用于违反服务条款或法律法规的场景。