n8n初心者向け講座第7弾では
「RAG(Retrieval-Augmented Generation)」
を活用したチャットボットを作ります。
RAG(ラグ)という言葉はなんか凄そうですが、簡単に言うと
「指定したデータ内の情報のみを使って回答する仕組み」
のことです。
たとえば「自社の就業規則」や「社内の製品マニュアル」などを読み込ませ、外部の情報に頼らず、正確に答えさせたい場合にRAGはよく使われます。
n8nにはRAGを使ったチャットボット(RAGチャットボット)を作る仕組みがいくつかあります。
今回は、おそらく最も簡単な方法を紹介・解説します。
具体的には「Simple Vector Store」というノードを使ってRAGチャットボットを作ります。
ワークフローの完成系は以下です。
仕事でも活用できるワークフローですので、ぜひ記事を参考にして作ってみてください。
※より実用的でオーソドックスなRAGチャットボットを作りたい方には以下がおすすめ
【n8n初心者向け講座8】Pineconeを活用しRAGチャットボットを作る
STEP① データをアップロードできるように設定する
さっそく、手を動かしながらn8nのワークフローを作っていきましょう!
はじめに「ユーザーがアップロードしたデータを受け取る仕組み」を作ります。ここでアップロードしたデータがRAGの情報源となります。
n8nには「n8n Form Trigger」というノードがあり、このノードを使えばPDFやCSVなど、様々なデータをアップロードできます。
n8nで「n8n Form」と検索してノードを追加してください。
検索すると複数のノードが表示されますが、
「On new n8n Form event」
と表示されたノードを選んでください(下の画像を参考)。
追加したら、以下のように設定します。
- Form titleに「保存したいファイルをアップロード」と入力
- 「Add Form Elements」をクリック
- Field Nameに「アップロードする情報を指定」と入力
- Element Typeで「File」を選択
ちょっとわかりにくいと思うので、下の画像を参考にしてください。
Saveして実行すると、以下のフォームが起動するはずです。
STEP①はこれで完了です。
STEP② データの保存先となる倉庫を用意する
STEP①で、ファイルをアップロードできるようになりました。
STEP②では、①で受け取ったデータを保存する倉庫のようなものを作ります。
ここで倉庫として使うのは「Simple Vector Store」というノードです。
n8nでRAGチャットボットを作るときよく使われるのは
「Pinecone Vector Store」
というノードです。
このPinecone(パインコーン)はとても便利なのですが、設定・準備で少し手間が発生します。
なので、この記事ではより簡単に設定できるSimple Vector Storeノードを使います。
※その代わり機能面はPineconeと比べると劣ります
※Pineconeを使ったRAGチャットボットの作り方はこちらの記事で解説しています。
Simple Vector Storeノードの追加方法を紹介します。
n8nで「Simple Vector Store」と検索すると4種類のノードが表示されます。
ここでは、その中から
「add documents to vector store」
を選んでください。
追加したら、STEP③に進みましょう!
STEP③ アップロードしたデータからテキストを抽出する
STEP② で、データを保存する倉庫の用意ができました。
でも、RAGチャットボットはPDFなどのファイルを読むのが苦手です。
なので、STEP③ではファイルからテキストを抽出し、読み取りやすいようにします。
ここで登場するのが
「Default Data Loader(デフォルト・データ・ローダー)」
です。
Default Data Loaderノードには以下の役割を担当してもらいます。
- アップロードされたデータの形式を判別
- AIが読み取りやすいよう「テキスト」に変換
Simple Vector Storeの下についてる「Document」をクリックし、Default Data Loaderを追加してください。
追加したら「Type of Data」を「Binary」に変えます。
下の動画を参考にして設定してください。
STEP④ AIが読めるようテキストをベクター形式にする
STEP③により、アップロードしたファイル内からテキスト(文章)を抽出できるようになりました。
ただし、RAGチャットボットの「頭脳」であるAIは、私たち人間が使う文字のままでは内容をうまく扱えません。
そこで、テキストをAIが理解しやすい「ベクター形式」に変換する必要があります。
「ベクター形式ってなに?」
と思うかもしれませんが、ここでは
「ベクター形式=AIが読めるデータ」
くらいの理解で大丈夫です。
テキストをベクター化するのに使うのは
「Embedding」
という種類のノードです。
Simple Vector Storeノードの下にある「Embedding」をクリックしてください。
すると、さまざまなEmbedding系ノードが表示されます。
今回はその中から
「Embeddings Google Gemini」
を選びます。
ノードを追加したら設定をクリックし、認証してください。
GeminiのAPIは以下のサイトで簡単に入手できます。
https://ai.google.dev/gemini-api/docs?hl=ja
Modelの設定はデフォルトのままでOKです。
設定が完了したらSaveし、次に進みましょう。
STEP⑤ RAGで使うファイルをアップロードする
STEP④まで完了すると、以下のワークフローが完成します。
※付箋(sticky note)はつけないでもOKです
ここで、RAG、つまり情報の参照先として使うファイルを実際にアップロードしてみましょう。
まず「Execute Workflow」をクリックしてください。
クリックすると以下の画面が表示されるはずです。
ここでは、サンプルとして私が作った以下のPDFをダウンロードし、n8nにアップロードしてみてください(もちろん他のものでも大丈夫)。
AIに作ってもらった架空の就業規則です。
就業規則PDFサンプルをダウンロード
アップロードが完了したら、そのデータは
- 「Default Data Loader」によってPDFからテキスト変換
- 「Embeddings Google Gemini」によってテキストからベクターデータに変換
という工程を経て、Simple Vector Storeに保存されます。
RAGチャットボットが読み込むデータの設定はこれで完了です。
STEP⑥ チャット入力フォームとAIエージェントの設定
ここからは、RAGチャットボットのチャットボット部分を設定します。
チャット入力部分や、チャットに回答する生成AI等ですね。
RAGチャットボットといえどチャットの一種なので
「Chat Trigger」
を追加します。
Chat Triggerを追加したら
「AI agent」
を追加します。
さらに、AIエージェントに
「Google Gemini Chat Model」
を追加します。
一連の流れは以下の動画を参考にしてください。
Geminiをここで追加する理由は、STEP④で「Embeddings Google Gemini」を使ってテキストをベクター化したためです。
つまり、STEP④でGeminiが変換したベクターデータは、同じGeminiの「Google Gemini Chat Model」と相性がよく、より正確に内容を理解してもらえます。
STEP⑦ 検索用の「Simple Vector Store」を追加
ここまでで、以下のワークフローが出来ているはずです。
次は、再び
「Simple Vector Storeノード」
を追加します。
Simple Vector StoreノードはSTEP②でも追加しましたね。
じつは、Simple Vector Storeノードは以下の両方に使えます。
- データの保存
- データの検索
STEP②ではSimple Vector Storeノードをデータの保存に使い、このSTEP⑦ではデータの検索に使います。
ここでSimple Vector Storeノードが必要になる理由は、AIエージェントにはSimple Vector Store(保存用)にアクセスする機能が無いからです。
よって、Simple Vector Store(検索用)を使い、このノードに情報の取得を任せなくてはならないのです。
追加方法は簡単です。
AIエージェントツールの「Tool」をクリックし「Simple Vector Store」を選択してください。
選択したら「Operation Mode」で
「Retrieve Documents (As Tool for AI Agent)」
を選択。
そして、Descriptionには
「保存されてるナレッジを使用して、ユーザーからの質問に回答してください。」
と入力してください。
設定する際は下の動画も参考にしてください。
STEP⑧ チャットで入力した内容をベクター形式に変換
作業はこれで最後です。
最後に、チャットで入力された言葉をベクター形式に変換する設定を行います。
その前に、今回のワークフローにおけるチャットの流れを整理しておきましょう。
まず、ユーザーがチャットフォームに知りたい情報を入力します。
次に、AIエージェントが「Simple Vector Store(検索用)」ノードを使って、「Simple Vector Store(保存用)」ノード内のデータを検索します。
該当する情報が見つかれば、それをユーザーに返すという流れです。
ただし、ここで問題があります。
ユーザーが入力するのは「人間の言葉」であって、ベクター形式ではありません。
一方、「保存用」のデータはすでにベクター形式で保存されています。
そのため、このままでは検索しても一致するデータを見つけられないのです。
そこで活用するのが「Embeddings Google Gemini」ノードです。
このノードを使うことで、人間の言葉をベクター形式に変換し、保存データと照合できるようになります。
下の動画を参考に、「Simple Vector Store(検索用)」と「Embeddings Google Gemini」を接続してください。
これで設定はすべて完了です!
STEP⑨ チャットボットに質問してみる
ここまでで、以下のワークフローが完成しました。
RAGに使うデータはすでにアップロードしているので、チャットで質問してみてください。
チャット画面は「Open chat」をクリックすると左下に表示されます。
この記事でダウンロードしたサンプルPDFは会社の就業規則です。
もしサンプルをそのままアップロードした場合、就業開始時間などを尋ねてみるのが良いと思います。
このワークフローを使っていて、
- データを削除したいとき
- 新しくファイルをアップしたのに反映されないとき
には、Simple Vector Store(保存用)ノードの設定で「Clean Store」をONにすることで、保存されていたベクターデータをリセット(削除)できます。
動作がおかしいと感じたときは、一度「Clean Store」をONにして実行し、データをクリアした状態であらためて新しいデータをアップロードしてみてください。
n8n初心者向け講座第7弾の解説は以上です!
ぜひ他の講座もチェックしてください↓
第7弾以外のn8n入門講座はこちら
この記事で紹介した第7弾以外の、n8n入門講座を一覧で紹介します。
どれもn8n初心者向けのワークフローですので、ぜひ参考にしてください。
