ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

判断模型Jev:Agent决策与生成分离的工程实践

判断模型Jev:Agent决策与生成分离的工程实践 1. 一个不写字的模型凭什么让 Agent 圈集体侧目第一次看到 Jev 这个名字是在几个 Agent 开发群里同时刷屏。点进去之前我以为是又一个套壳对话模型结果翻了半天文档才发现这东西压根不生成文本。它干的事情很反直觉你给它一段上下文、一组候选动作、一堆约束条件它不给你写小作文只给你一个判断结果——下一步该走哪条路、这个工具调用是否合法、当前状态是否满足退出条件。说白了Jev 是一个判断模型不是生成模型。这个定位在 2025 年到 2026 年的 AI Agent 浪潮里非常关键。因为但凡真正搭过 Agent 的人都知道最让人头疼的从来不是让模型说人话而是让模型在关键时刻做对决定。你用一个通用大模型去当 Agent 的大脑它会在该调用工具的时候跟你聊天在该停止的时候继续瞎编在该拒绝的时候硬着头皮执行。Jev 这类模型的出现本质上是把 Agent 里最脆弱的那一环——决策与校验——单独拎出来用一个专门训练的模型去扛。这篇文章我想聊的不是Jev 有多神而是作为一个实际搭过 Agent 的人我怎么理解它的定位、它和 Codex、BrowserUse、TypeSafe 这些热词之间的关系、以及如果你手上正好有一个 Agent 项目该怎么把这类判断模型接进去。适合已经动手写过 Agent 循环、被工具调用坑过、或者正在纠结到底要不要上专用判断模型的开发者。如果你还在纠结 Agent 是什么那这篇可能稍微超前了一点但也不妨碍你先建立个印象。2. 判断模型到底解决什么问题从 Agent 循环的痛点说起2.1 通用大模型当 Agent 大脑的三个致命伤我先讲一个我自己踩过的坑。早些年搭一个自动处理工单的 Agent用的是通用大模型做决策。流程很简单读工单、判断类型、调用对应工具、生成回复。跑 demo 的时候一切正常一上量就崩。崩的方式很有代表性第一种是该停不停。Agent 已经拿到了足够信息理论上应该输出最终结果了但模型还在那儿我再确认一下反复调用同一个查询工具陷入死循环。你加个最大步数限制吧它又在该继续的时候被强行掐断。第二种是该调不调。明明有个现成的工具能查数据库模型偏要用自己的知识瞎猜猜错了还特别自信。你问它为什么不调工具它说我认为这个问题我可以直接回答。第三种是格式漂移。你要求它输出结构化的工具调用参数前几轮还好跑到第十几轮JSON 就开始缺括号、多逗号、字段名拼错。通用模型在长上下文里对格式的保持能力远没有你想象的那么稳。这三个问题的共同点是它们都不是生成质量问题而是判断质量问题。通用大模型被训练成尽量给出有用回复而不是在约束下做出最优决策。这两个目标在很多时候是冲突的。2.2 判断模型的核心思路把决策从生成里剥离Jev 这类判断模型的思路就是把决策这件事从生成任务里彻底剥离出来。它不负责说什么只负责做什么。输入是结构化的状态描述输出是结构化的决策结果。因为任务单一它可以在训练时大量喂决策正确/错误的标注数据而不是文本流畅/不流畅的数据。这个思路其实不新鲜强化学习里早就有 value network 和 policy network 的分工。但在大模型 Agent 这个语境下把它做成一个独立的、可调用的模型服务是最近才成熟起来的工程实践。好处很直接延迟低。判断模型的参数量通常远小于通用大模型一次决策的响应时间可以压到几十毫秒级别。Agent 循环里每一步都要决策这个延迟差异会被放大很多倍。稳定性高。输出空间被严格约束格式漂移的概率大幅下降。可解释。判断结果往往带置信度或者理由标签方便你在 Agent 里做兜底逻辑。注意判断模型不是要取代通用大模型。它取代的是 Agent 循环里那些if-else 判断和格式校验的部分通用模型依然负责最终的自然语言输出。两者是分工不是替代。2.3 为什么是现在Agent 工程化的必然产物你可能会问为什么判断模型现在才火我的观察是因为 Agent 从能跑通进入到了要上生产的阶段。demo 阶段你用通用模型加一堆 prompt 技巧能跑通就行。但一旦要上生产你要考虑成本、延迟、稳定性、可观测性。这时候用一个贵模型干所有事的方案就撑不住了。Jev 刷屏的时机恰好卡在这个转折点上。大家发现Agent 里真正需要聪明的地方其实不多大部分步骤都是机械的决策和校验。把这些步骤交给一个便宜、快、稳的判断模型把通用模型留给真正需要创造力的环节整体成本和稳定性都会有明显改善。这也是为什么热词里同时出现了 Codex、BrowserUse、TypeSafe 这些词——它们都是 Agent 工程化链条上的不同环节Jev 补的是决策这一环。3. Jev 与 Codex、BrowserUse、TypeSafe 的协作关系拆解3.1 Codex 场景下 Jev 扮演什么角色Codex 这类代码 Agent 的工作流本质是一个读代码、想方案、改文件、跑测试、看结果、再改的循环。这个循环里最耗时的不是生成代码而是判断当前这一步该干什么。比如测试失败了是该改代码还是该改测试报错信息指向三个文件先看哪个已经改了五轮还没过是该换个思路还是继续微调这些判断如果用通用模型来做每次都要消耗大量 token而且判断质量不稳定。Jev 在这里的角色就是把这些分叉点接管过来。Codex 负责生成具体的代码修改Jev 负责决定下一步往哪走。热词里出现的jev在codex中使用、codex接入deepseek这类搜索反映的正是大家在探索怎么把判断模型嵌进代码 Agent 的循环里。3.2 BrowserUse 场景判断模型如何稳住网页操作BrowserUse 这类浏览器 Agent 的痛点更明显。网页是动态的、不可预测的Agent 每一步都要判断当前页面处于什么状态、我该点哪里、操作是否成功。通用模型在这里经常犯的错是页面还没加载完就急着点或者点了一个看起来像但实际不对的元素。判断模型在这里的价值是提供一个稳定的状态判断层。它接收页面 DOM 的摘要信息输出当前可执行的动作集合以及每个动作的置信度。BrowserUse 负责执行动作Jev 负责判断动作是否可行、是否已经达成目标。这种分工让浏览器 Agent 的成功率有肉眼可见的提升因为大部分失败其实不是点错了而是在不该点的时候点了。3.3 TypeSafe 与 Jev 的天然契合TypeSafe 这个词在热词里反复出现typesafe ai、typesafe ai skills github这些搜索说明大家在关注类型安全在 AI Agent 里的应用。这跟 Jev 的定位是天然契合的——判断模型的输出本身就是强类型的枚举值、布尔值、置信度分数。它不输出自由文本所以天然适合用类型系统去约束。我自己的做法是把 Jev 的判断结果定义成严格的 TypeScript 类型或者 Python 的 Pydantic 模型任何不符合类型定义的输出直接拒绝并重试。这一层类型校验比任何 prompt 里的请输出 JSON 格式都管用。因为判断模型的输出空间本来就窄加上类型约束后格式错误的概率可以压到极低。组件职责与 Jev 的关系Codex生成代码修改Jev 决定改哪里、是否继续BrowserUse执行网页操作Jev 判断页面状态与动作可行性TypeSafe约束数据结构Jev 的输出天然适配类型校验通用大模型生成自然语言Jev 接管其决策部分减轻负担这张表是我理解这几个热词关系的核心框架。你会发现Jev 不是要跟谁竞争它是补上了 Agent 工程化里一直缺的那块拼图。4. 把判断模型接进 Agent 的实操路径4.1 接入前的准备先想清楚哪些环节该交给 Jev我见过太多人一上来就想全量接入结果把 Agent 搞得四不像。正确的做法是先做减法把你现有 Agent 的循环拆开标出每一个决策点然后判断哪些决策点是机械的、可枚举的、有明确对错的。举个具体的例子。一个客服 Agent 的循环大概是读用户消息 → 判断意图 → 选择工具 → 执行工具 → 判断结果是否足够 → 生成回复。这里面判断意图和判断结果是否足够是典型的判断任务适合交给 Jev。生成回复是生成任务留给通用模型。选择工具介于两者之间如果工具集合固定且规则明确也可以交给 Jev。我的经验是先从一个决策点开始试点跑通了再扩展。不要一次性把所有决策都换掉那样出了问题你根本不知道是哪一环的锅。4.2 状态描述的设计判断模型的输入怎么组织判断模型的效果八成取决于你喂给它的状态描述质量。这里有个反直觉的点状态描述不是越详细越好而是要结构化、去噪、突出决策相关的信息。我一般会把状态描述拆成几个固定字段current_goal当前要达成的目标一句话history_summary到目前为止做过什么压缩成要点available_actions当前可执行的动作列表带参数说明constraints硬性约束比如最多再执行三步last_result上一步的执行结果这五个字段拼成一个结构化的输入交给 Jev 判断。注意history_summary一定要压缩不要把完整对话历史塞进去那样既慢又容易干扰判断。我通常用一个轻量的摘要模型先把历史压成三五句话。提示状态描述里的字段名要稳定不要这次叫current_goal下次叫goal。判断模型对字段名的稳定性有依赖频繁改名会让它的判断质量下降。4.3 输出解析与兜底判断结果怎么用Jev 的输出通常是结构化的比如{action: call_tool, tool: search, confidence: 0.87}。拿到这个结果后你的 Agent 代码要做三件事第一类型校验。用 TypeSafe 那套思路把输出反序列化成强类型对象任何字段缺失或类型不符直接判为无效。第二置信度阈值判断。置信度低于某个阈值我一般设 0.6时不要盲目执行而是走兜底逻辑——要么回退到通用模型重新判断要么直接向用户澄清。第三执行与记录。执行动作后把判断结果 实际结果记录下来这些数据是你后续优化判断模型或者调整 prompt 的宝贵素材。from pydantic import BaseModel, Field from typing import Literal class JevDecision(BaseModel): action: Literal[call_tool, finish, ask_user, retry] tool: str | None None confidence: float Field(ge0.0, le1.0) reason: str | None None def parse_decision(raw: str) - JevDecision | None: try: return JevDecision.model_validate_json(raw) except Exception: return None def handle_decision(decision: JevDecision | None): if decision is None: return fallback_to_llm() if decision.confidence 0.6: return fallback_to_llm() if decision.action call_tool: return execute_tool(decision.tool) if decision.action finish: return finalize() if decision.action ask_user: return request_clarification() return retry_step()这段代码是我实际项目里简化出来的骨架。核心思想就是判断模型的输出永远不可全信必须有类型校验和置信度兜底。这不是对 Jev 不信任而是任何模型在生产环境里都该有的防御性设计。4.4 与现有 Agent 框架的集成方式不管你用的是 LangChain、AutoGPT 还是自己手写的循环集成的思路是一样的在决策点插入一个 Jev 调用替换掉原来的通用模型判断逻辑。如果你用的是 Spring AI 那套 Java 生态热词里spring ai开发agent、spring cloud spring ai开发自己的agent出现频率很高集成方式是把 Jev 封装成一个ChatClient或者自定义的Advisor在需要判断的地方调用它。Java 生态的好处是类型系统强跟 TypeSafe 的思路天然契合。如果你用的是 Python 生态那就更简单了Jev 通常提供 HTTP 接口你用一个requests或者httpx调用就行。关键是把调用封装成一个独立的函数方便替换和测试。5. 实操中的坑与排查技巧实录5.1 判断模型过度自信怎么办我遇到最多的问题是Jev 给出的判断置信度很高但实际是错的。这种情况通常不是模型的问题而是状态描述里混入了误导性信息。比如history_summary里写了用户似乎很着急这种主观描述会干扰判断模型让它倾向于选择快速结束的动作。解决办法是把状态描述里的主观词全部去掉只保留客观事实。用户似乎很着急改成用户已发送三条消息间隔均小于 30 秒。判断模型需要的是事实不是你的解读。5.2 决策循环卡死怎么排查Agent 卡死是另一个高频问题。表现是 Jev 反复输出同一个决策Agent 反复执行同一个动作。排查思路是先看last_result字段。如果上一步的执行结果没有被正确更新Jev 会以为什么都没发生自然重复决策。再看history_summary。如果摘要没有包含已经尝试过 X 动作Jev 也会重复。最后看约束条件。如果constraints里没有禁止重复同一动作这类硬约束Jev 没有理由不重复。我的做法是在约束里显式加一条如果最近三步动作相同必须换策略这条硬约束能挡掉大部分卡死情况。5.3 常见问题速查表现象可能原因排查方向解决手段判断置信度普遍偏低状态描述信息不足检查字段是否完整补充关键字段压缩噪声反复执行同一动作结果未回写或摘要缺失检查 last_result 更新加硬约束禁止重复格式解析失败输出未严格约束检查类型定义加 TypeSafe 校验层延迟偏高状态描述过长统计输入 token 数压缩 history_summary判断与预期不符状态含主观描述审查描述用词只保留客观事实这张表是我踩坑踩出来的基本覆盖了 80% 的常见问题。剩下的 20% 通常是你的业务逻辑本身有歧义那就不是模型能解决的了。5.4 几个我踩过的坑第一个坑是过早优化。我一开始就想把 Jev 的判断结果缓存起来觉得同样的状态不用重复判断。结果发现 Agent 的状态几乎从不完全重复缓存命中率极低反而增加了复杂度。后来放弃了缓存老老实实每次都判断。第二个坑是忽略冷启动。判断模型在刚接入的头几天判断质量可能不稳定因为你的状态描述格式还在调整。这时候不要急着下结论说这模型不行给它一两周时间把状态描述打磨稳定效果会明显好转。第三个坑是把判断模型当万能药。有些决策本质上需要世界知识比如这个用户的问题涉及哪个业务领域这种就不适合交给判断模型还是得用通用模型。判断模型擅长的是在已知选项里选一个不是凭空生成选项。6. 判断模型在 Agent 生态里的位置与延伸6.1 它不是一个产品而是一种架构模式聊到这里我想强调一个观点Jev 刷屏的意义不在于它这个模型本身有多强而在于它代表了一种架构模式的成熟——把 Agent 的决策层和生成层分离。这个模式一旦被验证有效就会被各种框架吸收。你可能会看到 LangChain 推出内置的判断节点Spring AI 推出判断 Advisor甚至 Codex 这类工具直接内置判断模型。所以哪怕你最后不用 Jev理解这个模式也是有价值的。它告诉你Agent 的性能瓶颈往往不在生成而在决策而决策是可以被专门优化的。6.2 从 0 到 1 搭建 Agent 时的判断层设计如果你正在从零搭一个 Agent我的建议是在架构设计阶段就把判断层单独画出来。不要把它混在业务逻辑里而是做成一个独立的模块输入是结构化状态输出是结构化决策。这样做的直接好处是判断逻辑可以单独测试不用跑整个 Agent判断模型可以随时替换不影响其他部分判断质量可以单独监控和优化热词里从0到1搭建ai agent、ai agent开发这些搜索量很高说明很多人正在做这件事。我的经验是判断层的设计质量直接决定了你的 Agent 能不能从 demo 走到生产。6.3 企业级场景下的考量企业级 Agent 对判断层的要求更高。热词里企业级java ai agent应用平台、ai agent部署这些词反映的正是这个需求。企业场景下判断层要额外考虑可审计每个判断结果都要有记录方便事后追溯可配置判断规则要能通过配置调整不用改代码可降级判断模型不可用时要有兜底方案权限控制不同角色的 Agent 能执行的判断范围不同这些要求其实反过来印证了判断层独立设计的必要性。如果判断逻辑散落在业务代码里上面这些要求一个都很难满足。6.4 后续可以怎么扩展判断模型这个方向我觉得还有几个值得探索的延伸。一是多模型投票用多个判断模型对同一状态做判断取多数结果提升稳定性。二是判断结果反馈闭环把实际执行结果回传给判断模型让它持续学习。三是判断层的可视化把 Agent 的决策过程画成图方便调试和演示。这些方向我自己也在摸索有些已经在小范围试了效果还不错。判断模型这个赛道2026 年应该会有更多玩家进来但核心思路不会变让专业的模型干专业的事把决策从生成里剥离出来。这个思路我觉得比任何一个具体模型都更值得记住。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进