# deepseek2api
**Repository Path**: lulendi/deepseek2api
## Basic Information
- **Project Name**: deepseek2api
- **Description**: deepseek2api
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-05-23
- **Last Updated**: 2026-05-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# DeepSeek2API
> 一个纯 Node.js 的 DeepSeek Web 控制台 + OpenAI 兼容桥接服务。
它把本地用户体系、DeepSeek 账号绑定、API Key 管理、DeepSeek 原生代理调试和 OpenAI 兼容接口放进同一个可直接运行的项目里。
## 功能概览
| 模块 | 能力 |
| --- | --- |
| 控制台 UI | 注册 / 登录、本地用户隔离、DeepSeek 账号绑定、API Key 管理 |
| OpenAI 兼容层 | `GET /v1/models`、`POST /v1/chat/completions` |
| 工具调用 | 仅适配 chat 协议;按 API Key 单独开关 |
| 原生代理层 | 提供 `/proxy/*` 白名单转发,便于调试和复用 DeepSeek Web 接口 |
| 管理后台 | 注册开关、邀请码、用户启用 / 禁用 / 删除、并发 / 速率限制 |
| 无痕模式 | 支持全局或用户级无痕,请求完成后自动清理会话 |
| 大锅饭模式 | 管理员开启后,所有 API Key 在全站可用 DeepSeek 账号间共享轮询 |
| 部署形态 | 无第三方运行时依赖,`npm start` 即可启动 |
## 项目特点
- 纯 Node.js 原生 HTTP 服务,无 Express、无数据库、无构建步骤
- 前后端都在同一个仓库里,静态资源由服务端直接托管
- 运行状态统一保存在 `data/app.json`
- DeepSeek token 失效时会自动重新登录并刷新
- 遇到 PoW 保护接口时会自动获取 wasm 并求解挑战
- OpenAI 兼容层同时支持流式和非流式响应
- `deepseek-reasoner-*` 模型会把思维内容包在 `...`
- API Key 请求默认在当前用户可见账号之间轮询;大锅饭模式下会改为全站共享轮询
## 运行要求
- Node.js 18+
- 服务端能够访问 [https://chat.deepseek.com](https://chat.deepseek.com)
- 浏览器在绑定 DeepSeek 账号时需要访问 [https://cdn.deepseek.com](https://cdn.deepseek.com)
- 如触发 PoW 校验,服务端还需要访问 [https://fe-static.deepseek.com](https://fe-static.deepseek.com)
## 快速开始
### 1. 启动服务
```bash
npm start
```
默认监听地址:
```text
http://127.0.0.1:3000
```
### 2. 可选:创建本地配置
仓库不自带 `.env`。如需启用管理员入口或修改端口,可参考 `.env.example` 手动创建:
```bash
cp .env.example .env
```
Windows PowerShell:
```powershell
Copy-Item .env.example .env
```
`.env.example` 内容:
```env
PORT=3000
APP_ADMIN_USERNAME=
APP_ADMIN_PASSWORD=
```
### 3. 打开控制台
浏览器访问 `http://127.0.0.1:3000`,然后按下面流程使用:
1. 注册本地用户,或使用管理员账号登录
2. 在“账号”页绑定 DeepSeek 账号
3. 在“密钥”页创建 API Key
4. 如需工具调用,为该 API Key 单独打开“工具调用”开关
5. 管理员如需全站共享账号,先开启“全局无痕”,再开启“大锅饭”
6. 使用内置聊天工作区,或通过 OpenAI 兼容接口接入客户端
## 环境变量
| 变量 | 默认值 | 说明 |
| --- | --- | --- |
| `PORT` | `3000` | 服务监听端口 |
| `APP_ADMIN_USERNAME` | 空 | 管理员用户名 |
| `APP_ADMIN_PASSWORD` | 空 | 管理员密码 |
只有同时设置 `APP_ADMIN_USERNAME` 和 `APP_ADMIN_PASSWORD` 时,管理员入口才会启用。
## 控制台能力
### 账号与密钥
- 绑定 / 删除 DeepSeek Web 账号
- 为当前用户创建多个 API Key
- API Key 可指定自定义明文,留空则自动生成
- API Key 可单独开启或关闭“工具调用”
- 创建 API Key 时可直接设置工具调用开关
- OpenAI 兼容请求默认会在当前用户可见账号之间轮询
- 大锅饭模式开启时,生成 API Key 的用户必须先绑定可用 DeepSeek 账号
### 管理后台
- 管理本地注册开关
- 控制是否必须使用邀请码注册
- 生成、删除、批量删除邀请码
- 禁用、启用、删除本地用户
- 为用户设置并发上限和每分钟请求上限
- 开启或关闭大锅饭模式
### 无痕模式
- 管理员可开启全局无痕
- 普通用户可只为自己开启无痕
- 开启后,请求完成后会自动清理相关 DeepSeek 会话
### 大锅饭模式
- 只能由管理员开启或关闭
- 开启前必须先开启全局无痕
- 开启后,所有 OpenAI 兼容 API Key 会共享全站可用 DeepSeek 账号池
- 账号选择使用系统级轮询游标,不再按单个 API Key 或单个用户分别轮询
- 如果关闭全局无痕,大锅饭模式会自动关闭
- 普通用户不能开启大锅饭,但开启后其 API Key 调用也会进入全站共享轮询
## OpenAI 兼容接口
### 支持的接口
- `GET /v1/models`
- `POST /v1/chat/completions`
### 模型说明
- 默认模型:`deepseek-chat-fast`
- 联网能力通过模型后缀 `-search` 控制
- 不支持 `web_search_options`,请改用 `*-search` 模型
支持的模型 ID:
- `deepseek-chat-fast`
- `deepseek-chat-fast-search`
- `deepseek-reasoner-fast`
- `deepseek-reasoner-fast-search`
- `deepseek-chat-expert`
- `deepseek-chat-expert-search`
- `deepseek-reasoner-expert`
- `deepseek-reasoner-expert-search`
### `chat/completions` 示例
```bash
curl http://127.0.0.1:3000/v1/chat/completions \
-H "Authorization: Bearer " \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat-fast",
"messages": [
{ "role": "user", "content": "hello" }
]
}'
```
### 工具调用
- 工具调用仅适配 `chat/completions`
- 协议入口始终存在;是否允许工具调用由 API Key 的开关决定
- API Key 未开启工具调用时:
- 普通请求可正常使用
- 带 `tools`、`tool_choice`、工具历史消息的请求会直接返回 `400`
- API Key 开启工具调用时:
- 服务会把工具 schema 注入提示词
- 再把模型输出中的工具 XML 解析回 OpenAI 兼容的工具调用结构
### 工具调用行为说明
- 当前实现本质上是“提示词注入 + 输出解析”,不是上游原生 tool calling
- 提示词允许模型在工具调用前、后或前后都输出普通文本
- 普通文本是否出现、出现在哪一侧,由模型自己决定,不做强制
- `chat/completions` 非流式:
- 如果识别到工具调用,响应会同时返回 `message.tool_calls`
- 如果模型在工具调用前后还输出了普通文本,文本会保留在 `message.content`
- `chat/completions` 流式:
- 普通文本继续走 `delta.content`
- 工具调用走 `delta.tool_calls`
- 工具调用事件出现的位置不固定,取决于模型实际输出顺序
### 当前限制
- 只识别 XML / Markup 风格的工具调用块
- 不识别把 `"tool_calls": [...]` 当普通文本吐出来的 JSON 片段
- 混合输出是否稳定出现,和所选模型强相关;`deepseek-reasoner-*` 通常比 `deepseek-chat-*` 更容易产出“文本 + 工具调用”的混合结果
## 原生代理接口
### 支持的接口
- `GET /proxy/...`
- `POST /proxy/...`
### 使用说明
- `/proxy/*` 走的是登录态会话,不是 API Key 鉴权
- 如果存在多个可用账号,可通过请求头 `x-proxy-account-id` 指定账号
- 只允许转发白名单路径,白名单定义在 `src/config.js`
当前白名单包含:
- `/api/v0/chat/completion`
- `/api/v0/chat/continue`
- `/api/v0/chat/create_pow_challenge`
- `/api/v0/chat/edit_message`
- `/api/v0/chat/history_messages`
- `/api/v0/chat/message_feedback`
- `/api/v0/chat/regenerate`
- `/api/v0/chat/resume_stream`
- `/api/v0/chat/stop_stream`
- `/api/v0/chat_session/create`
- `/api/v0/chat_session/delete`
- `/api/v0/chat_session/delete_all`
- `/api/v0/chat_session/fetch_page`
- `/api/v0/chat_session/update_pinned`
- `/api/v0/chat_session/update_title`
- `/api/v0/client/settings`
- `/api/v0/download_export_history`
- `/api/v0/export_all`
- `/api/v0/file/fetch_files`
- `/api/v0/file/preview`
- `/api/v0/file/upload_file`
- `/api/v0/share/content`
- `/api/v0/share/create`
- `/api/v0/share/delete`
- `/api/v0/share/fork`
- `/api/v0/share/list`
- `/api/v0/users/current`
- `/api/v0/users/settings`
- `/api/v0/users/update_settings`
## 本地接口总览
### 公共接口
- `GET /api/me`
- `GET /api/discovery`
- `POST /api/auth/login`
- `POST /api/auth/register`
- `POST /api/auth/logout`
### 登录后接口
- `GET /api/accounts`
- `POST /api/accounts`
- `DELETE /api/accounts/:id`
- `POST /api/incognito`
- `GET /api/api-keys`
- `POST /api/api-keys`
- `PATCH /api/api-keys/:id`
- `DELETE /api/api-keys/:id`
### 管理接口
- `POST /api/admin/registration`
- `POST /api/admin/shared-account-mode`
- `POST /api/admin/invites`
- `POST /api/admin/invites/batch-delete`
- `DELETE /api/admin/invites/:id`
- `PATCH /api/admin/users/:id`
- `DELETE /api/admin/users/:id`
- `POST /api/admin/users/batch-disable`
- `POST /api/admin/users/batch-delete`
## 项目结构
```text
.
├─ data/ # 运行时数据目录
├─ public/ # 前端控制台静态资源
├─ src/
│ ├─ routes/ # 公共 / 私有 / 管理 / OpenAI / 代理路由
│ ├─ services/ # 账号、用户、桥接、PoW、限流等核心逻辑
│ ├─ storage/ # JSON 文件存储
│ └─ utils/ # HTTP、SSE、ID、Prompt 等工具
├─ .env.example
├─ package.json
└─ README.md
```
## License
This project is licensed under the [MIT License](./LICENSE).