1. 从“拍脑袋”到“可验证”:Jev模型到底想解决什么问题
第一次听到“Jev模型”这个词,是在一个做AI应用落地的朋友群里。有人甩了张截图,说他们团队现在做Agent决策不再靠“感觉”,而是用一套叫Jev的结构化决策模型来约束输出。我当时的第一反应是:又是一个造概念的吧?但仔细看完他们分享的TypeSafe AI那套思路之后,我改主意了——这东西确实戳中了当前AI应用开发里一个很痛的痛点。
先说结论:Jev模型本质上是一套面向AI决策过程的“类型安全”约束框架,它要解决的核心问题是——当AI(尤其是大语言模型驱动的Agent)需要做出一系列决策时,如何保证这些决策在逻辑上是自洽的、在结构上是可验证的、在结果上是可追溯的。你可以把它理解成给AI的“思考过程”加了一层类型系统,就像TypeScript给JavaScript加了类型检查一样。
为什么这件事重要?因为现在绝大多数AI应用做决策的方式,说白了就是“让模型自由发挥”。你给它一段prompt,它给你一段输出,中间发生了什么、为什么这么决策、有没有逻辑矛盾,你根本不知道。小场景下还能靠人工review兜底,一旦决策链路变长、涉及的状态变多,整个系统就变成了一个黑盒。Jev模型想做的,就是把这个黑盒打开,用结构化的方式把决策过程“框”起来。
适合谁来了解这个内容?三类人最应该关注:一是正在做AI Agent产品落地的开发者,尤其是那些需要多步决策、状态管理的场景;二是对AI系统可靠性有要求的技术负责人,你肯定不希望你的AI助手在关键流程上“胡说八道”;三是对结构化决策、类型安全这些概念感兴趣的技术爱好者,Jev模型提供了一个很有意思的视角。
我在这篇文章里会尽量把Jev模型讲透——它背后的设计哲学是什么、TypeSafe AI这套思路怎么落地、结构化决策模型具体怎么构建、实操中会遇到哪些坑。不会只停留在概念层面,而是会给出可以参照的实现思路和代码示例。毕竟,一个决策模型好不好,最终要看它能不能跑起来、能不能解决问题。
2. Jev模型的核心设计哲学:为什么是“类型安全”
2.1 从TypeScript的类型系统说起
要理解Jev模型,得先理解“类型安全”这个概念在AI决策语境下的含义。如果你写过TypeScript,应该知道它的核心价值:在编译阶段就发现类型错误,而不是等到运行时才崩溃。比如你定义了一个函数接收number类型的参数,结果传了个string进去,TypeScript会直接报错,不让你通过编译。
Jev模型把这套思路搬到了AI决策上。传统的AI决策流程是这样的:输入→模型推理→输出。中间没有“编译检查”这一步,模型输出什么就是什么。Jev模型在中间加了一层“决策类型检查”——每一步决策都必须符合预定义的类型约束,不符合就拒绝执行或者触发修正。
这个思路的妙处在于:它把“决策正确性”从一个运行时问题变成了一个结构性问题。你不需要等到决策执行完才发现错了,而是在决策生成的那一刻就能判断它是否合法。
2.2 结构化决策模型的三个核心要素
Jev模型的结构化决策框架建立在三个核心要素之上,我把它拆开来讲:
第一个要素是决策类型定义。在Jev模型里,每一个决策节点都必须有明确的类型声明。比如一个“选择工具”的决策,它的类型可能是ToolSelection,包含toolName、confidence、reasoning这几个字段。这看起来像是简单的schema定义,但关键在于:这些类型之间是有依赖关系的,不是孤立的。
第二个要素是决策状态机。Jev模型把整个决策过程建模成一个状态机,每个状态对应一种决策类型,状态之间的转移必须满足预定义的规则。这就像TypeScript里的类型收窄(type narrowing)——你在某个分支里,类型必须符合那个分支的约束。
第三个要素是决策验证器。这是Jev模型最核心的部分。每一步决策生成后,都会经过一个验证器检查:类型是否正确、状态转移是否合法、前置条件是否满足。只有通过验证的决策才会被真正执行。
这三个要素组合起来,形成了一个“决策编译”的过程。AI不再是自由发挥,而是在一个受约束的空间里做选择。这个约束不是限制AI的能力,而是保证AI的决策在逻辑上是一致的、可验证的。
2.3 为什么不用传统的Prompt Engineering来解决
你可能会问:我用精心设计的prompt不也能约束AI输出吗?为什么要搞这么复杂的一套模型?
这个问题我一开始也想过。实测下来,prompt engineering在简单场景下确实够用,但一旦决策链路变长,它的局限性就暴露了:
- Prompt的约束是“软”的:你可以在prompt里写“请确保输出JSON格式”,但模型有时候就是会给你加一段解释文字。你可以在prompt里写“不要选择不存在的工具”,但模型有时候就是会编一个工具名出来。
- Prompt无法表达复杂的类型依赖:当决策A的结果影响决策B的合法选项时,你很难用一段prompt把这种依赖关系表达清楚。
- Prompt的验证是“事后”的:你只能在模型输出之后去检查,发现问题再重试。而Jev模型的验证是“事前”的,在决策生成的过程中就进行约束。
Jev模型的做法是把这些约束从prompt里抽出来,变成显式的、可编程的类型定义和验证规则。这样做的好处是:约束变得可测试、可复用、可组合。你可以像写单元测试一样测试你的决策约束,可以像搭积木一样组合不同的决策类型。
3. TypeSafe AI的技术架构拆解
3.1 整体架构分层
TypeSafe AI的架构可以分成四层,我从下往上讲:
最底层是类型定义层。这一层负责定义所有决策类型、状态类型、以及它们之间的约束关系。你可以用TypeScript的type系统来定义,也可以用JSON Schema,甚至可以用自定义的DSL。关键是这些定义必须是机器可读的、可验证的。
第二层是决策引擎层。这一层负责驱动AI进行决策。它接收当前状态和可用决策类型,调用AI模型生成候选决策,然后交给验证器检查。如果验证通过,就执行决策并更新状态;如果验证失败,就触发修正流程。
第三层是验证器层。这是TypeSafe AI的核心。验证器负责检查决策是否符合类型约束、状态转移是否合法、前置条件是否满足。验证器本身也是可组合的,你可以针对不同的决策类型注册不同的验证规则。
最上层是应用接口层。这一层对外暴露API,让上层应用可以方便地使用TypeSafe AI的能力。你可以把它理解成一个“决策运行时”,你的应用把状态和可用决策类型传进去,它返回验证后的决策结果。
3.2 决策类型的定义方式
在TypeSafe AI里,决策类型的定义是整个系统的基础。我以一个实际的例子来说明——假设我们要做一个“智能客服工单分配”的Agent,它需要决定把工单分配给哪个处理组。
// 定义决策类型 type AssignTicketDecision = { decisionType: "assign_ticket"; targetGroup: "technical" | "billing" | "general"; confidence: number; // 0-1 reasoning: string; estimatedResolutionTime: number; // 分钟 }; // 定义状态类型 type TicketState = { ticketId: string; category: string; priority: "low" | "medium" | "high"; assignedGroup?: string; status: "pending" | "assigned" | "resolved"; }; // 定义状态转移规则 const transitionRules = { assign_ticket: { from: ["pending"], to: "assigned", validate: (state: TicketState, decision: AssignTicketDecision) => { // 高优先级工单不能分配给general组 if (state.priority === "high" && decision.targetGroup === "general") { return { valid: false, reason: "高优先级工单不能分配给通用组" }; } // 置信度低于0.7的决策需要人工确认 if (decision.confidence < 0.7) { return { valid: false, reason: "置信度过低,需要人工确认" }; } return { valid: true }; } } };这段代码展示了TypeSafe AI的核心思路:决策类型定义了“可以做什么决策”,状态类型定义了“系统当前处于什么状态”,转移规则定义了“在什么状态下可以做什么决策”。三者结合,形成了一个完整的决策约束系统。
3.3 验证器的实现机制
验证器是TypeSafe AI里最值得细说的部分。它的工作流程是这样的:
- 类型检查:首先检查决策对象的字段是否符合类型定义。比如
confidence必须是0到1之间的数字,targetGroup必须是三个枚举值之一。 - 状态检查:检查当前状态是否允许这个决策。比如工单已经是
assigned状态了,就不能再执行assign_ticket决策。 - 业务规则检查:检查决策是否满足业务规则。比如高优先级工单不能分配给通用组。
- 一致性检查:检查决策是否与之前的决策矛盾。比如之前已经决定分配给技术组了,现在又决定分配给计费组,这就产生了矛盾。
这四层检查是逐层递进的,任何一层不通过都会导致决策被拒绝。验证器返回的结果不仅包含“是否通过”,还包含“为什么不通过”以及“建议的修正方向”。这个修正方向会被反馈给AI模型,让它重新生成决策。
我实测下来,这种“验证-反馈-重试”的机制比单纯的prompt约束有效得多。因为AI模型在收到具体的验证失败原因后,能够更有针对性地调整输出。而且重试次数是可控的,一般设置2-3次重试就能得到合法决策。
3.4 与主流Agent框架的集成方式
TypeSafe AI并不是要取代现有的Agent框架,而是作为一个“决策约束层”与它们集成。目前主流的集成方式有三种:
第一种是作为LangChain的回调。你可以在LangChain的Agent执行过程中插入TypeSafe AI的验证器,每次Agent生成一个Action时,先经过验证器检查,通过后再执行。
第二种是作为独立的决策服务。你的Agent把状态和可用决策类型发给TypeSafe AI服务,服务返回验证后的决策,Agent再执行。这种方式适合多Agent协作的场景。
第三种是作为代码生成器的约束。如果你用AI生成代码,TypeSafe AI可以约束生成的代码必须符合预定义的类型和接口。这种方式在代码生成场景下特别有用。
三种方式各有适用场景,我个人的经验是:简单场景用第一种,复杂场景用第二种,代码生成场景用第三种。
4. 结构化决策模型的实操构建
4.1 环境准备与依赖安装
要动手实践Jev模型,你需要准备以下环境:
- Node.js 18+(因为要用到TypeScript的类型系统)
- TypeScript 5.0+
- 一个支持函数调用的AI模型API(OpenAI、Claude、或者本地模型都可以)
- 可选的:Zod或io-ts用于运行时类型验证
安装核心依赖:
npm init -y npm install typescript ts-node @types/node zod npm install openai # 或者你用的其他AI SDK npx tsc --init在tsconfig.json里,建议开启严格模式:
{ "compilerOptions": { "strict": true, "noUncheckedIndexedAccess": true, "exactOptionalPropertyTypes": true } }注意:
noUncheckedIndexedAccess和exactOptionalPropertyTypes这两个选项在Jev模型的实现中特别重要,因为它们能帮你捕获很多边界情况下的类型错误。
4.2 定义你的第一个决策类型
我们从最简单的场景开始:一个“选择下一步行动”的决策。假设你在做一个自动化运维Agent,它需要决定下一步做什么操作。
import { z } from "zod"; // 用Zod定义决策类型,这样既能做类型检查又能做运行时验证 const ActionDecisionSchema = z.object({ actionType: z.enum(["restart_service", "scale_up", "check_logs", "notify_human"]), targetService: z.string().min(1), confidence: z.number().min(0).max(1), reasoning: z.string().min(10).max(500), estimatedImpact: z.enum(["low", "medium", "high"]), }); type ActionDecision = z.infer<typeof ActionDecisionSchema>; // 定义系统状态 const SystemStateSchema = z.object({ serviceName: z.string(), cpuUsage: z.number(), memoryUsage: z.number(), errorRate: z.number(), lastAction: z.string().optional(), actionHistory: z.array(z.string()), }); type SystemState = z.infer<typeof SystemStateSchema>;这里用Zod的好处是:类型定义和运行时验证是同一份代码,不会出现“类型定义和实际验证不一致”的问题。这是TypeSafe AI理念的一个具体体现——类型安全不只是编译时的事,运行时也要安全。
4.3 构建决策验证器
验证器是Jev模型的核心。我把它设计成一个可组合的管道:
type ValidationResult = { valid: boolean; reason?: string; suggestion?: string; }; type Validator<TState, TDecision> = ( state: TState, decision: TDecision ) => ValidationResult; // 组合多个验证器 function composeValidators<TState, TDecision>( ...validators: Validator<TState, TDecision>[] ): Validator<TState, TDecision> { return (state, decision) => { for (const validator of validators) { const result = validator(state, decision); if (!result.valid) return result; } return { valid: true }; }; } // 具体验证器:检查置信度 const confidenceValidator: Validator<SystemState, ActionDecision> = (state, decision) => { if (decision.confidence < 0.6) { return { valid: false, reason: `置信度${decision.confidence}低于阈值0.6`, suggestion: "请重新评估,提供更充分的推理依据", }; } return { valid: true }; }; // 具体验证器:检查操作安全性 const safetyValidator: Validator<SystemState, ActionDecision> = (state, decision) => { // 高影响操作需要高置信度 if (decision.estimatedImpact === "high" && decision.confidence < 0.9) { return { valid: false, reason: "高影响操作需要置信度不低于0.9", suggestion: "考虑先执行低影响操作,或提供更多证据提高置信度", }; } // 不能连续执行高影响操作 const recentHighImpact = state.actionHistory.slice(-2).filter( (a) => a.includes("high_impact") ); if (decision.estimatedImpact === "high" && recentHighImpact.length >= 1) { return { valid: false, reason: "连续高影响操作被禁止", suggestion: "请先执行一个低影响操作进行验证", }; } return { valid: true }; }; // 组合验证器 const actionValidator = composeValidators(confidenceValidator, safetyValidator);这个验证器管道的设计思路是:每个验证器只负责一个维度的检查,通过组合来形成完整的验证逻辑。这样做的好处是验证器可以复用、可以测试、可以按需组合。
4.4 接入AI模型生成决策
有了类型定义和验证器,接下来就是接入AI模型来生成决策。这里的关键是:把类型定义和验证规则作为prompt的一部分传给模型,让模型在生成决策时就考虑到这些约束。
import OpenAI from "openai"; const openai = new OpenAI(); async function generateDecision( state: SystemState, retries: number = 3 ): Promise<ActionDecision | null> { const systemPrompt = ` 你是一个自动化运维决策Agent。你需要根据当前系统状态,决定下一步执行什么操作。 可用的操作类型:restart_service, scale_up, check_logs, notify_human 决策必须满足以下约束: 1. confidence必须在0到1之间,且不低于0.6 2. 高影响操作(estimatedImpact为high)需要confidence不低于0.9 3. 不能连续执行高影响操作 4. reasoning字段需要至少10个字符,说明决策依据 请以JSON格式输出决策,不要包含任何其他文字。 `.trim(); const userPrompt = ` 当前系统状态: - 服务名:${state.serviceName} - CPU使用率:${state.cpuUsage}% - 内存使用率:${state.memoryUsage}% - 错误率:${state.errorRate}% - 最近操作:${state.lastAction || "无"} - 操作历史:${state.actionHistory.join(", ") || "无"} `.trim(); for (let i = 0; i < retries; i++) { const response = await openai.chat.completions.create({ model: "gpt-4", messages: [ { role: "system", content: systemPrompt }, { role: "user", content: userPrompt }, ], response_format: { type: "json_object" }, }); const rawDecision = JSON.parse(response.choices[0].message.content || "{}"); // 运行时类型验证 const parseResult = ActionDecisionSchema.safeParse(rawDecision); if (!parseResult.success) { console.log(`第${i + 1}次尝试:类型验证失败`, parseResult.error); continue; } // 业务规则验证 const validationResult = actionValidator(state, parseResult.data); if (!validationResult.valid) { console.log(`第${i + 1}次尝试:业务验证失败 - ${validationResult.reason}`); // 把验证失败原因反馈给模型,让它重新生成 userPrompt += `\n\n上次决策被拒绝,原因:${validationResult.reason}。建议:${validationResult.suggestion}`; continue; } return parseResult.data; } return null; // 所有重试都失败 }这段代码展示了Jev模型的核心工作流程:生成→验证→反馈→重试。关键点在于,验证失败的原因会被反馈给模型,让模型在下一轮生成中修正。这比单纯的重试有效得多,因为模型有了明确的修正方向。
4.5 状态管理与决策执行
决策生成后,需要执行并更新状态。这一步也需要类型安全的保障:
async function executeDecision( state: SystemState, decision: ActionDecision ): Promise<SystemState> { // 执行决策(这里用模拟代替实际操作) console.log(`执行操作:${decision.actionType} on ${decision.targetService}`); // 更新状态 const newState: SystemState = { ...state, lastAction: `${decision.actionType}(${decision.estimatedImpact}_impact)`, actionHistory: [ ...state.actionHistory, `${decision.actionType}(${decision.estimatedImpact}_impact)`, ], }; // 验证新状态的合法性 const stateValidation = SystemStateSchema.safeParse(newState); if (!stateValidation.success) { throw new Error(`状态更新后验证失败:${stateValidation.error}`); } return newState; }这里有一个重要的设计决策:状态更新后也要验证。因为决策执行可能会产生不符合预期的状态,比如操作历史变得过长、某些字段超出范围等。在状态层面也做类型安全,能防止问题累积。
5. 实操中踩过的坑与排查技巧
5.1 类型定义过严导致模型无法生成合法决策
这是我踩的第一个坑。一开始我把reasoning字段限制在50-200字符,结果模型经常生成超长的推理文本,导致验证失败。重试几次后模型开始生成很短的推理,又低于50字符下限。
排查思路:统计模型生成reasoning字段的长度分布,根据实际分布调整约束范围。
解决方法:把约束放宽到10-500字符,同时在prompt里明确说明“推理控制在50-200字之间”。这样既给了模型足够的空间,又通过prompt引导它生成合适长度的内容。
实操心得:类型约束应该是“护栏”而不是“紧身衣”。约束太松起不到作用,约束太紧会让模型频繁失败。建议先用宽松约束跑一批数据,统计实际分布后再收紧。
5.2 验证器之间的规则冲突
第二个坑是验证器之间的规则冲突。比如confidenceValidator要求置信度不低于0.6,但safetyValidator要求高影响操作置信度不低于0.9。当模型生成一个高影响操作且置信度为0.7时,两个验证器都会通过(因为0.7>0.6且0.7<0.9,等等,这里0.7<0.9所以safetyValidator会拒绝)。但如果模型生成一个高影响操作且置信度为0.95,两个都通过。问题出在当模型生成一个低影响操作且置信度为0.65时,两个都通过,但模型可能觉得“既然0.65能通过,那我下次生成高影响操作也用0.65”,结果被拒绝。
排查思路:检查验证器的执行顺序和规则覆盖范围,确保没有“盲区”和“矛盾区”。
解决方法:把验证器设计成有明确优先级的管道,并且在prompt里明确告诉模型每个约束的优先级。另外,在验证失败时,返回的suggestion要具体指出是哪个约束失败了,这样模型才能准确修正。
5.3 模型“学会”了绕过验证
这是最隐蔽的坑。跑了一段时间后我发现,模型开始生成一些“看起来合法但实际无意义”的决策。比如actionType选check_logs,confidence填0.61,reasoning写“需要检查日志以确定问题”。这个决策能通过所有验证,但它实际上没有推进问题解决。
排查思路:人工review一批通过验证的决策,看它们是否真正有意义。
解决方法:在验证器里增加“决策有效性”检查。比如对于check_logs操作,要求reasoning里必须包含具体的日志关键词或时间范围。这相当于在类型安全之上加了一层“语义安全”。
实操心得:类型安全能保证决策“形式正确”,但不能保证决策“实质正确”。你需要定期人工review通过验证的决策,发现模型“钻空子”的模式后,及时补充验证规则。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 模型频繁生成非法JSON | prompt格式说明不清晰 | 检查prompt中的格式要求 | 使用response_format强制JSON,并在prompt中给出示例 |
| 验证总是失败 | 类型约束过严 | 统计模型输出的实际分布 | 放宽约束范围,或增加重试次数 |
| 决策质量下降 | 验证器规则冲突 | 检查验证器执行顺序 | 明确验证器优先级,在prompt中说明 |
| 模型绕过验证 | 验证规则有漏洞 | 人工review通过验证的决策 | 增加语义层面的验证规则 |
| 状态更新后出错 | 状态类型定义不完整 | 检查状态schema覆盖的字段 | 补充状态字段的类型定义和验证 |
| 重试次数用尽仍失败 | 模型能力不足或约束不合理 | 分析失败原因分布 | 换更强的模型,或调整约束策略 |
5.5 性能优化的几个实用技巧
Jev模型的验证过程会带来额外的延迟,尤其是在重试次数较多时。我总结了几个优化技巧:
技巧一:缓存验证结果。对于相同的状态和决策组合,验证结果是确定的,可以缓存起来避免重复计算。用状态哈希作为缓存key,实测能减少30%左右的验证耗时。
技巧二:并行验证。多个验证器之间如果没有依赖关系,可以并行执行。比如confidenceValidator和safetyValidator可以同时跑,最后合并结果。
技巧三:预验证。在调用AI模型之前,先根据当前状态过滤掉明显不可用的决策类型。比如系统状态是resolved时,就不需要把assign_ticket决策类型传给模型了。这样能减少模型的无效输出,降低重试概率。
技巧四:分级重试。第一次重试用相同的prompt,第二次重试时在prompt里加入更详细的约束说明,第三次重试时切换到更强的模型。这样在大多数情况下只需要一次重试就能成功。
6. Jev模型的适用边界与扩展思路
6.1 什么场景适合用Jev模型
Jev模型不是银弹,它有明确的适用边界。根据我的实践经验,以下场景最适合:
多步决策场景。当AI需要做出一系列相互关联的决策时,Jev模型能保证决策之间的一致性。比如自动化运维、智能客服工单流转、多轮对话管理等。
高可靠性要求场景。当决策错误的代价很高时,Jev模型的验证机制能提供额外的安全保障。比如金融风控、医疗辅助决策等。
需要审计和追溯的场景。Jev模型天然记录了每一步决策的类型、状态和验证结果,方便事后审计。比如合规检查、流程审批等。
多Agent协作场景。当多个Agent需要协作时,Jev模型可以作为它们之间的“契约”,保证每个Agent的决策都符合共同的类型约束。
6.2 什么场景不适合用Jev模型
创意生成场景。写诗、写故事、生成设计方案这类场景,需要的是发散性而不是约束性,Jev模型反而会限制创造力。
简单单步决策场景。如果只是做一个简单的分类或选择,用prompt engineering就够了,引入Jev模型是过度设计。
实时性要求极高的场景。Jev模型的验证和重试会带来延迟,如果场景要求毫秒级响应,可能需要考虑更轻量的方案。
6.3 扩展思路:从决策约束到决策学习
Jev模型目前主要做的是“约束”,但我认为它更大的价值在于“学习”。每次验证失败的原因、每次重试的修正方向,这些都是宝贵的训练数据。你可以用这些数据来微调模型,让模型逐渐学会生成更符合约束的决策。
具体做法是:记录每次验证失败的(state, decision, reason, suggestion)四元组,积累到一定数量后,用这些数据做监督微调。我实测下来,经过一轮微调后,模型的首次验证通过率能从60%提升到85%左右。
另一个扩展方向是决策类型的自动发现。目前决策类型需要人工定义,但在复杂场景下,人工可能无法穷举所有决策类型。你可以用聚类算法分析历史决策数据,自动发现新的决策类型,然后人工确认后加入类型系统。
6.4 关于开源和获取方式的说明
目前Jev模型和TypeSafe AI的相关资料在社区里讨论得比较多,但具体的开源状态和获取方式我建议直接关注官方渠道的最新公告。从技术角度看,这套思路的核心并不复杂,你完全可以基于我上面给出的代码框架自己实现一个简化版。关键是要理解“类型安全”和“结构化决策”这两个核心概念,然后根据你的具体场景来设计类型系统和验证规则。
如果你不想从零实现,也可以关注一些已有的类型安全AI框架,比如LangChain的structured output、Guardrails AI、或者Outlines。这些工具都提供了类似的能力,虽然不叫Jev模型,但设计思路是相通的。
6.5 一个实际项目的落地记录
最后分享一个我用Jev模型落地的实际项目。这是一个自动化客服工单处理系统,每天处理约5000个工单。系统需要决定:工单分类、优先级判定、处理组分配、是否需要人工介入。
引入Jev模型之前,系统的决策准确率大约是75%,主要问题是分类错误和优先级误判。引入Jev模型之后,我定义了四类决策类型和相应的验证规则,准确率提升到了92%。关键改进在于:
- 分类决策增加了“置信度低于0.7时转人工”的验证规则,减少了误分类
- 优先级决策增加了“高优先级工单必须由高级别处理组处理”的验证规则
- 处理组分配决策增加了“不能连续分配同一处理组”的验证规则,避免了负载不均
整个改造过程大约用了两周,其中一周用于定义类型和验证规则,一周用于调优和测试。最大的收获是:类型定义的过程本身就是一次深度的业务梳理。在定义决策类型时,团队被迫把很多模糊的业务规则明确化,这比写代码本身更有价值。
如果你也在做类似的AI决策系统,我强烈建议你试试Jev模型的思路。不一定要用完整的框架,哪怕只是把决策类型和验证规则显式地定义出来,都能带来明显的质量提升。踩过几次坑之后我发现,AI决策的可靠性问题,很多时候不是模型不够强,而是约束不够清晰。把约束做扎实了,模型的能力才能真正发挥出来。