Typia で OpenAI Structured Outputを使ってみた!
はじめに
先日、OpenAI に Structured Output が登場しました。
Structured Output とは、以前から提供されていた JSON Mode の上位互換です。
Strucuted Output では、ユーザーが提供する JSON Schema に従って、OpenAI が生成した JSON を返してくれます(そのように設計されています)。
そのため、従来の JSON Mode より信頼性の高い結果を得ることができるとされています。
OpenAI は Zod に対応
OpenAI の公式の SDK では zod helper
なるものが提供されています。
これは、zod schema を渡すと、内部で JSON Schema への変換を行い、リクエストを送信し、response の validation までも行ってくれる便利なものです。
とはいえ、実装はそんなに難しいものではありません。
そこで、今回は Typia で OpenAI Structured Output を使えるようにしてみました。
Typia
とは
以下の記事をご覧ください!
Typia
で OpenAI Structured Output を使う
今回、zod helper
と同じような関数を実装したライブラリを作成しました。
現在のところ、 zodResponseFormat
、 zodFunction
相当の関数は実装してあります。
サンプルコード
以前の記事で紹介したコードを修正する形で試してみます。
Typia
は標準で型情報から JSON Schema を生成する機能を持っているため、 これを利用しています。
Typia
は型情報に付与した JSDoc を description
として使用できるので、直感的に JSON Schema を定義できて良いですね。
もちろん、長さや詳細な型情報(int, string, boolean, 最大値/最小値、など)も Typia
の tag
を使って指定できます。
結果として、以下の型定義から:
以下の JSON Schema が生成されます:
これを実行すると、いい感じに構造化された JSON が返ってきます。
いい感じですね!
まとめ
- OpenAI Structured Output を使ってみた
-
Typia
で OpenAI Structured Output を使うためのライブラリを作成した -
Typia
は型情報から JSON Schema を生成する機能を持っているため、直感的に JSON Schema を定義できて良い
Discussion