CodexQA

行业与实践研究与基准测试

判断通过不等于做对:阿里云把 Agent 轨迹评测和执行护栏拆开

CodexQA 团队阅读约 9 分钟

阿里云 AgentScope 把 JEV 的结构化判断放进工具选择、执行护栏、答案修订和轨迹评测。SHADOW 只记录,ENFORCE 才拦截。事后评测不撤销已执行动作,演示阈值也不能当成生产标准。

本文目录

判断通过不等于做对:阿里云把 Agent 轨迹评测和执行护栏拆开

阿里云云原生社区在 2026 年 11 月 3 日说明,AgentScope(面向 Java 的智能体开发框架)如何接入 JEV(TypeSafe 的 System One 判断模型,输入材料和预先定义的问题,直接返回选项、分数和概率,而不是再写一段话)。任务一长,每个节点都要做可被程序消费的决定:现在暴露哪些工具、检索材料能不能支撑这句话、这一步操作条件是否满足。生成模型继续负责分析、写答案和提出工具调用;JEV 只判断指定问题;Harness(把判断放到执行点上,并管理工具、上下文、预算和状态的运行层)决定这些判断在什么时候生效。三者可以一起用,也可以只拿客户端做草稿复核。

概率要和观测到的结果频率对照着看,不保证单次判断正确。阈值和是否采纳,仍要用业务样本校准。能用身份系统和业务库直接核对的事实,例如有没有退款权限、订单是否已经退过,继续走确定性代码。答案有没有漏掉退款条件、材料里有没有注入指令,才交给语义判断。

一次条件退款,把判断拆到不同时点

用户说「查订单,没发货就退款,并告诉我结果」。推理前,工具选择留下查询和退款;真正执行退款前,护栏再看当前证据够不够。检索给出退款政策;证据处理丢掉可疑指令,但留下和用户预期冲突、却有用的政策。答案出来后,复核有没有漏条件、有没有把「已提交申请」写成「已到账」;需要改的时候只改草稿。调用结束后,轨迹评测再看工具使用、答案是否有依据、需求覆盖了没有。

这些阶段可以单独打开。工具适用,不等于退款条件已经满足;一次调用被允许,不等于业务操作成功;答案复核通过,也不能代替订单系统的执行回执。

执行前:选工具、选模型,再查这一次调用

JevToolSelectionMiddleware 在每一轮推理前评估候选工具是否适用,再按数量上限过滤。查询和退款可以同时留下;一句普通问候则可以明确不给业务工具。必要工具单独保留,不占可选名额。

默认上下文策略是 RECENT_WINDOW:最近 8 条非空文本,合计 8,000 个字符。可以改成只送最新用户文本,或送整段对话。窗口小,判断输入更短,也可能丢掉早期线索,要按任务长度评。明确判断「业务工具都不适用」,和判断失败不是一回事:前者可以只留必要工具;不确定、超时或非法响应则退回原来的工具目录。过滤改变的是主模型能看见的候选,不是工具权限。

路由同时看阶段、能力、容量和配额。JevPhaseRouting 给规划和执行等路由设有序候选池。宿主提供模型能力、上下文容量、输出预留和配额,不合格的先排除再选。一次 Agent 调用内复用这次选择,真正派发前再查一遍候选条件;候选失效就退回原模型。阶段由应用显式切换,不会因为中间工具输出自己变掉。JevTeamPlanner 可以推荐已授权且可用的成员,真正分派仍是调度器的事。

JevAutoModeMiddleware 检查已经成形的工具调用。退款工具进了候选目录,订单状态还没查清时,真正的退款调用仍要再查。ENFORCE(把判断结果真正应用到执行上的模式)下,被拒绝的调用不派发;判断本身失败时,受保护的调用也不派发。业务权限、参数校验和幂等仍由原来的执行链负责。判断通过只表示可以继续执行,不是授权证明,也不是业务成功。

运行模式要分开。普通中间件默认 OFF。SHADOW 只记录建议,主模型仍拿到原来的工具目录。只有 ENFORCE 才按具体用例施加限制。应用直接调用 Judge,会真的发起复核,不受某个全局模式的隐含控制。演示里的置信度 0.8、拒绝阈值 0.2、最多 2 个工具,只说明分支,不能当成生产阈值。生产观察要尽快返回,并把判断版本、延迟和建议挂到当次运行上。

