Jev 使用说明
Jev 是 TypeSafe 推出的 System One 模型:它不生成自由文本,而是根据你预先定义的答案范围,返回类型化的判断结果和概率,适合把分类、路由、打分、是否放行等判断嵌入业务流程。Modelink 为 Jev 提供两个专用入口,两者都不走 /v1/chat/completions,请求体中没有 messages 数组,也不支持流式输出。
两个调用入口
| 入口 | 协议 | 适用场景 |
|---|---|---|
POST /v1/systemone | Jev System One 原生契约 | 直接使用 Jev 语义:state 加 questions map,题型为 noul / choice / score |
POST /v1/decisions | OpenAI Decisions 原生契约 | 已有 OpenAI Decisions 客户端或代码:input 加 questions 数组,题型为 predicate / choice / score |
警告
两套请求结构不能混用。调用 /v1/decisions 时,如果本次请求可以转换为 Jev
System One 且被调度到 decisions-jev
渠道,平台会自动完成转换;无法转换的请求只在 decisions-openai
渠道中调度,详见渠道兼容与调度。
调用前准备
- 在 Modelink 控制台创建 API Key,并确认账号具备 Jev 的调用权限。
- 根据业务区域选择接入点:海外
https://api.modelink.ai,中国大陆https://api.qnaigc.com。 - 确认模型 ID。通常使用别名
jev-latest;生产环境建议固定版本(如jev-1.13.0),避免版本漂移。两个入口的model都会按平台模型市场解析(支持别名),响应中的model固定为解析后的模型,不会透出上游渠道模型名。实际可用 ID 以控制台为准。
| 项目 | Jev 原生契约 | OpenAI Decisions 契约 |
|---|---|---|
| 接口 | POST /v1/systemone | POST /v1/decisions |
| 海外端点 | https://api.modelink.ai/v1/systemone | https://api.modelink.ai/v1/decisions |
| 大陆端点 | https://api.qnaigc.com/v1/systemone | https://api.qnaigc.com/v1/decisions |
| 认证 | Authorization: Bearer <api_key> | 同上 |
| 请求格式 | Content-Type: application/json | 同上 |
| 流式输出 | 不支持 | 不支持;显式传 stream: true 返回 400 |
| 支持的输入 | 文本、JSON 对象、文本数组 | 文本或 user 文本消息数组;图片不支持 |
请求与响应
两个入口的请求参数、请求/响应 schema、示例和错误响应统一维护在 API Reference,本文不再重复:
- System One 决策 API:
POST /v1/systemone,请求使用state与questions对象;题型为noul/choice/score,响应返回同键的answers对象。 - OpenAI Decisions API:
POST /v1/decisions,请求使用input与questions数组;题型为predicate/choice/score,响应按题目顺序返回answers数组。
两个入口都返回顶层 model 与 usage。/v1/systemone 的 usage 只有 input_tokens 和 output_tokens;/v1/decisions 经 Jev 渠道回译时还会返回两者之和的 total_tokens。
与 Jev 契约的字段对照
| 维度 | /v1/systemone(Jev) | /v1/decisions(OpenAI Decisions) |
|---|---|---|
| 上下文 | state:string、object 或 array | input:string 或 user 消息数组 |
| 问题集合 | questions:id 到 Question 的 map | questions:数组 |
| 是非判断 | noul,返回 noul 概率 | predicate,返回 probability |
| 选择 | choice 加 criteria 映射 | choice 加 choices[].value(string / boolean) |
| 打分 | score 加 criteria 有序数组 | score 加 levels[].label |
| 题名 | 对象键,必须非空 | name 可选、可为 null、可重复 |
| 响应 | answers 为 map | answers 为数组,保持请求顺序 |
| 置信度 | choice / score 返回 confidence | 同左;noul 与 predicate 均无 confidence |
| 流式 | 不支持 | 不支持;显式 stream: true 返回 400 |
渠道兼容与调度
两个入口共用同一套鉴权、模型解析、限流和计费链路,区别在入口协议与可用上游渠道:
/v1/systemone对外始终返回 Jev 契约。上游可以是decisions-jev(直接调用 Jev System One)或decisions-openai(平台把 Jev 契约转换为 OpenAI Decisions)。/v1/decisions保留原生请求形态。平台先判断请求能否转换为 Jev:- 顶层只包含
model、input、questions、stream,且input为纯文本或user文本消息时,可在两种渠道中调度。 - 出现
input_image、非user消息或顶层扩展字段(如safety_identifier)等内容时,只能走decisions-openai渠道。 - 如果该模型只有
decisions-jev渠道,请求会返回400,错误码为protocol_unsupported。
- 顶层只包含
/v1/systemone的请求结构中没有stream字段,传入该字段会被忽略并按非流式处理;/v1/decisions传stream: true则会在入口直接返回400。- Jev 本身不支持图片输入:
input_image在转换为 Jev 时会被显式拒绝,不会被静默丢弃。
用阈值处理判断结果
Jev 返回格式正确,不代表判断一定正确。生产环境建议结合概率、置信度和确定性规则决定下一步,例如:
const response = await fetch("https://api.modelink.ai/v1/systemone", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.MODELINK_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "jev-latest",
state: ticket,
questions: {
department: {
type: "choice",
instructions: "这条反馈应该由哪个团队处理?",
criteria: {
billing: "付款、账单与退款问题",
technical: "报错、故障与集成问题",
},
},
asks_refund: {
type: "noul",
instructions: "客户是否明确提出退款请求?",
},
},
}),
});
const { answers } = await response.json();
if (
answers.department.choice === "billing" &&
answers.department.confidence >= 0.8 &&
answers.asks_refund.noul >= 0.8
) {
// 自动分流到账单团队
} else {
// 交给人工复核或其他流程
}限制与排错
- Jev 只做结构化判断,不生成文案。摘要、对话或开放式任务继续使用对应的 Chat 模型。
- 两套入口的请求结构不能混用:
/v1/systemone使用state和 mapquestions,/v1/decisions使用input和数组questions。 state目前只接受文本类输入,不支持图片、音频和视频。- 平台对转换为 Jev 的响应做完整性校验:缺失答案、缺失
usage、缺失confidence、概率未覆盖全部选项或档位、题型不匹配都会返回上游错误,不会补零或伪造字段。 - 常见错误:
400请求结构、参数或模型校验失败(/v1/decisions传stream: true属于此类);401/403认证失败或无权限,不要重试;429触发限流,建议指数退避后重试;5xx上游或网关异常,可有限重试并准备降级方案。完整状态码、错误体和示例见 API Reference。 - 可用模型、限流额度和具体错误码以 Modelink 控制台与 API Reference 为准。
相关文档
更多背景可参考 TypeSafe 官方 API 文档。