これは「関連記事表示 by Vector Search 2.0」のデモサイトです。記事コンテンツはソリューションブログから引用しています。
KARTE TalkとCraft RAGを用いたFAQボットを構築し、FAQにない場合は有人オペレーターに引き継ぐ方法

KARTE TalkとCraft RAGを用いたFAQボットを構築し、FAQにない場合は有人オペレーターに引き継ぐ方法

はじめに

こんにちは、Customer Engineerの宮﨑です!数年振りに「あつまれ どうぶつの森」を起動したのですが、思ったより雑草が生えてなくて安心しました!

Webサイト上に配信したチャットを通じてユーザーからの問い合わせに対応できるKARTE Talkを活用してカスタマーサポートを行っていると、日々多くの問い合わせが寄せられます。特にキャンペーン時や繁忙期には件数が急増し、オペレーターの負担が大きくなりがちです。

そうした中で、よくある質問に関するメッセージが繰り返し届くと、対応コストはさらに膨らみます。こうした定型的な問い合わせをボットで自動化できれば、オペレーターはより複雑な対応に集中できます。

今回は、Craft RAGを活用し、FAQに基づく自動回答を行うボットを構築する方法を紹介します。FAQに該当する回答が見つかった場合はボットが自動で回答し、該当しない場合は有人オペレーターへ自動で引き継ぐ仕組みを構築します。

例えばECサイトでは、「返品・交換の手続きは?」「送料はいくらですか?」「配送にどのくらいかかりますか?」といった、パターン化された問い合わせが多く届きます。これらをFAQとしてCraft RAGに登録しておくことで、ボットが1次対応を行い、オペレーターの負担を削減できます。

アウトプットイメージ

構築するFAQボットの動作イメージは次の通りです。

FAQに該当する場合

エンドユーザーがメッセージを送信すると、ボットがCraft RAGのFAQ情報を元にCraft AI Modulesで生成した回答を自動で返信します。

FAQに該当しない場合

ボットがヘルプメッセージを送信したあと、設定した有人オペレーターに自動でアサインが切り替わります。

システム構成

このソリューションの処理の流れは以下の通りです。

  1. エンドユーザがウェブチャットで問い合わせします
  2. KARTE TalkのMessage Hookがトリガーされ、Craft Functionsが起動します
  3. Craft RAGでメッセージの関連FAQを取得します
  4. FAQに該当する場合はCraft AI Modulesを利用して回答を生成し、送信します
  5. FAQに該当しない場合はヘルプメッセージを送信し、有人オペレーターにアサインを変更します

注意点

前提として、次の点に注意をしてください。

設定手順

設定の手順は次の通りです。

    1. KARTE Talkのボット設定
    1. API v2の設定
    1. Craftの設定
    1. KARTE TalkのMessage Hook設定

順番に見てみましょう。

1. KARTE Talkのボット設定