执行中:压缩上下文,但别把不确定材料写成记忆

长任务会堆上文件读取、搜索结果和工具历史。JevContextCompactor 接在 Harness 已有的压缩入口上,在宿主标记可处理的工具范围内,成对判断某次历史调用和结果是保留、截断,还是从当前上下文移除。最近消息、系统消息、固定约束和未完成的工具结果有明确保护;不确定的材料留下。ENFORCE 时,归档成功才能压缩;归档失败或减得不够,就保持当前历史。之后恢复读的是已保存消息,不会重跑历史工具。截断留的是结果前缀,不是生成出来的摘要。最终请求仍过 Harness 的预算检查。归档可以按用户、会话和 Agent 隔离。

长期记忆另有入口。JevMemoryGate 同时看候选事实有没有长期价值、是否和已有事实冲突,只给准入建议。真正写入由应用负责。上下文压缩不会自动把材料变成长期记忆。

检索也不只是按相关度排序。用户问「退款是不是一定成功」,政策里「必须满足条件并通过审核」正好反驳这个前提,这才是关键证据。JevEvidenceProcessor 在宿主先做访问控制之后,对可见材料分类、过滤和重排,区分提示注入、答案证据和前提冲突。材料留下之后,还要再查生成的答案是不是真由它支撑。两步分别解决「给模型什么材料」和「模型有没有忠实使用材料」。

输出时只改文本,不要重跑已经做完的业务

政策是「未使用物品七天内可退」,Agent 写成「无条件退款」,要改的是答案。整段重跑 Agent,可能把已经完成的业务操作再做一遍。JevResponseMiddleware 对不含工具调用的最终文本做质量复核。ENFORCE 下,原稿明显不通过时,可以进入有限轮次的纯文本修订;修订调用不带工具,也不重跑工具循环。修订稿再次通过才发布。证据不足、复核出错或修订次数用尽时,未通过的原稿不发布。

修订过程不逐字流式给用户,通过复核后才发出文本。应用要设复核和修订预算,并处理拒绝或转人工。SHADOW 只复核原稿,不修订,也不拦截发布。

长任务:监督不宣布完成,轨迹评测也不改写已发生的动作

JevSupervisionMiddleware 在任务进行中看有没有实质进展、是否停滞或跑偏、要不要额外验证,并给出继续做、重新核对方向、请求验证或完成复核等建议。监督只支持 OFF 和 SHADOW,不会自己停任务,也不会自己标完成。完成复核要求宿主提供与当前版本和范围匹配的验证证据。Agent 说「做完了」,不是可信的交付结论。

JevTraceEvaluator 可以评历史轨迹,也可以用中间件收集当次运行的真实调用。内置指标分开看工具选择、工具结果利用、答案依据、范围遵守、相关性、完整性和间接提示注入。还可以加一条不调用模型的确定性工具轨迹对比。同一套定义既能在线观察,也能离线批量评;自定义指标承接业务标准。结果保留分类、分数、通过与否和状态,不把跳过、弃权和错误揉成一个低分。

事后评测不会撤销已经执行的工具,也不会为了把分数做高而重跑业务流程。在线中间件同样只支持 OFF 和 SHADOW。它的用处是发现问题、比较版本、积累回归样本。

代码审查和只读浏览也沿用同一边界。JevCodeReviewer 按阶段筛 diff 或源码快照里的风险,再从解析出的真实区域定位证据,输出机制、严重程度和待复核项。它只支持 OFF 和 SHADOW,不自动发布审查意见,也不批准合并。「什么都没发现」不能当成代码安全证明。JevBrowserNavigator 在授权页面的可见候选里选择只读的导航、滚动或等待。页面变了,旧建议必须重新观察。只有独立验证通过才返回 VERIFIED;模型自己选 DONE,不算完成。

怎么接、怎么判一条概率

业务代码直接使用客户端、Judge 或评测器时,引入 agentscope-extensions-jev,Java 17 或更高,模块版本保持一致。JEV 的密钥和生成模型的配置分开。未显式设置时,客户端依次读 TYPESAFE_API_KEY 和 JEV_API_KEY,都没有有效值就无法构建客户端。示例请求打到 https://api.typesafe.ai,模型名 jev-latest,单次超时 5 秒,重试 2 次、初始退避 500 毫秒。更高层的 Judge 或 JevExecution 可以给包含重试和退避的整段决策另设预算。示例里 Judge 的预算是 2 秒。

