基于自定义上下文(state)或 Session 的近期上下文,同步执行一次结构化判断。
Decision API 目前为 Beta 功能,接口定义、响应结构和行为可能在后续版本中调整。请关注文档更新,并在生产环境使用前完成兼容性验证。
POST /api/v1/forward/decisions
请求头
| Header | 是否必填 | 说明 |
|---|---|---|
| Authorization | 是 | Bearer <PAT 或 SAT>,支持管理员和 Identity 级 SAT。 |
| Content-Type | 是 | application/json。 |
| Idempotency-Key | 否 | 同一次逻辑操作重试时复用原值。去除首尾空白后为 1~256 字节,不含控制字符,不能重复传入。 |
请求体参数
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| state | object | 与 session_id 二选一 | 用于判断的自定义上下文,以非空 JSON 对象传入,可包含文本、结构化数据等;顶层 state.session_context 为保留字段,不能传入。 |
| session_id | string | 与 state 二选一 | 当前认证范围内可访问且未归档的 Session ID,1~256 字节,无首尾空白、控制字符及 /、\、?、#。 |
| questions | array | 是 | 需要判断的问题列表。 |
state 与 session_id 必须且只能出现一个;传 null 不等同于省略。字段名区分大小写;不支持 model、identity_id 等额外协议字段。
问题结构
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| type | string | 是 | choice 或 score。 |
| name | string | 否 | 问题名称,传入时必须非空且在本次请求中唯一,最多 128 字节,不含控制字符。 |
| instructions | string | 是 | 非空判断说明,描述判断目标及规则。 |
| choices | array | choice 必填 | 2~32 个候选项;score 问题不能包含此字段。 |
| choices[].value | string 或 boolean | 是 | 候选值,字符串必须非空,同题候选值不能重复;不支持数字或 null。 |
| choices[].description | string | 否 | 候选项的含义或选择条件。 |
| levels | array | score 必填 | 2~32 个评分等级;choice 问题不能包含此字段。 |
| levels[].label | string | 是 | 非空等级名称。 |
| levels[].score | number | 是 | 等级对应的有限数值,可为整数或小数。 |
| levels[].description | string | 否 | 该等级的判定标准。 |
输入限制
- 请求体为单个 UTF-8 JSON 对象,不超过 1 MiB。
- JSON 嵌套深度不超过 16,每个对象或数组不超过 1,000 项;不允许重复 JSON 键。
- 数值必须在有限双精度浮点数范围内;字符串不能含 NUL 等控制字符,文本内容允许换行、回车和制表符。
state内可使用业务自定义字段;请求、问题、选项和评分等级的协议结构只接受上表列出的字段。- 上下文处理及预算规则见输入方式。
示例请求
根据自定义上下文判断
为同一次操作生成一次 key,后续重试保持 key 和请求体原始内容不变:
根据 Session 上下文评分
示例响应
HTTP 200 OK(自定义上下文示例)
type: choice 和 value,评分题返回 type: score 和 score。status: completed 表示判断已完成,业务目标是否达成应根据答案确定。
幂等重试
- 幂等 key 在当前认证范围内生效。重试应保持相同认证范围、key 和请求体原始字节;即使 JSON 含义相同,改变字段顺序或空白也会被视为不同请求体。
- 相同 key 和相同请求体:已成功时返回原 Decision;已失败时返回原失败错误;均不会重新执行判断。
- 原请求仍在执行时,返回
409 decision_in_progress,错误中包含decision_id,可稍后查询详情。 - 同一 key 对应不同请求体时,返回
409 idempotency_key_reused。 - 需要发起一次新的判断(包括基于 Session 的最新上下文重新判断)时使用新 key。复用 key 不会重新读取历史或更新原结果。
错误
| HTTP | Code | 触发条件 |
|---|---|---|
| 400 | invalid_decision_input | 输入模式、问题、选项、评分等级或幂等 key 无效,JSON 重复键、结构限制超限或存在未知协议字段。 |
| 400 | — | 传入查询参数、重复幂等 Header 或空幂等 Header。 |
| 401 | — | 凭证缺失、无效或已过期。 |
| 403 | — | 当前凭证缺少所需访问权限或 Workspace 配置不满足要求。 |
| 404 | — | Session 不存在、不可访问、已归档,或其 Identity 已禁用、已删除。 |
| 409 | idempotency_key_reused | 同一 key 对应不同请求体。 |
| 409 | decision_in_progress | 相同 key 对应的判断仍在执行。 |
| 413 | — | 请求体超过 1 MiB。 |
| 422 | decision_context_too_large | 判断输入超过预算,或模型服务拒绝输入大小。 |
| 422 | decision_context_unavailable | Session 没有可用的判断上下文。 |
| 402 | decision_quota_exhausted | 判断额度耗尽或受限。 |
| 429 | decision_rate_limited | 判断服务限流;有 Retry-After 时按其值等待。 |
| 499 | decision_cancelled | 判断请求被取消,断开的客户端可能无法收到此响应。 |
| 500 | decision_internal_error 或无 Code | 服务内部错误。 |
| 502 | decision_context_read_failed | Session 历史读取失败或返回结构无效。 |
| 502 | decision_invalid_upstream_response、decision_upstream_error | 判断服务返回无效结果或发生其他上游错误。 |
| 503 | decision_upstream_unavailable 或无 Code | 当前调用方或环境的判断能力暂不可用。 |
| 504 | decision_timeout | 判断超过执行时限。 |
HTTP 错误响应
请求已被接受并生成记录后,执行失败的错误响应通常携带 error.decision_id。参数校验或鉴权等接受前错误不生成 Decision。
request_id 可用时返回,用于排查请求;error.type 为错误大类,error.code 为可选业务错误码。入口鉴权错误可能采用不同的响应结构。
可用 error.decision_id 查询记录。详情接口查询到失败记录时返回 HTTP 200,记录的 status 为 failed;创建接口的失败则返回对应的非 2xx HTTP 状态。