先にお断りしておきます。この記事に「問い合わせが◯%増えました」という数字はありません。公開したのが今日だからです。
広告代理店が自社事例で数字を作るのは、一番やってはいけないことだと考えています。効果は数週間後、実データが溜まってから改めて書きます。
今回書くのは、何を作り、どう設計し、どこで失敗したかです。同じことを検討している方には、こちらのほうが役に立つはずです。
この記事のポイント
AIチャットで難しいのは賢くすることではなく、答えられる範囲を縛ることです。料金・実績・対応可否を創作させない仕組みと、「送信しました」のような取り返しのつかない発言をAIに言わせない構造が要になります。検索精度は語彙一致だけでは79%にとどまり、意味検索を足して100%になりました。良かれと思った最適化ほど、測ると悪化していることがあります。
作ったもの
アドキタのサイト全ページの右下に、チャットボタンを設置しました。
- 自社サイト89ページの内容を読み込ませ、その範囲だけで回答する
- 質問に答えたうえで、こちらから状況をうかがう
- 会話の流れのまま、その場でお問い合わせを送信できる
ChatGPTのような「何でも答えるAI」ではありません。むしろ逆で、答えられる範囲を厳しく縛ることに一番手間をかけました。
なぜ「答えさせない」ことから設計したのか
生成AIを業務に入れるとき、多くの人はまず「賢くする」ことを考えます。私たちは逆から入りました。
広告代理店のサイトで、AIが勝手に答えたら困ることを並べてみます。
- 料金:「だいたい月5万円くらいですね」と言ってしまう
- 実績:「同業種で売上2倍の実績があります」と作ってしまう
- 対応可否:「もちろん対応できます」と安請け合いする
- 予約:「承りました」と言うが、実際には何も予約されていない
どれも、起きた瞬間に信用を失います。とくに最後は深刻です。お客様は予約できたと思っているのに、こちらには何も届いていない。
1. サイトに書いていないことは答えさせない
回答のたびに自社サイトから関連する箇所を検索し、その文章だけを根拠として渡します。見つからなければ「サイトには記載が見当たりませんでした」と正直に答え、お問い合わせへ案内します。
実際、テストで「社長の年収はいくらですか」と聞くと、こう返ってきます。
「代表の年収につきましては、サイトに記載が見当たりませんでした。」
2. 「送信しました」はAIに言わせない
これが一番大事な判断でした。
お問い合わせの送信が成功したかどうかは、サーバーが成功を返したときにだけ画面へ表示します。AIの文章としては出させません。
指示で「嘘をつくな」と書くのは簡単ですが、生成AIは指示を守り損なうことがあります。守らせるのではなく、そもそも言えない構造にする。ここは設計で解くべき問題でした。
検索の精度は実測しました
「サイトの内容から答える」と言うのは簡単ですが、正しい箇所を引けなければ意味がありません。
そこで、実際に来そうな質問24問を用意し、正解のページが上位に来るかを測りました。
- 言葉の一致だけで検索した場合:79%
- 意味での検索を足した場合:100%
言葉の一致だけでは足りませんでした。分かりやすい例が「住所」です。
利用者は「住所」と聞きますが、会社概要ページの見出しは「所在地」です。文字としては一致しないので、言葉の一致だけでは永久に見つかりません。意味で引く仕組みを足して、ようやく届くようになりました。
実際に踏んだ5つの失敗
ここからが本題です。うまくいった話より役に立つと思います。
失敗1:会話の続きで文脈が切れていた
「TikTok広告について教えて」と聞いた直後に「費用は?」と聞くと、動画広告とFacebook広告の料金ページを引いてきました。
人間なら「TikTokの費用の話だ」と分かりますが、検索は「費用は?」という4文字しか見ていません。
対策として、前の会話を踏まえて質問を書き直してから検索するようにしました。「費用は?」を「TikTok広告 費用 相場」に直してから引く形です。
なお、単純に前の発言をつなげる方法も試しましたが、かえって精度が落ちました。無関係な語が混ざるためです。
失敗2:最適化のつもりが逆効果だった
処理を軽くしようと、質問文から「教えて」「ください」のような頻出語を除外する実装を入れました。
結果、精度が92%から83%へ落ちました。「動画」「制作」のような、話題を特定するのに必要な語まで一緒に捨てていたからです。
各ページに要約を持たせる案も試しましたが、これも要約が検索枠を占領して本文が押し出され、悪化しました。
どちらも「良くなるはず」と思って入れた変更です。測っていなければ、悪くなったまま公開していました。
失敗3:文字数の計測が3倍ずれていた
これは苦い話です。
以前、自社記事の文字数を測ったとき、使っていたコマンドが文字数ではなくバイト数を返していました。
日本語はUTF-8で1文字3バイトです。つまり記録していた数字は、実際の約3倍でした。この誤った数字をもとに判断を進めていたことになります。
今回、全ページを機械的に読み直したことで発覚しました。日本語サイトの文字数を分析している方は、一度お使いのツールを確認することをお勧めします。
失敗4:本番だけ静かに劣化する作りになっていた
意味検索用のデータを「自動生成できるファイルだから」という理由で、公開対象から外していました。
ところがこの仕組みは、そのデータが無くてもエラーを出さずに動きます。言葉の一致だけで、それらしく応答してしまいます。
つまり本番だけ、エラーも出ず見た目も普通なのに、回答の質だけが落ちる状態になるところでした。一番たちの悪い壊れ方です。
現在は、稼働中の仕組みが「今どちらのモードで動いているか」を外から確認できるようにしています。
失敗5:入力ミスでお客様が締め出される設計だった
いたずら対策として、送信回数に上限を設けました。ところがその実装は、入力ミスも1回として数えていました。
メールアドレスを3回打ち間違えたお客様が、しばらく何も送れなくなります。「試みた回数」と「実際に送信した回数」は分けて数える必要がありました。
何を測るのか
効果測定として、次の4段階を記録しています。
- チャットを開いた
- 質問した
- お問い合わせフォームを開いた
- 送信した
どこで離脱するかで、打つ手が変わるからです。開くけれど質問されないなら最初の一言が悪い。質問はされるがフォームに進まないなら案内の出し方が悪い。フォームで止まるなら入力項目が多すぎる。「問い合わせが増えた・増えない」だけを見ていても、次に何を直すべきかは分かりません。
もうひとつ、答えられなかった質問を記録しています。これはそのまま「サイトに書かれていない情報の一覧」です。お客様が実際に使った言葉で残るので、記事のテーマを推測で選ぶ必要がなくなります。
まとめ
- AIチャットは「賢くする」より「答えられる範囲を縛る」ほうが難しく、そして重要
- 「送信しました」のような取り返しのつかない発言は、AIに言わせない構造にする
- 良かれと思った最適化ほど、測ると悪化していることがある
- 自分の計測が正しいか、ときどき疑う
効果の数字は、数週間後にこの続きとして公開します。
実際の動作は、このページの右下にあるボタンからお試しいただけます。試しに「サイトに書いていなさそうなこと」を聞いてみてください。正直に「分かりません」と答えるはずです。