跳转到内容

给 Bot 和自建网关之间加一个 30 行的适配层

问题

把 Bot 从第三方中转切到自建网关时撞上一个协议不兼容:

  • Bot 的请求体硬编码 stream: false,并且按 res.json() 解析响应。
  • 网关无视 stream 字段,无条件返回 text/event-stream 分片。

直接对接的结果:JSON.parse 在第一个 data: 处炸掉,Bot 回不了话。

方案选择

改 Bot 源码支持 SSE 要动核心请求路径,还要处理工具调用分片聚合、reasoning 字段和错误体,侵入性太大。所以加了一个独立组件:

Bot (stream:false, 期望 JSON)
→ 127.0.0.1:8788 适配层:改 stream:true 转发
→ 127.0.0.1:8790 网关(SSE)
← 适配层把 delta.content 逐段拼成完整 chat.completion JSON

适配层是一个约百行的 Python 脚本(aiohttp),做四件事:

  1. 收 POST /v1/chat/completions。
  2. 把 stream 改成 true 转发给网关。
  3. 逐行读 SSE,累加 choices[0].delta.content 与 delta.tool_calls。
  4. 拼成标准非流式响应返回。

systemd 托管,Restart=always。切换后 Bot 只改了配置里的 baseUrl 和 apiKey,源码一行没动。

经验

独立小适配层比改核心代码便宜,而且随时可回滚——把配置指回去就完事。这种「夹一层」的思路在这台小内存机器上特别好用:组件各自简单,出问题互不影响。

← 返回博客列表