LLMの出力の構造化データへの変換

はじめに

 ChatGPTのようなLLMにユーザが質問すると、理路整然と自然な日本語で答えてくれる。このような出力を自作アプリ内で利用するとき、特定の情報だけを出力文字列の中から抽出したいことが良くある。JSON形式での出力を要求したり正規表現を使用することもできるが、もっと便利な手法が存在するので紹介する。

Structured Outputs

 任意の文字列から必要な情報だけを抽出し構造化データに変換する方法を、LLMの業界では「Structured Outputs」と呼ぶ。以下、具体的なソースコードを見ながら説明する。最初に、全ソースを以下に示す。ここではAzure OpenAIのPython SDKを利用した。

今回のサンプルでは以下の文章(上記コードの23行目から25行目)から人名、日時、組織名を抽出することが目的である(引用元)。

以下、必要な個所を切り出しながら順に説明する。

出力用クラスの作成

 まず最初に出力用のクラスOutputを以下のように定義する。

メンバ変数の内訳は以下の通りである。
 persons_name:人名
 datetime:日時
 organization_names:組織名

これらは今回切り出したい対象物である。

Azure OpenAIクライアントの初期化

 Azure OpenAIクライアントを初期化する。

引数には以下3つの情報が必要である。
 ● Azure OpenAIのエンドポイント
 ● Azure OpenAIのAPIキー
 ● Azure OpenAIのAPIバージョン

これら3つの情報はあらかじめ用意しておくものである。

Azure OpenAIの実行

 関数parseを呼び出し
 ● 最初の引数modelにAzure OpenAIのデプロイ名
 ● 2番目の引数messagesに入力プロンプト
 ● 最後の引数response_formatに上で定義した出力用クラスOutput
を渡して実行する。

結果の出力

 最後に結果を出力する。以下の関数を定義し

以下のように呼び出す。

出力は以下の通り。

クラスOutputのメンバ変数に目的の文字列が格納されていることが分かる。

まとめ

 今回は、LLMの出力から特定の情報だけを抽出する便利な方法を紹介した。自作アプリ内でLLMの出力を利用する際に大いに役立つ手法である。

Kumada Seiya

Kumada Seiya

仕事であろうとなかろうと勉強し続ける、その結果”中身”を知ったエンジニアになれる

最近の記事

  • 関連記事
  • おすすめ記事
  • 特集記事

アーカイブ

カテゴリー

PAGE TOP