决策接口(System One / OpenAI Decisions)
决策接口针对给定上下文回答结构化问题,适用于工单分流、意图判断、内容分类和分档评估。它返回概率、选项或评分,不返回聊天消息。
选择接口
| 项目 | System One | OpenAI Decisions |
|---|---|---|
| 请求 | POST /v1/systemone | POST /v1/decisions |
| 上下文 | state:字符串、对象或数组 | input:文本或原生消息数组 |
| 问题集合 | questions 对象,以问题 ID 为键 | questions 数组,可用 name 标记问题 |
| 判断题类型 | noul | predicate |
| 分类 / 评分类型 | choice / score | choice / score |
| 答案集合 | answers 对象,按问题 ID 关联 | answers 数组,按请求顺序关联 |
| 适合场景 | 已使用 Jev / System One 数据结构 | 已使用 OpenAI Decisions 原生数据结构 |
警告
两个接口都只返回一次完整 JSON,不支持 SSE 或增量流式事件。/v1/decisions 传入
stream: true 会被拒绝;/v1/systemone 没有 stream
字段,传入该字段也不会启用流式。
准备接入点与 API Key
使用 Modelink API Key,通过 Authorization: Bearer 认证。详见认证与请求。
调用 /v1/systemone
请求示例
同一次请求可提交不同类型的问题:
curl --silent --show-error "$MODELINK_BASE_URL/systemone" \
-H "Authorization: Bearer $MODELINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<决策模型 ID>",
"state": "订单到货时已经压坏,我想退款,请尽快处理。",
"questions": {
"wants_refund": {
"type": "noul",
"instructions": "用户是否希望退款?",
"criteria": {
"true": "明确要求退款",
"false": "没有退款诉求"
}
},
"queue": {
"type": "choice",
"instructions": "应该转交哪个处理队列?",
"criteria": {
"billing": "账单与退款",
"technical": "技术问题",
"other": null
}
},
"urgency": {
"type": "score",
"instructions": "评估处理的紧急程度。",
"criteria": ["低", "中", "高"]
}
}
}'请求字段与题型
| 字段 | 必填 | 说明 |
|---|---|---|
model | 是 | 非空模型 ID。 |
state | 是 | 字符串、对象或数组;不能是 null、数字或布尔值。 |
questions | 是 | 非空对象,键为非空白问题 ID;不是数组。 |
questions.<id>.type | 是 | noul、choice 或 score,大小写敏感。 |
questions.<id>.instructions | 是 | 字符串、对象或数组;不能是 null、数字或布尔值。 |
questions.<id>.criteria | 按题型 | 见下表。 |
| 题型 | criteria 规则 | 结果含义 |
|---|---|---|
noul | 可省略;若提供则为对象,键仅允许 "true" / "false",值为字符串、对象或数组,不允许 null。 | noul 是判断成立的概率,范围为 0–1,不是布尔值。 |
choice | 必填对象,1–255 个选项;选项键非空白,描述可为字符串、对象、数组或 null。 | choice 是选中的选项键;probabilities 为各选项的概率,另有 confidence。 |
score | 必填有序数组,2–10 档;每档为字符串、对象或数组。 | score 为评分,legend 说明档位索引,probabilities 的键为从 "0" 开始的索引字符串,另有 confidence。 |
响应示例
以下数值仅用于展示格式,不是模型的固定输出:
{
"model": "<决策模型 ID>",
"answers": {
"wants_refund": { "type": "noul", "noul": 0.98 },
"queue": {
"type": "choice",
"choice": "billing",
"probabilities": { "billing": 0.9, "technical": 0.03, "other": 0.07 },
"confidence": 0.86
},
"urgency": {
"type": "score",
"score": 1.7,
"legend": { "0": "低", "1": "中", "2": "高" },
"probabilities": { "0": 0.05, "1": 0.2, "2": 0.75 },
"confidence": 0.7
}
},
"usage": { "input_tokens": 120, "output_tokens": 16 },
"id": "chatdecisions-0123456789abcdef0123456789abcdef"
}通过 answers[questionId] 读取答案,不依赖对象键顺序。score 不是判断概率,不要统一按 0–1 的布尔阈值处理。usage 对外提供 input_tokens、output_tokens,没有 total_tokens 字段。
网关会检查答案完整性;上游缺少答案、必需概率或用量字段,以及无法转换为该契约的拒答,会返回上游错误,而不是伪造成功答案。
完整字段定义见 System One API 参考。
调用 /v1/decisions
请求示例
curl --silent --show-error "$MODELINK_BASE_URL/decisions" \
-H "Authorization: Bearer $MODELINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<决策模型 ID>",
"input": "订单到货时已经压坏,我想退款,请尽快处理。",
"questions": [
{
"type": "predicate",
"name": "wants_refund",
"instructions": "用户是否希望退款?"
},
{
"type": "choice",
"name": "queue",
"instructions": "应该转交哪个处理队列?",
"choices": [
{ "value": "billing", "description": "账单与退款" },
{ "value": "technical", "description": "技术问题" },
{ "value": "other", "description": "其他问题" }
]
},
{
"type": "score",
"name": "urgency",
"instructions": "评估处理的紧急程度。",
"levels": [
{ "label": "低", "description": "可以正常排队" },
{ "label": "中", "description": "需要优先关注" },
{ "label": "高", "description": "需要尽快处理" }
]
}
],
"stream": false
}'标准请求形状与渠道兼容性
| 字段 | 标准调用方式 |
|---|---|
model | 必填非空字符串,使用支持决策的模型 ID。 |
input | 输入文本,或用户消息数组。可转换的消息形状见下方。 |
questions | 非空问题数组,每题包含 type 和字符串 instructions。 |
questions[].name | 可选字符串或 null;允许重复,不应用它代替数组顺序关联答案。 |
type: "predicate" | 判断题,不携带 choices / levels。 |
type: "choice" | 提供 choices 数组,2–255 项;每项含 value,可选字符串 description。value 可为字符串或布尔值,不能重复;布尔 true 与字符串 "true" 不等价。 |
type: "score" | 提供 levels 有序数组,2–10 档;每项含字符串 label,可选字符串 description。 |
stream | 省略或设置为 false;不支持 true。 |
文本消息数组示例:
{
"input": [
{
"role": "user",
"type": "message",
"content": [{ "type": "input_text", "text": "订单压坏了,我想退款。" }]
}
]
}响应示例
以下为标准响应的格式示例:
{
"model": "<决策模型 ID>",
"answers": [
{ "type": "predicate", "name": "wants_refund", "probability": 0.98 },
{
"type": "choice",
"name": "queue",
"choice": "billing",
"confidence": 0.86,
"probabilities": [
{ "value": "billing", "probability": 0.9 },
{ "value": "technical", "probability": 0.03 },
{ "value": "other", "probability": 0.07 }
]
},
{
"type": "score",
"name": "urgency",
"score": 1.7,
"confidence": 0.7,
"probabilities": [
{ "label": "低", "value": 0, "probability": 0.05 },
{ "label": "中", "value": 1, "probability": 0.2 },
{ "label": "高", "value": 2, "probability": 0.75 }
]
}
],
"usage": { "input_tokens": 120, "output_tokens": 16, "total_tokens": 136 },
"id": "chatdecisionsoai-0123456789abcdef0123456789abcdef"
}完整字段定义见 OpenAI Decisions API 参考。
错误处理与请求追踪
两个接口的成功响应中,id 与响应头 http_x_reqid 相同。记录请求 ID 有助于排查请求。
错误响应使用统一结构:
{
"error": {
"message": "请求无法通过当前模型的渠道协议处理 (request_id: chatdecisionsoai-...)",
"type": "invalid_request_error",
"code": "protocol_unsupported"
}
}| HTTP 状态 | 常见原因 | 处理方式 |
|---|---|---|
| 400 | 请求格式错误、模型不存在或下线、协议不兼容 | 检查字段、模型 ID 和 error.code;protocol_unsupported 需要调整请求或选用兼容模型。 |
| 401 | API Key 无效、过期或缺失 | 检查 Bearer 认证,不要使用控制台登录令牌。 |
| 403 | 访问权限或账号策略限制 | 检查 API Key 模型权限、账号状态和访问策略。 |
| 429 | 请求 / Token 限流或额度不足 | 按限流与配额检查配额和调用速率。 |
| 502 / 503 | 上游响应异常、协议响应不完整或渠道不可用 | 保留错误体和请求 ID,结合故障排查概览排查。 |
决策接口受平台限流与额度约束,按输入、输出 Token 用量计费。