SharedChat Codex 公益站接入 Hermes:Chat→Responses Adapter + CPA 反代
- HTML: https://decision.ht1072.top/2026-05-29-sharedchat-codex-adapter-cpa-hermes.html
- Local HTML:
[已移除本地路径] - Generated: 2026-05-29T23:00:29+08:00
SharedChat Codex 公益站接入 Hermes:Chat→Responses Adapter + CPA 反代实施记录
记录时间:2026-05-29 22:59 CST
类型:排障复盘 / 接入 runbook / 决策留档
结论:已实现Hermes → CPA → 本地 adapter → SharedChat Codex Responses API,SC-GPT-5.5已支持非流式与 SSE streaming。
一句话结论
SharedChat Codex 公益站不是普通 OpenAI Chat Completions provider,而是 Responses-only Codex API。直接挂 Hermes 或 CPA openai-compatibility 容易因 /v1/chat/completions / /v1/models 不存在而失败。最终采用一层极薄本地 adapter,把 OpenAI Chat Completions 请求转成 /v1/responses,再挂到 CPA,Hermes 通过 custom:cpa-codex 使用唯一 alias SC-GPT-5.5。
背景
用户提供了一个适合 Codex 的公益模型站点:
- Base:
https://new.sharedchat.cc/codex - 模型:
gpt-5.5、gpt-5.4 - 目标:让 Hermes 可用,同时保留 CPA 统一入口与模型 alias 管理。
先前实测证明:
GET /health可用POST /v1/responses可用POST /v1/chat/completions不可用GET /v1/models不可用- Codex CLI 使用
wire_api = "responses"可以直连
因此它不是常规 OpenAI-compatible chat provider,而是面向 Codex/Responses 的专线。
关键判断
| 问题 | 判断 | 原因 |
|---|---|---|
| 能不能直接给 Codex CLI 用 | 可以 | Codex CLI 原生支持 wire_api = "responses" |
| 能不能直接给 Hermes 用 | 不稳 | Hermes 常规 custom provider 走 Chat Completions 语义 |
| 能不能直接挂 CPA openai-compatibility | 不建议裸挂 | CPA openai-compat 上游通常预期 /v1/chat/completions |
| 需不需要 cc switch | 不需要 | cc switch 主要解决 Codex CLI provider 切换,不解决 Hermes Chat→Responses |
| 最小稳定方案 | 本地 Chat→Responses adapter + CPA alias | CPA 看到标准 OpenAI-compatible provider,Hermes 不需要特殊改造 |
最终架构
Hermes
→ custom:cpa-codex
→ CPA http://127.0.0.1:8317/v1/chat/completions
→ SharedChat Adapter http://127.0.0.1:8329/v1/chat/completions
→ https://new.sharedchat.cc/codex/v1/responses
→ gpt-5.5 / gpt-5.4
模型 alias:
SC-GPT-5.5 → SharedChat Adapter → gpt-5.5
SC-GPT-5.4 → SharedChat Adapter → gpt-5.4
已落地文件
Adapter 脚本
[已移除本地路径]
提供接口:
GET /health
GET /v1/models
POST /v1/responses
POST /v1/chat/completions
功能:
- 非流式 Chat Completions → Responses → Chat Completions
- 流式 Chat Completions SSE → Responses SSE → Chat Completion chunks
- 静态模型列表:
gpt-5.5、gpt-5.4 - 仅本机监听
127.0.0.1:8329 - 无第三方依赖,仅 Python 标准库
环境变量文件
[已移除本地路径]
权限:
600 ht:ht
主要变量:
SHAREDCHAT_ADAPTER_HOST=127.0.0.1
SHAREDCHAT_ADAPTER_PORT=8329
SHAREDCHAT_CODEX_BASE=https://new.sharedchat.cc/codex/v1
SHAREDCHAT_CODEX_DEFAULT_MODEL=gpt-5.5
SHAREDCHAT_CODEX_MODELS=gpt-5.5,gpt-5.4
SHAREDCHAT_CODEX_TIMEOUT=180
密钥变量:
SHAREDCHAT_CODEX_API_KEY=<redacted>
systemd --user 服务
[已移除本地路径]
服务状态:
systemctl --user status sharedchat-codex-adapter.service --no-pager -l
启用自启:
systemctl --user enable sharedchat-codex-adapter.service
重启:
systemctl --user restart sharedchat-codex-adapter.service
日志:
journalctl --user -u sharedchat-codex-adapter.service -n 100 --no-pager
CPA 配置
CPA 配置文件:
[已移除本地路径]
追加的 openai-compatibility:
- name: SharedChat-Adapter
base-url: http://127.0.0.1:8329/v1
api-key-entries:
- api-key: dummy
models:
- name: gpt-5.5
alias: SC-GPT-5.5
- name: gpt-5.4
alias: SC-GPT-5.4
备份文件:
[已移除本地路径]
CPA 已热加载,无需重启即可看到新 alias。
验证记录
1. SharedChat 原始 Responses API
路径:
POST https://new.sharedchat.cc/codex/v1/responses
模型:
gpt-5.5
结果:
200 completed, text=OK
2. Adapter 非流式
请求:
POST http://127.0.0.1:8329/v1/chat/completions
model=gpt-5.5
stream=false
结果:
200 chat.completion, content=OK
3. CPA 非流式
请求:
POST http://127.0.0.1:8317/v1/chat/completions
model=SC-GPT-5.5
stream=false
结果:
200 chat.completion, content=OK
4. Hermes 非流式
命令:
hermes chat -q 'Reply with exactly: OK' --provider cpa-codex -m SC-GPT-5.5 -Q
结果:
OK
5. Adapter streaming
请求:
curl -N http://127.0.0.1:8329/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"gpt-5.5","messages":[{"role":"user","content":"Reply exactly OK"}],"max_tokens":16,"stream":true}'
返回:
data: {"object":"chat.completion.chunk", ... "delta":{"role":"assistant"}}
data: {"object":"chat.completion.chunk", ... "delta":{"content":"OK"}}
data: {"object":"chat.completion.chunk", ... "finish_reason":"stop"}
data: [DONE]
6. CPA streaming
请求:
POST http://127.0.0.1:8317/v1/chat/completions
model=SC-GPT-5.5
stream=true
结果:
200 text/event-stream, chunk=OK, [DONE]
7. Hermes streaming
命令:
hermes chat -q 'Reply with exactly: OK' --provider cpa-codex -m SC-GPT-5.5 -Q
结果:
OK
关键变化:不再出现:
Streaming is not supported for this model/provider. Switching to non-streaming.
SSE streaming 踩坑
第一次实现 SSE 时 adapter 已经发出:
data: [DONE]
但 HTTP 连接保持 keep-alive,没有主动关闭。结果:
- adapter 直连看似能收到 chunk,但 curl 会等到超时才退出
- CPA 收到
text/event-streamheader 后没有向下游吐 chunk,表现为客户端等待超时
修复:
SSE response header: Connection: close
发完 [DONE] 后设置 close_connection = True
修复后:
- adapter 直连立即结束
- CPA 立刻转发 chunk
- Hermes 不再 fallback 到 non-streaming
使用方式
Hermes 使用 gpt-5.5
hermes chat -q '你的问题' --provider cpa-codex -m SC-GPT-5.5 -Q
Hermes 使用 gpt-5.4
hermes chat -q '你的问题' --provider cpa-codex -m SC-GPT-5.4 -Q
CPA 直接调用
curl -N http://127.0.0.1:8317/v1/chat/completions \
-H "Authorization: Bearer <CPA_API_KEY>" \
-H 'Content-Type: application/json' \
-d '{
"model":"SC-GPT-5.5",
"messages":[{"role":"user","content":"Reply exactly OK"}],
"max_tokens":16,
"stream":true
}'
管理与回滚
查看服务
systemctl --user status sharedchat-codex-adapter.service --no-pager -l
重启服务
systemctl --user restart sharedchat-codex-adapter.service
停止服务
systemctl --user stop sharedchat-codex-adapter.service
禁用自启
systemctl --user disable sharedchat-codex-adapter.service
回滚 CPA 配置
cp [已移除本地路径] \
[已移除本地路径]
必要时重启 CPA:
sudo systemctl restart cli-proxy-api.service
风险与边界
| 风险 | 说明 | 应对 |
|---|---|---|
| 公益站稳定性 | 免费额度、限流、Cloudflare 策略可能变化 | 保留 CPA 其他模型 fallback,不把它作为唯一主链路 |
| 额度/限流 | 社区称每天有公益额度,但存在限速 | 控制 smoke 次数,避免长输出刷额度 |
| adapter 最小实现 | 目前主要覆盖文本 chat 与 SSE | 图片、工具调用、复杂 function calling 未完整实现 |
| CPA 依赖本地 adapter | adapter 停止后 SC-GPT-* alias 不可用 |
systemd --user 托管 + health 检查 |
| 密钥泄露 | 公益站 key 存在本地 env | env 文件 600 权限,不写入 wiki/HTML 明文 |
后续建议
- 给 adapter 增加
/metrics或轻量 health detail,便于巡检。 - 如长期使用,可加一个 cron/health watchdog,定期验证
SC-GPT-5.5是否可用,但要控制额度消耗。 - 若需要工具调用/function calling,再从 OpenAI Chat tools 与 Responses tool_call 事件做双向映射,不要在当前最小 adapter 上盲目扩大。
- Hermes 主模型是否切到
SC-GPT-5.5应单独评估,不建议因为公益额度直接替换现有主链路。
归档 footer
生成模型:gpt-5.5
生成时间:2026-05-29 22:59:07 CST
归档类型:Decision Trace / Hermes provider integration runbook