📦

OpenAI JSON modeのprompt/validationはTypeScriptの型定義だけで十分だよという話

2024/07/19に公開

TL;DR

  • Typia と OpenAI API の組み合わせはとても良い。

はじめに

2ヶ月ほど前にこのような記事を拝読しました。

https://tech.algomatic.jp/entry/2024/05/23/140219

この記事の内容はざっくり以下のようなものでした。

  • OpenAI の API や Claude の API の JSON mode での validation は大変
  • Validation のために Zod を用いて型を定義する
  • Prompt に Schema を含めるために、Zod Schema からTypeScriptの型を逆算して生成する(黒魔術)

とても面白い記事でした。
特に、Zod Schema から TypeScript の型を逆算する部分はとても興味深かったのです。

しかし同時に、

🤖 ... {Zod での黒魔術、あまりにも大変そうだな}
🤖 ... {TypeScriptで型定義を書いてそのまま使えばいいのに}

という感想を持ちました。

というわけで実践してみました。

実際のコード

https://github.com/ryoppippi/openai-with-typia

シンプルなので、一つずつ解説していきます。

  1. 欲しい情報の構造を TypeScript の Type または Interface で定義

https://github.com/ryoppippi/openai-with-typia/blob/16991a05bfeb6d431fc2b725170cc6db9ff0e826/src/type.ts

  1. 上で定義した Type を TypeScript のコードとして import する。同時に Type を定義したファイルを text として読み込む。

https://github.com/ryoppippi/openai-with-typia/blob/16991a05bfeb6d431fc2b725170cc6db9ff0e826/src/index.ts#L1-L13

  1. OpenAI API を JSON mode で叩く。その際に、TypeScript の Type で定義した構造を prompt に含める。

https://github.com/ryoppippi/openai-with-typia/blob/16991a05bfeb6d431fc2b725170cc6db9ff0e826/src/index.ts#L19-L44

  1. 上で定義した Type を typia.json.assertParse[1] に generics として渡し、openai からの response を parse & validate する。

https://github.com/ryoppippi/openai-with-typia/blob/16991a05bfeb6d431fc2b725170cc6db9ff0e826/src/index.ts#L46-L54

これで、TypeScript の型定義を書いておけば、prompt 作成から response の validation までを一撃で行うことができます。

入力したテキスト、出力結果はレポジトリに含まれているので、ぜひご覧ください。

まとめ

TypeScript の型定義を書いておけば、prompt 作成から response の validation までを一撃で行うことができるよ

参考資料

https://zenn.dev/ryoppippi/articles/c4775a3a5f3c11

脚注
  1. https://typia.io/docs/json/parse/ ↩︎

Discussion