sums001/Deepseek-API
GitHub: sums001/Deepseek-API
该项目通过逆向 DeepSeek 网页聊天界面,将其免费账户转化为本地可调用的 OpenAI 兼容 API,免去 API 密钥与计费限制。
Stars: 164 | Forks: 27
# DeepSeek API:由 DeepSeek 提供支持的免费 LLM API
**使用您自己的 DeepSeek 账户。** 无需 API key,无需额度,无需付费套餐:它将 [chat.deepseek.com](https://chat.deepseek.com) 上的免费聊天转变为可以从代码中调用的 API。
您可以通过两种方式使用它:
- 🐍 **作为 Python 库:** 只需调用 `client.chat("Hi")`。支持流式传输和多轮对话。
- 🔌 **作为本地兼容 OpenAI 的 API:** 在 `http://localhost:8000/v1` 上运行一个使用 OpenAI 格式的服务器,因此官方的 `openai` SDK(以及任何兼容 OpenAI 的应用)都可以直接插入使用,只需将 `localhost` 替换为 OpenAI 即可。
您只需使用您的 DeepSeek 账户在浏览器中登录一次;此后您的会话将被保存并自动刷新。
## 目录
- [为什么要使用它?](#why-use-this)
- [环境要求](#requirements)
- [设置(2 分钟)](#setup-2-minutes)
- [用法 1:在 Python 中(无需服务器)](#usage-1-in-python-no-server)
- [用法 2:作为兼容 OpenAI 的服务器](#usage-2-as-an-openai-compatible-server)
- [命令行](#command-line)
- [人工验证与工作量证明(自动)](#human-check--proof-of-work-automatic)
- [模型、DeepThink 与网络搜索](#models-deepthink--web-search)
- [并发](#concurrency)
- [速率限制](#rate-limiting)
- [项目结构](#project-layout)
- [注意事项与限制](#notes--limitations)
- [许可证](#license)
## 为什么要使用它?
- **免费:** 使用您正常登录的 DeepSeek 账户,无 API 计费。
- **直接替换 OpenAI:** 将任何 OpenAI 客户端指向 `localhost` 即可正常运行。
- **完整的 DeepSeek 工具集:** 选择快速或专家模型,并根据每个请求开启 DeepThink 推理和网络搜索。
- **流式传输 + 对话:** 逐个 token 输出,并通过 `conversation_id` 管理多轮对话线程。
## 环境要求
- **Python 3.9+**
- 一个 **DeepSeek 账户**(您在 [chat.deepseek.com](https://chat.deepseek.com) 上使用的免费账户即可)
- 可在 Windows、macOS 和 Linux 上运行
## 设置(2 分钟)
```
# 克隆项目
git clone
cd "Deepseek-API"
```
**2. 创建并激活虚拟环境**
在 **macOS / Linux** 上:
```
python3 -m venv venv
source venv/bin/activate
```
在 **Windows** (PowerShell) 上:
```
python -m venv venv
venv\Scripts\Activate.ps1
```
**3. 安装依赖并登录**
```
# 安装依赖
pip install -r requirements.txt
# 安装 Playwright 所需的浏览器(一次性)
playwright install chromium
# 登录一次:浏览器会打开,登录你的 DeepSeek 账户
python -m deepseek.auth
```
登录窗口将打开,以便您手动登录并完成一次人工验证。之后,您的会话(bearer token + cookies)将保存在 `session/` 下(已被 git 忽略,绝不共享),并在每次运行时重复使用——缓存的会话会自动刷新,因此您的首次请求会立即生效。
## 用法 1:在 Python 中(无需服务器)
如果您的代码已经是 Python,这是最简单的方法。
```
from deepseek import DeepSeekClient
client = DeepSeekClient() # loads your signed-in session
# 获取完整回复
reply = client.chat("Say hello in one short sentence.")
print(reply.text)
# 继续同一个对话 — 传回 id
reply2 = client.chat("And now in French?", conversation_id=reply.conversation_id)
print(reply2.text)
# 在输入时流式传输答案
for chunk in client.stream("Tell me a short joke"):
print(chunk, end="", flush=True)
```
`chat()` 返回完整文本以及一个 `conversation_id`;将该 id 传回以继续对话线程,或者省略它以开始新对话。`stream()` 会逐段返回回复。
👉 更多:[examples/01_direct_chat.py](examples/01_direct_chat.py)、[02_direct_conversation.py](examples/02_direct_conversation.py)、[03_direct_stream.py](examples/03_direct_stream.py)
## 用法 2:作为兼容 OpenAI 的服务器
启动一个使用 OpenAI API 格式的本地服务器,以便现有的 OpenAI 工具和 SDK 无需更改即可工作。
```
python app.py
# -> 在 http://127.0.0.1:8000 上的 DeepSeek OpenAI 兼容 API
```
然后将任何 OpenAI 客户端指向它(SDK 需要 API key,但会被忽略):
```
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="unused")
resp = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": "Hello!"}],
)
print(resp.choices[0].message.content)
```
或者使用普通的 HTTP / `curl` 调用它:
```
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "deepseek-chat", "messages": [{"role": "user", "content": "Hello!"}]}'
```
**端点**
| 方法 | 路径 | 描述 |
| --- | --- | --- |
| `POST` | `/v1/chat/completions` | 聊天(支持 `"stream": true`,以及可选的 `"conversation_id"`、`"thinking"`、`"search"`) |
| `GET` | `/v1/models` | 列出可用模型 |
| `GET` | `/healthz` | 健康检查(免受速率限制) |
👉 更多:[examples/04_server_http.py](examples/04_server_http.py)、[examples/05_server_stream.py](examples/05_server_stream.py)、[examples/06_server_openai_sdk.py](examples/06_server_openai_sdk.py)
## 命令行
```
python -m deepseek.auth # sign in and save the session
```
## 人工验证与工作量证明(自动)
DeepSeek 的聊天功能受两道关卡保护,它们均已为您自动处理:
- **AWS WAF 人工验证:** 访问需要已登录的浏览器会话,并且该会话已通过“验证您是人类”的检查。`python -m deepseek.auth` 会打开一个真实的浏览器,以便您登录并完成一次验证;生成的 token + cookies 会缓存在 `session/` 下,并在每次请求时重复使用。
- **工作量证明:** 每次补全都受 PoW 挑战的限制。桥接程序通过在 `wasmtime` 沙箱内运行 DeepSeek 自己的 `sha3_wasm_bg.wasm` 模块(与浏览器加载的模块相同)来解决此问题,因此您无需进行任何手动操作。
缓存的会话可重用约 6 小时,并在可能的情况下从您保存的 Chrome 配置文件中无头刷新;只有完全过期时才会要求您重新回到浏览器进行操作。
## 模型、DeepThink 与网络搜索
`model` 名称决定由**哪个模型**作答。DeepThink 和网络搜索**不是**模型——它们是您在每个请求中传递的独立开关。
| 模型 | DeepSeek 模式 | 说明 |
| --- | --- | --- |
| `deepseek-chat` | 快速 | 快速的默认模型 |
| `deepseek-expert` | 专家 | 更强大,但速度较慢 |
在请求体中传入 `thinking: true`(DeepThink 推理)和/或 `search: true`(网络搜索)——或者通过 OpenAI SDK 的 `extra_body` 传入:
```
resp = client.chat.completions.create(
model="deepseek-expert",
messages=[{"role": "user", "content": "What changed in the news today?"}],
extra_body={"thinking": True, "search": True},
)
```
`conversation_id`、`thinking` 和 `search` 是非 OpenAI 的额外参数。对话线程的模型在创建时即固定,因此在恢复会话时,`model` 不能与 `conversation_id` 结合使用。未知的模型名称将返回 `404`(不会进行静默回退)。请参阅 [server/config.py](server/config.py)。
## 并发
该服务器在同一个共享客户端背后桥接了**单个**已登录的 DeepSeek 账户。由于 PoW 解算器的 `wasmtime` 存储不可重入,因此上游调用是**串行化**的:并行的 HTTP 请求将在锁之后排队并逐一运行(请参阅 [server/api.py](server/api.py))。这是有意为之的——吞吐量是顺序的,而非并行的。请保持较低的并发正在处理请求数量,请不要恶意频繁请求您的账户。
## 速率限制
在串行化的基础上,该桥接程序使用一个无依赖的滑动窗口限制器([server/ratelimit.py](server/ratelimit.py))强制执行了自定的速率限制:它限制了**每个客户端 IP** 接受的请求数,并在您超限时返回标准的 `429` + `Retry-After`。`/healthz` 不受此限制。
| 环境变量 | 默认值 | 含义 |
| --- | --- | --- |
| `RATE_LIMIT_PER_MINUTE` | `30` | 每个客户端 IP 每分钟接受的请求数 |
```
RATE_LIMIT_PER_MINUTE=60 python app.py # raise it
```
**在客户端,请使用指数退避。** 如果您以逐渐增加的延迟(例如 1秒、2秒、4秒)进行重试,短暂的 `429` 错误就会消除。官方的 `openai` SDK 会自动执行此操作并遵循 `Retry-After`;如果您使用普通的 HTTP,请自行添加几次重试。
## 项目结构
| 路径 | 作用 |
| --- | --- |
| [deepseek/](deepseek/) | 核心库:`DeepSeekClient`、认证/浏览器登录([auth.py](deepseek/auth.py))、HTTP 驱动程序([client.py](deepseek/client.py))和 PoW 解算器([pow.py](deepseek/pow.py)) |
| [server/](server/) | 兼容 OpenAI 的 FastAPI 服务器 |
| [examples/](examples/) | 针对每项功能的可运行示例([examples/README.md](examples/README.md)) |
| [app.py](app.py) | 启动服务器 |
## 注意事项与限制
- **登录一次,然后重复使用。** 缓存的会话会自动刷新;只有在完全过期时才需要重新登录。
- **请合理使用。** 请适度使用,不要发送垃圾信息或使用自动化批量请求恶意轰炸。
- **没有真实的 token 计数。** 响应中的 `usage` 是粗略的约 4 个字符/token 的估算值。
- **大多数 OpenAI 参数被接受但会被忽略**(`temperature`、`top_p`、`max_tokens`);只有 `model`、`messages`、`stream`、`conversation_id`、`thinking` 和 `search` 会起作用。
- **视觉功能已推迟。** 它需要尚未构建的图像上传底层逻辑支持。
- **您的会话是私密的。** `session/` 中的所有内容(cookies + token)都保留在您的本地机器上,并且已被 git 忽略。
## 许可证
在 [MIT 许可证](LICENSE) 下发布。由于这是一个非官方项目,您仍需对遵守 DeepSeek 的服务条款自行承担责任。
标签:AI工具, 特征检测, 逆向工具