决策接口(System One / OpenAI Decisions)

决策接口针对给定上下文回答结构化问题,适用于工单分流、意图判断、内容分类和分档评估。它返回概率、选项或评分,不返回聊天消息。

选择接口

项目System OneOpenAI Decisions
请求POST /v1/systemonePOST /v1/decisions
上下文state:字符串、对象或数组input:文本或原生消息数组
问题集合questions 对象,以问题 ID 为键questions 数组,可用 name 标记问题
判断题类型noulpredicate
分类 / 评分类型choice / scorechoice / 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 需要调整请求或选用兼容模型。
401API Key 无效、过期或缺失检查 Bearer 认证,不要使用控制台登录令牌。
403访问权限或账号策略限制检查 API Key 模型权限、账号状态和访问策略。
429请求 / Token 限流或额度不足按限流与配额检查配额和调用速率。
502 / 503上游响应异常、协议响应不完整或渠道不可用保留错误体和请求 ID,结合故障排查概览排查。

决策接口受平台限流与额度约束,按输入、输出 Token 用量计费。