見出し画像

GPTを利用したBotの精度を実用レベルに引き上げる10個のアプローチ

GPTsの登場も相まり盛り上がる「GPTベースのBot開発」。
生成AIを活用した様々な会話型AIが作成される中、AIを実用的に活かしきれずに悩んでいる声も実は少なくありません。

よくあるのが、「生成AIブームでGPTのボットを作ってみたは良いが、その後なかなか使われなくなった・・・」という話。生成AIにより超強力なBotが生み出せるのは間違いないので、実用されなくなるのはもったいないです。

今回は、GPTベースのBotをチューニングし、一気に実用レベルに引き上げる技を10個お届けします。

長く活躍する実用的なAI Botを作る参考にぜひしてみてください。

※ 本記事は、株式会社miiboの提供でお送り致します。


紹介するアプローチ

今回紹介するアプローチの多くは、弊社で開発する「会話型AI構築プラットフォーム miibo」で実際にチューニング可能な方法です。

miiboで実際に試して有効だった方法を紹介しますが、他の開発現場でも有効なTipsも多いはずです。

それでは、10個続けてどうぞ!

1. Botは生活や仕事に溶け込ませる

作ってもなかなか使われなくなってしまうBotの多くは、利用への心理的な距離の遠さが要因になっていることがあります。

・身近にあり、気軽に話しかけられる
・コンテキストを共有できている

こういった要素を持っているBotは、長く実用されやすくなります。
また、始めから完璧ではなくても長く使われる環境が整っていると、その後のアップデートもされやすく、改良されていく循環が生まれやすいです。

AIをどれだけ身近な存在にし、気軽に話しかけられる存在にできるかが重要です。よく利用する例えが下記です。

・「天竺にいるお釈迦様にありがたいお言葉をいただきに行く」
・「同じチームにいる頼りがいのある仲間に質問をしに行く」

話しかけるハードルが心理的な距離を生む

ありがたいお言葉も重要ですが、話を聞きに行くのに前者がハードルが高いのは明らかです。また、同じチームにいる仲間であれば、仕事の前提(コンテキスト)を共有できている可能性が高いです。一方、関係性の遠い存在と話す際は、前提を一から説明する必要があり、それもまたハードルを高くする要因です。少し極端な例ではありますが、ChatGPTの利用が一部の人を除いて浸透しきらないのは、こういった要因があると考えます。

つまり、実用的なAI Botを作る場合、「同じチームにいる頼りがいのある仲間」を作ることが重要です。そのために、具体的に下記のアプローチが有効です。

A. Botへ話しかける導線を身近にする
Botを導入するプラットフォームは適切に使い分けましょう
Webチャット画面の埋め込み、LINEボット、Slackチャンネル等、Botの「生息場所」を適切に設定することが重要です。すぐに話しかけられる、身近なプラットフォームにBotを導入しましょう。

(参考記事)

例えば職場のSlackチャンネルになじませると、下記の記事のような応用ができます。日常の業務と噛み合い、よりAIの恩恵を受けやすくなります。


B. 専門知識を与えておく
前提知識を毎度説明しなくて済むようにすることが重要です。
例えば株式会社miiboで利用している社内のアシスタントAIは、会社の概要や事業内容、サービスの内容は事前に専門知識を与えています。それにより、前提知識を共有した上で、会話を始められます。

専門知識を与える方法は例えば下記です。

・プロンプトに直接記述する
・RAG
・ファインチューニング

プロンプト(ChatGPTでいえば、「Custom instructions」)に記述するには、情報量が多くなると限界があります。
そこで、RAGやファインチューニングといった方法が採用されることが一般的です。GPTsであれば、「Knowleadge」というファイルをアップロードして専門知識を与える機能もありますね。

miiboではRAGのアプローチとして、

・ナレッジデータストア(ベクトルデータベース)の利用
・検索エンジンの検索結果の利用
・外部APIの情報を応答に利用

といった機能を提供しています。


C. 改善フローを確立する
この次の話にも繋がりますが、一回構築して完璧なAI Botはありません。
如何にハードル低く改善フローを回せるかが重要です。
改善フローをを回す際の重要なポイントは、「フィードバックループ」を上手に構築することです。

