生成AI活用の落とし穴「精度」を上げる方法、プロンプト設計の失敗例とその対処法をDifyで学ぶ:「生成AI」×ノーコードツール「Dify」で学ぶ、チャットbot構築のいろは(3)
ノーコードでAIチャットbotを作成できるDifyの入門連載。第3回は、Difyを使ったチャットbotの品質向上手法として、複数モデルによるテスト、検証、プロンプト設計の基本原則と改善、ユーザーフィードバックやアノテーションリプライを活用した継続的な改善プロセスについて具体例とともに解説します。
連載:「生成AI」×ノーコードツール「Dify」で学ぶ、チャットbot構築のいろは
目次
はじめに
ノーコードでAI(人工知能)チャットbotを作成できるDifyの入門連載。前回は、Difyを使ってチャットbotをWebサイトに埋め込む方法について解説しました。生成AIとDifyの登場により、手軽にチャットbotを構築できるようになりましたが、実際のエンドユーザーに提供する際には「精度」や「信頼性」が大きな課題となります。生成AIは幅広い質問に対応できる一方で、ハルシネーション(事実と異なる回答)や回答のばらつき、コンプライアンス違反など、ユーザーの満足度を損なうリスクも抱えています。
こうした課題は、生成AIを活用したシステムやアプリケーション全般に共通するものであり、チャットbot運用においても避けて通れません。そこで本稿では、Difyを活用しながら、チャットbotの応答品質や精度を高めるための具体的なテクニックやノウハウ――複数モデルによるテスト、検証、プロンプト設計と改善、ユーザーフィードバックやアノテーションリプライを活用した継続的な改善プロセス――について、実践的な視点から解説します。
図1は、チャットbotの改善フローの例です。運用開始までにしっかりとテスト、検証を行い、最適なモデルを選択するとともに、プロンプトを改善することに加え運用開始後も継続的にフィードバックを収集、分析し、改善していくことが必要です。Difyには、これらのプロセスを支援するための機能が用意されています。
では早速、太字で示した「テスト、検証」「改善案の検討、修正」「ユーザーフィードバック収集」と「チャットログ、フィードバック分析」といったプロセスを中心に詳しく見ていきましょう。
テスト、検証
運用開始までのフェーズでは、特にモデルの選択やプロンプトの設計が肝です。Difyでは、第1回で紹介したように、デバッグとプレビュー画面を使って、プロンプトや設定を変更しながら応答を検証できますが、これに加えて複数の大規模言語モデル(LLM)を使って並行検証する機能も用意されています。これにより、どのモデルが最も適切な応答を生成するかということを比較し、最適なモデルを簡単に選定できます。
複数モデルの選択と設定
複数モデルを使った検証を始めるには、まず「スタジオ」画面の右上にある「モデル」パネルを開き、「複数モデルでデバッグ」を選択します(図2)。
すると「デバッグとプレビュー」ペインが縦に分割され、左側に選択済みのモデルが表示されます。右側の「モデルを選択」をクリックして別のモデルを選択できます。なお、右上の「モデルを追加」をクリックすると、最大4つまで別のモデルを追加できます(図3)。
ここでは、Difyのトライアルプランでも利用可能なOpenAIのgpt-3.5-turboを選択します。gpt-3.5-turboは2023年リリースのモデルなので、gpt-4o-mini(2024年リリース)より古いモデルです。また、少しキャラクターを変えるために、「プリセットの読み込み」から「クリエイティブ」を選択して、パラメーターを設定してみます(図4)。
これで、左側のモデル(gpt-4o-mini)と右側のモデル(gpt-3.5-turbo)の両方で同じプロンプトを使って応答を生成できます。実際に質問を入力してみると、図5のように異なる応答が得られました。
gpt-3.5-turbo(右)では、「クリエイティブ」にした効果なのか、(1)や(3)のように、御礼を言ったり、「感情表現は行えません」のような表現を使ったりと、少し情緒的な面が出ています。一方、(2)ではプロンプトで既に与えている情報(使い方)を回答できていないことがあり、これは改善の余地がありそうです。対して、gpt-4o-mini(左)ではおおむね質問に対して適切な答えを返せています。会話全体でも回答のブレが少ないように見えますが、これはパラメーター(TemperatureやTop Pなど)の設定による影響が大きいかもしれません。
ともあれ、このように複数のモデルを比較しながら検証できるという、Difyの機能はとても便利です。実際には、AnthropicのClaudeやGoogleのGeminiなど、他のモデルを追加して試してみることで、よりよい検証ができるでしょう(ただし各サービスのAPIキーの設定が必要です)。
改善案の検討、修正
検証を行った結果、どのモデルを選択するかと同時に、プロンプトを改善することも重要です。プロンプトはAIに対する指示であり、応答の品質に大きな影響を与えます。以下では、効果的なプロンプト設計の基本原則と、実際のプロンプト改善方法について解説します。
効果的なプロンプト設計の基本原則
生成AIにおける「プロンプト」とは、AIに対して与える指示や質問のことを指します。チャットbotにおいては、エンドユーザーが入力する質問やリクエストもプロンプトと呼べますが、本稿では、Difyのインタフェースに合わせて、「チャットbotの設計者がAIに対して事前に設定しておく指示」を「プロンプト」と呼ぶことにします(厳密には生成AIのチャットモデルにおけるSystemメッセージに相当します)。AIは、この事前に設定されたプロンプトに基づいて応答を生成します。
繰り返しになりますが、プロンプトの設計は、チャットbotの応答品質やユーザー体験に大きな影響を与えるため、非常に重要な要素です。効果的なプロンプト設計を行うことで、AIがより正確で有用な回答を生成し、ユーザーの期待に応えることができます。
プロンプト設計の基本原則として次のようなポイントが挙げられます。
- 目的、ゴールの明確化
- チャットbotが何を目指すのか(例:疑問解消、購入促進、トラブル回避など)を明確にする
- 目的に沿って回答がブレないようにする
- 対象範囲の限定
- 回答可能なテーマや製品、業務範囲をはっきり定める
- 想定外の質問や範囲外の話題には「対応できません」と明確に伝えるルールを設ける
- 回答のトーン、スタイルの統一
- 敬語、カジュアル、ブランド独自の言い回しなど、話し方の方針を決める
- ターゲット(年齢層、性別、属性)に合わせて最適化する
- 回答例やテンプレート、定型文を設けることで、誰が利用しても一貫した回答品質を保つ
- リスク対応の設計
- トラブルやクレーム、リスク(例:体調不良、故障、不満など)に備えた案内や対応方針を明示しておく
- 有人対応や緊急連絡先の案内方法を決めておく
- 正確性と安全性の確保
- 事実に基づいた回答を徹底し、推測や曖昧な返答を避ける
- 医療、法律、個人情報など、AIが答えてはいけない分野のルールを厳格に設定する
- 情報ソース、参照先の明示
- 商品ページ、FAQ、公式サイトなど、詳細や根拠情報を案内できるリンクや情報源を準備する
- エラー対応
- ユーザーの誤入力や不明瞭な質問に対しては、確認や再質問を促す文例を用意する
- 継続的改善
- チャットログをもとに運用しながら、定期的にプロンプトやルールの見直し、改善を行う
こうしてみると、プロンプト設計は単なるAI向けの指示ではなく、人間の担当者が行う業務設計やルール、マニュアル作りに近いものが分かります。結局のところ、AIはツールであり、最終的な品質は人間の設計と運用に依存するということを意識しましょう。
設定済みのプロンプトの確認と改善点の洗い出し
プロンプト設計の基本原則を押さえた上で、実際にプロンプトを改善していきます。前回作成した「超新青オールインワン カスタマーサポート」アプリのプロンプトを例に、どのように改善していくかを見ていきましょう。
まず第1回で設定したプロンプトを確認しましょう。
あなたは超青春製薬株式会社のカスタマーサポート担当AIです。ユーザーは、会社が製造、販売する製品である「超新青オールインワン」に関して質問してきます。 あなたの役割は、以下の内容を含めて、親切かつ正確に回答することです。 ■ 回答のルール - 敬語で、丁寧かつ親しみやすい口調を使ってください。 - 「超新青オールインワン」以外の質問には、回答できない旨を伝えて、答えないでください。 - ユーザーが製品による肌のトラブルを訴えた場合は、有人サポート窓口(電話番号:0120-123-456)へ誘導してください。 - 使い方に関する内容は、概要を説明し、商品ページへのリンクに誘導してください。 ■ 製品「超新青オールインワン」について - 製品形態: 300ml入りガラスボトル - メーカー小売り希望価格: 10880円 - 販売チャネル: 自社通販サイト、Amazon.co.jp、楽天自社サイト - メインターゲット: 10代〜20代の男性 - 特徴 1. 美容液、化粧水、乳液がこれ1本でOK 2. 1日1回、お風呂上がりの使用だけでもOK 3. 多数の論文に裏付けされた保湿力とシミ抑止力
最初の段落で「1. 目的、ゴールの明確化」を行っています。また、「回答のルール」で「2. 対象範囲の限定」や「3. 回答のトーン、スタイルの統一」「4. リスク対応の設計」の方向性を指示しています。
ということは、少なくとも残りの4点(「5. 正確性と安全性の確保」「6. 情報ソース、参照先の明示」「7. エラー対応」「8. 継続的改善」)については改善の余地がありそうです。
プロンプトの改善
では、実際にプロンプトを改善していきましょう。まず、「5. 正確性と安全性の確保」については、どのような改善案が考えられるでしょうか。正確性を確保するためには、製品情報をより詳細に記載することが有効です。例えば、製品の成分や効果、使用方法などを具体的に記載することで、ユーザーが正しい情報を得られるようにします。
また、安全性の観点からは、使用上の注意点やアレルギー情報なども明示しておくとよいでしょう。ただし、商品ごとに適用される法律がある点に注意が必要です。AIチャットbotを通じて今回のような製品をユーザーに紹介する場合は、認可外の効果や効能をうたうことが制限されていると考えられます。実際は法律の専門家に相談する必要があるでしょう。ここでは以下のような内容をプロンプトに追加します(本稿のプロンプトは法的な根拠に基づくものではありませんので、実用に当たっては必ず専門家の意見を仰いでください)。
■ 製品「超新青オールインワン」の詳細情報 - 主な成分: ヒアルロン酸、コラーゲン、ビタミンC誘導体 - 効果: 保湿、肌のキメを整える、シミの抑止 - 使用方法: 1日1回、お風呂上がりに、適量を手に取り顔全体になじませてください。 - 使用上の注意: 目に入らないように注意してください。万が一目に入った場合は、すぐに水で洗い流してください。肌に異常が現れた場合は、使用を中止し、専門医に相談してください。 - アレルギー情報: 本製品は、香料、着色料、パラベンを使用していませんが、成分にアレルギーがある方は使用前にパッチテストを行ってください。 ※薬機法の制限により「効果」に示した以外の効果(例えば「肌がきれいになる」「ニキビが治る」など)をうたうことはできません。
次に「6. 情報ソース、参照先の明示」については、製品情報を提供するためのリンクを追加します。例えば、製品の詳細ページやFAQページへのリンクをプロンプトに含めることで、ユーザーが必要な情報を簡単に取得できるようにします。
■ 参照先 製品詳細ページなどに誘導する場合は以下の URL をリンクとして付けてください。 - 製品詳細ページ: https://example.com/products/choshin-sei-all-in-one - よくある質問ページ: https://example.com/customer-support/faq
次に「7. エラー対応」については、ユーザーが誤った入力をした場合の対応方法を明示します。例えば、ユーザー入力に誤字、脱字がある場合や、質問内容が不明瞭な場合の対応方法をプロンプトに追加します。
■ エラー対応 - ユーザーが誤字、脱字を含む質問をした場合は、正しい質問内容を確認するための再質問を促す。 例. 「申し訳ありませんが、質問内容がよく分かりませんでした。もう一度具体的に教えていただけますか?」 - 質問内容が不明瞭な場合は、具体的な情報を求める。 例. 「具体的にどのような点についてお知りになりたいですか?製品の使い方や成分についてなど、詳しく教えていただけると助かります」 - ユーザーが製品以外の質問をした場合は、「超新青オールインワン」以外の質問には回答できない旨を伝える。 例. 「申し訳ありませんが、私は「超新青オールインワン」に関する質問にのみお答えできます。他の製品やサービスについては、担当部署にお問い合わせください」 - ユーザーが詳細情報にない効果や効能を尋ねた場合は、薬機法の制限により回答できない旨を伝える。 例. 「申し訳ありませんが、法律上の制限により、特定の効果や効能についてはお答えできません。詳しくは製品詳細ページをご覧ください」
ここまでの内容を追加したプロンプトで試してみると、図6のようになりました。おおむね期待通りに回答できているようです。
細かい部分で改善の余地はありますが、ひとまずは基本原則を押さえたプロンプトができました。
【コラム】プロンプト設計のよくある失敗例とその対処法
チャットbotが期待通りの回答をしない場合、たいていの場合はプロンプトを適切に見直すことで改善できます。以下に、よくある失敗例とその対処法を幾つか挙げます。
- あいまいな指示
- 失敗例: 「親切に答えてください」といったあいまいな指示
- 対処法: 具体的なトーンやスタイルを明示する。例えば、「敬語で、丁寧かつ親しみやすい口調で回答してください」といった具体的な指示を行う
- 範囲の不明確さ
- 失敗例: 「製品に関する質問に答えてください」といった範囲の不明確な指示
- 対処法: 対象範囲を明確に限定する。例えば、「当社の製品、超新青オールインワンに関する質問にのみ回答してください」といった具体的な指示を行う。製品に関する情報やFAQページへのリンクを提供することも重要
- 情報の不足
- 失敗例: 製品情報や使用方法が不十分な場合
- 対処法: 製品の詳細情報や使用方法を明示する。例えば、成分や効果、使用方法などを具体的に記載する
- エラー対応の不備
- 失敗例: エラー対応(ユーザーの誤入力や不明瞭な質問に対する対応)を明示していない
- 対処法: エラーに対する具体的な対応方法を明示する。例えば、今回の例で示したように「申し訳ありませんが、質問内容がよく分かりませんでした。もう一度具体的に教えていただけますか?」といった再質問を促す文例を用意するなど
- 法律や規制の無視
- 失敗例: 法律や規制に関する指示をしていない
- 対処法: 法律や規制に基づいた内容や回答制限を明示する。例えば、法律の制限により、特定の情報については回答できない旨を伝える
チャットログ、フィードバック分析による継続的改善
今回テーマとしているチャットbotでは、カスタマーサポートという特性上、ユーザーからのフィードバックやログを収集し、それを活用して応答品質を継続的に改善することが望まれます。Difyではユーザーからの直接的なフィードバックを収集、分析するだけでなく、ユーザーのチャットログを利用して適切な回答を指定するなど、継続的改善を支援するための機能が用意されています。
ユーザーからのフィードバックの収集とそれを活用した改善
ユーザーからのフィードバックは、チャットbotの品質向上に欠かせない要素です。Difyのチャットbotには、ユーザーがチャットbotの応答に対して、「適切」や「不適切」でフィードバックできる機能があります。これにより、どの応答が有用で、どの応答の改善が必要かを把握できます。
フィードバックはChatGPTなどと同様、応答の下部に表示されるアイコンから行えます(図7)。ただし、現時点ではボタンにマウスポインタを乗せてもツールチップが表示されないため、このアイコンがフィードバック用であることが、ユーザーにとって判断しづらいように思えます。
アイコンを押してみると、図8のように「適切」(青)や「不適切」(赤)の状態になります。ボタンを再度押すとフィードバックを撤回(取り消し)することもできました。
フィードバックは、Difyの「スタジオ」画面の「ログ&アナウンス」画面で確認できます。表の「ユーザーレート」の部分にフィードバックの数が表示されます(図9)。
さらに表の行をクリックすると、チャットログを確認できます。ちなみに、このチャットログを見ながら、管理者サイドでフィードバックを付けることもできます(図10)。こちらは表の「操作レート」列に集計されます。
ユーザーレートでフィードバックの数は確認できますが、現時点ではユーザーが「どの応答に対してどのフィードバックを行ったのか」までは分からないようです。これは分析する上でぜひ欲しい情報なので、今後の改善に期待したいところです。現時点では、チャットログと「ユーザーレート」の数を見ながら、チャット全体がユーザーにとって有用だったかどうかを判断することになりそうです。
これらのフィードバックを生かして、プロンプトやモデルを改善することができます。例えば、ユーザーからのフィードバックで「不適切」という意見が多い場合は、より適切な回答ができるようプロンプトに応答例を追加するなどの改善が考えられます。また、特定の質問に対して「適切」が多い場合は、その質問に対する応答を強化するためのプロンプトやモデルを調整できます。
アノテーションリプライ(注釈返信)による改善
さらにDifyには、チャットログに対してアノテーション(注釈)を付ける「アノテーションリプライ(注釈返信)」と呼ばれる機能があります。これにより、プロンプトの変更なしに、特定の質問に対する適切な回答を直接的に指定できます。
アノテーションは、チャットログのコマンドにある「注釈を追加」ボタンをクリックして追加します(デバッグとプレビュー画面のログからも行えます)。ここでは、「社長はこわい?」という製品と関係のない質問に対する回答を選択しました。ボタンをクリックすると、その回答がアノテーションとして追加されます(図11)。
ただ、このままではこの回答内容が「適切な応答」として認識されてしまうため、「注釈」画面から今追加した応答を選択し、注釈を編集して適切な回答を設定します(必要な場合はユーザーの質問も編集可能です)。ここでは社長の名前を回答し、社長あいさつのページに誘導するようにしました(図12)。
ここで指定した注釈を回答させるようにするには、「注釈返信」を有効化します。デバッグとプレビュー画面右下の「管理」ボタンをクリックします(図13)。
注釈返信の設定画面が表示されます。ここでは、以下が設定できます。
- 類似性スコア閾値:ユーザーの質問と登録した注釈の質問の類似がこのしきい値を超える場合に注釈返信が使われる
- 埋め込みモデル:注釈テキストをベクトル化して文章の類似度を測定するためのモデル
本稿では、標準設定のまま「保存して有効にする」をクリックし、注釈返信を有効化します(図14)。
この状態で、デバッグとプレビュー画面から、同じような質問をしてみます。厳密に同じ質問でなくとも、類似の質問に対しても注釈で指定した内容を返信できることが確認できました(図15)。
なお、注釈返信では、事前に設定した注釈にマッチした場合、指定した内容が直接返されるため、LLMによる生成は行われず、トークンも消費されません。従って、注釈返信は特定の質問に対する明確な回答を提供するための有効な手段であると同時に、コスト削減にも寄与します。
注釈返信に関する詳細については、Difyの公式レファレンスも参考にしてください。
まとめ
今回は、Difyで作成したチャットbotの品質向上プロセスについて、テスト、検証からプロンプト設計、ユーザーフィードバックやアノテーションリプライによる継続的な改善までを解説しました。これまでの内容で、「カスタマーサポートのチャットbot」を構築するための具体的なイメージがつかめたのではないでしょうか。
次回は、Difyのナレッジベース機能を使い、チャットbotをより実践的なカスタマーサポートとして育てていきます。
筆者紹介
WINGSプロジェクト 山田研二(ヤマダ ケンジ)
株式会社MSEN CTO(https://msen.jp/)。高校卒業後、大阪大学の研究所で働きながらプログラミングやWebデザインをはじめ、以後20年以上、Webサイト制作や業務システムの構築を手掛けている。フリーソフトも幾つか公開している。好きな言語はC#とTypeScript、趣味は旅行。
・GitHubアカウント(https://github.com/kenzauros)
WINGSプロジェクト
有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティー(代表山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手掛ける。2021年10月時点での登録メンバーは55人で、現在も執筆メンバーを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。
・サーバーサイド技術の学び舎 - WINGS(https://wings.msn.to/)
・RSS(https://wings.msn.to/contents/rss.php)
・X: @WingsPro_info(https://x.com/WingsPro_info)
・Facebook(https://www.facebook.com/WINGSProject)
Copyright © ITmedia, Inc. All Rights Reserved.