JEV响应解析必须按type字段分支处理:Choice型取choice和probabilities(需zip配对criteria),Score型用scale标签而非数值,Noul型需同时校验truth_value和confidence。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

response 字段结构必须手动检查,不能依赖默认 JSON 解析
JEV 的响应体不是自由格式文本,但也不是标准 REST API 那种“data”嵌套结构。它的顶层是 results 数组,每个元素对应你提交的一个问题,顺序严格一致。如果你用 Python 的 requests.json() 直接取 ["results"][0]["choice"],遇到 Noul 类型就会 KeyError —— 因为它返回的是 truth_value 而非 choice。
常见错误现象:解析时报 KeyError: 'choice' 或 AttributeError: 'NoneType' object has no attribute 'get',本质是你没先读 type 字段就硬取值。
- 必须先读每个
results[i]["type"],再决定取哪个键:choice、score或truth_value -
confidence字段永远存在,但它是 float,不是字符串;别用.lower()或正则去处理它 - 如果启用了
include_probabilities: true,probabilities是 dict(Choice)或 list(Score),不是 JSON string,无需json.loads
Choice 类型结果要按 criteria 顺序映射,不能靠字面匹配
你定义的 criteria 是一个 list,比如 ["finance", "billing", "refunds"],JEV 返回的 choice 值一定是这三个之一,但它的 probabilities 字段返回的是按相同顺序排列的 float 列表:[0.12, 0.78, 0.1]。很多人误以为 probabilities 是 dict,写成 probs["billing"],结果报错。
使用场景:路由工单到下游服务时,你要的不只是最高概率项,有时还要判断「finance 和 billing 概率差是否小于 0.15」来触发人工复核。
- 用
zip(criteria, probabilities)显式配对,避免索引错位 - 别用
max(probabilities)反推选项 —— 如果criteria里有重复字符串(比如两个 "other"),会出错 -
choice字段值是原始字符串,不带空格、不转大小写,和你传入的完全一致
Score 类型的 scale 必须与请求时完全一致,否则置信度失效
Score 不返回数字 1/2/3,而是返回你定义的 scale 中的某个 label,比如 "high"。但它的 confidence 是基于整个 scale 分布算出来的 —— 如果你在请求里写 scale: ["low", "medium", "high"],却在代码里把返回的 "high" 当作整数 3 去参与计算,那后续所有阈值判断(比如 if score_val > 2)都失去概率意义。
性能影响:scale 超过 10 个 item 时,probabilities 数组变长,网络传输和解析开销略增,但 JEV 本身延迟不受影响。
- 建议用 enum 或 mapping dict 统一管理 scale,避免硬编码字符串
- 不要把
score当数值做加减,它只是语义标签;真要量化,用probabilities加权平均(需你自己实现) - 若 scale 含中文或特殊符号(如
"⚠️ high"),确保 HTTP headerContent-Type含charset=utf-8
Noul 类型的 truth_value 是 float,但业务逻辑常误当 bool 用
Noul 返回的 truth_value 是 0–1 区间内的 float,比如 0.923。很多开发者直接写 if response["truth_value"]:,这在 Python 里恒为 True(除非是 0.0)。更危险的是,有人拿它跟 0.5 硬比:truth_value > 0.5,忽略了置信度低时(比如 confidence=0.41)这个比较毫无意义。
容易踩的坑:把 Noul 当布尔开关用,导致高风险操作(如删库检测)被误放行。
- 必须同时检查
truth_value和confidence,例如:if truth_value > 0.85 and confidence > 0.7 - 别对
truth_value做 round() 或 int() 转换 —— 它不是分类阈值,而是贝叶斯后验概率估计 - 若用于熔断逻辑(如拒绝执行命令),建议设置双阈值:
truth_value主判断,confidence控制 fallback 行为
JEV 的响应解析难点不在语法,而在语义绑定:每个字段的含义和可用性,完全取决于你提交请求时声明的 type 和 criteria。漏掉一次 type 分支判断,或错用 probabilities 结构,就会让本该稳定的决策链突然崩出 None 或 KeyError。

















