将 ChatNow 网页流式接口转换为 OpenAI、Anthropic 和 Gemini 兼容 API。当前上游已确认支持文本消息、文本增量流、temperature、top_p、最大输出 Token 数和停止序列。多模态及 Token 用量不做猜测,相关请求会返回明确错误,响应中不伪造 Token 数据。OpenAI Responses 为兼容客户端会接收但忽略 reasoning 请求元数据,不生成推理内容。
工具调用由网关模拟:工具目录作为普通文本交给模型选择,只有模型返回带固定标记且通过校验的 JSON 时,才转换为各协议的标准工具事件。网关不执行工具、不生成工具结果、不改写模型返回的名称和参数。工具请求需要缓冲完整上游文本后再开始返回工具事件;为避免 ChatNow 丢弃原生工具内容块,选择阶段会将完整对话包装为普通文本,普通请求和 tool_choice=none 不受影响。
要求 Python 3.11+。
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp config.example.toml config.toml编辑 config.toml。[models.mapping] 已包含当前网页展示的 18 个模型,可自行增删;upstream.model 指定省略 model 时使用的默认模型。敏感值可用环境变量覆盖:CHATNOW_AUTHORIZATION、CHATNOW_FIREBASE_APPCHECK、CHATNOW_API_KEY、CHATNOW_COOKIE、CHATNOW_THREAD_ID、CHATNOW_USER_ID、CHATNOW_OWNER_ID、CHATNOW_USER_NAME、CHATNOW2API_KEYS。可用 CHATNOW2API_CONFIG 指定其他配置文件。
ChatNow 上游必须配置 Authorization、x-firebase-appcheck、user_id、owner_id、user_name。默认 generate_thread_id = true,每次请求生成独立 UUIDv7,避免复用网页线程造成并发串扰和超时;关闭后必须配置固定 thread_id。
对外接口默认不鉴权。启用 API Key 鉴权:
[api_auth]
enabled = true
keys = ["请替换为自定义密钥"]生产环境建议保持 keys = [],通过 CHATNOW2API_KEYS=key1,key2 注入。
python -m app默认监听 http://127.0.0.1:8000。
GET /models:按默认协议返回模型GET /v1/models:OpenAI 模型GET /v1beta/models:Gemini 模型POST /responses:按默认协议处理POST /v1/responses:OpenAI ResponsesPOST /v1/chat/completions:OpenAI Chat CompletionsPOST /v1/messages:Anthropic MessagesPOST /v1beta/models/{model}:generateContent:Gemini 非流式POST /v1beta/models/{model}:streamGenerateContent:Gemini 流式,?alt=sse返回 SSE- Gemini 接口同时提供
/v1版本路径
curl http://127.0.0.1:8000/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"claude-fable-5","messages":[{"role":"user","content":"你好"}]}'curl -N 'http://127.0.0.1:8000/v1beta/models/claude-fable-5:streamGenerateContent?alt=sse' \
-H 'Content-Type: application/json' \
-d '{"contents":[{"role":"user","parts":[{"text":"你好"}]}]}'启用对外鉴权后,OpenAI 使用 Authorization: Bearer <key>,Anthropic 使用 x-api-key,Gemini 使用 x-goog-api-key 或查询参数 key。
pip install -r requirements-dev.txt
pytest -q配置文件不存在/格式错误:检查config.toml或CHATNOW2API_CONFIG。上游鉴权失败:Authorization 或 App Check 可能已过期,请更新配置或对应环境变量。模型不存在:检查[models.mapping]。协议未启用:检查enabled_protocols。unsupported_parameter:该能力没有出现在现有上游资料中,服务不会盲目透传。invalid_upstream_response:强制工具选择时,上游没有返回合法选择记录,或名称、参数格式不合法。端口已被占用:启动输出会给出 PID、进程名、查询和结束命令;也可修改server.port。