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工具, 特征检测, 逆向工具