本节摘要:本节收束第 3 章:给出一棵"遇到判断先选型"的决策树(答案空间可枚举吗 → 是非闸门吗 → 选项有序吗 → 是否组合判断),以及完整的请求骨架总览(model / state / questions / 问题内四要素)与错误码速览。此后每一章的代码都建立在这张骨架上。选型的通用直觉:Noul 是一道闸、Choice 是归堆、Score 是落位;复杂判断永远"拆成原子问题 + 代码组合"。
阅读完本节,你应当能够:
答案空间能枚举吗?──否──▶ 生成题,用 LLM,别用 Jev(第 2.2 节) │是 │ 是/非一道闸?────是────▶ Noul(多道闸并行;第 3.1 节) │否 │ 选项之间无序?────是────▶ Choice(带 other 逃生门;第 3.2 节) │否 │ 有序标尺上落位?──是────▶ Score(一个维度一个;第 3.3 节) │否 │ 是一个综合大判断?──────▶ 拆成上面若干个原子问题 + 代码组合 (第 6.3 节复合评分 / 第 7.3 节多闸门护栏)
三个经验法则:
// POST https://api.typesafe.ai/v1/systemone { "model": "jev-latest", // 生产建议钉版本:jev-1.13.0 "state": /* 字符串 | 对象 | 数组 */, // 模型看到的世界;对象可用 `path` 引用字段 "questions": { "q_id": { // ID 自定,不发给模型,是你代码里的变量名 "type": "noul | choice | score", "instructions": "判别标准式自然语言", "criteria": [ /* score: 有序等级数组(2~10 级) */ ] // 或 { /* choice: 选项名 → 描述(≤255,建议 ≤20) */ } // 或 省略(noul) } // 更多问题…全部并行求值、一次返回 } }
响应按类型(详表见附录 B):
| 类型 | 字段 |
|---|---|
| noul | noul(0~1) |
| choice | choice · probabilities · confidence |
| score | score(加权连续分)· legend · probabilities · confidence |
容量红线(附录 B 有完整表):state + 最长问题 ≤ ~32K token(约 15 万字符);整请求 ≤ ~64K token;仅文本输入。
| HTTP | 含义 | 处理 |
|---|---|---|
| 401 | key 无效 | 检查 TYPESAFE_API_KEY |
| 422 | 请求校验失败(如 Choice 缺 criteria、Score 等级数越界) | 对照附录 B 检查请求体 |
| 429 | 触发限速 | 指数退避重试 |
| 529 | 服务过载 | 指数退避重试(官方明确支持) |
💡 幂等性红利:Jev 调用是纯函数式的(无状态、无副作用),429/529 重试不需要任何防重逻辑——这与调用会产生副作用的 LLM 工作流形成鲜明对比。
语法层完工。下一章动手:从 curl 裸调协议,到 Python/Node 官方 SDK,再到 LangChain 与 Vercel AI SDK——五种环境跑通同一个决策。