2024/11/26

つないでみよう:#23)GPT4o Structured Outputs - 活用事例 ①

前回までは、 Structured Outputs の仕組みついて整理しました。今回はこの機能を利用したサンプルアプリを使って、より具体的に紹介します。


サンプルアプリと Structured Outputs の役割

活用事例 ① は『ノーツ・しこく・フェスタ 2024:AIとNotes/Domino 禁断のコラボ ~ 生成 AI 実装事例集』の1つ目に挙げた『1. AI じゃダメなんですか? - AI 文書仕分』です。アプリの機能の詳細はリンク記事を確認いただくとして、このアプリでどのように Structured Outputs を活用したかまとめます。

アプリの機能は、タイトルと本文で構成されるブログ記事を AI に食べさせて、タイトル、カテゴリ 3 種(ドキュメントタイプ、テーマ/トピック、キーワード)、要約を生成させます。記事を書いた人物がこれらを記入すると、その人の知識や経験、好みや文章力で統一感がなくなるという問題を AI を使って平準化させることを狙っています。

よって、AI からの返答はタイトルやカテゴリなど、複数の項目を確実に取得したいため、Structured Outputs を使用したということですね。


Structured Outputs の設定とレスポンス

このアプリでの Structured Outputs の設定を紹介します。

定義した返信の項目(ノード)は 5 つです(赤字)。それぞれの項目に description を設定し、こちらの希望を伝えています。

AI 文書仕分)リクエスト(response_format のみ)
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "docshiwake",
      "strict": true,
      "schema": {
        "type": "object",
        "properties": {
          "doctitle": {
            "type": "string",
            "description": "この文書にタイトルをつけてください。"
          },
          "doctypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "ドキュメントタイプを3つまで答えてください。"
          },
          "docthemes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "テーマ/トピックを3つまで答えてください。"
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "キーワードを列挙してください。"
          },
          "summary": {
            "type": "string",
            "description": "要約"
          }
        },
        "required": [
          "doctypes",
          "docthemes",
          "keywords",
          "summary",
          "doctitle"
        ],
        "additionalProperties": false
      }
    }
  }

レスポンスの例は、次の通りです。指定したノード名で出力されています。

AI 文書仕分)レスポンス
  {
    "doctitle": "HCL Domino ライセンス簡素化に関する発表",
    "doctypes": [
      "通知/連絡",
      "製品情報"
    ],
    "docthemes": [
      "ライセンス変更",
      "製品終了",
      "顧客サポート"
    ],
    "keywords": [
      "HCL Domino",
      "ライセンス",
      "EOM",
      "EOS",
      "CCB",
      "メッセージング"
    ],
    "summary": "この記事は、HCL Dominoの既存の … 省略…"
  }


リスト値の生成と取得

今回のサンプルでは、ドキュメントタイプとテーマ/トピックは3つまで、キーワードは列挙するように指示しています。複数のカテゴリとそれぞれがリスト値(複数値)となるのでさまざまな切り口で文書が探せます。これはノーツの得意技ですね。

このリスト値を返す方法が、Structured Outputs の array というデータ型です。例えば、ドキュメントタイプでは次のように指定していました。

          "doctypes": {
            "type": "array",
            "items": {
              "type": "string"
            }
,
            "description": "ドキュメントタイプを3つまで答えてください。"
          },

型が array となる場合、配列の詳細を指定する items というオブジェクトノードが必要となります(青字)。オブジェクトの中身は配列の型を指定します。今回の例では string となっています。数値型の配列としたい場合はここが number となるということですね。


前回 連載:つないでみよう


0 件のコメント:

コメントを投稿