Jev 案例库:20 个按输入和问法拆开的落地参考
先说结论
- 官方 use-case map 把落地场景分为五大类:AI 自动化软件、实时应用、大数据 Map-Reduce、通用验证、Harness 工程;为了可落地,本文按高频实操拆成五个类:AI 自动化软件、实时应用、大数据 map-reduce、客服/工单、内容与检索,其中前三类对应官方顶层,后两类是官方地图中高频出现的子场景。
- 下面整理的 20 个案例,每个都给出 state 放什么、问法(Choice/Score/Noul 及 criteria 要点)、返回什么、下游怎么用四栏。来源要分清:其中约一半直接对应官方 cookbook 或官方 demo(已在各条给出链接,可点开核对);其余来自官方 use-case map 里点名的行业场景,但 state 里放什么、criteria 怎么写、阈值取多少,都是我的做法或推断,不是官方原文。也就是说,这 20 条是「可照着改的参考」,不是 20 份官方现成配方。
- 三个最值得先抄的官方 cookbook 是:Guardrails for LLMs(输入输出护栏)、Re-ranking(BM25 短名单重排)、Double-checking Citations(引文核对),分别解决安全、检索精度、可溯源问题。
- 选型速查看四个信号:高频、结构化、要不确定度、要可编程输出。
官方地图怎么读
官方 use-case map(链接)把 TypeSafe/Jev 的适用场景划分为 AI Automation Software、Real-time applications、AI Map Reduce over Big Data、Universal Verification、Harness Engineering 五类。其核心思想是:代码控制流程,Jev 只做窄而明确的语义判断。官方 how-to 也强调:state 只放当前问题需要的上下文,问法要原子化。
关于「多个问题一起发」,官方的原话是「同一请求里的每个问题看到同一个 state,独立评估,并在你选定的 ID 下返回类型化答案」(Primitives,原文:Every question in a request sees the same state, is evaluated independently, and returns a typed answer under the ID you chose)。并行这件事官方是有明确说法的:官方 “How to build with System One” 文档里写着 “Questions are evaluated independently and in parallel”,并且官方专门有一篇 Parallel questions cookbook 讲这个用法。所以正确表述是:同一次请求里的多个问题会被并行评估(官方数据);至于底层怎么调度,官方没有展开,本文也不替它下结论。
三种 primitive 分别是 Choice(选一个选项)、Score(选一个级别)、Noul(判断是否为真,返回 0~1 概率),官方字段说明见 Primitives。下面所有案例都沿用“state + question + threshold/组合”的骨架。
先认清三种问法各自的返回形状
这一点是所有案例共用的地基,也是最容易写错的地方,所以直接引官方字段表。官方把三种问法的返回列得很清楚:Choice 返回 choice、probabilities、confidence;Score 返回 score、legend、probabilities、confidence;Noul 只返回 noul(0 到 1)。官方对字段类型的定义是:legend 是 map<string, string>——把每个等级序号映射回它的描述;probabilities 是 map<string, number>——把每个等级(字符串键)映射到它的概率,各概率之和为 1(官方 API reference)。注意两个都写着 map:它们是按序号索引的对象,不是数组。官方给出的 Score 答案示例就是这个形状:
{
"type": "score",
"score": 1.05,
"legend": { "0": "Calm", "1": "Frustrated", "2": "Very angry" },
"probabilities": { "0": 0.0, "1": 0.95, "2": 0.05 },
"confidence": 0.92
}
官方 Quick start 里的响应示例同样是对象形态(legend 为 {"0": "Calm, just stating facts", "1": "Frustrated but civil", "2": "Very angry, strong language"},probabilities 为 {"0": 0.0, "1": 1.0, "2": 0.0}),而 model 是响应顶层字段,与 answers、usage 同级(官方 Quick start)。另外,官方的 Score 是「概率加权后的位置」,可以落在两个等级之间(示例里 score 是 1.05 而等级只有 0/1/2),所以别把 score 当成整数等级序号去用。
20 个可直接抄的场景
一、AI 自动化软件(可后台跑一百万次)
-
科学论文筛选(系统综述)
- state:论文标题、摘要、方法段;纳入/排除标准。
- 问法:Noul,
instructions写“该研究是否符合纳入标准?”criteria.true写“明确符合人群/干预/对照/结局”,false写“缺关键信息或属于排除类型”。 - 返回:noul 0~1。
- 下游:设阈值自动纳入、排除或转人工复核。(官方来源:use-case map “Scientific discovery”;criteria 写法为我的做法)
-
招聘简历评估
- state:简历文本、职位要求、必备技能列表。
- 问法:多个 Noul,例如“候选人相关经验是否达到要求?”
criteria.true写“明确列出超过 3 年相关经验”。 - 返回:每个条件一个概率,代码加权组合后排序。
- 下游:自动筛掉明显不匹配者,高概率进面试队列,低置信度转人工。(官方来源:use-case map “Recruiting”;组合逻辑是我的做法)
-
潜在客户评分
- state:公司描述、职位、入站消息、理想客户画像文本。
- 问法:Score,
criteria设四级cold / lead / high_intent / payment_signal,可再配 Noul 检查“是否提到预算或时间点”。 - 返回:level + probabilities。
- 下游:销售按分数排序、路由给不同团队或触发培育流。(官方来源:use-case map “Lead generation”)
-
保险理赔分类
- state:首次损失通知、调停人笔记、支持文件。
- 问法:Choice,
criteria为straight_through / specialist_review / fraud_review / missing_info。 - 返回:choice + confidence。
- 下游:confidence 高时直接进入快速处理,不确定转人工调停人。(官方来源:use-case map “Insurance claims”)
-
金融犯罪警报优先级
- state:交易描述、KYC 文档、警报历史。
- 问法:Score,
criteria设风险等级low / medium / high / critical,再配 Noul 检查“交易方名称是否不一致”。 - 返回:风险等级和证据质量概率。
- 下游:优先调查高风险案件,低风险自动关闭。(官方来源:use-case map “Financial crime”)
二、实时应用(<150ms 决策)
-
智能家居助手意图分类
- state:用户语音转写、设备列表、场景上下文。
- 问法:Choice,
criteria为turn_on / turn_off / set_temperature / ask_status / other。 - 返回:choice + 概率分布。
- 下游:代码根据 choice 调用相应设备 API;低置信时追问用户。(官方来源:官方 demo “Smart home assistant demo”)
-
实时函数调用参数校验
- state:用户输入、函数 schema、参数约束。
- 问法:Noul,
instructions写“该参数值是否符合 schema 约束?”,criteria写具体约束如“必须是 ISO 日期格式”。 - 返回:noul。
- 下游:低概率时在调用前拦截并返回澄清消息,而不是让函数调用失败。(官方 cookbook:Function calling;criteria 为我的做法)
-
对话结构恢复
- state:LLM 生成的自由文本、期望 JSON 模板。
- 问法:Choice 或 Noul,逐字段判断文本中是否存在该字段值。
- 返回:概率或选项。
- 下游:把不可靠的自然段落转成可靠的结构化记录,用于 UI 渲染或工作流。(官方 cookbook:Structure recovery)
-
游戏内即时语义判断
- state:玩家输入、当前场景规则。
- 问法:Noul,例如“玩家是否在要求交易?”
criteria.true写“包含交换物品意图”。 - 返回:noul。
- 下游:在 UI 中立即弹出交易窗口;官方地图提到 150ms 实时速度足以嵌入 UI 或游戏(官方数据)。(官方来源:use-case map 提到 real-time applications;具体游戏案例为我的做法)
三、大数据 map-reduce(批量跑大规模语料)
-
知识图谱实体对齐
- state:两个实体名称及其属性上下文。
- 问法:Noul,
instructions写“这两个名称是否指向同一实体?” - 返回:noul。
- 下游:高概率合并实体,构建更干净的知识图谱。(官方 cookbook:Knowledge graph entity alignment)
-
自一致性校验
- state:同一问题的多次 LLM 输出。
- 问法:Choice 或 Noul,判断输出之间是否一致。
- 返回:一致概率。
- 下游:低一致性的任务重跑或升级;在批处理中过滤不稳定结果。(官方 cookbook:Self-consistency,官方分为 Choice 与 Noul 两篇,consistency_choice / consistency_noul;具体实现细节未能完全核实)
-
大规模 agent trace 分类
- state:agent 运行轨迹文本、预定义类别(成功/失败/卡住/偏离)。
- 问法:Choice,
criteria为这些类别。 - 返回:choice + probabilities。
- 下游:批量定位问题 agent 步骤,给产品改进提供数据。(官方来源:use-case map 提到 classify giant agent traces;criteria 为我的做法)
-
自然语言特征提取用于预测建模
- state:原始文本、特征定义(例如“是否提到续约风险”)。
- 问法:Noul 或 Score,按特征类型决定。
- 返回:每行样本一个概率列。
- 下游:与结构化特征拼接,训练下游模型。(官方来源:use-case map “Feature extraction for predictive modeling”)
四、客服/工单
-
工单分类与路由
- state:工单标题、正文、产品线列表、团队队列。
- 问法:Choice,
criteria为billing / technical / account / complaint / refund_request / other。 - 返回:choice + probabilities。
- 下游:按最大概率路由到对应团队;低置信时进入“待分类”队列让人确认。(官方来源:use-case map “Customer support”)
-
客服回复合规校验
- state:客服草稿回复、公司政策、客户原始请求。
- 问法:Noul,
instructions写“回复是否违反政策或未处理客户请求?”,criteria.true写“包含退款但未按政策处理”等。 - 返回:noul。
- 下游:高违反概率时阻止发送,强制走人工审核。(官方来源:use-case map “Customer support – Verify support responses”)
-
通话记录提取承诺与后续行动
- state:客服通话转写文本。
- 问法:Noul,
instructions写“通话中是否产生了一个客户承诺或后续行动?”criteria.true写“包含具体承诺、时间或责任人”。 - 返回:noul,可再配一个 Score 判断优先级。
- 下游:把命中的段落抽取出来生成待办列表,自动同步到 CRM。(官方来源:use-case map “Customer support” 中“extract customer issues, commitments, and follow-up actions”;分步问法是我的做法)
五、内容与检索
-
海量文档重排(RAG 检索)
- state:查询文本 + 每个候选段落(BM25 短名单)。
- 问法:Noul,
instructions写“这个候选段落是否来自被引用的先例?”,criteria.true写“段落陈述了查询所引用的具体规则”,false写“仅主题相似”。 - 返回:noul 0~1,作为排序分数。
- 下游:按分数重排短名单,top-k 送给生成模型。官方 cookbook 用 CLERC 数据集的 3,565 个法院意见段落、40 条查询、每条 30 个 BM25 候选做测试:top-1 准确率从 5% 提到 18%,top-10 从 38% 提到 62%(官方数据)。(官方 cookbook:Re-ranking,链接)
-
引文核对
- state:源文档文本、LLM 生成的 claim 与 quote。
- 问法:Choice,
criteria为verified / unsupported / contradicted / fabricated;先用字符串匹配筛掉缺失引文,再对幸存引文问 Choice。 - 返回:choice + confidence。
- 下游:低于 AUTO_ACCEPT 阈值(官方示例设为 0.8)转人工。官方 cookbook 中 8 个引文里 4 个正确返回 verified 且置信 ≥0.93,4 个植入错误全部被抓(官方数据)。(官方 cookbook:Double-checking citations,链接)
-
RAG 段落分类
- state:问题、检索到的段落。
- 问法:Choice 或 Noul,判断段落是否包含答案、是否与问题相关。
- 返回:choice/概率。
- 下游:过滤掉无关段落,只把相关段落给下游生成,减少幻觉。(官方 cookbook:Classifying RAG passages)
-
逐行搜索长文本
- state:长文档、要找的信息描述。
- 问法:Noul 逐行或分块判断“该行是否包含目标信息”。
- 返回:每行/块 noul。
- 下游:定位确切出处,或作为结构恢复前的预处理。(官方 cookbook:Line-by-line search)
以上二十个案例里,智能家居意图分类、函数调用参数校验、对话结构恢复、知识图谱实体对齐、自一致性校验、海量文档重排、引文核对、RAG 段落分类、逐行搜索这九个直接对应官方 cookbook 或官方 demo(已在各条里给出链接);其余对应官方 use-case map 中的行业场景,而 criteria 细节是我的做法。
三个必须会的官方 Cookbook
-
Guardrails for LLMs(链接)
用途:在 LLM 输入和输出两侧做安全护栏。官方方法是用一组 Noul 问题检测“是否试图覆盖助手指令”“是否求助伤害行为”“是否要求诊断/剂量”“是否表达自伤”,再用一个 Score 问题评估合规严重度(从“无”到“严重身体伤害”)。应用层根据概率阈值决定 pass / review / block / route。 -
Re-ranking(链接)
用途:先 BM25/嵌入召回短名单,再用 Jev 对每个 query-candidate 打分。官方 cookbook 在 3,565 个法院意见段落、40 条查询上测试(每条查询从共享语料里选 30 个候选),重排前 top-1 5%、top-10 38%,重排后 top-1 18%、top-10 62%(官方数据)。关于「一个候选一次请求」这个用法,要分清两层:官方 cookbook 明确写的是「本文为了讲清楚,每个 query-candidate 对只问了一个问题」,并接着说真实应用会把同一个 pair 的多个问题放到一次调用里(原文:This walkthrough asked one question per pair for clarity. A real application would ask several questions about the same pair in one call),并指到 Parallel questions cookbook 与 Speculative Fan-Out 模式。所以「每候选一请求」是那篇 cookbook 的讲解简化,不是官方推荐的最终形态;要不要合并请求、怎么分批,属工程取舍。
有官方依据的核心只有一条:Noul 直接返回 0~1 的概率,可以直接当排序分数用,不必自己发明一套评分量表——官方对此的表述是 TypeSafe 就是为这种重复打分场景设计的,做起来更快、更省、更一致。
-
Double-checking Citations(链接)
用途:验证 LLM 回答的引文是否真的支持 claim。先用字符串匹配检测引文缺失,再用 Choice 判断有引文的情况是 verified / unsupported / contradicted / fabricated。官方例子中 8 个引文里 4 个正确返回 verified 且置信 ≥0.93,4 个错误全部被抓(官方数据)。适合作为 RAG 系统的可溯源校验层。
一个最小的 Noul 重排调用示例(改写自官方 cookbook 的伪代码,实际参数以 SDK 为准):
from typesafe_sdk import Noul, NoulCriteria, TypeSafeClient
client = TypeSafeClient(api_key=...)
question = Noul(
instructions="这个候选段落是否来自被引用的先例?",
criteria=NoulCriteria(
true="段落陈述了查询所引用的具体规则。",
false="段落仅主题相似,没有明确规则。"
)
)
response = client.system_one(
state={"query": query_text, "candidate": candidate_text},
questions={"is_cited_source": question}
)
score = response.answers["is_cited_source"].noul # 例如 0.87
选型速查:你的场景是否适合 Jev
符合以下信号越多,越适合把决策交给 Jev:
- 高频:每天几万次以上,人工看不过来,或通用 LLM 成本太高。
- 结构化输出:你需要一个字段值、一个枚举、一个概率,而不是一段散文。
- 要不确定度:你需要知道模型自己有多不确定,从而决定 pass / review / block。
- 可编程组合:最终决策由多个窄判断在代码里用 if / threshold / 权重拼接,而不是让模型自由发挥。
- 可解释阈值:业务方希望看到“为什么路由到这里”,需要 criteria 明确定义 true/false。
如果任务是开放式写作、长程复杂推理或需要多步 agent 自由探索,可能不适合只靠 primitive,应拆解或换架构。
这次没核实的
- 官方顶层五大类与工单要求的“客服/工单、内容与检索”并非一一对应,我按官方 use-case map 的高频子场景做了重新归类;具体归类是我的判断。
- 案例 11 涉及的 Self-consistency 教程在官方站上分成两篇(Choice 与 Noul 各一篇),其具体实现细节、API 参数和阈值在本次来源正文中未完全呈现,未能核实,仅根据 cookbook 标题与用途作了方向性描述。
- 案例 9 的游戏内即时判断,官方地图只提到“fast and smart enough to be programmed to play games or embedded into a UI”,没有给出具体 criteria 或测试数据,我的做法是推断。
- 官方未给出“20 个案例”的现成清单,本文的案例数量、四栏拆法以及 criteria 写法大部分是基于官方字段形状的整理,不能视为官方文档原文。
参考来源
评论区
登录后可评论。