[API開発の効率化へ]OpenAIのStructured Outputsで出力管理をもっと簡単に
生成AIを使ったソフトウェア開発では、出力データのフォーマット調整が非常に重要です。以前は、JSON形式でデータを受け取るために「Function Calling」が必要でしたが、「Structured Outputs」の登場により、それが不要になり、開発効率が向上しました。
Structured Outputsとは?
OpenAIの「Structured Outputs」は、データの形式を事前に指定し、APIが常にそのフォーマットで出力を返すことを保証する機能です。
下記のように、gpt-4o-2024-08-06で「Structured Outputs」を利用するとJSONで100%出力するようになりました。
たとえば、顧客の情報を毎回正しいフォーマットで受け取ることができ、データの一貫性を保ちながらスムーズに開発が進められます。
Function Callingとの違い
これまでは、JSON形式のような特定のフォーマットで出力を保証するには下記の記事でご紹介しているFunction Callingが必要でした。Function Callingは動的なデータ処理に使われ、ユーザーがカレンダーに予定を追加するようなリクエストに適しています。
しかし、Structured Outputsでは指定したフォーマットでデータを直接受け取れるため、関数を呼び出す手間が省け、出力データの管理がより簡単になります。
Structured OutputsとFunction Callingの使い分け
Function Callingが適している場合
Function Callingは、動的なデータの取得や処理が必要な場合に適しています。例えば、ユーザーが「次の会議をカレンダーに追加して」と指示した場合、Function Callingを使えばカレンダーAPIにアクセスし、予定を追加することができます。
Structured Outputsが適している場合
一方で、定型的なデータ処理が必要な場合にはStructured Outputsが適しています。たとえば、顧客の名前や住所といった情報を毎回JSON形式で受け取る必要がある場合、Structured Outputsを使えば、Function Callingを使用せずに決まったフォーマットでデータを受け取ることができます。
簡単に使えるStructured Outputsの使い方
以下は、Pythonコードを使ってStructured Outputsを実装し、ユーザーが勉強したい科目とその理由をJSON形式で正確に受け取る例です。
from openai import OpenAI
import json
# OpenAIのAPIキーを入力
client = OpenAI(api_key="sk-xxx")
# ユーザ情報をjson形式に変換
def get_user_info(name):
return json.dumps({"name": name})
def run_conversation():
# システムメッセージとユーザーメッセージを定義
messages = [
{"role": "system", "content": "あなたは役立つアシスタントです。生徒が勉強したい科目とその理由を教えてください。"},
{"role": "user", "content": "将来科学者になりたいから、理科を勉強したい。"}
]
# レスポンスフォーマットを定義
response_format = {
"type": "json_schema",
"json_schema": {
"name": "subject_response",
"strict": True,
"schema": {
"type": "object",
"properties": {
"subject": {"type": "string", "description": "科目"},
"reason": {"type": "string", "description": "理由"}
},
"required": ["subject", "reason"],
"additionalProperties": False,
}
}
}
# ChatGPTにリクエストを送信
response = client.chat.completions.create(
model="gpt-4o-2024-08-06",
messages=messages,
response_format=response_format
)
# レスポンスを解析して結果を表示
content = json.loads(response.choices[0].message.content)
print(f"科目:{content['subject']}")
print(f"理由:{content['reason']}")
return content
if __name__ == "__main__":
run_conversation()
出力結果は次のようになります。
% python structed_outputs.py
科目:理科
理由:将来科学者になりたい
このコードを使えば、ユーザーのリクエストに応じた情報をJSON形式で正確に受け取ることができ、Structured Outputsの利便性を実感できます。従来はFunction Callingを使っていた場面でも、Structured Outputsを利用することで、手軽にデータを管理できるのが大きなメリットです。
まとめ
Structured Outputsの登場により、開発者は関数呼び出しを省略しても、データの整合性を保つことができるようになりました。API開発の効率がさらに向上し、データ管理が簡単にできるこの機能は、今後のAPI開発において重要なツールとなるでしょう。特に、定型的なデータ処理やフォーマット管理が求められるプロジェクトには、Structured Outputsの利用が推奨されます。
この記事が気に入ったらサポートをしてみませんか?