例えば下記の事例では、AIの応答が不適切であった場合、Slackで直接リプライをして正しい情報を与えるアプローチを試しています。

・AIに気軽にフィードバックできる状態にする
・RAG等の専門知識補助の精度を手軽にチューニングできるようにする

こういった仕組みづくりが重要です。この後は、RAGチューニングの話です。

2. RAGを雑に構築して、勝手にがっかりしない

・「GPT-4にPDFを丸ごと与えれば、正確な会話ができるようになる」
・「GPT-4に本一冊分の情報を食べさせて、専門的な会話を話させる」

こういった情報が独り歩きすることが多いです。嘘とまでは言わないですが、実用レベルを考えると、実は精度があと一歩な事がほとんどです。

雑にAIに情報を与えてうまくいくケースもありますが、精度を上げるにはそれなりのチューニングが必要です。GPT-4を始めとするLLMはかなり雑な情報も的確に扱えますが、それでも限度があります。重複が多かったり、時系列が曖昧な煩雑なデータを無闇矢鱈に突っ込めば、精度はかなり落ちてしまいます。また、コストの肥大化も招きます。

AIにもデータ解釈の限界がある

雑に情報を与えてAIが答えられず、勝手にがっかりしてしまうのはもったいないという話です。

2-1. データは適度に刻み、フォーマットを改良しよう

いわゆるChunkサイズというやつです。
RAGとは、会話の内容に合わせてデータを検索し、関連する情報をプロンプトに付加してLLMに応答を生成させる技術です。このプロンプトに付加するタイミングで扱うデータの1単位をどのくらいの大きさにするかという話です。

小さすぎれば情報の欠損する可能性があがり、大きすぎればコストの肥大化やAIのハルシネーションリスクが高まります。このサイズを適度に保つことが重要です。

miiboでは、ナレッジデータストアでデータを整理し、小刻みにデータの塊を入稿することでChunkサイズを適切に保ちます。

上記の記事でも触れていますが、データのフォーマットも重要です。

ポイント
・統一された構造化フォーマットで記載されたデータを入稿する
・LLMが認識できるフォーマットでデータを入稿する

平文でつらつら書かれたデータだと、AIも認識を誤る確率が高くなります。

2-2. 検索クエリーこそがRAGの生命線

RAGの性質上、会話の中でAIに与える情報を「如何に正確に検索できるか」が重要です。データの中身も重要ですが、それ以前に検索を行う「クエリー」が適切でなければ、良い情報にたどり着くことはできません。

Botとのやり取りの中で生成される「検索クエリー」に最新の注意を払いましょう。

例えばmiiboでは、「検索クエリー生成用プロンプト」を適切に扱うことで、クエリーのチューニングが可能です。

miiboの検索クエリー生成プロンプトの設定

miiboではBotとの会話の進行に併せて、検索クエリーが生成されます。
クエリー生成にもLLMが利用されており、その生成に利用されるプロンプトをBot作成者が編集できます。

以下はuserとaiの会話です。
@{history}

上記のuserが欲している情報を見つけるための検索用のクエリーを作成してください。(5語まで)
なるべく最後のユーザーの質問の内容を優先してクエリーに含めてください。

検索クエリー生成プロンプトの例

@{history}はmiibo独自の記法で、会話の直前の履歴を変数として入れ込めます。このプロンプトをチューニングすることで、よりRAGのデータに即した検索クエリーを生成することができます。

2-3. 検索クエリーの履歴を軸に分析しよう

会話の履歴と生成された検索クエリーを確認して分析しましょう。
下記はmiiboの会話履歴のレポート画面です。
会話の発話ごとに生成されたクエリーを確認できます。

miiboの会話レポート画面①
miiboの会話レポート画面②

※ いずれのユーザーIDも一般ユーザーのものではなく、開発テスト用のIDです。

この生成されたクエリーが適切かどうかを振り返りながら、検索クエリー生成用プロンプトをブラッシュアップしましょう。
専門知識の付与にmiiboのナレッジデータストアを利用している場合は、履歴のクエリーをコピーし、検索をしてみるアプローチも有効です。

ナレッジデータストアで検索を行ってみるアプローチ