エンドユーザーのチャット画面に表示されるボットのプロフィールを作成します。

  • [Talk > トーク設定 > ボット管理] を開き、[作成] ボタンをクリックします
  • [Bot名] チャット画面でエンドユーザーに表示されるBOTの名前を入力します(例: FAQ Bot
  • [Bot画像] 任意で を設定します
  • [保存] ボタンをクリックします
  • 作成後に発行された Bot Id をメモしておきます(後の手順で使用します)

2. API v2の設定

ボットとしてチャットメッセージを送信するために、ボットタイプのAPI v2アプリを作成します。通常の token タイプとは異なり、bot タイプを選択する点に注意してください。

  • [ストア > API v2設定] からアプリを新規作成します

  • [アプリタイプ] bot に設定します

  • [名前] 分かりやすい名前を入力します(例: FAQ Bot App)

  • [説明] 必要に応じて入力します(例: RAGを利用してFAQを回答します)

  • [スコープ] 以下のスコープを追加してください

    • talk.message.sendFromOperator: ボットとしてメッセージを送信するため
    • talk.message.get: Message Hookのトリガー設定で必要
    • talk.assignee.assign: FAQに該当しない場合に有人オペレーターへのアサインを変更するため
    • beta.talk.assignee.get: 現在のアサイン状態を取得するため
  • [Bot] 手順1で作成したボットを選択します

  • アプリを保存します

    • Craft Secret へのトークン保存 でシークレットにアクセストークンを保存します
      • シークレット名を適切な名前に変更してください(例: KARTE_API_TOKEN_FAQ_BOT_APP
      • 保存ボタンを押してください。
    • シークレット名は、Craft Functions作成時に必要なのでメモしてください

3. Craftの設定

Craft Functionsのファンクションを作成します。

  • [Craft > ファンクション > 新規作成 > テンプレートから作成] を選択します

  • Craft RAGを活用し、KARTE Talk のFAQチャットボットを構築する。 」というテンプレートを検索し [取得] ボタンをクリックします

  • [反映] ボタンをクリックします

  • [設定 > ファンクションのタイプ] で「イベント駆動タイプ」を選択します

  • [変数] タブで次の変数の値を設定してください

必須の変数

変数名説明デフォルト値
LOG_LEVELログレベル(ERROR / WARN / INFO / DEBUG)WARN
KARTE_TALK_APP_TOKEN_SECRET手順2で作成したシークレット名
SYSTEM_PROMPTGeminiへのシステムプロンプトFAQ情報を参考に回答を生成する指示を記述してくださいあなたは親切で丁寧なチャットオペレーターです。以下のFAQ情報を参考にして、次のエンドユーザーからの質問に対して、回答を提供してください。回答はプレーンテキストで行ってください。
BOT_ERROR_MESSAGEエラー発生時にボットが送信するメッセージエラーが発生しました。しばらく時間をおいてから再度お試しください。
BOT_ID手順1で取得したBOT Id
CORPUS_IDCraft RAGのコーパスID

任意の変数

変数名説明
AI_WARNING_MESSAGEAI生成回答の末尾に付加する注意書き(例: ※この回答はAIが生成したものです。内容をご確認の上、ご利用ください。
BOT_HELP_MESSAGEFAQに該当する情報がなかった場合にボットが送信するメッセージ(例: 申し訳ありません。ただいまオペレーターにおつなぎします。
OPERATOR_IDFAQに該当しない場合に引き継ぐオペレーターのID。設定することで有人引き継ぎが有効になります
CHANGE_OPERATOR_MESSAGEオペレーターへの引き継ぎ時に送信するメッセージ(例: 担当のオペレーターにおつなぎしました。しばらくお待ちください。

各変数の設定が完了したら、適当なファンクション名(例: faq-bot-by-craft-rag)をつけて [デプロイ] します。

なお、テンプレートのソースコードはGitHubで公開しています。

craft-codes/craft-functions/faq-bot-by-craft-rag at main · plaidev/craft-codes

コード内の定数について

テンプレートのソースコード内には、用途に応じて調整できる定数が含まれています。必要に応じてソースコードを編集して調整してください。

GEMINI_MODEL(使用モデル)

使用するGeminiのモデルを指定します。デフォルトは gemini-2.5-pro です。利用可能なモデルについては、Craft AI Modulesのリファレンスを参照してください。

MAX_OUTPUT_TOKENS(最大出力トークン数)

AI生成回答の最大トークン数を指定します。デフォルトは 2048 で、1〜65536の整数で設定できます。FAQの回答が途中で途切れてしまう場合は、この値を大きくすることで改善できます。

VECTOR_DISTANCE_THRESHOLD(距離閾値)

Craft RAGのベクトル検索における距離の閾値です。値が小さいほどユーザーのメッセージとFAQの内容が厳密に一致する場合のみ回答を返し、値が大きいほど距離が遠いFAQも取得しやすくなります。FAQの内容やエンドユーザーの質問傾向に合わせて調整してください。

  • 閾値が低すぎる場合
    • 関連するFAQがあっても見つからず、ボットがFAQに無い旨のメッセージを返す頻度が増える
  • 閾値が高すぎる場合
    • 無関係なFAQを取得してしまい、ユーザーの質問意図と異なる回答が返ってしまう

4. KARTE TalkのMessage Hook設定

作成したAPI v2アプリにMessage Hookのトリガーを設定し、エンドユーザーがメッセージを送信したときにCraft Functionsが起動するようにします。

  • [ストア > API v2設定] から手順2で作成したAPI v2アプリを選択します
  • [Hook設定 > 編集] をクリックします
  • [トリガー設定] で以下のトリガーを追加します
    • KARTE Talk: ユーザーからのメッセージ送信時
  • [チャネル設定 > Craft > hook status > 有効にする] にチェックを付け、手順3でデプロイしたCraft Functionsのファンクションを選択します
  • [保存] をクリックしてアプリ設定を保存します

これで設定は完了です。

実際に動かしてみる

設定が完了したら、実際にKARTE Talkでエンドユーザーとしてメッセージを送信してボットの動作を確認してみましょう。

FAQに該当するメッセージを送信する

Craft RAGに登録されているFAQに関連する内容のメッセージを送信してみます。しばらくするとボットからFAQに基づいた回答が返ってきます。

回答内容が想定通りでない場合は、SYSTEM_PROMPT の内容や VECTOR_DISTANCE_THRESHOLD の閾値を見直してみてください。

FAQに該当しないメッセージを送信する

Craft RAGに登録されていない内容のメッセージを送信してみてください。BOT_HELP_MESSAGE で設定したメッセージが送信され、設定したオペレーターへの引き継ぎが行われます。

Craft Functionsのログを確認する

動作が想定通りでない場合は、Craft Functionsのログを確認してみましょう。

  • [Craft > ファンクション] から作成したファンクションを選択します
  • [ログ] タブを開いて、実行ログを確認します
  • LOG_LEVELDEBUG に設定すると、より詳細なログが出力されます

おわりに

今回は、KARTE TalkとCraft RAG、Craft AI Modulesを組み合わせてFAQボットを構築する方法を紹介しました。

エンドユーザーのメッセージをトリガーにCraft FunctionsがFAQをベクトル検索し、FAQに該当する場合はAIが自動回答し、該当しない場合は有人オペレーターへ自動で引き継ぐこの仕組みは、カスタマーサポートの効率化に大きく貢献できます。

FAQの内容をCraft RAGで継続的に更新することで、ボットの回答精度を向上させ、有人対応が必要なケースをさらに減らすことができます。ぜひ自社のユースケースに合わせてカスタマイズして活用してみてください。