こんばんは、かーでぃです。
OpenAI APIは、しばらく使っているのですが、いつもgpt-3.5-turboを使ってるんですね。
なぜか?
「モデルを、gpt-4oやgpt-4o-miniに謎のエラーで止まってしまうから」
で、WinActorでAPIまわりの処理を弄っていて、その原因がやっとつかめたので、忘備録として公開します。
プロンプト
以下のプロンプトをそれぞれのモデルで実行させます。
実行結果をテキストに保存したものを、下記に示します。
※恐らく、「JSON形式で出力」と指示した場合だけの問題じゃないかと思います。
gpt-3.5-turbo
gpt-4o-mini
(おまけ)gpt-4o
比較結果
どうでしょうか?違い、わかりますか?
ポイントは「content」の中です。
実は、gpt-3.5-turboの際は、余分な情報などなく、素直にJSONが記載されています。
一方、gpt-4oやgpt-4o-miniでは、JSONの前に余分な「```json」が含まれているんです。
何度実行しても、この余分なコレは付いてきてしまうので、JSONとして認識させるには除去するしかありません。
※「json:[~」となっていれば、JSONと認識してくれるハズなのに…
ということで、contentの値を取り出せたなら、冒頭にある余分な「```json」を文字列置換などを使って削除してあげれば、きれいなJSONになるので、中身が取り出せる、ということでした。
もっとスマートなやり方があるのかもしれませんが、試してはみたのですが、自分としてはこれしかなく。検索しても、それらしいことが書かれているブログもなかったので、記載しておきました。
ちなみにこんな動きができます!
ちなみに、JSONで返してもらうと、こんなことができます。
👇プロンプト
JSONで返ってきた結果を各要素に分解して、WinActorでエクセルに転記した結果がこちら。
これすごいのは、住所・名前以外の余分な情報(あいう~けこ、さしし***)を除去してくれているところ。
例えば、AI-OCRで項目指定せず、ざっくり1ページ読み取って、欲しい内容だけ取り出すように指示すれば、不要な情報を除去して必要な情報を構造化データで返してもらう、こともできちゃう。
もちろん、ハルシネーションの恐れもあるので、人間系の目視作業は必要になりますけどね。
追記 - こちらの方がスマートですので、こちら推奨ですw
フォロワーさんから、こんな情報を頂きました。
なるほど、response_formatでJSONモードにしてあげればいいのか。
MS Learnにも下記のような記述を見つけました。
ということで、さっそくWinActorde実装してみましょう!
response_formatは、JSONオブジェクトの指定ですので…
変数「jsonResponseFormat」の値を、下記のように指定します。
HTTPライブラリの要求→ボディに、response_formatを追加し、
型:オブジェクト
値:変数「jsonResponseFormat」
と指定します。
これで実行すると、contents要素の中に、余分な「```json」が無くなっており、形式としてgpt-3.5-truboで出力したときと同じになりました(^^)/