让 Codex 在你喜爱的聊天应用和编程工具中运行
v2 说明: ChatMock-v2 是 RayBytes/ChatMock 的增强 fork,增加了 API Token 认证、多账户池管理等企业级特性。
brew tap RayBytes/chatmock
brew install chatmockpipx install chatmock从 releases 下载 (macOS 和 Windows)
参见 DOCKER.md
使用多号池请git本仓库,而不是通过brew和pipx。
git clone https://github.com/AsisYu/ChatMock-v2.git
pip install -r requirements.txt
python chatmock.py login
python chatmock.py serve# 1. 使用 ChatGPT 账号登录
chatmock.py login
# 2. 启动服务器
chatmock.py serve服务器默认运行在 http://127.0.0.1:8000。将 http://127.0.0.1:8000/v1 作为 OpenAI 兼容应用的基础 URL。
ChatMock-v2 支持多个 ChatGPT 账户,并在触发速率限制时自动切换。
# 添加第一个账户
chatmock.py login
# 添加更多账户(再次运行 login)
chatmock.py login每次登录都会提示你确认将账户添加到池中。
# 列出所有账户
chatmock.py account list
# 显示账户详情
chatmock.py account show <account-id>
# 设置账户优先级 (1=最高, 10=最低)
chatmock.py account priority <account-id> 1
# 重命名账户
chatmock.py account rename <account-id> "work-account"
# 重置错误状态的账户(从 error 恢复到 active)
chatmock.py account reset <account-id>
# 移除账户
chatmock.py account remove <account-id>| 状态 | 图标 | 说明 |
|---|---|---|
active |
✅ | 正常可用 |
ready |
✅ | 冷却结束,等待使用 |
cooldown |
⏳ | 速率限制冷却中 |
error |
❌ | 认证失败或连续请求失败,需手动重置 |
恢复 error 状态账户:
# 查看哪些账户有错误
chatmock.py pool status
# 重置单个账户
chatmock.py account reset <account-id># 查看池状态
chatmock.py pool status
# 以 JSON 格式查看
chatmock.py pool status --json池管理 API (默认仅限本地访问):
| 端点 | 方法 | 描述 |
|---|---|---|
/v1/pool/status |
GET | 获取池状态 |
/v1/pool/accounts |
GET | 列出所有账户 |
/v1/pool/accounts/<id> |
GET | 获取账户详情 |
/v1/pool/accounts/<id> |
DELETE | 移除账户 |
/v1/pool/accounts/<id> |
PATCH | 更新别名/优先级 |
/v1/pool/reload |
POST | 从磁盘重新加载池 |
/v1/pool/config |
GET/PATCH | 查看/更新配置 |
如果在 nginx/traefik 后运行,请设置 API token:
export CHATMOCK_POOL_API_TOKEN="your-secret-token"然后在请求中包含 token:
curl -H "Authorization: Bearer your-secret-token" http://your-server/v1/pool/status- 自动切换: 当账户触发速率限制时,进入冷却期,使用下一个可用账户
- 加权选择: 优先级更高且剩余配额更多的账户会被优先选择
- 冷却恢复: 速率限制重置后,账户自动变为可用
- 线程安全: 支持并发请求
Python
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:8000/v1",
api_key="anything" # 不检查
)
response = client.chat.completions.create(
model="gpt-5.4",
messages=[{"role": "user", "content": "hello"}]
)
print(response.choices[0].message.content)cURL
curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4",
"messages": [{"role": "user", "content": "hello"}]
}'gpt-5.5gpt-5.4gpt-5.4-minigpt-5.2gpt-5.1gpt-5gpt-5.3-codexgpt-5.3-codex-sparkgpt-5.2-codexgpt-5-codexgpt-5.1-codexgpt-5.1-codex-maxgpt-5.1-codex-minicodex-mini
- 工具/函数调用
- 视觉/图像输入
- 思考摘要(通过 think 标签)
- 可配置的思考强度
- 支持模型的快速模式
- 网页搜索工具
- OpenAI 兼容的
/v1/responses(HTTP + WebSocket) - Ollama 兼容端点
- 推理强度作为独立模型暴露(可选)
- 可选的 API Token 认证
ChatMock-v2 提供两层认证机制:
默认不启用认证(适合本地开发)。启用后客户端必须携带 Token:
# 通过环境变量启用
export CHATMOCK_API_TOKEN="your-secret-token"
chatmock.py serve
# 或通过 CLI 参数
chatmock.py serve --api-token "your-secret-token"启用后,客户端请求必须携带 Token:
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:8000/v1",
api_key="your-secret-token" # 必须与配置的 Token 匹配
)curl -H "Authorization: Bearer your-secret-token" \
http://127.0.0.1:8000/v1/chat/completions \
-d '{"model": "gpt-5.5", "messages": [{"role": "user", "content": "hello"}]}'行为说明:
- 未设置
CHATMOCK_API_TOKEN:所有请求直接通过(向后兼容) - 设置了
CHATMOCK_API_TOKEN:要求Authorization: Bearer <token>匹配 - 检测到反向代理头但未设置 Token:打印安全警告但仍然放行
export CHATMOCK_POOL_API_TOKEN="your-pool-secret-token"行为说明:
- 设置了
CHATMOCK_POOL_API_TOKEN:要求 Bearer Token 匹配 - 未设置 Token 且检测到反向代理头:拒绝访问(防止未授权管理操作)
- 未设置 Token 且本地直连:允许 localhost 访问
所有标志放在 chatmock serve 之后。也可以设置为环境变量。
| 标志 | 环境变量 | 选项 | 默认值 | 描述 |
|---|---|---|---|---|
--reasoning-effort |
CHATGPT_LOCAL_REASONING_EFFORT |
none, minimal, low, medium, high, xhigh | medium | 模型思考强度 |
--reasoning-summary |
CHATGPT_LOCAL_REASONING_SUMMARY |
auto, concise, detailed, none | auto | 思考摘要详细程度 |
--reasoning-compat |
CHATGPT_LOCAL_REASONING_COMPAT |
legacy, o3, think-tags | think-tags | 推理内容返回格式 |
--fast-mode |
CHATGPT_LOCAL_FAST_MODE |
true/false | false | 支持模型的优先处理 |
--enable-web-search |
CHATGPT_LOCAL_ENABLE_WEB_SEARCH |
true/false | false | 允许模型搜索网页 |
--expose-reasoning-models |
CHATGPT_LOCAL_EXPOSE_REASONING_MODELS |
true/false | false | 将每个推理级别列为独立模型 |
--api-token |
CHATMOCK_API_TOKEN |
字符串 | 无 | API 认证 Token |
请求中的网页搜索
{
"model": "gpt-5.4",
"messages": [{"role": "user", "content": "latest news on ..."}],
"responses_tools": [{"type": "web_search"}],
"responses_tool_choice": "auto"
}请求中的快速模式
{
"model": "gpt-5.4",
"input": "summarize this",
"fast_mode": true
}请负责任地使用,风险自负。本项目与 OpenAI 无关。