ドキュメント

API リファレンス

API リファレンス

TypeSafe 評価エンドポイントの完全な HTTP API リファレンス。

型付きの questions マップに対して state を評価し、質問ごとに 1 つずつ構造化された answers を返します。入門ガイドはプリミティブから始めてください。

評価エンドポイント

POST https://api.typesafe.ai/v1/systemone
Authorization: Bearer <API_KEY>
Content-Type: application/json

リクエストボディ

すべてのリクエストの最上位の形です。questions マップの各エントリは、自分で名前を付けた型付きの質問です。

statestring | object | array · required

評価する内容です。テキストなら通常の文字列を、チャットログ・記録・アプリケーションの現在の状態などなら構造化データ(オブジェクト/配列)を使います。形式とベストプラクティスは状態を参照してください。

modelstring · required

リクエストを処理するモデルです。TypeSafe のフラッグシップモデルである "jev-latest" を使います。利用できるモデルと別名はモデルを参照してください。

questionsmap<string, Question> · required

型付きの Question オブジェクトのマップです。キーは自分で選びます。答えは同じキーで返ります。

マップのエントリ

‹question id›Question

自分で選ぶキーです。対応する Answer が同じ id で返ります。このキーは基盤モデルには送信されず、推論にも使われません。

{
  "state": "Help! My payouts have been failing for 3 days.",
  "model": "jev-latest",
  "questions": {
    "is_urgent": {
      "type": "noul",
      "instructions": "Does this convey urgency?"
    }
  }
}

質問の種類

Question は 3 つの型のいずれかで、type フィールドで決まります。3 つとも type と instructions を共有し、それぞれが独自の criteria を追加します。

instructions プロパティは文字列・オブジェクト・配列のいずれかです。追加のコンテキストや、参照が必要なデータを伴う長い質問は、構造化オブジェクトに分割できます。質問を 1 つのフィールドに、データを他のフィールドに置き、データフィールドをバッククォートで名前参照します。入れ子になった state の値を質問から指すのと同じ要領です:

"instructions": {
  "potential_duplicate": {
    "name": "John Smith",
    "location": "Oakland, California",
    "last_employer": "Google"
  },
  "question": "Is the resume for the same person as `potential_duplicate`?"
}

詳しくは質問で構造を使うを参照してください。

Noul

はい/いいえの質問です。答えが「はい」である確率を返します。

type"noul" · required

instructionsstring | object | array · required

評価するはい/いいえの質問です。オブジェクトでは、質問を 1 つのフィールドに、それが参照するデータを他のフィールドに置けます。詳しくは質問で構造を使うを参照してください。

criteriaobject

任意です。「はい」と「いいえ」がそれぞれ何を意味するかの説明です。

プロパティ

truestring | object | array

「はい」(値が 1 に近い)が意味するもの。

falsestring | object | array

「いいえ」(値が 0 に近い)が意味するもの。

{
  "state": "Help! My payouts have been failing for 3 days.",
  "model": "jev-latest",
  "questions": {
    "is_urgent": {
      "type": "noul",
      "instructions": "Does this convey urgency?",
      "criteria": {
        "true": "Explicitly time-sensitive",
        "false": "No urgency expressed"
      }
    }
  }
}

Choice

自分で定義した選択肢の集合から 1 つを選びます。選ばれた選択肢と完全な確率分布を返します。

type"choice" · required

instructionsstring | object | array · required

モデルに判断させる内容です。オブジェクトでは、質問を 1 つのフィールドに、それが参照するデータを他のフィールドに置けます。詳しくは構造化された instructions と criteriaを参照してください。

criteriamap<string, string | object | array | null> · required

選択肢からルーブリックの説明へのマップです。選択肢に追加の説明が不要なときは null を使います。1 つの Choice には最大 255 個の選択肢を置けます。

マップのエントリ

‹option›string | object | array | null

自分で選ぶキーです。この選択肢の説明。

{
  "state": "Help! My payouts have been failing for 3 days.",
  "model": "jev-latest",
  "questions": {
    "department": {
      "type": "choice",
      "instructions": "Which team should handle this?",
      "criteria": {
        "billing": "Payments, invoicing, refunds",
        "technical": "Bugs, outages, integrations",
        "sales": "Pricing, upgrades, new accounts"
      }
    }
  }
}

Score

自分で定義したルーブリックに沿って状態を評価します。各レベルにまたがる、確率で重み付けした値を返します。

type"score" · required

instructionsstring | object | array · required

