资讯动态

Jev 爆火之后:我把 “System One 判断下沉“ 的思想,搬进了自己的开源 AI Agent

发布时间:2026/10/4 18:49:53 来源:尧图企业网站定制
项目白泽 Baize —— 面向团队的 AI 助手运行时Go 1.25MIT 仓库 github.com/rebornace/b… 国内镜像 gitee.com/RebornAce/b… 这篇文章不是 “接入 Jev” 的教程而是分享一个判断Jev 值得学习的不止是模型还有 “高频判断不该让生成式模型写作文” 这个工程思想—— 而且这个思想不依赖 Jev 服务本身也能落地。一、决策层设计三个原则 一条红线白泽是一个旁挂式 AI Agent 运行时单进程部署在业务系统旁边把 OpenAPI / MCP / HTTP 插件自动变成可调用工具写操作要人工审批。它通过 OpenAI 兼容 API 调模型拿不到 logits也就拿不到校准概率 —— 所以决策层从一开始就不设计任何依赖概率的逻辑。设计时定了三条硬原则可插拔抽象一个决策接口本地规则、本地小模型、远端决策服务都是它的实现缺省用最便宜的那个。不依赖任何外部服务。可降级每个决策点失败都 fail-open 回现有规则路径决策层永远不是 run 的单点故障。可观测每个判断都留下出处和降级记录decide.degraded、decide.tool_narrow 等事件。一条红线判断结果里不存在任何置信度数字。因为拿不到校准概率 ——“能拿到一个数字但那不是我们想要的那个数字”一个看起来像概率、实际未校准的数字比没有数字更危险它会诱使人写出 “概率超过 0.9 就自动执行” 这种分支逻辑。接口形状判断只回枚举决策层的返回形状刻意保持最小判定只有 yes /no 两个枚举值多选场景返回被选中的项每次判定附带出处来自规则、远程模型还是兜底和是否降级的标记。接口里没有任何 float 类型的置信度字段 —— 这条是从类型层面杜绝 “把未校准数字当置信度用”。Chain 的降级语义所有实现被串成一个链按序尝试首个成功的返回全部失败时返回调用点预先写死的兜底判定并标记 “已降级”。链本身永不返回错误 —— 错误必须在链内部被降级消化不允许穿透到主流程。这样调用方永远拿得到一个合法的枚举值决策层故障的表现是 “退回老行为”而不是 “报错中断”。一个容易忽略的细节兜底判定是调用点在代码里写死的不是配置项。因为各判断点的失败方向各不相同且不一致 —— 记忆抽取失败应当照常抽取宁可多花钱不可丢记忆工具收敛失败应当发全量宁可多花 prefill 不可漏工具。如果做成配置项迟早会有人在成本压力下把它翻成反方向然后静默丢数据。失败方向是安全性属性不是运营参数。决策链的实现链上目前有两档实现远程实现优先 —— 配置了独立决策模型档位时用提示词强制模型只输出 yes /no再用正则 / JSON 解析校验解析不了就当弃权让链继续降级没有配置或远程不可用时落到零延迟规则兜底目前只负责记忆抽取这一个判断点其他判断点直接弃权短闲聊且无事实线索判 No带 “记住、密码、电话” 等事实线索、出现连续数字或内容较长时判 Yes。多选版本只接受候选集合里的名字出界的一律丢弃。因为 OpenAI 兼容端点的结构化输出支持不一致契约靠提示词 解析强制而不是依赖各家接口差异。将来如果想接能读 logits 的自部署推理端只需在链上再加一档实现调用方不用改。二、四个判断点从 “让大模型写作文” 下沉出来白泽里有四处典型的浪费为了拿一个 “是 / 否、选哪个” 的决定让生成式模型写一大段话。决策层把这四处逐一下沉。2.1 DP-1记忆抽取前置判断性价比最高的一处白泽原本在每次成功对话之后都发一次 LLM 调用做记忆抽取绝大多数对话根本没值得记的事实返回空数组但每次都要付一次完整调用 一次 JSON 解析风险。现在在支付那次调用之前先问决策层 “这轮值不值得抽记忆”判定为 No 时直接跳过抽取记录一条跳过事件标明是决策层判的并把预估省下的输入 token 数一起记下方便核算收益判定为 Yes 或决策层不可用时照常抽取行为与改动前完全一致。判断本身的成本也要控制探针上下文截断到 1500 字符以内 ——探针不该比它要省的那次调用更贵。2.2 DP-2工具候选两级收敛结构性成本这是白泽身上最值得做的一件事。白泽的定位是 “有 OpenAPI 就自动变工具”连接器越接越多全量工具 schema 每轮都发给主模型 ——prefill 成本随连接器数量线性增长这是随用户规模放大的结构问题。收敛分两级第一级系统路由System Targets。先让决策模型从 “几个连接器 id” 里选这轮要用的后台系统拿不准时选多个。从几百个工具里选一个很难从三五个系统里选就简单得多。系统的描述不是写死的而是根据每个系统内工具的领域词自动生成词频 × 跨系统 IDF所以接新连接器时不需要人维护路由语料。第二级系统内关键词预筛。在被选中的系统内用确定性 IDF 关键词打分工具名权重 2 倍、描述 1 倍停用词剔除中文用二元组切词按系统轮询分配名额收敛到默认 16 个以内。收敛不是 “一刀切”还带三个地板防止误杀类别工具地板用户说 “列出用户” 时通用的分页工具在 IDF 里排不上去但列表请求恰恰需要它 —— 命中列表 / 详情意图时强制保留对应管理工具登录地板系统被选中后它的登录、当前会话原语永远保留 —— 后端返回 401 时模型要能当场恢复会话而用户永远不会在请求里说 “登录”混合路由查询里确定性命中的领域词如 “宠物” 订单 会强制锁住对应系统模型只能往上加、不能去掉 —— 防止小模型把唯一正确的系统选没。另外主模型调用支持枚举约束要求模型必须从给定工具里选通过可选接口扩展不破坏现有 Provider 签名提供方不支持时自动退回普通调用 —— 约束是优化不是硬门禁。2.3 DP-3工具结果剪枝长会话里之前某轮工具返回的大体积 JSON 会一直躺在上下文里膨胀。压缩触发时决策层对 “最大的几条工具返回” 逐条判断 “值不值得原样保留”不值得的替换成占位符保留消息与工具调用的配对模型需要时还能重新调用工具原始结果仍在运行日志里。三条边界保证判断本身不贵只审工具返回普通对话不审、只审估算超 500 token 的、每轮最多审 8 条。全部失败就全部保留。2.4 DP-4路由档位仲裁白泽原来用纯启发式有无图片、有无代码围栏把每轮路由到 light /standard/power 三档。启发式的问题是 “帮我重构这个函数” 不含代码围栏会被判成轻档强模型该上没上。DP-4 的做法不替换启发式只在 “启发式落在模糊的 standard 档 回合足够长≥400 字符 是自动路由” 时才咨询决策层二选一light /power。短回合不值得问 ——“你好” 路由到哪档差别很小而每次查询本身有延迟成本。DP-4 的判断也走同一条决策链有独立决策档位时由便宜档位来二选一判断不可用降级时保留启发式判出的 standard 档 —— 决策层永远只给建议不改写路由结果。三、效果与验证可复现基准37 条真实只读业务请求横跨 3 个已接入后台共 390 个工具模型 DeepSeek-Flash稳定性连跑 5 轮185 次请求。收口 16默认时运行成功率99.5%184/185turn-0 prompt 平均约3,090 tokens相比收口 32 降低约34%直接全量下发 390 个工具时turn-0 实测约 8.5 万 tokens。数据与脚本都在 scripts/tool-routing-eval可复现默认收口超过阈值默认 12 个工具才启用收敛收口后默认最多保留16 个候选工具这是成本 / 成功率实测的折中点回归基准仓库里有一套 tool-routing-eval 回归脚本扫宽度、测稳定性、离线分析跑完自动恢复原配置 ——收敛这种会改行为的优化必须先有 shadow 数据再谈关 shadow 生效。整个过程都保持 “决策层默认关闭、逐点灰度”总闸 decide_enabled 默认关所有判断点都有独立开关通过现有的热重载配置面控制不动任何装配代码。四、边界与诚实声明没有校准概率我们通过 OpenAI 兼容 API 调模型拿不到 logits。所以决策层永远只回枚举任何 “按概率阈值自动执行” 的功能都没有。写操作审批仍然是确定性规则 人工审批这条红线不因 Jev 而松动。这不是 “接入 Jev”白泽决策层不依赖任何外部决策服务。将来用户把自己的推理端指向本地 vLLM装了决策插件时远程实现天然可用 —— 但那是白捡的能力不是架构的前提。五、结尾Jev 让我重新想清楚了一件事模型当然重要但很多高频小判断本不该每次都让生成式模型写作文。把 “判断” 从 “生成” 里下沉出来用一个可插拔、可降级、可观测的决策层承接是任何 agent 项目都值得做的工程 —— 它不依赖某一家公司的窗口期。白泽的决策层已经落地在主线代码里internal/decide 四个判断点欢迎来看看、跑跑或者直接提 IssueGitHubgithub.com/rebornace/b…Giteegitee.com/RebornAce/b…更多资料README 的「架构理念决策层」一节以及开发者文档 docs/developers/中英双语

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