カスタムコンテキスト(state)または Session の直近のコンテキストに基づき、構造化された判定を同期的に実行します。
Decision API は現在 Beta 機能です。インターフェイス定義、レスポンス構造、動作は今後のバージョンで変更される可能性があります。ドキュメントの更新を確認し、本番環境で使用する前に互換性を検証してください。
POST /api/v1/forward/decisions
リクエストヘッダー
| Header | 必須 | 説明 |
|---|---|---|
| Authorization | はい | Bearer <PAT or 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を返します。 - 新しい判定を行う場合は新しい key を使用します。Session の最新コンテキストに基づく再判定も同様です。key を再利用しても履歴の再読み取りや元の結果の更新は行いません。
エラー
| HTTP | Code | 発生条件 |
|---|---|---|
| 400 | invalid_decision_input | 入力モード、質問、選択肢、採点レベル、冪等 key が無効、JSON キーの重複、構造制限の超過、または未知のプロトコルフィールド。 |
| 400 | — | クエリパラメーター、重複した冪等ヘッダー、または空の冪等ヘッダーを指定しています。 |
| 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 でレコードを照会できます。詳細 API で失敗レコードを照会した場合は HTTP 200 を返し、レコードの status は failed です。一方、作成 API の失敗は対応する非 2xx HTTP ステータスを返します。