トピック管理

OCI Generative AI Guardrailsのトピック管理を使用して、アプリケーションに定義したトピックに対するテキストをチェックします。

トピック管理では、展示ローンや開館時間外に博物館を訪問するリクエストなど、アプリケーションに定義したトピックに対してテキストを分類します。

Guardrailsシステム・バージョン1.2.0以降では、ApplyGuardrails APIを使用して、定義したトピックに対してテキストを評価できます。

ApplyGuardrailsリクエストごとに、トピック名、オプションの説明、およびオプションのラベル付き例を送信します。サービスは、すべてのトピックに対してテキストを評価し、各トピックの一致または不一致の結果を返します。アプリケーションでは、これらの結果を使用してコンテンツの処理方法を決定します。

重要

トピック管理を使用するには、各ApplyGuardrailsリクエストにtopicConfigを含めます。コンソールでモデル・エンドポイントを作成または更新するときに、トピック管理をガードレールとして選択することはできません。トピック管理は、OpenAI互換APIパスでは使用できません。

トピック定義は現在のリクエストに適用されます。サービスは、再利用可能なトピック・リソースとして作成または格納しません。トピック構成を再利用するには、それをアプリケーションに保持し、各リクエストに含めます。評価されるトピックを変更するには、後続のリクエストの構成を変更します。

トピック管理の仕組み

  1. トピックを定義します。 各トピックに名前を付けます。説明を追加して、範囲とラベル付きの例を明確にし、一致するテキストまたは一致しないテキストを示します。
  2. テキストおよびトピックの構成を送信します。 multimodalInputにテキストを含めて、guardrailConfigs.topicConfigを追加し、サポートされているGuardrailsシステム・バージョンを選択します。
  3. 結果を読みます。 results.topicModeration.topicsを使用して、構成されているすべてのトピックの結果を検索します。複数のトピックが同じテキストと一致する可能性があります。
  4. アプリケーションのポリシーを適用します。 たとえば、アプリケーションで相互作用を許可したり、サポートされているサブジェクトにユーザーをリダイレクトしたり、コンテンツがモデルに渡されたり、ユーザーに表示されないようにすることができます。

ユーザー入力を評価するには、モデルに送信する前に送信します。モデル出力を評価するには、その出力を個別のApplyGuardrailsリクエスト内のテキストとして送信してから表示します。

一致するトピックは、テキストの件名を示します。これは、テキストが安全でないことを意味するものではなく、結果によって推論リクエストが自動的にブロックされることはありません。アプリケーションは、アクションが必要なトピックを決定します。

要求要件

既存のエンドポイントへのリクエストの送信:

POST /20231130/actions/applyGuardrails

リクエスト署名および完全なAPI契約については、ApplyGuardrailsを参照してください。

  • guardrailVersionConfig.guardrailVersionを1.2.0またはそれ以降のサポートされているバージョンに設定します。トピック管理には、明示的なバージョン選択が必要です。ListGuardrailVersionsを使用して、使用可能なバージョン、説明およびライフサイクルの状態を確認します。要件およびPATCHバージョンの選択をリストするには、バージョン選択ワークフローを参照してください。Guardrailsシステム・バージョンは、エンドポイント・パスおよびSDKバージョンのAPIバージョンとは異なります。
  • multimodalInputに1つのTEXT項目を含めて、分類するテキストをcontentに配置します。languageCodeフィールドはオプションです。指定する場合は、enまたは英語の地域バリアント(en-USなど)を使用します。
  • inputを省略します。multimodalInputも指定されている場合でも、inputを含むtopicConfigを指定すると、HTTP 400になります。
  • guardrailConfigsの下にtopicConfigを追加します。topicConfig.topicsに少なくとも1つのトピックを指定してください。
  • compartmentIdにコンパートメントのOCIDを指定します。

トピック管理では、英語テキストのみが評価されます。リクエストにイメージも含まれている場合、トピック分類では無視されます。イメージのみのリクエスト、複数のテキスト項目、および無効または英語以外の言語コードは、トピック分類ではサポートされていません。languageCodeは省略できます。

コンテンツ・モデレーション、プロンプト・インジェクション検出およびPII検出構成を同じリクエストに含めることができます。トピック管理を追加しても、これらの保護は変更されません。topicConfigを省略すると、既存のリクエスト動作が保持され、レスポンスにresults.topicModerationは含まれません。

トピックと例の定義

guardrailConfigs.topicConfig.topicsでトピックを定義します。オプションで、ラベル付きの例をguardrailConfigs.topicConfig.fewShotExamplesに追加します。

フィールド必須要件
topicsはいリクエストごとに1から25のトピックを含めます。
topics[].nameはい少なくとも1つの空白以外の文字を含む1から100文字を使用します。名前は、先頭と末尾の空白を切り捨て、大文字と小文字に関係なく比較した後に一意である必要があります。
topics[].descriptionいいえトピックを1,000文字以内で説明してください。
fewShotExamplesいいえ最大15個のラベル付きの例を含めます。
fewShotExamples[].userTextはい、各例について1から1,000文字のサンプル・テキストを指定します。
fewShotExamples[].classificationはい、各例についてリクエストの各トピックに1つのエントリを含めます。各キーは、送信されたトピック名(大文字と小文字を含む)と完全に一致する必要があります。トピックが例に適用される場合は文字列"true"を使用し、適用されない場合は"false"を使用します。値は、JSONブール値ではなく、これらの小文字の文字列である必要があります。トピックを省略したり、追加のキーを含めたりしないでください。

たとえば、トピックがExhibit LoansおよびAfter-Hours Accessの場合、1つのトピックのみが該当する場合でも、すべての例でclassificationオブジェクトに両方のキーが含まれている必要があります。

