「AIサービス」連載「象をなでる、藪をつつく」
2 実験とその結果
公開日:
2-1. 実験の手順とAIの設定
第一回の最後で書いたように、今回は、Difyで作ったシンプルなRAGシステムに、仮想の装置の取扱説明を情報源として与えた上で、以下のような手順で実験をしてみました。
- システムにいくつかの質問をする。質問は主に仮想の装置についてのものだが、全く装置に無関係な質問もある。
- システムからの返答を記録して、取扱案内としてその返答が適切かどうか検討する。
- 2で問題ありと感じた点について、問題の解消を図るための指示をAIに与える。
- システムに同じ質問をして、指示の結果問題が解消されたかどうか確認する。
- 2から4までの過程を繰り返す。
今回の実験には、gpt-4o-miniをAIとして採用しました。AIが文章を作るときの働きかたについていろいろ設定はできるようなのですが今回はあまりさわりませんでした。意図的にすべての過程で固定したのは以下の3つです。
- メモリ:オフ
これをオンにすると過去のやりとりを覚えていて以後のやりとりの参考にするようなので、各回の問答のスタート地点を揃えるためにオフにしました。 - Temperature:0
これは0から1のあいだで設定するのですが、0に近いほど次に続く確率が高い言葉が選ばれることになり、1に近いほど次に続く確率が低い言葉も選ばれることになります。今回は、確実性がより高まるように0で固定します。 - Top-P:1
これも0から1のあいだで設定します。次に続く言葉の候補のうち、どのくらいを実際の候補として採用するかで、0に近いほど候補が厳選されます。今回は、Temperatureを0にしている上に、RAGシステムということで情報源を制限しているので、まったく候補があがらなくなるのを避けるため最大の幅にしました。
2-2. 今回とりあげる問題点
まず最初は、上記の設定以外はなにも指示を与えずに質問をしてみました。情報源として与えた取扱説明は一応参照しますが、情報源をどう取り扱うかの指示はなしです。
質問に応じて色々答えが返ってきます。
たとえば、「機能Bの設定方法を教えてください」という質問に「もちろんです、機能Bの設定は以下の手順で行います。・・・」という回答が返ってきたり、「設定画面を表示できない」という質問に「申し訳ありませんが、画面の表示に問題がある場合は、デバイスのトラブルシューティングを試みるか、製品の取扱説明書を参照するか、製品のサポートセンターに連絡してください。」という回答が返ってきたりします。「トランプ大統領とは?」という質問には「申し訳ありませんが、私の知識はデバイスの設定についてのみで、トランプ大統領についての情報は提供できません。」という回答が返ってきたりします。
返ってきた回答で、気になる点はいろいろ見られましたが、今回は以下の2点についてコントロールできるか試してみました。
まず1点は、「もちろんです」のようなあいづちです。最初の回の質問では、「機能Bの設定方法を教えてください」という質問に対する答えが「もちろんです、」から始まりました。これをしないようにできるかどうか。質問者との距離を不用意に縮めたあげく、適切な回答ができなかったとしたら印象は最悪です。取扱説明というドキュメントの性格上、できるだけ余分なことをいわず、RAGに与えた情報の範囲外のことは答えないのが理想です。
2点目は、「~できない」や「~されない」という形の質問に対して、デバイスのリセットや再起動をうながしたり、デバイスの故障を想定してサポートセンターへの連絡を勧めたりするなど、与えられた情報に含まれていない対処法を案内するのをやめさせられるかどうか。
今回は主に上記の2点について、AIに指示を与えることで返答が修正できるのかどうか試してみます。
2-2-1. あいづちを止められるか
まず、「あなたは有能なアシスタントです。相槌や前置きは使わず、簡潔に回答して下さい。」という指示を与えたうえで、もう一度同じ質問を一通りしてみました。
すると、「機能Bの設定方法を教えてください」に対する答えからはあいづちがなくなりましたが、「機能Aの設定方法を教えてください」に対する答えが「もちろんです。」から始まっています。どうも指示が効いているように思えません。おまけに、「デバイスの電源が入っていることをご確認ください。」というように、新たな対処法が創作されてしまったり、「行いすることができます」というふうに間違った日本語があらわれたり、「機能A」の設定について「off」や「OFF」などの創作の選択肢があらわれたりと、問題がむしろ拡大しました。
そこで、回答を作るときに情報源として参照するものをきちんと明記するべきなのではないかと考えて、次のように指示に知識として指定の情報源のみを使うように明記してみました。
あなたは有能なアシスタントです。
以下の「コンテキスト」のみを知識として回答して下さい。
{{#context#}}
相槌や前置きは使わず、簡潔に回答して下さい。
ですが、今度は「機能Aの使いかたがわからない」という質問で「もちろんです、」という受け答えがでてきたうえに、「設定画面を表示できない」という質問では「それは困りますね。」という相づちが返ってきてしまいました。さらに、情報源をきつく指定した副作用かどうか分かりませんが、「設定画面の表示方法を教えてください」という質問に対する回答の長さが3倍近くに伸びてしまいました。
やはり多少はあいづちの具体例を示さなければ効果がないのだろうかと思い、知識参照の書式アレンジと、知識に答えが見当たらない場合の答え方とともに、次のようにあいづちの例を挙げてみました。
あなたは有能なアシスタントです。
以下のXMLタグ<context></context>に挟まれたコンテキストのみを知識として回答して下さい。
<context>
{{#context#}}
</context>知識に見つからない質問に対しては、わかりません、と回答して下さい。
「お困りですね」や「もちろんです」のような相槌や前置きは使わず、簡潔に回答して下さい。
ところが一つ目の質問「機能Aの設定方法を教えてください」に対する答えが「もちろんです。」で始まり、私は頭をかかえました。結局、この文章を書いている時点では、以下のように、これまで出てきたあいづちをすべて列挙した上で使用を禁止することであいづちをなくしていますが、これははたして生成AIのコントロール方法としてどうなのでしょう…。
以下および以下に類する相づちや前置きは使用禁止です。
「もちろんです」
「それは困りますね」
「それは問題ですね」
2-2-2. 装置の不具合や故障を想定しないようにできるか
一方で、「~できない」や「~されない」という形の質問に対して、与えられた情報源にそのように対処せよという記載がないにもかかわらず、「デバイスのトラブルかもしれませんので、専門のサポートにご相談されてみてください。」のような、装置の不具合を想定した返答をAIが勝手に付け加えてしまうのを防ぐ指示はできたでしょうか。
これについては、いまのところ聞く耳をもってくれる指示がなかなか見つかりません。最初は、与えた情報源にも記載がないのだし、「簡潔に回答して下さい」という指示があれば、省略可能な情報として文言を省いてくるのではないかと思っていました。
ところがまるで文言が減る気配もないので、
「~できない」という形式の質問に対して、故障や不具合を想定した文言は使わないで下さい。
というような指示もつけくわえたのですが、一向に記載を付け加えるのをやめる気配がありません。
ここで生成AIが質問に対する回答を生成する仕組みを改めて考えてみると、それは基本的には、大量の文言サンプルを取り込んで統計的な処理をしておいて、それをもとに、妥当な受け答えである確率の高い文言をつくりだすのでした。
そうすると、学習した文言で、「~できない」や「~しない」、「~ならない」といった質問に対しては「故障かもしれません」、「不具合かもしれません」という回答が圧倒的に多ければ、とにかく故障かもしれません不具合かもしれませんといいがちになる理屈です。
ここまで試してきた範囲でしかありませんが思うのは、生成AIの返答の仕方をまず第一に左右するのは質問の仕方ということで、質問のフォーマットに対して一番ありがちな答え方のフォーマットにAIはできるだけのせようとしてくる印象があります。ほかにヒントや使える手がかりがないときほどそのフォーマットにのせようとしてきます。
この、いわば習性を、「故障や不具合を想定した文言は使わないで下さい。」のような指示だけでどうにかしようというのはどうやら無理そうなので、不具合の場合を想定してしまうのはあきらめて、情報源の側で不具合の場合の適切な対応に関する情報を補うのを試してみることにしました。
次回は、トラブルシューティングの記載入りの取扱説明を情報源として与えて、「~できない」系列の質問をうまく裁けるようになるかを試してみたいと思います。
