stuntd:能从本地流量中学习的小型 LLM 决策代理
一个 Apache-2.0 开源的本地代理工具,可在封闭决策任务上用自身流量训练小型头网络,逐步替代付费 API。
stuntd 是一个近期在 r/LocalLLaMA 上发布并以 Apache-2.0 协议开源的本地代理工具,主打「封闭决策」类调用——即选项判断、是/否判断、评分等不需要生成自由文本的场景。其核心理念是:在不依赖 API 密钥的前提下,利用应用自身与上游 LLM 之间的流量,训练出一个轻量级本地模型,逐步替代按 token 计费的托管 API。
工作机制
stuntd 部署在用户应用与 LLM 提供商之间,作为透明代理记录所有「封闭决策」请求。它基于开源权重的 System One 模型 Laya,在冻结的编码器之上训练一个小型头部层。运行分为两个阶段——
- shadow 模式:头部模型并行给出预测,与上游提供商的输出对比,只有当一致性达到用户设定的目标阈值时,才切换为本地直接回答。
- 阈值以下回退:未达置信度的请求仍转发给提供商;若整体一致性下降,工具会自动降级回 shadow 模式。
stuntd 同时实现了 Jev 协议兼容层。将 typesafe-sdk 指向 http://127.0.0.1:8787,即可让 POST /v1/systemone 在本地以零样本方式获得响应,无需任何 API 密钥。用户也可以在其后挂载任意 Jev 兼容服务器(付费 API、kev、SemIf、LLM2Jev、laya-server 等),让它从这些「教师」的答案中持续学习,直到能够独立作答。
基准与速度
作者在 RTX 5060 笔记本上给出了可复现的测试结果,所有「教师」均为规则或 oracle(因无 Jev 密钥):
- 头部回答延迟:p50 约 22 ms(CUDA)、60 ms(CPU)、28 ms(经 daemon 通过 TCP)。
- Banking77(77 个意图分类):零样本 Laya 得分 38%,对比 Jev 的 76%(数据来自 dhruvmehra/jevbench),训练后差距可被显著缩小。
- Snake 游戏:BFS oracle 作为教师,同一种子下零样本 Laya 每局得分 0.7;经过 30 局教师数据 + 138 秒训练后,头部自主完成 99.6% 的移动,每局得分 11.4(oracle 为 21)。
- 客服分流(每请求 3 个问题):零样本与教师一致性为 69% / 34% / 66%,训练后提升至 99% / 86% / 98%,默认 0.99 目标下 90% 的问题由本地回答。
- 12 个标签的银行意图分类:零样本 89.5%,训练后 100%。
- 编程代理的命令闸门(allow/ask/deny):零样本 45%,训练后 97%,本地回答率 96%。
训练过程会缓存冻结编码器的输出,因此 3000 行数据、24 个 epoch 的训练通常只需 2 到 6 分钟。
边界与局限
作者明确指出 stuntd 不适合的场景:它只处理封闭决策,不会生成自由文本;由于编码器保持冻结,模型只能捕捉词义,无法做字段级算术。同一条风险规则,形式为「金额 > X」时得分为 0.42,而改写为「首次向该收款人转账且金额大于平时」时得分提升到 0.94。此外,Anthropic、Responses、Gemini 的流量目前仍是原样穿透,不会被代理拦截。每次启动需加载 1.6 GB 的检查点。
附带的实用工具
仓库中还附带一个仅 20 行的 PreToolUse 钩子,可以在 Claude Code 执行 shell 命令前,先向本地的 command_gate 模型发起一次「allow/ask/deny」询问,作为一道本地安全闸门使用。
项目仓库地址为 https://github.com/bladedevoff/stuntd ,采用 Apache-2.0 协议开源。由于所涉及的 Jev、Laya 等协议与模型在主流 AI 社区中知名度有限,这一工具更适合已经在使用相关栈、且希望降低封闭决策调用成本的开发者尝试。