ナレッジデータストアでは、左上の検索窓にクエリーを入れて検索を試すことができます。検索を行った際に表示される上位のデータが、会話の際にプロンプトへ挿入される情報です。きちんと意図した情報が上位に来ているかを確認しましょう。

2-4. 検索エンジン連動も活用しよう

上述したナレッジデータストアやGPTsの「Knowleadge」はいわゆる「静的」なアプローチ。情報の「バケツ」があり、そのバケツに入っている情報をピックしてLLMのプロンプトに与え、応答を生成します。

静的なアプローチの課題はリアルタイム性です。バケツの中の情報を新鮮な状態にしておかなければ、最新の情報をAIに与えることができません。また、データを入稿する手間もデメリットです。データを二重管理しなくては行けないケースもあり、運用コストが気になるところです。

そこで有効なのが、検索エンジン連動や外部APIに連携したAIチャットボットです。下記の記事は、Google Custom Searchを利用し、応答時のプロンプトの情報を補足するアプローチです。

Google Custom Searchはドメインを絞っての検索も可能なので、自社のWebサイトの情報をリアルタイムでプロンプトに組み込むと行った工夫も可能です。

メリットとしてはリアルタイム性のある情報が取得できることです。一方デメリットとしては、チューニングされたデータを扱う場合と比べて、精度が落ちやすいことです。検索結果の文章や構造に精度が依存するので、不安定でアンコントローラブルなことが多いことに注意しましょう。

2-5. 外部APIをうまく活用しよう

Google Custom Search以外にも、様々なAPIをRAGの検索先として活用することも有効です。例えば下記は、miiboでNotionやGoogle MapのAPIと連携をし、プロンプトに情報を補足した事例です。

ナレッジデータストアのように静的なアプローチを取らずとも、様々な情報を引いてくることができます。

3. プロンプトできちんと制約条件を設けよう

これは言わずもがなですが、やはり肝心なのはプロンプト。プロンプトで正しく役割付けができていないとうまく動きません。

「GPT-4を利用しているのに、生成AIのBotが変なことを言ってしまって使い物にならない」
というような結論に至る場合の多くは、プロンプトの制御が足りていないことがほとんどです。

例えばよくあるのが、カスタマーサポート対応のAI。この領域は、

・極力間違ってはいけない
・わからないことは「わからない」と言わなければいけない

そういったことが求められる領域です。正しく制約条件を設定し、安定した挙動ができるようプロンプトを念入りにチューニングしましょう。下記ではお問い合わせAIを作成した際に利用したプロンプトも紹介しています。

上記の記事でも触れていますが、プロンプトとRAGの結果をうまく噛み合わせることも重要です。

* プロンプトや前提データ、参考資料に書かれていないことについては一切答えてはいけません。その場合は下記のように回答します。

「今の私には判断できないみたいです。学習をして答えられるように致します。大変お手数ですが、お急ぎの場合は下記URLから直接お問い合わせください。」

* プロンプトや参考資料に記載がない情報をUserに伝えると、Userに甚大な不利益を与えてしまうおそれがあります。

* URLを記載する場合は、必ず応答の一番最後にURLのみ記載してください。カッコや接頭語をつけてはいけません。

* 前提データに対して余計な情報を付け足すことも禁止です。

お問い合わせAIのプロンプトの抜粋

上記の例では、miiboのナレッジデータストアに入っている情報以外の情報を応答しないよう、制御している例です。

4. プロンプトをパーソナライズしよう

独りよがりの会話は相手に刺さりません。
ユーザーのことを知り、寄り添ってこそ最高の体験を提供できます。
プロンプトをパーソナライズすることで、よりユーザー体験の高いAIボットが作成できます。

ユーザーのパラメータをパーソナライズに活用しよう

miiboでプロンプトをパーソナライズさせる場合、下記のようなアプローチになります。

下記はユーザーが見たいと感じている映画の情報です。
#{好きなジャンル}
#{好きな俳優}
#{好きな年代}
#{その他}

あなたは上記のユーザーの映画の好みをヒアリングするChatbotです。ユーザーに様々な質問を投げかけ、ユーザーの映画に対する興味を明らかにしましょう。

