# 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).