--- title: "Typia で OpenAI Structured Outputを使ってみた!" date: '2024-08-08' isPublished: true lang: 'ja' --- ![0.png](./0.png) # はじめに 先日、OpenAI に Structured Output が登場しました。 https://openai.com/index/introducing-structured-outputs-in-the-api/ https://platform.openai.com/docs/guides/structured-outputs Structured Output とは、以前から提供されていた JSON Mode の上位互換です。 Strucuted Output では、ユーザーが提供する JSON Schema に従って、OpenAI が生成した JSON を返してくれます(そのように設計されています)。 そのため、従来の JSON Mode より信頼性の高い結果を得ることができるとされています。 ## OpenAI は Zod に対応 OpenAI の公式の SDK では `zod helper` なるものが提供されています。 これは、zod schema を渡すと、内部で JSON Schema への変換を行い、リクエストを送信し、response の validation までも行ってくれる便利なものです。 https://github.com/openai/openai-node/blob/31e4afd6ca50e8e2560598296c099390c5956e31/src/helpers/zod.ts とはいえ、実装はそんなに難しいものではありません。 そこで、今回は Typia で OpenAI Structured Output を使えるようにしてみました。 # `Typia` とは 以下の記事をご覧ください! /blog/2024-06-12-zenn-c4775a3a5f3c11-ja # `Typia` で OpenAI Structured Output を使う 今回、`zod helper` と同じような関数を実装したライブラリを作成しました。 https://github.com/ryoppippi/typiautil 現在のところ、 `zodResponseFormat` 、 `zodFunction` 相当の関数は実装してあります。 # サンプルコード 以前の記事で紹介したコードを修正する形で試してみます。 /blog/2024-07-18-zenn-ce3631be2e2310-ja https://github.com/ryoppippi/openai-with-typia/blob/c2596ed7b9def86b3d56f1cec2ac5099bac282ed/src/index.ts#L27-L45 `Typia` は標準で型情報から JSON Schema を生成する機能を持っているため、 これを利用しています。 `Typia` は型情報に付与した JSDoc を `description` として使用できるので、直感的に JSON Schema を定義できて良いですね。 もちろん、長さや詳細な型情報(int, string, boolean, 最大値/最小値、など)も `Typia` の `tag` を使って指定できます。 https://typia.io/docs/json/schema/ 結果として、以下の型定義から: https://github.com/ryoppippi/openai-with-typia/blob/c2596ed7b9def86b3d56f1cec2ac5099bac282ed/src/type.ts 以下の JSON Schema が生成されます: https://github.com/ryoppippi/openai-with-typia/blob/c2596ed7b9def86b3d56f1cec2ac5099bac282ed/schema.json これを実行すると、いい感じに構造化された JSON が返ってきます。 https://github.com/ryoppippi/openai-with-typia/blob/c2596ed7b9def86b3d56f1cec2ac5099bac282ed/result.json いい感じですね! > [!NOTE] > 本記事とは関係のない余談ですが、作者が OpenAI に特化した Schema Library を作っています(内部で `Typia` を使用している)。 > https://github.com/wrtnio/openai-function-schema/ # まとめ - OpenAI Structured Output を使ってみた - `Typia` で OpenAI Structured Output を使うためのライブラリを作成した - `Typia` は型情報から JSON Schema を生成する機能を持っているため、直感的に JSON Schema を定義できて良い