KARTE TalkとCraft RAGを用いたFAQボットを構築し、FAQにない場合は有人オペレーターに引き継ぐ方法
- solution
- 2026年3月11日
はじめに
こんにちは、Customer Engineerの宮﨑です!数年振りに「あつまれ どうぶつの森」を起動したのですが、思ったより雑草が生えてなくて安心しました!
Webサイト上に配信したチャットを通じてユーザーからの問い合わせに対応できるKARTE Talkを活用してカスタマーサポートを行っていると、日々多くの問い合わせが寄せられます。特にキャンペーン時や繁忙期には件数が急増し、オペレーターの負担が大きくなりがちです。
そうした中で、よくある質問に関するメッセージが繰り返し届くと、対応コストはさらに膨らみます。こうした定型的な問い合わせをボットで自動化できれば、オペレーターはより複雑な対応に集中できます。
今回は、Craft RAGを活用し、FAQに基づく自動回答を行うボットを構築する方法を紹介します。FAQに該当する回答が見つかった場合はボットが自動で回答し、該当しない場合は有人オペレーターへ自動で引き継ぐ仕組みを構築します。
例えばECサイトでは、「返品・交換の手続きは?」「送料はいくらですか?」「配送にどのくらいかかりますか?」といった、パターン化された問い合わせが多く届きます。これらをFAQとしてCraft RAGに登録しておくことで、ボットが1次対応を行い、オペレーターの負担を削減できます。
アウトプットイメージ
構築するFAQボットの動作イメージは次の通りです。
FAQに該当する場合
エンドユーザーがメッセージを送信すると、ボットがCraft RAGのFAQ情報を元にCraft AI Modulesで生成した回答を自動で返信します。
FAQに該当しない場合
ボットがヘルプメッセージを送信したあと、設定した有人オペレーターに自動でアサインが切り替わります。
システム構成
このソリューションの処理の流れは以下の通りです。
- エンドユーザがウェブチャットで問い合わせします
- KARTE TalkのMessage Hookがトリガーされ、Craft Functionsが起動します
- Craft RAGでメッセージの関連FAQを取得します
- 仕様モジュール: retrieveContexts
- FAQに該当する場合はCraft AI Modulesを利用して回答を生成し、送信します
- 使用API: Send message from an operator
- 仕様モジュール: gcpGeminiGenerateContent
- FAQに該当しない場合はヘルプメッセージを送信し、有人オペレーターにアサインを変更します
注意点
前提として、次の点に注意をしてください。
- KARTE Craft (Growthプラン以上)、KARTE Talk、KARTE API v2を利用できるKARTEプロジェクトが必要です
- これらのご利用には、別途お申し込みが必要となります
- Craft RAGのコーパスは次の記事などを参考にして事前に作成済みであり、FAQデータがインポートされていることを前提としています
- 生成する回答が必ずしも正確とは限りません
- AIが誤った情報を返す可能性があるため、AI生成回答には注意書きを付加することを推奨します
- 注意書きを付加するには、後述するファンクションの変数
AI_WARNING_MESSAGEに文言を設定してください
設定手順
設定の手順は次の通りです。
-
- KARTE Talkのボット設定
-
- API v2の設定
-
- Craftの設定
-
- 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_PROMPT | GeminiへのシステムプロンプトFAQ情報を参考に回答を生成する指示を記述してください | あなたは親切で丁寧なチャットオペレーターです。以下のFAQ情報を参考にして、次のエンドユーザーからの質問に対して、回答を提供してください。回答はプレーンテキストで行ってください。 |
BOT_ERROR_MESSAGE | エラー発生時にボットが送信するメッセージ | エラーが発生しました。しばらく時間をおいてから再度お試しください。 |
BOT_ID | 手順1で取得したBOT Id | — |
CORPUS_ID | Craft RAGのコーパスID | — |
任意の変数
| 変数名 | 説明 |
|---|---|
AI_WARNING_MESSAGE | AI生成回答の末尾に付加する注意書き(例: ※この回答はAIが生成したものです。内容をご確認の上、ご利用ください。) |
BOT_HELP_MESSAGE | FAQに該当する情報がなかった場合にボットが送信するメッセージ(例: 申し訳ありません。ただいまオペレーターにおつなぎします。) |
OPERATOR_ID | FAQに該当しない場合に引き継ぐオペレーターの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_LEVELをDEBUGに設定すると、より詳細なログが出力されます
おわりに
今回は、KARTE TalkとCraft RAG、Craft AI Modulesを組み合わせてFAQボットを構築する方法を紹介しました。
エンドユーザーのメッセージをトリガーにCraft FunctionsがFAQをベクトル検索し、FAQに該当する場合はAIが自動回答し、該当しない場合は有人オペレーターへ自動で引き継ぐこの仕組みは、カスタマーサポートの効率化に大きく貢献できます。
FAQの内容をCraft RAGで継続的に更新することで、ボットの回答精度を向上させ、有人対応が必要なケースをさらに減らすことができます。ぜひ自社のユースケースに合わせてカスタマイズして活用してみてください。