一次请求由共享的 state 和按 ID 命名的问题组成。state 放用户请求、工具结果、政策或草稿;问题描述这些材料应满足的条件。演示故意放进事实冲突:业务记录是「退款尚未执行」,草稿写成「退款已完成」,问题是记录是否支持草稿里的退款状态。这时期望支持概率偏低,但具体数值来自真实模型,不能写死成验收结果。可以把草稿改成与记录一致,在同一问题上比较两次输出,再补真实业务样本。

客户端会校验答案类型、问题集合和概率等字段。请求或响应失败抛出 JevException。接口错误不能当成概率 0。反应式服务应组合返回的 Mono,不要在事件循环里阻塞。

JevJudge 把概率收成可复用的复核结果。示例准则期望成立:不高于 0.2 为 FAIL,不低于 0.8 为 PASS,中间是 INCONCLUSIVE,请求失败是 ERROR。这两个阈值只演示状态分支,必须用业务样本校准。Judge 返回结果,不自动发布或修订答案。PASS 继续后续发布检查,FAIL 修订或再查,INCONCLUSIVE 补证据,ERROR 走失败处理。准则或阈值一变,就更新定义版本,方便离线回归。不要为了打日志把同一个 Mono 再订阅一次,那会把复核再跑一遍。

挂到已有 Harness 上时,还要同版本的 agentscope-harness。中间件只过滤已经注册的工具,不负责创建工具。SHADOW 下用「查订单」「没发货就退款」和一句问候检查建议是否出现在记录里,实际工具目录应保持不变。校准后再切到 ENFORCE,重建中间件和 Agent,复查真正传给模型的工具。只注册中间件本身不会执行任务。

Spring Boot 可以用 agentscope-jev-spring-boot-starter。Starter 在没有自定义 JevClient Bean 时创建客户端,配置的是客户端,不会自动给所有 Agent 打开工具过滤或 ENFORCE。中间件仍要显式接入。agentscope.jev.enabled=false 会关掉自动创建,依赖该 Bean 的业务组件要跟着改。

AgentScope Service 可以在会话的 agentOverrides.jev 里分别配置工具选择、护栏、路由、内容和质量复核、评测、压缩、监督、代码审查、检索和浏览器。检索源、模型目录、浏览器会话和验证证据仍由宿主接入。examples 里的免密钥示例使用脚本化模型和合成判断,只验证流程,不代表真实模型质量。

值不值得加上这一层

多一次判断就多一次请求和等待。工具描述变少,不代表端到端更快;复核变多,也不代表任务成功率更高。要在相同输入上比较原流程和加上判断后的流程,把判断质量、实际派发行为和最终业务结果分开量。

退款护栏同时统计错误放行,以及本应放行却被拦住的比例。答案修订看最终准确率,也看多出来的等待。压缩要查关键事实还在不在,以及后续答案质量。评测时保留错误、弃权和跳过,把判断延迟和整体延迟分开,不要把缺失的用量记成零成本。

可以先用 SHADOW 攒样本,再按用例决定是否 ENFORCE,并核对失败时的退路:工具选择或路由失败时保持原流程;受保护工具的检查失败则拒绝派发;发布前复核失败则拦住文本。文档另外提供评测指南、预算和可观测性。作者把没生效的尝试也算有效反馈,收集在 Issue #3251。

限制也写在流程里。演示阈值不是生产标准。SHADOW 不改变真实目录、不修订、不拦截。监督和轨迹评测的在线模式不能代替业务回执,也不能撤销已执行动作。示例里的合成判断不能当成模型质量。接口失败不是低概率。压缩失败就保留原历史,记忆准入不会自动落库。

阿里云,Alibaba Cloud Native Community,Teaching Agents to Decide: From JEV Integration to the Full Harness Decision Flow,2026-11-03,https://www.alibabacloud.com/blog/teaching-agents-to-decide-from-jev-integration-to-the-full-harness-decision-flow_603722

觉得有用,转给同事

微信扫码

用微信扫一扫,在手机上打开后即可转发。

用 RSS 订阅

提交勘误