はじめに
こんにちは、もちもちMAXです。
生成AIを使ってシステムを構築する際に、出力が固定されていないせいで苦しんだことありませんか?「0」か「1」かで回答して欲しいのに余計な文字が付け足されていたり、というのはよくある話だと思います。そこで、今回は出力を確実に「0」「1」にする方法を説明します。
といっても、今回の記事の内容は数ヶ月前くらいに思いついたことで、最近のOpenAIのアップデートでもう風化しています。。構造化出力の精度が高いのでそれを使えばなんとかなるんですよね。
ただ、考え方など役に立つものがあればと思ったので書き残しておきます。
やりたいこと
やりたいことはこれです。質問文が歴史に関する質問であれば1(Yes)、そうでなければ0(No)を返すように生成AIを使います。ただ、構造化出力が発表される前は安定して2択を選択させるのが難しかったです。JSONモードを使ってもfunction callingを使ってもダメなことがあり、これのせいでシステムに組み込むのが難しくなっていました。
構成
生成AIの回答を「0」「1」で固定するための構成を示します。
構成の変更点は下記の2つです。
- 生成AIのプロンプトを変更
- BERTを追加
生成AIのプロンプトでは「歴史に関係しているかどうかで、ポジティブ or ネガティブなリアクションを取る」ように指示します。BERTはネガポジ判定をおこなうために利用しており、ネガポジ判定は入力文がポジティブな内容かネガティブな内容かによって0~1までの値を取ります。
1つ目の変更(プロンプト修正)によって、生成AIの出力はポジティブな文章かネガティブな文章かのどちらかになります。そして、2つ目の変更(BERT追加)によってネガポジ判定することで出力された文章を0~1の数値に変換することができます。あとはその数値に従って処理を変えるだけです。
この構成によって、生成AIを通りBERTから出力されるのは確実に0~1の数値になります。また、生成AIの出力が変化しても文章のポジティブ、ネガティブが担保されていれば最終的な出力は変わりません。
さいごに
はじめに書いた通りですが、今となっては構造化出力でほぼ固定化できる上に、2択以上も選べるのでその方が良いです。あと、厳密には生成AIの回答が「0」「1」になるわけではないですね。。ただ、生成AI単体ではなくBERTのような自然言語処理モデルを組み合わせて使うのは、何か使えることがあるかも知れません。それに期待して本記事を書いた次第です。
それではまた!
ブログ↓
https://mochinochikimchi.com
アプリLP↓
https://mochinochikimchi.com/applications/mealmotion/index.html