明らかにしたい項目は以下の通りです。
- 好きなジャンル
- 好きな俳優
- 好きな年代
- その他

また、応答の最後に今までの会話の流れを踏まえ、明らかにしたい項目のうち、情報が収集できている情報を出力してください。フォーマットの例は下記のとおりとします。
#{好きなジャンル:SF}

パーソナライズされたプロンプトの例1: 映画レコメンド

あなたは英作文を勉強する生徒の家庭教師として会話を行います。Userの英作文スキルが向上するよう、丁寧にサポートをしてあげてください。

# サポートの内容
* 生徒に日本語で英作文のお題を出題し、生徒が行った英作文の内容を添削してあげてください
* 生徒がお題を自分で提案した場合は、そのお題に沿った英作文の問題を出題してください
* 生徒がお題を自分で提案しない場合は、自発的にテーマを設定し問題を出題してあげてください

# 生徒の苦手領域

下記はこれまでの生徒が行った英作文を踏まえて明らかになった、生徒の苦手領域です。(まだ明らかでない場合は空欄です。)
#{生徒の苦手領域}

生徒が「自分の弱点を分析する」という依頼をした場合は、上記の苦手領域に応じて、生徒が今後どのような学習に注力すべきかをアドバイスしてください。まだ生徒の苦手領域が明らかでない場合は、下記のように応答してください。
「まだ苦手領域を判断するためのデータがありません。いくつか英作文に挑戦してから再度分析を行いましょう✨」

パーソナライズされたプロンプトの例3: AI家庭教師

ところどころに含まれている、#{}で囲まれた変数がパーソナライズしている箇所です。このように、ユーザーの情報を会話で抽出し、プロンプトに変数として組み込むことで、パーソナライズされた会話を行わせることができるのです。

変数化して扱うことが重要です。もともと、GPTは会話履歴を与えれば、その内容に即して会話をパーソナライズできます。しかし、何が保持されているか、どんな情報にフォーカスすべきかが、ブラックボックスになってしまうデメリットがあります。重要なパラメータは確実に保持し、デバッグ可能な状態でコントロールすることが重要です。

このアプローチは、miiboでは「動的プロンプト」とも呼んでいます。

応用すると、こんなこともできます。下記の記事は、AIが人間との信頼関係を定量的に測定し、信頼関係が醸成できたと判断したらアクションを起こしていく流れを構築しています。

5. 検索クエリーをパーソナライズしよう

miiboでは、上記で紹介した検索生成用プロンプトとステートを組み合わせると、クエリーもパーソナライズ可能です。

以下はuserとaiの会話です。
@{history}
また、以下はユーザーのプロフィール情報です。
#{プロフィール}

上記の履歴とプロフィールを加味して、ユーザーが探したい情報を検索するクエリーを生成してください。
クエリー生成時はなるべく会話履歴の最後の内容を優先してください。

ステートの変数を用いた検索クエリー生成プロンプト

このように、ユーザー固有の情報を盛り込むことで、よりユーザーの調べたいことに即した検索クエリーを生成することも可能です。

6. 生成AI以外のアプローチを混ぜ込む

今回目指しているのは、実用的なBotを作ることです。優れたカスタムGPTを作ることではありません。

GPTを始めとしたLLMは非常に強力ですが、確率的に文章を生成する「アンコントローラブル」な側面が課題となるケースもあります。時には生成AI以外のアプローチも混ぜ込むことで、より安定したBotが構築できます。

例えば下記のようなアプローチがあり得ます。

・一部の応答にルールベースの応答を利用する
・シナリオ対話を導入する

こういった生成AI以前の対話システムで利用されていた技術の応用も有効です。GPT-4等のLLMは応答コストが非常に大きいです。それに比べルールベース等の応答は圧倒的にコストが安いため、コスト最小化の観点でも有効なアプローチです。

旧・新の対話システムの技術をうまく組み合わせよう

7. 適切なLLMを選び、使い分ける

GPT-4が猛威を振るう昨今ですが、次々と高性能なLLMも生まれています。
これから、様々な領域に特化したLLMも生まれてくるでしょう。また、時には予算を鑑みて、コスト面を重視するケースもあるでしょう。

「実用」という意味では、適切なLLMを選定することが重要になります。

