1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

こんにちは!すんすんです🐥

「PC画面がフリーズした」「シフト管理システムのログインパスワードを忘れた」、、、
現場からの毎日鳴りやまない電話や、立て続けに届く問い合わせメール。本部でお仕事をしていると、こんなことに頭を悩ませてしまうことありませんか?
同じ現場から何度も似たような質問が届き、10件も届けば通常業務は完全に止まってしまいますよね。「ただ問い合わせに答えるだけ」で1日の大切な時間が取られてしまうのは、本当にもったいないなぁと感じます、、、

でも現場からすると、システムは難しくてちょっと怖いもの。だからこそ、怖がってマニュアルを読むより「知っている誰かに直接聞こう」としてしまう気持ちもすごく分かります。

だからこそ、現場が困ったときに「簡潔でわかりやすい文章」で優しくパッと答えを返してくれる存在が本部の代わりにいてくれたら、問い合わせの数自体を根本から減らせるはず!

「本部のみんなの時間を守り、現場の手助けにもなりたい!」という思いから、今回は店舗専用のAIチャットボット『てっくま』を作ってみました🧸

完成したBotはこちら

※文字入力部分・AIの思考部分はカットしています

実装した機能・使用ツール

今回実装した機能

  • 現場ユーザーがチャットで質問を送ることができ、AIが返答する機能
  • 質問された内容(データ)をGoogleスプレッドシートに自動で集約していく機能

今回使用したツール

  • Dify
  • Google Gemini AI
  • Google AI Studio (API keys)※無料版
  • Googleスプレッドシート
  • GAS(Google Apps Script)

最終構造はシンプルなものになりました!
image.png

事前準備

  • 取り込ませるデータを作成(任意)
    今回取り込ませるデータは、デモバージョンを事前にExcelで作成し利用しています。
    取り込ませるデータが予め用意されている場合は、こちらの作業は不要となります。

image.png

  1. 1行目をタイトル行として、以下の4項目を作ります。
    A列: カテゴリ / B列: 質問 / C列: 回答 / D列: 言い換えキーワード
  2. 2行目以降に、テスト用のQAを入力して保存します。
  • APIキーの取得
    今回、質問した現場の人が気分よく利用してほしいという思いから、指定された内容のみを自動的に返信するチャットボットに留まらず、指定された内容を丁寧に回答してくれるようなAIの機能を付けたいと思います。

AIチャットボットと聞くと、ChatGPTを思い浮かべる方も多いかもしれません。ですが、今回てっくまの頭脳として採用したのはGoogleの「Gemini(ジェミニ)」です。
理由としては、Geminiは無料で使えるAIの体力(トークン数)が、1分間に100万トークンも利用できるくらい太っ腹なので、他のAIに比べて圧倒的に多いからなんです✨

