見出し画像

Structured Outputsの使い方 | 指定されたフォーマットでニュース記事の要約を行うDiscordボットを構築

OpenAIが発表した「Structured Outputs」機能は、AIモデルの出力を効果的に制御し、構造化することができる機能です。

従来のモデルでは、出力が自由形式であるため、その後の処理が複雑になりがちでした。Structured Outputsを利用することで、出力をJSONなどの構造化データとして得ることができ、データの解析やシステム連携が容易になります。

本記事では、この機能の概要と使い方を紹介し、記事の後半では実際の応用例としてRSSフィードから情報を取得し、指定されたフォーマットで要約を行うDiscordボットの作成方法を紹介します。

後半で紹介するDiscordボットの出力のイメージ:

それでは早速見ていきましょう!


機能の概要

Structured Outputsは、OpenAIが開発者向けに提供する機能で、モデルの出力を効果的に制御し構造化することができます。

主な特徴は以下の通りです:

  1. 指定したJSONスキーマに厳密に従った出力が可能

  2. 非構造化入力からの構造化データ生成を高精度で実現

  3. 複雑なスキーマ理解のためにモデルが特別に訓練されている

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で共有し、最新のニュースや業界動向を迅速に把握することが可能になります。

それでは、具体的な構築手順を見ていきましょう!


ここから先は

15,163字 / 21画像
この記事のみ ¥ 500

この記事が参加している募集