miiboの言語モデル選択画面

また、会話の流れに応じてLLMを使い分けることも重要です。
下記はmiiboのシナリオ対話のLLM個別設定機能を用いた事例です。

インタビューのアイスブレイクをGPT-3.5 / 深掘りをGPT-4で設定した例

8.外部サービスと連携させよう

会話型AIの最も魅力的な点は、「自然言語でUserがソフトウェアやAI技術を柔軟に扱えるようになったこと」です。つまり、ユーザーインターフェースと様々なソフトウェアやIT技術の間の強力なHUBとなることができます。

弊社では、会話型AIがHUBとなり、ありとあらゆるモノを接続していくことを「Connect Everything」と呼んでいます。

Connect Everything

チャット画面上で会話ができるAI Botは便利ですが、真価は様々なアプリケーションと接続した時に現れます。つまりAIがFunctionを持った時、より実生活に役立つ存在となり、なくてはならない存在になると言えます。

OpenAI社やAzureで提供されるGPT-4やGPT-3.5は、Function Callingという機能を備えています。AIがFunctionを発動するタイミングを自ら判断し、実行に移すための機能です。こういった機能を活用し、適切に外部サービスを呼び出すことで、AIの実用性を格段に飛躍させます。

下記は、miiboでFunction Callingを利用する事例です。

9.会話の履歴をきちんと分析しよう

繰り返しになりますが、AI Botは身近に溶け込ませることでフィードバックループを回すことが重要です。

Botの管理者は、実際にどのようにBotが話しかけられ、その役割を全うできているかを分析することが重要です。また、分析からは思わぬニーズの発見もあります。生成AIによって、Botができる会話の柔軟性は飛躍的に向上しました。それにより、新たなニーズ発見のチャンスが拡大しています。

miiboの会話レポート画面

miiboでは、会話の履歴をレポート画面で確認ができます。
履歴はCSVで一括ダウンロードも可能で、会話内容を自由に分析することができます。

会話の内容によっては難しい場合もありますが、履歴をGPTで更に分析を行い、示唆を導き出すことも有効です。

10.きちんと体験設計をしよう

プロンプトを少し書けば、それなりに動いてくれる生成AI製Botです。
それでも、実用されるかどうかは小さな気配りの積み重ねが重要です。ユーザー体験はこだわりましょう。

miiboでよく行うアプローチをいくつかご紹介します。

・クイックリプライ
いわゆるチャット画面の下に設置される発話候補です。
「AIに何を話しかけたら良いかわからない」というユーザーは意外と多いです。

クイックリプライの例

下記の、クラシックギタリストの村治さんが開発されている自身のAIは、このクイックリプライを使いこなし、ユーザー体験を向上されています。


・パーソナライズ
本記事で散々触れているパーソナライズもユーザー体験向上の有効な方法です。

・UI / プラットフォーム選定
適切なユーザーインターフェースを選定しましょう。AI Botが取りうる選択肢は非常に多いです。(Webチャット, Slack, LINE, デジタルヒューマン, スマートスピーカー etc…)

・会話の内容を洗練する
体験を決めるのはやはり会話の内容です。プロンプトエンジニアリングやRAG、シナリオ対話等など、様々な要素を駆使して素敵な会話体験を構築しましょう。

まとめ

いかがでしたでしょうか。miiboを運営していて感じたBotを実用レベルに引き上げるのに重要なポイントを纏めてみました。

生成AIは手軽に使える環境が整っています。
それが故に、中途半端に使ってうまく行かずに幻滅してしまうケースがあり、非常にもったいなさを感じます。

「後少し辛抱強く使えば、めちゃくちゃ便利になるのに・・・」

そんなシチュエーションが多々あります。
本記事が、そのあと一歩を後押しするきっかけになれたら幸いです。
miiboはそんな実用的なAI Botを構築できるサービスとして、これからもアップデートを続けてまいります。ぜひmiiboもご活用いただければ幸いです。

また、本記事で紹介した内容を更に発展した内容を下記のカンファレンスで発表予定です。ご興味のある方はぜひご覧ください! (オンライン・無料)

最後までお読みいただきありがとうございました!

この記事が気に入ったらサポートをしてみませんか?