前回までは、 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 件のコメント:
コメントを投稿