内容
项目横幅://github.com/E-Rock-Lab/2API/blob/6c825632520652e20adbabf9dde55d37b7e1cfa0/Banner.png)
<div align="center">
GPT-Web2API
ChatGPT 转化为 API API 密钥。牌提取。无需解决。**
一 Chrome 浏览器,登录,并暴露一个与 兼容的 API + MCP 服务器。
[](https://github.com/Elephant-Rab/ChatGPT-Web/actions/workflows/ci.yml)
[](https://github.com/Elephant-Rock-Lab/ChatGPT-Web2API/releases)
[](LICENSE)
[
[](https://github.com/Elephant-Rock-Lab/ChatGPT-Web2API/actions)
</div## 为什么存在
您ChatGPT Plus ,但希望以编程它:
- **构建 AI 代理**,(模型上下文协议 ChatGPT 聊天
- **使用 OpenAI Python SDK**,无需单独的 API 密钥即可访问您的 帐户
- **访问 ChatGPT 项目**,以实现持久记忆和自定义指令
- **从代码管理记忆、对话和项目**
向代理需要令牌提取、哨兵挑战 cookie 管理。而这一个 **驱动一个真正的 Chrome —— 自动处理反Turnstile、Po## 演示bash
$ pip install-web2api
-web2api
在端口 9222 上启动
✓ chatgpt.com...
✓ 就绪于 http://localhost:8080
$ curl -://localhost:8081/chat/completions -H "Content-Type/json" \
-d '{"model":"auto","role":"user","content":"What is 8+"}]}'
{"message":{"content":"7 = 15"},"finish_reason":"stop"}```python
# Open SDK — 直接替换
ai import Openclient = OpenAI(base://localhost:1", apinot-needed")
print(client.chat.completions.create(
auto",
messagesrole": "user",": "What is7?"}]
0].message.content)
# → "87 = 15"
```
## 工作原理
```
──────┐ OpenAI API ┌┐ CD┌──────────────│ 您的 ───────────── API 服务器 ───────► │ │
│ SDK / curl │ ────── │ 或 MCP◄──────── │gpt.com │
MCP 客户端 │ / SSE │ │ 事件 (已登录└──────────────┘ └──────────────┘ └──────────────┘
```
代理类型消息,点击发送,并读取响应 —— 就像人类一样。浏览器透明地处理所有反机器人挑战。
## 快速入门
```bash
pip install chatgpt-web2# 启动 — 打开 Chrome运行时等待登录-web2 然后使用它 http://localhost:8080/v1/chat/completionsH "Content application/json" \
d '{"model":"auto","messages":[{"role":"user":"What is 2"}]} → {"choices":[{"message":"4"}}]}
。**一次次命令,一个端## 您获得的内容 🌐 与 Open兼容的 REST APIapi.openai.com直接替换:
```python
from openai import
client = OpenAI(base_url="http://localhost:8080/v1", api_key="not-needed")
response = client.chat.completions.create(
model="auto",
messages=[{"role": "user", "content": "Hello!"}],
stream=True,
)
for chunk in response:
print(chunk.choices[0].delta.content or "", end="")
```
### ⏱️ 速率限制和代理重试
ChatGPT 偶尔会显示一个“请求过多”的弹出窗口,当对话被快速访问时。ChatGPT-Web2API 将其从静默失败转换为**实用、代理友好的信号** —— 因此自主工作流会暂停并恢复,而不是中断。
**默认透明。** 当弹出窗口出现时,服务器会关闭它(单击“知道了”)并以指数退避重试您的请求 —— 最多 3 次尝试。*瞬时* 限制是不可见的:您的代理会收到一个正常的成功响应,永远不会知道它发生了。
**当它持续时,提供一个干净的暂停信号。** 如果限制在所有重试后仍然存在,服务器会显示一个**标准的 OpenAI `429`**,每个主要代理框架都知道如何处理 —— **无需客户端集成**:
```http
HTTP/1.1 429 请求过多
重试后:60
{"error": {"type": "rate_limit_exceeded", "code": "rate_limit_exceeded", ...}}
```
OpenAI SDK、LangChain、LlamaIndex 和类似框架默认自动重试 `429` + `Retry-After`。
**MCP 客户端**(Claude Desktop、Cursor)以语义方式获得相同的信号:一个带有 `isError=True` 和机器可读 `structuredContent` 有效载荷的 `CallToolResult`,代理可以读取它以决定“暂停,然后重试此工具”:
```json
{"rate_limited": true, "retry_after": 60, "error": "rate_limit_exceeded"}
```
> **流式注意:** 429 可以在流式传输开始前发送(预检),但在流式传输中出现 *(在 200 提交后)* 会作为内联 `[Error: rate_limit_exceeded — retry in Ns]` 分片显示,因为此时无法更改 HTTP 状态。非流式请求不受影响。
### 🩺 故障排除 API/UI 偏移
ChatGPT 随着时间的推移会更改其 Web API,这可能会静默地破坏驱动程序函数(单元测试模拟无法检测到这一点)。ChatGPT-Web2API 配备了一个**反应性诊断**,它在函数中断时捕获证据,以及一个 `doctor` 命令,该命令自动发现中断并打印证据以进行快速修复。
**启用捕获** (默认关闭),以记录实际发生的中断:
```bash
W2A_DIAGNOSE=1 chatgpt-web2api start
```
当函数返回损坏的形状时,会将一个经过编辑的工件写入 `~/.chatgpt-web2api/diagnostics/<function>-<timestamp>-<seq>.json`,其中包含确切的请求、实时响应、预期与实际的不匹配(已密)。
** + 诊断:
chatgpt-web2api doctor # 哪些函数有捕获的中断?
chatgpt-web2api doctor create_project# 打印一个函数的捕获证据
chatgpt-web2api doctor --verify get_models # 重新运行一个读取函数以测试修复
```
`doctor` (无参数)**自动发现** 哪些函数已损坏 —— 无需人类命名它们。然后它会打印 AI 编码代理(或您)读取以提出修正的有效载荷/选择器/解析的证据。**验证** 在提交之前确认读取路径的修复。
### 🤖 MCP 服务器(适用于 AI 代理的 16 种工具)
将 ChatGPT 公开给 Claude Desktop、Cursor、Craft Agent 或任何 MCP 客户端:
```json
{
"mcpServers": {
"chatgpt": {
"command": "chatgpt-web2api-mcp",
"args": ["--cdp-port", "9222"]
}
}
}
```
**16 种工具** 使代理完全控制:
| 工具 | 功能 |
|------|-------------|
| `chat_completion` | 发送消息,获取响应(多轮,流式) |
| `list_models` | 17 个实时模型 slug(GPT-5.5、5.4 Thinking 等) |
| `list_projects` | 具有持久记忆的 ChatGPT 项目 |
| `create_project` | 创建具有专用记忆的隔离工作区 |
| `delete_project` | 永久删除项目(需要权限:`W2A_ENABLE_DESTRUCTIVE`) |
| `list_conversations` | 最近的聊天,分页 |
| `get_conversation` | 完整的消息历史 |
| `archive_conversation` | 存档/取消存档(可逆) |
| `delete_conversation` | 永久删除 |
| `list_memories` | ChatGPT 记住的事实(测试中发现 41 个) |
| `create_memory` | 告诉 ChatGPT 记住某些内容 |
| `delete_memory` | 删除记忆 |
| `list_gpts` | 发现自定义 GPT |
| `chat_with_gpt` | 与特定的自定义 GPT 聊天 |
| `update_project_instructions` | 更改项目系统提示 |
| `list_project_files` | 项目知识库中的文件 |
每个工具都包含丰富的领域知识描述、Pydantic 验证的输入、结构化输出模式和适当的 `ToolAnnotations` —— 代理无需提示即可了解**如何**和**何时**使用每个工具。
### 🔒 MCP 工具访问控制
MCP 服务器**没有自己的身份验证** —— 任何可以访问它的客户端都可以调用其工具。由于多个工具会变异或删除您*真实*的 ChatGPT 帐户中的数据,因此工具按风险等级分类,以便不会意外暴露危险的工具:
| 等级 | 工具 | 何时暴露 |
|------|-------|--------------|
| **安全** (始终可见) | `chat_completion`、`chat_with_gpt`、`list_models`、`list_projects`、`list_conversations`、`get_conversation`、`list_memories`、`list_gpts`、`list_project_files` | 开箱即用 |
| **写入** (帐户变异) | `create_project`、`update_project_instructions`、`create_memory`、`archive_conversation` | `W2A_ENABLE_WRITE=1` |
| **破坏性** (不可逆) | `delete_conversation`、`delete_memory` | `W2A_ENABLE_DESTRUCTIVE=1` |
```bash
# 默认:安全读取 + 核心聊天 — 无法变异您的帐户
chatgpt-web2api-mcp
# 启用项目/记忆/存档创建
W2A_ENABLE_WRITE=1 chatgpt-web2api-mcp
# 完整功能(还公开删除)
W2A_ENABLE_WRITE=1 W2A_ENABLE_DESTRUCTIVE=1 chatgpt-web2api-mcp
```
按需工具**隐藏**在 `list_tools` 中,**在调用时拒绝** —— 调用被拒绝的工具的客户端会收到错误结果而不是静默执行。在没有配置 `api_keys` 的情况下,将 SSE 传输绑定到非环回地址会记录一个醒目的警告。
### 🔧 三个接口,一个 Chrome 会话
```bash
# 终端 1:启动 Chrome + API
chatgpt-web2api
# 终端 2:MCP 服务器(适用于 AI 代理)
chatgpt-web2api-mcp
# 终端 3:任何 OpenAI SDK、curl 或 HTTP 客户端
curl http://localhost:8080/v1/chat/completions ...
```
## 有什么不同
| | ChatGPT-Web2API | chat2api | ChatGPTReversed | 官方 API |
|---|---|---|---|---|
| **反机器人处理** | ✅ 自动(CDP) | ❌ 手动(PoW/Turnstile) | ❌ 手动 | N/A |
| **令牌提取** | ❌ 无需 | ✅ 需要 | ✅ 需要 | N/A |
| **项目记忆** | ✅ 完整 CRUD | ❌ | ❌ | ❌ |
| **MCP 服务器** | ✅ 16 种工具 | ❌ | ❌ | ❌ |
| **ChatGPT 记忆** | ✅ 列出/创建/删除 | ❌ | ❌ | ❌ |
| **自定义 GPT** | ✅ 与任何 GPT 聊天 | ❌ | ❌ | ❌ |
| **OpenAI SDK 兼容性** | ✅ 直接替换 | ✅ | ❌ | ✅ (原生)|
| **流式传输** | ✅ SSE | ✅ | ❌ | ✅ |
| **多轮** | ✅ 自动继续 | ✅ | ❌ | ✅ |
| **安装** | `pip install` | Docker | npm | `pip install openai` |
| **成本** | 免费(使用您的订阅) | 免费 | 免费 | 按令牌付费 |
**关键见解:** 其他代理与反机器人系统作斗争。而这一个**使用浏览器作为解决方案** —— Chrome 自动处理 Turnstile、PoW 和会话管理。
## MCP 工具在行动
通过 MCP 连接的 AI 代理可以:
```python
# 创建具有专用记忆的隔离项目
create_project(name="Python 异步专家", memory_scope="project_v2")
# 在项目内聊天(跨对话的持久记忆)
chat_completion(message="什么是 Python 协程?", project_id="g-p-abc123")
# 管理记忆
list_memories() # → 41 个 ChatGPT 记住的事实
create_memory(content="始终在 Python 代码提示")
delete_id="abc-# 列出
list_conversations10)
archive(conversation_id="xyz", archive=True)
# 与自定义 GPT 聊天
chat_with_gpt(gpt_id="g-hkJGhxxx", message="分析此数据")
```
## 配置
### CLI 标志
| 标志 | 默认值 | 描述 |
|------|---------|-------------|
| `--port` | 8080 | API 服务器端口 |
| `--cdp-port` | 9222 | Chrome 调试端口 |
| `--headless` | false | 以无头模式运行 Chrome(可能触发检测) |
| `--log-level` | INFO | DEBUG, INFO, WARNING, ERROR |
### 配置文件(`config.json`)
```json
{
"port": 8080,
"host": "127.0.0.1",
"cdp_port": 9222,
headless": false,
"default_model": "auto",
"default_project_id": null,
"api_keys": [],
"request_timeout": 120
}
```
查看 [`config.example.json`](config.example.json) 获取所有可用键。
```bash
W_PORT=8080 W2A_PORT=9222 chatgpt-web2api查看 [`.env.example`](.env.example所有可用变量。
测试的模型GPT Plus 帐户(2025 年 6 月)的实时模型:
| 斜杠 | 类型 | 最适合 |
|------|------|----------|
| `auto` | 推理 | 一般使用(默认) |
| `gpt-5-5` | 推理,34K 上下文 | 复杂分析 |
| `gpt-5-4-thinking` | 扩展推理 | 逐步逻辑 |
| `gpt-5-3-mini` | 快速,34K 上下文 | 简单任务,速度 |
| `gpt-5-mini` | 快速,8K 上下文 | 快速答案 |
使用 `list_models` 获取当前目录。
## 性能
| 操作 | 时间 |
|-----------|------|
| 简单问题(“2+2?”) | 7s |
| 复杂推理 | 15–36s |
| 多轮跟进 | 3–6s 更快(自动继续) |
| 模型列表 | <1s |
| 记忆列表 | <1s |
## 要求
- Python 3.11+
- 已安装 Chrome 或 Chromium
- ChatGPT Plus 订阅
## 项目结构
```
src/chatgpt_web2api/
├── __main__.py CLI 入口点(chatgpt-web2api)
├── config.py 配置文件/环境变量/CLI
├── chrome.py Chrome 子进程生命周期
├── cdp_driver.py CDP 原语(24 种方法)
├── api_server.py OpenAI 兼容的 HTTP 服务器
├── mcp_server.py MCP 服务器(16 种工具、资源、提示)
└── service.py 协调器:Chrome → CDP → API/MCP
```
## 测试
测试套件分为两个层级:
**单元测试(默认,CI 运行:pytest)** — 快速,无浏览器,全模拟。这些测试涵盖结构、业务逻辑、MCP 协议级别行为和访问控制。
```bash
pytest -v # 所有单元测试 运行:pytest -m "not e2e")
```
**端到端测试(按需)** — 通过 Chrome CDP 驱动一个**真实**的 ChatGPT 帐户。这些测试是唯一检查驱动程序↔ChatGPT 边界的这正是潜在 bug 隐藏的地方(E2E 套件已经发现了四个)。它们会变异帐户,因此**默认情况下禁用**,并且永远不会在 CI 中运行。
```bash
# 1. 启动 Chrome,启用 CDP(重用您的登录配置文件)
# "chrome.exe" --remote-debugging-port=9222 \
# --user-data-dir=~/.chatgpt-web2api/chrome-profile https://chatgpt.com/
# 2. 运行 E2E 套件
W2A_E2E_RUN=1 pytest -m e2e -v
```
E2E 安全模型:
- **快照前/差异后**,每个破坏性操作 — 没有测试会删除它在同一会话中未创建的状态。
- 会话注册表 + **保证清理终结器** 删除测试创建的任何内容,即使崩溃。
- **间隔**(`W2A_E2E_PACE`,默认 12s)之间的测试,以避免 ChatGPT 的“请求过多”速率限制。
- 读取是零风险的;聊天/记忆操作会创建可丢弃的状态,该状态会被清理;`create_project`/`update_project_instructions` 是 `xfail`(当前 API 受损 — 参见 CHANGELOG)。
如果未登录,测试套件会打开一个有头窗口,并等待最多 10 分钟让您登录。
## 文档
- [协议参考](docs/protocol-reference.md) — 捕获的 ChatGPT Web API 端点
- [部署指南](docs/deployment.md) — Docker,cookie 注入,多实例
- [贡献](CONTRIBUTING.md) — 如何贡献
- [变更日志](CHANGELOG.md) — 版本历史
## 限制
- **单个浏览器会话** — 一个 Chrome 配置文件 = 一个 ChatGPT 帐户(使用 nginx 轮询负载均衡)
- **无头模式** — 无头 Chrome 触发 ChatGPT 的机器人检测;使用服务器上的 VNC
- **Cookie 过期** — 身份验证 cookie 过期约 2 周;需要重新登录
- **串行请求** — 通过浏览器一次聊天(并发读取可以正常工作)
- **内存写入** — ChatGPT 的 `/backend-api/memories` 是只读的;通过聊天界面创建内存
- **无图像输入** — 仅限文本(CDP 文件上传尚未实现)
## 路线图
- [ ] 通过 CDP 拖放将图像/文件上传到对话
- [ ] 具有反检测补丁的无头模式
- [ ] 跨多个 Chrome 实例的并发聊天池
- [ ] 搜索引擎模式(触发 ChatGPT 的内置搜索引擎)
- [ ] 通过 ChatGPT 进行 DALL-E 图像生成
- [ ] 画布/代码执行支持
- [ ] 具有指数退避的重试逻辑,用于 Chrome 失败
## 许可证
[MIT](LICENSE) © Elephant Rock Lab
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器