ノート

classificationのラベルとレスポンスのisMatchedフィールドの例では、小文字の文字列"true"および"false"が使用されます。

重複名の検証では、トピック名が比較されます。その意味が重複しているため、単にトピックを拒否するわけではありません。たとえば、大文字と小文字のみが異なる名前は重複しますが、類似した意味を持つ異なる名前は自動的には重複しません。

定義を明確にするには:

  • 特定のトピック名と説明を使用します。たとえば、「展示ローン」は、別の会場での展示用に博物館のオブジェクトを借用する要求を検出する場合、「展示」よりも具体的です。
  • 説明を使用して、目的の範囲を説明し、関連トピックを区別します。
  • 一貫したラベルを持つ代表的な例を提供します。すべての例のトピックにラベルを付けます。
  • 一致するテキスト、一致しないテキストおよび複数のトピックに一致する可能性のあるテキストでテストします。結果に基づいて説明と例を絞り込みます。

例では、現在のリクエストの分類を示します。改訂された定義を評価するには、改訂されたトピック構成で別のリクエストを送信します。

トピック管理リクエストの例

この例では、架空の博物館の助手に、展示ローンと開館時間外のアクセスについてメッセージをチェックします。アプリケーションは、いずれかの照合を使用して、博物館スタッフに要求を参照できます。<your-compartment-ocid>をコンパートメントOCIDに置き換えます。

{
  "multimodalInput": [
    {
      "type": "TEXT",
      "content": "Could our community center borrow the clock exhibit for a local exhibition and collect it after the museum closes?",
      "languageCode": "en"
    }
  ],
  "guardrailConfigs": {
    "topicConfig": {
      "topics": [
        {
          "name": "Exhibit Loans",
          "description": "Requests to temporarily borrow museum objects for display at another venue."
        },
        {
          "name": "After-Hours Access",
          "description": "Requests to enter museum spaces or collect items outside normal opening hours."
        }
      ],
      "fewShotExamples": [
        {
          "userText": "Can our community center borrow the navigation instruments for a school exhibition?",
          "classification": {
            "Exhibit Loans": "true",
            "After-Hours Access": "false"
          }
        },
        {
          "userText": "May the photography club enter the gallery after closing time?",
          "classification": {
            "Exhibit Loans": "false",
            "After-Hours Access": "true"
          }
        },
        {
          "userText": "Which gallery displays the restored clock?",
          "classification": {
            "Exhibit Loans": "false",
            "After-Hours Access": "false"
          }
        }
      ]
    }
  },
  "guardrailVersionConfig": {
    "guardrailVersion": "1.2.0"
  },
  "compartmentId": "<your-compartment-ocid>"
}

このリクエストはトピック分類のみを有効にします。同じテキストを他の保護と評価するには、topicConfigとともに構成オブジェクトを追加します。「ApplyGuardrails APIの使用」を参照してください。

トピック結果について

トピック分類が成功すると、results.topicModeration.topicsには、構成済のトピックごとにリクエストと同じ順序で1つの結果が含まれます。一致しないトピックが含まれます。

フィールド意味
nameリクエストで指定されたとおりのトピック名。
isMatchedトピックがテキストに適用される場合は文字列"true"、適用されない場合は"false"。
scoreisMatchedが"true"の場合は1.0、"false"の場合は0.0。小数点は返されません。

スコアはバイナリ分類結果であり、段階的な信頼度スコアではありません。結果は、テキスト全体を分類し、一致したテキスト、オフセットまたは長さを返しません。

次の説明的なレスポンスは、サンプル・メッセージと一致する両方のトピックを示しています。

{
  "results": {
    "topicModeration": {
      "topics": [
        {
          "name": "Exhibit Loans",
          "score": 1.0,
          "isMatched": "true"
        },
        {
          "name": "After-Hours Access",
          "score": 1.0,
          "isMatched": "true"
        }
      ]
    }
  },
  "guardrailVersion": {
    "version": "1.2.0"
  }
}

アプリケーションは、ポリシーに従っていずれかの照合を処理できます。一致しないトピックの場合、レスポンスにはscore: 0.0およびisMatched: "false"を含む名前が含まれます。

検証とトラブルシューティング

リクエストにサポートされているGuardrailsシステム・バージョンが含まれ、トピックおよび入力要件を満たしていることを確認します。input、イメージのみのリクエスト、複数のテキスト・アイテム、無効または英語以外の言語コード、またはサポートされていないガードレール・バージョンを指定すると、HTTP 400になります。languageCodeは省略できます。

検証エラーです確認項目
INVALID_TOPIC各トピックに空白以外の名前があり、名前と説明が長さの要件を満たしていることを確認します。
DUPLICATE_TOPIC周囲の空白を削除し、大文字と小文字を区別せずに比較した後に同一になる名前を確認します。
TOPIC_LIMIT_EXCEEDED1つのリクエストで25個以下のトピックを送信できます。
INVALID_TOPIC_EXAMPLE例の数と長さをチェックします。各分類マップには、送信されたトピック名のみが含まれ、名前ごとに文字列"true"または"false"を含める必要があります。JSONブール値およびその他の文字列は受け入れられません。
UNSUPPORTED_LANGUAGElanguageCodeを指定する場合は、enまたは英語の地域バリアントを使用します。フィールドを省略することもできます。
UNSUPPORTED_TOPIC_INPUTmultimodalInputは、1つのTEXT項目とともに使用します。inputを省略し、トピック分類のイメージ専用リクエストを送信しません。

結果に目的のトピックが反映されない場合は、トピックの説明とラベルの例を確認してください。結果を使用してポリシーを適用する前に、改訂された定義を代表的なアプリケーション・テキストでテストします。