モデルに評価させる内容です。オブジェクトでは、質問を 1 つのフィールドに、それが参照するデータを他のフィールドに置けます。詳しくは質問で構造を使うを参照してください。

criteriaarray<string | object | array> · required

レベルの説明を並べた順序付きの配列です。Score には少なくとも 2 つのレベルが必要です。API は最大 10 個まで受け付けます。

{
  "state": "Help! My payouts have been failing for 3 days.",
  "model": "jev-latest",
  "questions": {
    "frustration": {
      "type": "score",
      "instructions": "How frustrated is the customer?",
      "criteria": ["Calm", "Frustrated", "Very angry"]
    }
  }
}

レスポンスボディ

質問ごとに 1 つの答えを、指定したものと同じ id で返します。

modelstring · required

この評価を実行したモデルです。

answersmap<string, Answer> · required

質問ごとに 1 つの Answer を、questions で使ったものと同じ id をキーにして返します。

マップのエントリ

‹question id›Answer

questions で選んだものと同じ id です。

usageobject · required

このリクエストの token 使用量です。

プロパティ

input_tokensinteger

output_tokensinteger

{
  "model": "jev-1.13.0",
  "answers": {
    "is_urgent": {
      "type": "noul",
      "noul": 0.95
    }
  },
  "usage": { "input_tokens": 296, "output_tokens": 20 }
}

答えの種類

すべての答えは、対応する質問と一致する type を持ちます。Choice と Score の答えはさらに、その答えの確率分布から導かれた 0 から 1 の間の confidence を持ちます。詳しくは信頼度を参照してください。

Noul の答え

type"noul" · required

noulnumber · required

0(いいえ)から 1(はい)の尺度でのはい/いいえの答えです。

{
  "model": "jev-1.13.0",
  "answers": {
    "is_urgent": {
      "type": "noul",
      "noul": 0.95
    }
  },
  "usage": { "input_tokens": 307, "output_tokens": 20 }
}

Choice の答え

type"choice" · required

choicestring · required

最も確率の高い選択肢です。

probabilitiesmap<string, number> · required

各選択肢をその確率に対応付けたもの(合計が 1 になる浮動小数点数)です。

マップのエントリ

‹option›number

criteria で定義した選択肢です。

confidencenumber · required

モデルがどれだけ確信しているか。確率分布から導かれます。

{
  "model": "jev-1.13.0",
  "answers": {
    "department": {
      "type": "choice",
      "choice": "billing",
      "probabilities": { "billing": 0.88, "technical": 0.12, "sales": 0.0 },
      "confidence": 0.81
    }
  },
  "usage": { "input_tokens": 318, "output_tokens": 34 }
}

Score の答え

type"score" · required

scorenumber · required

各レベルにまたがる、確率で重み付けした答えです。レベルの間に落ちることもあります。

legendmap<string, string> · required

各レベルの番号をその説明に対応付けたものです。

probabilitiesmap<string, number> · required

各レベル(文字列キー)をその確率に対応付けたもの(合計が 1 になる浮動小数点数)です。

マップのエントリ

‹level›number

legend と対応する文字列キーとしてのレベルインデックスです。

confidencenumber · required

モデルがどれだけ確信しているか。確率分布から導かれます。

{
  "model": "jev-1.13.0",
  "answers": {
    "frustration": {
      "type": "score",
      "score": 1.05,
      "legend": { "0": "Calm", "1": "Frustrated", "2": "Very angry" },
      "probabilities": { "0": 0.0, "1": 0.95, "2": 0.05 },
      "confidence": 0.92
    }
  },
  "usage": { "input_tokens": 304, "output_tokens": 18 }
}

エラー

エラーは標準の HTTP ステータスコードを使い、何が問題だったかを説明する JSON ボディを伴います。

ステータス 意味
401 Unauthorized API key が欠けているか無効です。Authorization ヘッダーを確認してください。
422 Unprocessable Entity リクエストボディが検証に通りませんでした。たとえば必須フィールドの欠落や質問の形式の誤りです。ボディに問題のあるフィールドが詳しく書かれます。
429 Too Many Requests レート制限を超えました。少し待ってから再試行してください。
529 Overloaded TypeSafe が一時的に過負荷です。少し待ってから再試行してください。

レート制限の扱い

429 Too Many Requests または 529 Overloaded のレスポンスを受け取ったときは、すぐに再試行せず、指数バックオフでリクエストを再試行してください。当社のクライアント SDK はこれを自動で処理するので、当社の SDK をその既定の再試行ポリシーで使っているなら追加の対応は不要です。