← 返回列表
⚠ 装前注意
🌍 全球英文版: 这是该代理的英文翻译版和全球适配版。核心逻辑归原作者ForgetMeAI所有,由…
基本兼容但装前注意:未发布到 npm registry,仅可从源码安装 · 最近上游提交 2026/9/6 · 已提供中文文档
DeepSeek 网页聊天(全球英文版)的本地 OpenAI 兼容 API 代理。将 DeepSeek 连接到 Open WebUI、Claude Code 和 OpenAI SDK 工具。由 Atharvotech 维护。
综合分
46
GitHub 分
46
用户评分
—
★ Stars
29
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add atharvotech/FreeDeepseekAPI-EN未发布到 npm registry,仅可从源码安装,改用 GitHub 源安装
数据截至 2026/9/17(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查⚠ 装前注意
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包free-deepseek-api(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=18.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
未发布到 npm registry,仅可从源码安装
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/17 23:37:09
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
FreeDeepseekAPI-EN
🌍 全球英文版: 这是该代理的英文翻译版和全球适配版。核心逻辑归原作者(ForgetMeAI)所有,由 Atharvotech 为全球开源社区维护和翻译。
FreeDeepseekAPI 为 DeepSeek Web Chat(chat.deepseek.com)启动一个本地 API 服务器/包装器,让你能够将 DeepSeek Web 无缝连接到 Open WebUI、LiteLLM、Hermes、Claude Code、OpenAI SDK 风格的客户端,以及其他兼容 OpenAI 的 LLM 工具。
该项目通过你在专用 Chrome 配置文件中常规登录的 DeepSeek 账户运行。本地 localhost 服务器接受 API 请求,然后通过已保存的浏览器会话自行与 DeepSeek Web 通信。
⚠️ 这是一个用于本地 LLM 集成的实验性网页聊天代理。DeepSeek 可能会在没有预警的情况下更改其内部 Web API。对于生产用途,官方付费 DeepSeek API 更可靠。
目录
- 它能为你带来什么
- 功能特性
- 快速开始
- Windows 启动
- Linux / Chromium 启动
- VPS / 无头启动
- 无根 Podman
- 诊断 / doctor
- 会话复用与聊天重置
- 多账户池
- 控制台认证思路
- 验证其是否正常工作
- 使用示例
- Chat Completions
- 推理
- 网页搜索
- 流式传输
- Anthropic Messages API
- OpenAI Responses API
- 工具调用
- 模型
- 端点
- Open WebUI
- 更新登录
- 项目状态
✨ 它能为你带来什么
- 将 DeepSeek Web 用作本地 API 端点。
- 将 DeepSeek 连接到 Open WebUI 和其他兼容 OpenAI 的客户端。
- 获取常规 JSON 响应或流式 SSE。
- 使用带有独立 reasoning_content 的推理模型。
- 配合 Anthropic Messages API 适配层用于 Claude Code / Anthropic SDK。
- 使用 OpenAI Responses API 适配层用于新的 OpenAI/Codex 风格客户端。
- 为不同的代理/用户保留独立的网页会话。
🚀 功能特性
- 兼容 OpenAI 的 API: POST /v1/chat/completions
- 兼容 Anthropic 的适配层: POST /v1/messages
- OpenAI Responses 适配层: POST /v1/responses
- 流式传输: SSE 分块和常规非流式 JSON 响应
- 推理输出: 为思考模型提供独立的 reasoning_content
- 工具调用: 解析 OpenAI tools、Anthropic tools 和 Responses function tools
- 模型能力: GET /v1/model-capabilities,包含别名 → 真实网页模式
- 代理会话: 为每个 user / 代理 id 提供独立的 DeepSeek 会话
- 会话恢复: 自动重置过期的链/会话
- 零依赖: Node.js 18+,无 npm 依赖
⚡ 快速开始
git clone https://github.com/atharvotech/FreeDeepseekAPI-EN.git
cd FreeDeepseekAPI-EN
npm run auth
npm start
npm run auth 会打开授权菜单:
1. 选择选项 1;
2. 在单独的 Chrome 配置文件中登录 DeepSeek;
3. 发送一条简短消息,例如 ok;
4. 返回终端并按 Enter。
npm start 会显示启动菜单:
- 1 — 授权 / 更新 DeepSeek 登录
- 2 — 显示模型和状态
- 3 — 运行代理
- 4 — 退出
如需无菜单的无头/CI 启动:
NON_INTERACTIVE=1 npm start
or
SKIP_ACCOUNT_MENU=1 npm start
默认情况下,服务器监听:
http://localhost:9655
默认情况下,代理只能从本机访问。如需从网络访问,请显式设置主机和单独的代理密钥:
HOST=0.0.0.0 PROXY_API_KEY='replace-with-a-long-random-value' npm start
然后将密钥作为 Authorization: Bearer 传递。如果没有 PROXY_API_KEY,非健康检查端点将保持未认证状态,因此不要将此类实例暴露到网络。
浏览器请求允许来自回环源。如果 UI 从其他地址提供服务,请添加其确切源,以逗号分隔,例如 PROXY_CORS_ORIGINS=https://ui.example.com,http://192.168.1.20:3000。
🪟 Windows 启动
git clone https://github.com/atharvotech/FreeDeepseekAPI-EN.git
cd FreeDeepseekAPI-EN
npm run auth
npm start
如果 Chrome 安装在非标准位置,请显式设置路径:
$env:CHROME_PATH="C:\Program Files\Google\Chrome\Application\chrome.exe"
npm run auth
如果找不到 Chrome,npm run auth 现在会打印适用于 Windows/macOS/Linux 的即用说明,而不是神秘的堆栈跟踪。
🐧 Linux / Chromium 启动
git clone https://github.com/atharvotech/FreeDeepseekAPI-EN.git
cd FreeDeepseekAPI-EN
CHROME_PATH=$(which chromium) npm run auth
npm start
如果 Chromium 的名称不同:
CHROME_PATH=$(which chromium-browser) npm run auth
or
CHROME_PATH=$(which google-chrome) npm run auth
🖥 VPS / 无头启动
服务器上没有 Chrome 时最可靠的流程:
1. 在带有 GUI/Chrome 的家用 PC 上:
npm run auth
2. 将 deepseek-auth.json 复制到 VPS:
scp deepseek-auth.json user@your-vps:/opt/FreeDeepseekAPI/deepseek-auth.json
3. 在 VPS 上,导入/验证文件并设置安全权限:
cd /opt/FreeDeepseekAPI
npm run auth:import -- --input ./deepseek-auth.json
npm run doctor -- --offline
4. 在没有交互式菜单的情况下运行代理:
NON_INTERACTIVE=1 npm start
你不仅可以导入现成的 deepseek-auth.json,还可以导入浏览器 cookie 导出文件:
DEEPSEEK_TOKEN="" npm run auth:import -- --input ./cookies.json
⚠️ 重要: deepseek-auth.json 是访问你的 DeepSeek Web 登录的凭据。不要提交它,不要发布它,请以 0600 权限存储。
🦭 无根 Podman
该容器仅用于非交互式代理启动。请在主机上使用 npm run auth 进行浏览器授权:认证脚本和 deepseek-auth.json 不会被复制到镜像中。
以普通用户身份运行 Podman,不要使用 sudo。
1. 构建本地镜像:
podman build --tag localhost/free-deepseek-api:local --file Containerfile .
2. 通过 Podman secret 传入 DeepSeek 认证和一个单独的代理密钥:
podman secret create --replace free-deepseek-auth ./deepseek-auth.json
printf 'Proxy API key: '
IFS= read -r -s PROXY_API_KEY
printf '\n'
printf '%s' "$PROXY_API_KEY" |
podman secret create --replace free-deepseek-proxy-key -
使用一个长随机密钥。该值会保留在当前 shell 的 PROXY_API_KEY 变量中,以便你可以测试 API;它不会进入镜像或 Podman 命令行。
3. 以最小权限运行容器:
podman run --detach \
--name free-deepseek-api \
--publish 127.0.0.1:9655:9655 \
--secret free-deepseek-auth,target=deepseek-auth.json,uid=1000,gid=1000,mode=0400 \
--secret free-deepseek-proxy-key,target=proxy-api-key,uid=1000,gid=1000,mode=0400 \
--read-only \
--cap-drop=ALL \
--security-opt=no-new-privileges \
localhost/free-deepseek-api:local
在容器内部,NON_INTERACTIVE=1、HOST=0.0.0.0 以及两个 secret 的路径都已预先设置。如果缺少密钥 secret 或其为空,REQUIRE_PROXY_API_KEY=1 将阻止容器启动。在主机上,该端口仅发布在 127.0.0.1 上;如果没有单独的网络防火墙/访问策略,请不要移除该地址。
4. 检查存活状态、账户就绪状态和受保护的端点:
podman healthcheck run free-deepseek-api
curl --fail http://127.0.0.1:9655/readyz
curl --fail \
-H "Authorization: Bearer $PROXY_API_KEY" \
http://127.0.0.1:9655/v1/models
内置健康检查会验证本地 /health(进程是否存活)。如果当前没有 DeepSeek 认证账户准备好处理请求,/readyz 还会额外返回 503。容器诊断:
podman logs free-deepseek-api
podman inspect --format '{{.State.Health.Status}}' free-deepseek-api
停止并移除容器以及保存的 Podman secret:
podman stop free-deepseek-api
podman rm free-deepseek-api
podman secret rm free-deepseek-auth free-deepseek-proxy-key
unset PROXY_API_KEY
轮换认证或代理密钥时,请替换相应的 secret 并重新创建容器,这样行为就不会依赖于 Podman 版本。
🩺 诊断 / doctor
npm run doctor
在没有网络请求的情况下使用 DeepSeek:
npm run doctor -- --offline
doctor 检查:
- 是否找到 deepseek-auth.json / DEEPSEEK_AUTH_DIR;
- JSON 是否有效;
- token、cookie、wasmUrl 是否存在;
- 在 macOS/Linux 上文件权限是否安全(0600);
- 在正常模式下——DeepSeek PoW 端点是否可达。
如果你看到 data.biz_data is null、fetch failed、401/403/429,或者 Hermes/OpenCode 看不到模型——请先运行 npm run doctor。
♻️ 会话复用与聊天重置
FreeDeepseekAPI 不会不必要地为每个 HTTP 请求创建新的 DeepSeek 聊天。其逻辑是:
- 一个 x-agent-session、session 或 user → 一个 DeepSeek 聊天会话;
- 如果会话 ID 已存在——代理会复用它,并通过 parent_message_id 继续链式对话;
- 自动重置会在 TTL、DeepSeek 会话错误或消息链过长时发生;
- 本地历史会作为简短上下文保留,以便新的 DeepSeek 会话可以继续对话;
- 较长的代理请求在发送前受 DEEPSEEK_MAX_PROMPT_CHARS 限制(默认 80,000 字符):任务起始内容、最新的工具结果和工具适配器会被保留;
- 如果客户端已经发送了多轮历史,则不会再次添加本地恢复历史;
- 空响应最多重试 DEEPSEEK_MAX_RETRIES 次(默认 2),并且每次重试都会缩减上下文。
显式设置代理/会话:
curl -X POST http://localhost:9655/v1/chat/completions \
-H "Content-Type: application/json" \
-H "x-agent-session: my-agent" \
-d '{"model":"deepseek-chat","messages":[{"role":"user","content":"Hi"}]}'
查看活动会话:
curl http://localhost:9655/v1/sessions
重置单个会话:
curl -X POST "http://localhost:9655/reset-session?agent=my-agent"
重置所有会话:
curl -X POST "http://localhost:9655/reset-session?agent=all"
为什么聊天仍会出现在 DeepSeek Web 中:该代理通过内部 Web Chat API 工作,而 DeepSeek 会在其侧存储真实的聊天会话。这对 Web 代理来说是正常的。会话复用的目的是避免不必要地创建新聊天,并且仅在链式对话过期/损坏时进行干净的重置。
👥 多账号池
你可以附加多个认证文件。正确的模型是:每个代理/会话使用粘性账号——代理不会在活跃的 DeepSeek 会话内切换账号。如果某个账号收到 401/403/429 并进入冷却,会话会被安全重置,新的请求可以转移到另一个可用账号。
选项 1——包含认证文件的目录:
mkdir -p accounts
cp deepseek-auth-main.json accounts/main.json
cp deepseek-auth-backup.json accounts/backup.json
chmod 600 accounts/*.json
DEEPSEEK_AUTH_DIR=./accounts NON_INTERACTIVE=1 npm start
选项 2——文件列表:
DEEPSEEK_AUTH_PATH="./accounts/main.json,./accounts/backup.json" NON_INTERACTIVE=1 npm start
账号池的工作方式:
- 新的 agent/会话会轮询获得一个可用账户;
- 选中的账户会固定到该会话(sticky);
- 遇到 401、403、429 时,账户进入冷却;
- 如果某个会话的粘性账户处于冷却状态,则重置旧的 DeepSeek 会话,以免持续冲击一个被限流/已过期的账户;
- 账户状态可在 /health 中查看,不暴露认证文件路径,也不暴露文件名;
- 认证文件必须以 0600 权限存储。
配置冷却:
DEEPSEEK_ACCOUNT_COOLDOWN_MS=600000 npm start
🔑 控制台认证思路
PR #3 中的密码流程可以实现,但更安全的做法是不存储密码,也不将其设为默认方式。一个合理的实现:
1. npm run auth:console 通过隐藏提示要求输入邮箱/手机号和密码。
2. 密码仅保留在进程内存中,绝不写入文件/日志/历史记录。
3. 脚本通过 fetch/CDP 重复 Web 登录流程:获取验证码/验证挑战,给用户一个链接/代码,等待确认。
4. 登录成功后,仅保存标准格式的 deepseek-auth.json。
5. 如果 DeepSeek 要求验证码/2FA——脚本会如实提示“打开链接,通过验证,按 Enter”,而不是试图绕过保护。
6. 对于 VPS,auth:console --no-save-password --output deepseek-auth.json 模式更好。
最小安全 MVP:控制台认证仅交互式,不使用环境变量密码。可接受的自动化变体:DEEPSEEK_EMAIL=... npm run auth:console,但密码仍通过隐藏提示输入。
✅ 验证是否正常工作
curl http://localhost:9655/
curl http://localhost:9655/v1/models
curl http://localhost:9655/v1/model-capabilities
如果一切正常,/health 会返回服务器状态、支持的别名列表以及 config_ready: true。
🧪 使用示例
Chat Completions
curl -X POST http://localhost:9655/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat",
"messages": [{"role": "user", "content": "Hi! Answer in one sentence."}],
"stream": false
}'
Reasoning
curl -X POST http://localhost:9655/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-reasoner",
"messages": [{"role": "user", "content": "Answer briefly: why is the sky blue?"}],
"stream": false
}'
对于推理模型,API 会将思维链与最终答案分开返回:
- 非流式:choices[0].message.reasoning_content
- 流式:choices[0].delta.reasoning_content
- 用量:usage.completion_tokens_details.reasoning_tokens
reasoning_tokens 是基于提取出的 DeepSeek Web THINK 文本的近似估算,因为 Web 流不提供官方的逐推理 token 用量。
Web search
curl -X POST http://localhost:9655/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat-search",
"messages": [{"role": "user", "content": "查找一条关于 DeepSeek 的新鲜事实,并简要回答。"}],
"stream": false
}'
流式传输
curl -N -X POST http://localhost:9655/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat",
"messages": [{"role": "user", "content": "写一个简短的笑话。"}],
"stream": true
}'
Anthropic Messages API
curl -X POST http://localhost:9655/v1/messages \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat",
"max_tokens": 512,
"messages": [{"role": "user", "content": "只回答 OK"}],
"stream": false
}'
对于 Claude Code,你可以直接指向后端:
export ANTHROPIC_BASE_URL="http://127.0.0.1:9655"
export ANTHROPIC_AUTH_TOKEN="dummy-key"
export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1
claude --model deepseek-chat
OpenAI Responses API
curl -X POST http://localhost:9655/v1/responses \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat",
"input": "只回答 OK",
"stream": false
}'
工具调用
FreeDeepseekAPI 接受:
- OpenAI tools;
- Anthropic tools;
- Responses API 函数工具。
代理会要求 DeepSeek 返回严格的 JSON 工具调用,但也知道如何解析回退格式:
- TOOL_CALL:
- 带有显式 tool_call、tool_calls 或 function_call 信封的围栏 JSON
- ...
- DeepSeek DSML(...)以及 Web 变体
🧠 模型
GET /v1/models 仅返回当前已验证且可通过此代理正常工作的别名。
可用别名
| 别名 | Web 模式 | 推理 | Web 搜索 | 备注 |
| --- | --- | --- | --- | --- |
| deepseek-chat | Fast / default | 否 | 否 | 基础聊天 |
| deepseek-v3 | Fast / default | 否 | 否 | 兼容性别名 |
| deepseek-default | Fast / default | 否 | 否 | 兼容性别名 |
| deepseek-reasoner | Fast / default | 是 | 否 | thinking_enabled=true |
| deepseek-r1 | Fast / default | 是 | 否 | R1 兼容别名 |
| deepseek-chat-search | Fast / default | 否 | 是 | Web 搜索 |
| deepseek-default-search | Fast / default | 否 | 是 | Web 搜索别名 |
| deepseek-reasoner-search | Fast / default | 是 | 是 | 推理 + 搜索 |
| deepseek-r1-search | Fast / default | 是 | 是 | R1 兼容 + 搜索 |
| deepseek-expert | Expert / expert | 否 | 否 | Expert 模式 |
| deepseek-v4-pro | Expert / expert | 是 | 否 | Expert + 推理 |
完整映射:
curl http://localhost:9655/v1/model-capabilities
根据 DeepSeek V4 预览版官方页面,deepseek-chat 和 deepseek-reasoner 目前路由到 deepseek-v4-flash 的非思考/思考模式。chat.deepseek.com 的直接流不会暴露确切的检查点名称(model: ""),因此代理同时记录了网页模式(default / Fast)和当前官方路由(DeepSeek-V4-Flash)。
当前 DeepSeek Web 远程配置输出显示以下网页模式:
- default / UI Fast — 可用;支持 thinking_enabled 和 search_enabled。
- expert / UI Expert — 通过当前网页契约(x-client-version=2.0.0)可用,并支持 thinking_enabled。/v1/models 暴露不带推理的 deepseek-expert 以及作为 Expert + 推理的 deepseek-v4-pro。
- vision / UI Recognition — 在远程配置中可见,但直接 Web API 当前返回 backend_err_by_model(Vision is temporarily unavailable)。因此 deepseek-vision 从 /v1/models 中隐藏。
根据远程配置,Expert 的搜索不可用,因此 deepseek-expert-search 仍不受支持。
🔌 端点
| 方法 | 路径 | 用途 |
| --- | --- | --- |
| GET | / 或 /health | 代理状态 |
| GET | /v1/models | 可用 OpenAI 兼容别名的列表 |
| GET | /v1/model-capabilities | 别名、真实模型、能力的完整映射 |
| POST | /v1/chat/completions | OpenAI 兼容的 Chat Completions |
| POST | /v1/messages | Anthropic Messages API 兼容层 |
| POST | /v1/responses | OpenAI Responses API 兼容层 |
| GET | /v1/sessions | 活动的本地代理会话 |
| POST | /reset-session?agent= | 重置单个会话 |
| POST | /reset-session?agent=all | 重置所有会话 |
🖥 Open WebUI
Docker 中 Open WebUI 的基础 URL:
http://host.docker.internal:9655/v1
不使用 Docker 的本地启动:
http://localhost:9655/v1
如果未设置 PROXY_API_KEY,你可以使用任意 API 密钥。如果设置了该密钥,客户端必须准确传递该密钥——代理在授予对模型、会话和补全的访问权限之前会检查 bearer token。
🔐 更新登录
npm run auth
npm start
如果 DeepSeek 开始返回 401、403,或要求新的 PoW/会话——请重新运行 npm run auth 并更新保存的浏览器会话。
本地授权文件不得提交到 GitHub:
- deepseek-auth.json
- .chrome-profile-deepseek/
- .env
它们已被添加到 .gitignore。
🧪 测试
项目的语法检查:
npm test
针对正在运行的本地代理的实时冒烟测试:
BASE_URL=http://127.0.0.1:9655 MODEL=deepseek-chat npm run test:live
📌 项目状态
FreeDeepseekAPI-EN 是一个用于本地使用和集成的实验性网页聊天代理。它依赖于当前的 DeepSeek Web Chat 契约,因此当 DeepSeek 做出更改时,认证/会话逻辑或模型映射可能需要更新。
如果某些功能停止工作:
1. 通过 npm run auth 更新登录;
2. 检查 /v1/model-capabilities;
3. 在新的会话中重试请求;
4. 如果问题仍然存在——DeepSeek 可能已经更改了其内部 Web API。
用 ❤️ 在印度制作 | Atharvotech:由逻辑驱动。由 AI 赋能。为你而建。扫码进群