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