Structured Outputsの使い方 | 指定されたフォーマットでニュース記事の要約を行うDiscordボットを構築
OpenAIが発表した「Structured Outputs」機能は、AIモデルの出力を効果的に制御し、構造化することができる機能です。
従来のモデルでは、出力が自由形式であるため、その後の処理が複雑になりがちでした。Structured Outputsを利用することで、出力をJSONなどの構造化データとして得ることができ、データの解析やシステム連携が容易になります。
本記事では、この機能の概要と使い方を紹介し、記事の後半では実際の応用例としてRSSフィードから情報を取得し、指定されたフォーマットで要約を行うDiscordボットの作成方法を紹介します。
後半で紹介するDiscordボットの出力のイメージ:
それでは早速見ていきましょう!
機能の概要
Structured Outputsは、OpenAIが開発者向けに提供する機能で、モデルの出力を効果的に制御し構造化することができます。
主な特徴は以下の通りです:
指定したJSONスキーマに厳密に従った出力が可能
非構造化入力からの構造化データ生成を高精度で実現
複雑なスキーマ理解のためにモデルが特別に訓練されている
Structured Outputsの性能:
最新モデル「gpt-4o-2024-08-06」では、複雑なJSONスキーマ従順性評価で100%のスコアを達成
従来の「gpt-4-0613」モデルが40%未満のスコアだったことと比較すると、大幅な性能向上
Chat Completions API、Assistants API、Batch APIで利用可能
画像入力にも対応
この機能により、AIの出力をシステムと容易に連携させることが可能となります。
また、新モデル「gpt-4o-2024-08-06」の利用により、入力トークンで50%、出力トークンで33%のコスト削減も実現しています。
使い方
Structured Outputsの基本的な使い方を、簡単な数学チューターの構築を例に見てみましょう。
① 必要なライブラリのインポートとクライアントの初期化:
from pydantic import BaseModel
from openai import OpenAI
import json
client = OpenAI()
② Pydanticモデルを使用した出力構造の定義:
Structured Outputsのポイントは、Pydanticモデルを使用して出力構造を定義できる点にもあります。
class Step(BaseModel):
explanation: str
output: str
class MathReasoning(BaseModel):
steps: list[Step]
final_answer: str
このPydanticモデルの利用により、出力構造を簡潔に定義でき、リストなどの複雑なデータ型にも対応できます。
さらに、クラスやフィールドの説明をAIへの指示として利用できます。
③ OpenAI APIの呼び出しと結果の処理:
question = "8x + 7 = -23を解くにはどうすればいいですか?"
completion = client.beta.chat.completions.parse(
model="gpt-4o-2024-08-06",
messages=[
{"role": "system", "content": "あなたは役に立つ数学のチューターです。ユーザーにステップバイステップで日本語で回答してください。"},
{"role": "user", "content": question}
],
response_format=MathReasoning,
)
math_reasoning = completion.choices[0].message.parsed
print(json.dumps(math_reasoning.dict(), indent=2, ensure_ascii=False))
この例では、Pydanticモデルを`response_format`パラメータに渡すだけで、AIが指定された構造に従った出力を生成します。
出力:
GASとGPT-4oを活用したDiscord自動記事要約システムの構築
ここからは、Structured Outputsを実践的に活用する例として、海外メディアReutersの最新記事を自動で取得し、要約してDiscordに投稿するシステムの構築方法を紹介します。
このシステムは、RSSフィード(ウェブサイトの更新情報を配信するための形式)を利用して記事を取得し、Google Sheets、Google Apps Script、OpenAIのGPT-4o API、およびDiscordのWebhookを使います。
このシステムを応用することで、Reutersに限らず、様々なメディアの最新情報を自動的にDiscordで共有し、最新のニュースや業界動向を迅速に把握することが可能になります。
それでは、具体的な構築手順を見ていきましょう!