afterburnerr/FreeDeepSeekAPI
GitHub: afterburnerr/FreeDeepSeekAPI
一个兼容 OpenAI 接口的本地代理,让开发者无需 API Key 即可通过 chat.deepseek.com 的免费 Web API 调用 DeepSeek 模型。
Stars: 1 | Forks: 0
# FreeDeepSeekAPI
一个兼容 **OpenAI 的本地代理**,部署在 [chat.deepseek.com](https://chat.deepseek.com) 之前。可将任意 OpenAI SDK 或 `curl` 脚本直接对接 DeepSeek 的免费 Web API — 代理会为你处理工作量证明挑战、AWS WAF Cookie 以及流式传输格式的各种细节。
```
┌─────────────────────────────────────────┐
┌──────┐ │ POST /v1/chat/completions (OpenAI) │ ┌────────────┐
│ your │───▶│ POST /admin/refresh-cookies (admin) │───▶│ chat.deep │
│ app │ │ GET /v1/models │ │ seek.com │
└──────┘ │ │ └────────────┘
│ session pool, POW solver, │
│ auto cookie refresh (Chrome+xvfb) │
└─────────────────────────────────────────┘
```
## 功能特性
- **兼容 OpenAI** 的 `/v1/chat/completions` 接口 — 支持阻塞式和 SSE 流式传输。
- 支持两种 DeepSeek 模型:
- `deepseek-chat` — V3,无推理
- `deepseek-reasoner` — R1,含思维链追踪
- **带轮换的会话池** — 每次 DeepSeek 补全通常需要先调用 `create_chat_session`。我们为每个 `(token, thinking, search)` 元组维护一个会话,在 `DEEPSEEK_SESSION_REUSE_LIMIT` 次调用后进行轮换。摊销了 RTT 并保持模型的上下文清洁。
- **正确的系统提示处理** — DeepSeek 的 Web API 没有 `system` 角色;我们将系统消息前置到提示中,使 SDK 行为与 OpenAI 一致。
- **用于自我修复的管理端点** — `POST /admin/refresh-cookies` 重新运行基于 Chrome 的 WAF 绕过并清除会话缓存;`GET /admin/health` 暴露 Cookie 新鲜度和池大小。通过与管理 DeepSeek 代理相同的 Bearer Token 进行认证。
- **支持两种 SSE 格式** — 旧版 OpenAI 风格的 `choices[].delta` 和较新的 JSON-Patch 操作(`{"p":"response/content","o":"APPEND","v":"tok"}`)。如果 DeepSeek 再次切换格式,只需修改 `dsk/api.py` 中的 `_iter_parsed` 即可适配新格式。
- **内置 Chrome + Xvfb 的 Docker 镜像** — 无需任何主机配置即可在无头服务器上刷新 Cookie。
- 通过标准库 `logging` 模块记录日志,可通过 `LOG_LEVEL=DEBUG` 配置。
## 快速开始
### 1. 获取你的 DeepSeek 会话 Token
1. 打开 并登录。
2. DevTools(F12)→ 控制台 → 输入 `JSON.parse(localStorage.getItem("userToken")).value`
3. 复制约 60 个字符的字符串。
### 2a. 使用 Docker 运行(推荐用于服务器)
```
git clone https://github.com/afterburnerr/FreeDeepSeekAPI.git
cd FreeDeepSeekAPI
cp .env.example .env
$EDITOR .env # set DEEPSEEK_AUTH_TOKEN
docker build -t freedeepseekapi .
docker run -d --name deepseek \
--restart unless-stopped \
-p 127.0.0.1:8080:8080 \
--env-file .env \
--shm-size=512m \
-v deepseek-cookies:/app/dsk \
freedeepseekapi
# 冒烟测试
curl http://127.0.0.1:8080/v1/models
```
该镜像内置 Chrome + Xvfb + DrissionPage,因此 `POST /admin/refresh-cookies` 在任何无头主机上开箱即用。
### 2b. 本地运行(本地/开发环境)
```
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env && $EDITOR .env
python main.py
# -> 监听 http://127.0.0.1:8080
```
若要在主机上刷新 Cookie,还需要 Chrome 和一个 X 显示器(真实的或 `xvfb-run`)。`./refresh_cookies.sh` 会处理其余事项。
### 3. 使用
```
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8080/v1", api_key="unused")
resp = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": "Hello!"}],
)
print(resp.choices[0].message.content)
```
或通过 curl:
```
curl http://127.0.0.1:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-chat",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": false
}'
```
流式传输与 OpenAI 完全一致(`"stream": true`,SSE `data:` 帧)。
### 4. 验证
```
python smoke_test.py
# 或
TOKEN="$DEEPSEEK_AUTH_TOKEN" BASE=http://127.0.0.1:8080 python smoke_test.py
```
## API 参考
| 方法 | 路径 | 认证 | 用途 |
|---|---|---|---|
| `POST` | `/v1/chat/completions` | Bearer 或 `DEEPSEEK_AUTH_TOKEN` 环境变量 | 兼容 OpenAI 的补全接口(流式 + 非流式)。额外的非 OpenAI 字段:`search_enabled`(布尔值)。 |
| `GET` | `/v1/models` | — | 列出 `deepseek-chat` 和 `deepseek-reasoner`。 |
| `POST` | `/admin/refresh-cookies` | Bearer = `ADMIN_SECRET`(回退:`DEEPSEEK_AUTH_TOKEN`) | 运行 `refresh_cookies.sh`,清除会话/客户端缓存。 |
| `GET` | `/admin/health` | Bearer = `ADMIN_SECRET` | Cookie 状态 + 池大小。 |
非 OpenAI 响应字段:每个 `/v1/chat/completions` 响应包含一个 `deepseek_session` 对象,其中包含 `chat_id`、`use`、`limit`,以便调用方判断当前使用的是新会话还是复用会话。
## 配置
所有配置均通过环境变量完成;完整列表及默认值请参阅 [`.env.example`](.env.example)。
关键配置项:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
| `DEEPSEEK_AUTH_TOKEN` | *(空)* | 客户端未携带 `Authorization` 时的回退 Token。 |
| `DEEPSEEK_SESSION_REUSE_LIMIT` | `30` | 每个 DeepSeek 聊天会话在轮换前的补全次数。 |
| `DEEPSEEK_SEARCH_DEFAULT` | `false` | 请求中未指定 `search_enabled` 时的默认值。 |
| `ADMIN_SECRET` | = `DEEPSEEK_AUTH_TOKEN` | `/admin/*` 端点的 Bearer 密钥。 |
| `HOST` / `PORT` | `127.0.0.1` / `8080` | 在 Docker 中通常设置 `HOST=0.0.0.0`。 |
| `LOG_LEVEL` | `INFO` | `DEBUG` 级别会显示流式解析详情。 |
## Cookie 刷新 — 完整说明
DeepSeek 的边缘防护(之前是 Cloudflare,现在是 AWS WAF)会发放一个短期的放行 Cookie。当它过期后,每次补全都会返回空响应体或 403 挑战页面。
本仓库提供两种恢复路径:
1. **`./refresh_cookies.sh`** — 启动一个一次性的 `dsk/server.py` 绕过服务器,通过 DrissionPage + Chrome 解决挑战,将结果写入 `dsk/cookies.json` 后退出。适用于任何安装了 Chrome 和显示器(物理显示器或 `xvfb-run`)的主机。Docker 镜像设置了 `DOCKERMODE=true` 并内置了 Xvfb,因此无需额外配置。
2. **`POST /admin/refresh-cookies`** — 在代理进程内运行 `refresh_cookies.sh` 并清除其缓存,因此只有 HTTP 访问权限的调用方(例如另一个容器中的 Telegram 机器人)也可以远程触发恢复。
两种方式完成后都会刷新 `dsk/_session_pool` 和 `dsk/_client_cache`,使下一次补全从全新状态开始。
## 架构
```
main.py FastAPI app; env config; request → session pool
│
└── dsk/ "deepseek4free" core
├── api.py DeepSeekAPI client (POW + streaming parser)
├── pow.py Proof-of-work challenge solver (wasm)
├── wasm/sha3.wasm WASM module for POW
├── bypass.py CLI wrapper around server.py → cookies.json
├── server.py FastAPI service that uses DrissionPage+Chrome
├── CloudflareBypasser.py DrissionPage-based CF/WAF solver
└── cookies.json (runtime, .gitignored)
```
## 故障排除
**`ответ AI не распознан` / 空补全。**
Cookie 已过期。调用 `POST /admin/refresh-cookies` 或运行 `./refresh_cookies.sh`。
**`401 Invalid or expired authentication token`。**
你的 `DEEPSEEK_AUTH_TOKEN` 已过期。请从 chat.deepseek.com 的 localStorage 重新获取。
**`Warning: curl-cffi version mismatch`。**
DeepSeek 通过浏览器模拟 `chrome120`,而 `curl-cffi==0.8.1b9` 可生成该指纹。较新版本有时会失败。请锁定该版本。
**Docker 中 Chrome 崩溃。**
增大共享内存:`--shm-size=1g`(或在 compose 中设置 `shm_size: "1g"`)。
**`Failed to bypass edge protection after multiple attempts`。**
自动刷新已触发但仍然失败。请检查 `/tmp/kwork-bot-logs/bypass-server.log` / 容器标准输出。常见原因:VPS 所在的地区被 DeepSeek 屏蔽 — 请尝试更换区域。
## 许可证
MIT(参见 [LICENSE](LICENSE))。保留对 `deepseek4free` 和 `FreeDeepSeekAPI` 的上游归属。
## 免责声明
**使用本项目前请阅读 [DISCLAIMER.md](DISCLAIMER.md)。**
简要说明:
- 本项目使用 chat.deepseek.com 的**非官方** Web API,**与 DeepSeek 无任何关联**。
- 使用本项目**可能违反 DeepSeek 的服务条款**,且 **DeepSeek 可能随时封禁你的账户**而不另行通知。
- DeepSeek 可能随时更改或移除该 API,导致本项目不可用且不另行通知。
- 本项目**按原样提供**,**不提供任何担保**,对账户被封、IP 被禁、输出错误、经济损失或任何其他后果**不承担任何责任**。
- 请使用一个你可以接受的**一次性 DeepSeek 账户**。
- 不得将本项目用于商业转售 DeepSeek 访问权限、垃圾信息、虚假信息或任何在你所在司法管辖区属于非法的行为。
如果你运行此软件,风险自负。
标签:AI接口, API代理, AV绕过, Chrome, Cookie刷新, cookie管理, DeepSeek, deepseek-chat, deepseek-reasoner, DLL 劫持, Docker, FastAPI, Flask, LLM, OpenAI兼容, POW挑战, Python, SSE, system prompt, Unmanaged PE, WAF绕过, web API, Xvfb, 云资产清单, 代理, 会话池, 会话管理, 免费API, 大语言模型, 安全防御评估, 无后门, 无文件攻击, 本地代理, 模型代理, 流式传输, 浏览器自动化, 消息队列, 熵值分析, 生产部署, 管理端点, 系统提示, 自愈, 请求拦截, 逆向工具, 逆向工程