No BB · 收敛约束中间层
在大模型 API 和应用之间插一层:对话消息先进中间层,自动把「一旦得出最终结论,
立即停止推演」的约束拼到最后一个 user 消息尾部,再转发真实上游。
响应(含思考过程)原样透传、一个字不动。用户无感 · 模型无关 · 零 key · fail-open。
实测(step-3.7-flash / agnes-2.5-flash / hy3,评测数据全部可复算):
思考量 -33%~-51%(串行单题最高 -74%)、墙钟最高 -47%、正确率 42/42 零损伤。
详细评测见 https://github.com/totwo2/no-bb
安装(本 skill 已内置程序,无需联网下载)
bash scripts/install.sh
安装器会:
1. 把内置程序复制到 ~/tools/no-bb
2. 启动常驻服务(macOS 优先 launchd 自启,失败自动降级 nohup;Linux 支持 systemd --user)
3. 绕过本机代理验证端口 18772 活着
验证
curl -s --noproxy '*' -X POST http://127.0.0.1:18772/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"nonexistent","messages":[{"role":"user","content":"ping"}]}'
# 返回 502 no upstream route for model = 服务正常(该模型不在路由表内属预期)
一键接入(wrap):所有外接模型统一走中间层
python3 ~/tools/no-bb/scripts/wrap.py wrap # 备份原配置并接入
python3 ~/tools/no-bb/scripts/wrap.py status # 状态
python3 ~/tools/no-bb/scripts/wrap.py unwrap # 还原
wrap 后客户端里切任何外接模型都自动走中间层(模型无关、key 透传、中间层零 key)。
收敛注入(converge):WorkBuddy 内置免费模型也生效
管道只能接管 key 在本机的模型;平台内置免费模型走封闭网关接不了。第二条路:
UserPromptSubmit hook 在提示词提交环节注入收敛约束(additionalContext)——
所有 WorkBuddy 对话(含内置模型)每条消息自动带上。
python3 ~/tools/no-bb/scripts/wrap.py converge # 挂载(自动备份 settings.json)
python3 ~/tools/no-bb/scripts/wrap.py unconverge # 卸载
约束词: ~/.workbuddy/hooks/nobb-converge.txt(随时改,即时生效)
暂停注入: touch ~/.workbuddy/hooks/nobb-converge.off
客户端接入(只改一行)
把任意 OpenAI 兼容客户端的 base_url 从模型厂商地址改成中间层即可,模型名、API key 都不变:
之前:base_url = "https://api.stepfun.com/v1"
之后:base_url = "http://127.0.0.1:18772/v1"
路由表 nobb/src/upstreams.json 已内置 step-3.7-flash / agnes-2.5-flash /
openrouter / deepseek-v4-flash 四条;新模型加一行 JSON 即可。
不在路由表内的模型会回 502(可用环境变量 UPSTREAM 指定兜底上游)。
常用操作
| 操作 | 命令 |
|---|---|
| 停止 | bash scripts/uninstall.sh --stop-only |
| 卸载(停服务+删文件) | bash scripts/uninstall.sh |
| 查日志 | tail -f ~/tools/no-bb/data/rewrite_events.jsonl(仅长度统计,不含对话内容) |
| 换约束词 | REWRITE_SUFFIX_FILE=<文件路径> 后重启(精确计算场景用弱化版约束) |
| A/B 对照 | REWRITE_ENABLED=0 后重启(纯透传不拼约束) |
| 改端口 | PORT=xxxx 后重启 |
部署体检(用户问"装对没有/会不会空转"时,agent 直接跑)
python3 ~/tools/no-bb/scripts/wrap.py check
分层自检:L0 中间层进程 / L1 外接模型接入 / L2 hook 挂载 / L3 hook 干跑 / L4 管道真实流量。
每层 ❌ 都给出修复命令;配置被平台改写/迁移也能识别。体检末尾是「30 秒双验证」引导:
先发一句测试问题确认约束有没有真进到模型输入(到达确认),再关约束重发同句对比(效果数字)。
安装完成引导用户跑一次 check + 双验证,是装机闭环的收尾步骤。
验证效果(用户问"到底省了多少"时,agent 直接帮用户跑)
LLM_API_KEY=<用户调用该模型厂商的key> \
python3 ~/tools/no-bb/bench/verify_savings.py --model <模型名> --question "<用户真实会问的一句问题>"
脚本自动 A/B:同一句问题直连厂商 vs 走中间层各 2 次(同一厂商端点,交替执行),
输出思考字符与墙钟中位数对比。若报 ConnectionRefused,先确认中间层在跑:
curl --noproxy '*' http://127.0.0.1:18772/v1/chat/completions。
⚠️ agent 沙箱注意:部分受限沙箱会拦截脚本对本地回环端口的直连(curl 却可达),
此时不要误判服务挂了——改用 curl 发请求跑 A/B,或让用户在自己终端里执行脚本。
日常零成本观察:tail -f ~/tools/no-bb/data/rewrite_events.jsonl(reasoning_chars=思考字符,elapsed_ms=耗时)。
注意:会产生真实 API 计费;遵从是概率性的,看中位数不看单次。
适用边界(诚实声明)
- 模型本来就想得少 → 没用(基线短链无冗余可压),建议按基线思考长度分流;
- 约束遵从是概率性的,平均省 33%~51%,不是每次 -80%;
- 精确计算场景(财务/投资)压掉自检步有算术笔误风险,请用
REWRITE_SUFFIX_FILE
换弱化版约束词(保留「核对关键计算后再停」)。
环境变量
| 变量 | 作用 | 默认 |
|---|---|---|
PORT |
服务端口 | 18772 |
REWRITE_SUFFIX_FILE |
从文件读约束词 | 内置最优约束 |
REWRITE_ENABLED |
0=纯透传(A/B 对照) | 1 |
UPSTREAM |
路由表未命中时的兜底上游 | 无 |
LOGDIR |
日志目录 | <安装目录>/data |