Difyの頭脳となる「Gemini」を無料で利用するための鍵(APIキー)を取得します。

  1. Google AI Studio( https://aistudio.google.com/ )にアクセスし、ログイン
  2. 左下のDashboard>APIキーからキーをコピーして控えておく
  • Difyとの連携
    DifyでGeminiを利用するために、取得したAPIキーとDifyの連携が必要となります。
  1. Dify公式( https://dify.ai/ ) で無料アカウントを作成してログイン
  2. 右上のアイコン > 「設定」 > 「モデルプロバイダー」 から Google Gemini を探し、取得したAPIキーを貼り付けて保存

これで、事前準備は完了です!

まずはチャットボットから作ってみよう!

STEP1:チャットフローを作成しよう

最初に、ベースとなるチャットフローを作成していきます。
上部メニューのスタジオ>最初から作成をクリック

チャットフローを選択し、アプリの名前を追加。
任意でアイコンや説明を入れると、どんなシステムかよりわかりやすくなります。

追加されたチャットフローは、最初からこのような画面になっています。
image.png

STEP2:ナレッジベース作成しよう

次にAIが回答する元データとなる、ナレッジベースを作成します。
事前準備で作成した元データ(またはあらかじめ用意されているデータ)を取り込ませて、AIが参照できるような機能を作っていきましょう。

上部メニューのナレッジ>ナレッジベースを作成をクリック

データソースは、デフォルトでテキストファイルからインポートが選択されていますので、ドラッグ&ドロップでデータをインポートし、「次へ」をクリックします。
image.png

Tip
次の画面で、AIの賢さを決める設定を以下のように変更します。
ここをデフォルトのままにしないのが最大のコツです!

【チャンク(分率)設定】
インデックスモード: 高品質
最大チャンク長: 1024(デフォルト) / チャンクオーバーラップ: 1(最小値)

💡 理由: Excelは1行ごとに内容が独立しています。前後のつながりを持たせる「オーバーラップ」を 1 にすることで、他の行とデータが混ざり合ってAIが混乱するのを防ぎます。

チャンク識別子: デフォルトのままでOKです。これにより、Excelの1行が途中で泣き別れになることなく、綺麗に1つのデータとしてAIに記憶されます。

image.png

【検索設定】
検索設定: ハイブリッド検索 を選択

💡 理由: ニュアンスで探す「ベクトル検索」と、Excelへ仕込んだ「言い換えキーワード」をピンポイントで狙い撃ちする「キーワード検索」を同時に行うため、現場の曖昧な質問に対するヒット率が上がります。

トップK: 3 / スコア閾値: トグルOFF(デフォルト)

image.png

ここまで来たら、「保存して処理」を押下。すると、以下のように表示されます。
もし何かエラーがあれば、ここに緑の✅はつきません。
image.png

STEP3:チャットフローとナレッジを連携させよう

続いて、STEP1で作成したチャットフローに戻り、STEP2で作成したナレッジベースを連携させて、AIチャットボットを作成します。

先ほど作成したチャットフローに戻り、「スタート」と「LLM」の間の+ボタンをクリックします。

+ボタンを押すとメニューが開きますので、「知識検索」をクリックします。
image.png

ナレッジベース右上の小さい+ボタンをクリックすると、「参照する知識」の選択画面になりますので、STEP2で登録したナレッジを選択します。

続いて、LLMのノードを設定します。
AIモデルは、最新版のGemini-3.5-Flashを選択しておきます。
AI自身が一番AIを理解しているため、プロンプトはAIが考えたものを入れています。

一番右側に回答ノードがあります。
中身にはデフォルトで「text」が入っています。
今回はLLMで出力されたtextを回答で吐き出すため、そのままの設定にしておきます。

試しに、「プレビュー」で動作を確認してみると、、、

元データに記載している内容であるにもかかわらず、「わからない」と返ってきます。

ここで、LLMのノードを再度確認してみると、、、

コンテキストの中身が空っぽになっていました。
ここを入れていなかったのでAIがExcelを全く読めない状態になっていました。

そのため、コンテキストにはresultを入れ、プロンプトの「コンテキスト」の部分も変数になるように設定します。
※ここで、AIからの回答がより丁寧になるよう、プロンプトを少し手直ししました。

再度プレビューで動作を確認してみると、、、

無事に、してした返答が返ってきました!
以上で、チャットフロー(AIを利用したチャットボット)が完成です!

データを集約する機能をつけよう!

STEP4:チャットフローのなかに集約に必要な情報をいれよう

ここからは、現場の利用ログ(誰がいつ何を質問したか)を自動で集約するアップデートを行います。
まずは、質問の際に、質問者の情報を入力してもらう項目を作成します。

Difyの編集画面で、左端にある 「開始(Start)」ノード をクリックします。
「入力フォーム」の 「+ 追加」 を押し、以下の2つのテキスト欄を追加します。

変数名: shop_name / ラベル: 店舗名(必須にチェック)
変数名: user_name / ラベル: お名前(必須にチェック)

赤枠の中に変数・ラベルを1つずつ入れ、保存します。
プレビューで確認してみると、しっかりと項目が作成されていることがわかります。
また、何も入れずに進めようとすると「店舗名 の値は空にできません」と表示されており、必須項目となっていることがわかります。

これで、最初に質問者の情報を入れてもらう項目を作成することができました。

STEP5:データ受信用スプレッドシートとGASの設定をしよう

💡GASって何?
GAS(ギャス / Google Apps Script)とは、一言でいうと「Googleが提供している、誰でも無料で使える自動化ミニプログラム」のことです。
通常、ツール同士を裏側で連携させるには、有料の外部サービスを使う必要があり、費用が発生してしまいます。
そこで大活躍するのが「GAS」です!
GASは、Googleアカウントさえあれば誰でも完全に無料で使える自動化プログラムです。

「Difyとスプレッドシートを繋ぐ無料の通訳さん」としてGASを間に挟むことで、追加費用を1円もかけることなく、自動集約のシステムをスマートに実現できてしまいます✨
AIが作ってくれたコードをコピー&ペーストするだけで動くので、知識がなくても全く問題ありません!

まずはデータ受信用のスプレッドシートを作成します。
1行目に左から 日時, 店舗名, 氏名, 質問内容, AIの回答, ステータス と入力します。

続いて、GASを設定していきます。
スプレッドシート内、メニューの拡張機能>Apps Script を開き、もともとあるコードを消してAIが作成した以下のコードを貼り付けます。
image.png
image.png

保存し、右上の デプロイ>新しいデプロイ 今回はDifyを連携するので、ウェブアプリ をクリック

詳細設定(説明)の部分を入れていきます。
黒塗りの部分は、デフォルトで自分自身のメールアドレスが入っています。

Tip
アクセスできるユーザーを必ず 「全員(Anyone)」 に設定してデプロイします。

💡 理由: 「自分だけ」にすると、外部システムであるDifyからの通信をGoogleがブロックしてしまい自動集約が動きません。
「全員」にしても、複雑なWebアプリURLが漏れない限り安全です。

デプロイ後、承認が求められた場合は「アクセスを承認」し、最後に発行された 「WebアプリのURL」 をコピーして控えます。

STEP6:ワークフローにデータ送信を組み込もう

STEP5で連携したGASを利用して、回答結果をGoogleスプレッドシートに出力するシステムを作ります。ここでは、以下のようにIF(回答なし=未解決)のルートと、ELSE(解決済)のルートで条件を分岐し、データを集約させていきます。

Difyの編集画面で、「LLM」と「回答」を繋いでいる線を一度消去します。
LLMの右側に、新しく 「IF/ELSE(条件分岐)」ノード を追加して繋ぎます。

【IF(回答なし=未解決)のルート】
IFの先に 「HTTPリクエスト」ノード を繋ぎます。
設定:画面左上の初期値 GET を必ず POST(出力する設定) に変更。
URL欄に先ほどの「GASのURL」を貼り付け。※青の塗りつぶし部分

ボディ: JSON を選択。
💡JSOMはスプレッドシートの列へきれいに仕分けるために、データの箱にラベルを貼り付けるような機能です。
現れた大きな黒いボックスに以下のコードを丸ごと貼り付けます。
※今回もコードはAIに作ってもらいます。

【ELSE(解決済)のルート】
ELSEの先にも、もう一つ別の 「HTTPリクエスト」ノード を繋ぎます。
設定は上記と全く同じですが、貼り付けるJSONコードの最後だけ "status": "AI回答済" に書き換えます。

最後に、2つのHTTPリクエストノードの出口(右側)を、両方とも最終的な 「回答」ノード へ繋ぎ直します。

こうすることで、スプレッドシートにデータを集約しつつ、チャットボットで回答をすることができるようになります。

画面右上の 「公開する」から「アプリを実行」 を押せば、すべてのシステムが連動した問い合わせボットの完成!!のはずですが、、

こんなエラーメッセージがでていました。

エラーが出ていたIF/ELSEのノードを開いてみると、IFの中身が空っぽになっていました。
設定をすっかり忘れてしまったようです。

この状態にすることで、IF(=もし)「回答を確認して回答します。」という言葉が入っていたら、「未解決の項目に集約する」とシステムで自動で判断させるための目印になります。

気を取り直して、再度「公開する」から「アプリを実行」を押して動作を見てみたいと思います。

↓実際のアプリを実行している画面
最初に店舗名・名前を入れる項目が表示されます。

その後、チャットの画面に移ります。
①「PCがネットワークに繋がりません」という、既にナレッジ内になる質問をすると、正しい回答が返ってきます。
②「VPNを発行したいです」という、ナレッジ内にない問い合わせをすると、「申し訳ございませんが、現在回答が設定されておりません。内容を確認して回答しますのでお待ちください」と、設定した内容が返されました。

また、Googleスプレッドシートには以下のように自動で集約されています。

➕データを更新・追加したい場合は?

ここまで、AIチャットボットを作成して、Googleスプレッドシートにデータを自動で集約していく方法をお伝えしてきました。
最後に、回答できる内容を増やすために、元データ(ナレッジ)に情報を追加していく方法をご説明します。

①新しいQAを追加する場合

Difyの上部メニューから 「ナレッジ」 タブを開き、対象のナレッジをクリックして開きます。
image.png

画面右上にある 「チャンクを追加」 ボタンをクリックします。
image.png

※ここからは私のDifyが無料版の上限を超えてしまい、画面操作の撮影ができませんでしたので、文字のみでご説明します。

入力画面が開くので、以下のように入力します。
質問内容(またはキーワード) を上のボックスに入力
現場への回答文 を下のボックスに入力
「保存」を押せば完了です。
数秒でAIがその内容を学習し、次回の質問から新しい回答ができるようになります。

②既存のQAを修正・削除する場合

ナレッジを開くと、現在学習しているQAがリストでずらりと並んでいます。
修正したいQAにマウスを合わせると、右側に 「編集(ペンマーク)」 や 「削除(ゴミ箱マーク)」 のアイコンが表示されます。
「編集」を押せば、Excelを触ることなくその場で回答文の文言を変更できます。

③まとめて追加したい場合

もし週末に「今週は未解決の質問が20件も溜まったから、一気に追加したい!」という場合は、やはりExcelを使う方が早いです。
ただし、既存のナレッジを丸ごと削除して作り直す必要はありません。
差分をまとめた新しいExcelファイルを作ります。
Difyのナレッジ画面から、「ファイルを追加」 を選びます。

image.png

新しいExcelファイルをそのままドロップしてアップロードします。
これにより、これまでのナレッジ(既存データ)の後ろに、新着の20件が追加されます。

注意
Dify無料プランには上限がありますので、ご注意ください

業務をラクにしたい!!

今回は、とにかく問い合わせ対応に対処できるようなツールを作ることはできないかと思い、「てっくま」くんを作りました。
Difyを始めて使用しましたが、AIと掛け合わせることで、自力で集約機能付きのチャットボットを作ることができて、感動しました(笑)
また、今回のAIチャットボットは、現場ユーザーからの質問が届いても特にお知らせする機能がついてないので、スプレッドシートを見に来なければいけません。
また、名前に反してとても丁寧な回答をしてくれるAIチャットボットになっています。

そのため、今後は現場ユーザーからの質問が届いたらお知らせしてくれるような、通知機能を追加したりだとか、より「てっくま」くんらしさがある口調にするだとか、もっとユーザーが利用しやすいものにしていきたいと考えています。

これからも、日々の生活や業務のちょっとしたお困りごとを解決できるようなものを作って発信していきたいと思います!
最後まで読んでいただき、ありがとうございました!

おまけ

てっくまくんの由来は「Tech(テクノロジー)」+「クマ」です。
頼りがいがありつつもかわいらしい、そんなイメージを持ってもらいたくて名づけました🧸

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?