mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-05 00:45:29 +08:00
4.7 KiB
4.7 KiB
DS2API
将 DeepSeek Web 对话能力转换为 OpenAI 与 Claude 兼容 API。当前仓库后端为 Go 全量实现,前端保留 React WebUI(构建产物托管于 static/admin)。
当前实现边界
- 后端:Go(
cmd/,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 PoW(WASM)计算
- 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_mapping 或 claude_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_KEYDS2API_CONFIG_JSON(JSON 字符串或 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_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/*)支持两种模式:
- 托管账号模式:
Bearer或x-api-key使用config.keys中的 key。 - 直通 token 模式:当传入 token 不在
config.keys中时,服务直接把它当作 DeepSeek token 使用。
可选请求头:X-Ds2-Target-Account,用于指定托管账号。
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 ./...
免责声明
本项目基于逆向方式实现,仅供学习与研究使用。稳定性和可用性不作保证,请勿用于违反服务条款或法律法规的场景。