みなさんこんにちは!観光案内チャットボットの構築を担当しているスタッフです。
プロンプトエンジニアが必ず一度は頭を抱えたことあるのが、
ChatGPTが嘘をついてしまう、プロンプトには無いことを言ってしまう、
いわゆる「ハルシネーション」ですよね。
私は過去に何個もチャットボットを構築・維持してきましたが、
油断すると思わぬタイミングで嘘をつかれるので、
ハルシネーションにはいつも悩まされています。
諸説ありますが、個人的には、ハルシネーションの原因は
GPTに「頑張らせすぎる」だと感じています。
例えば、役割に
「あなたはどんな質問にも回答できるエキスパートです」
と入れると、
GPTの頭の中は
「とにかく答えなくちゃ!!」
という使命感で一杯になってしまいます。
結果として、
データセットに書いていなくて回答がわからないものでも、
なんとかして回答を作成し、嘘をついてしまうのです。
もう少し具体的な例をあげます。
振る舞いコンポーネントで、下記のような文章を入れたとします。
回答には必ずURLを入れてください
で、実際のデータセットはこんな感じだとします。
#おすすめの観光地
施設名: Kotoznaタワー
解説: 展望デッキからは街を一望できます。
これらのプロンプトを読ませた上で、GPT-4.1に「おすすめの観光地は?」と質問してみましょう。回答は以下の通り。
回答:
おすすめの観光地は「Kotoznaタワー」です。展望デッキからは街を一望でき、昼も夜も美しい景色が楽しめます。観光やデートにもぴったりのスポットです。
詳細はこちら: https://www.kotozna.com/tower
見事に、存在しないURLが回答に表示されてしまいました。
これがまさにハルシネーションの原因です。
データセットに無いけど、必ずURLは出すようにと言われている以上、
捏造してでも出してしまうんです。
個人的には、この現象は、GPTがアップデートされればされるほど、
顕著に出現するような気がしています。
GPTも、自分がなんでもできるようになった気分でいるのでは無いでしょうか・・・・。。
(ちょっと前のモデルでは、同じ振る舞いコンポーネントでも、URLがデータセットに無ければ無いで回答には表示されませんでした)
対策としては、とにかく無理はさせない、ということです。
例えば、
振る舞いコンポーネントを以下のように記載することです。
データセットからのみ回答する。
もしデータセットにURLが記載されていれば、それも一緒に回答する。
わからない時、データセットに情報が見つからないときは、回答しない。(またはコールセンターの番号を案内する)
情報が見つからない時の逃げ道を用意しておくのが重要です。
(「回答しない」のか「コールセンターの番号を案内する」のか・・・)
また、役割コンポーネントで
あなたの役割は、データセットで与えられた情報だけをわかりやすく相手に伝えることです。
と、定義づけてしまうのも良いかもしれません。
誤回答が生み出されてしまったときは、今一度、
・本当に該当の情報がデータセットに書かれているのか?
・役割、振る舞いが無茶振りになっていないか?
確認してみましょう。