n8n初心者向け講座第7弾では
「RAG(Retrieval-Augmented Generation)」
を活用したチャットボットを作ります。

RAG(ラグ)という言葉はなんか凄そうですが、簡単に言うと
「指定したデータ内の情報のみを使って回答する仕組み」
のことです。
たとえば「自社の就業規則」や「社内の製品マニュアル」などを読み込ませ、外部の情報に頼らず、正確に答えさせたい場合にRAGはよく使われます。

n8nにはRAGを使ったチャットボット(RAGチャットボット)を作る仕組みがいくつかあります。
今回は、おそらく最も簡単な方法を紹介・解説します。
具体的には「Simple Vector Store」というノードを使ってRAGチャットボットを作ります。
ワークフローの完成系は以下です。

RAGチャットボットのワークフロー完成系

仕事でも活用できるワークフローですので、ぜひ記事を参考にして作ってみてください。
※より実用的でオーソドックスなRAGチャットボットを作りたい方には以下がおすすめ
【n8n初心者向け講座8】Pineconeを活用しRAGチャットボットを作る

STEP① データをアップロードできるように設定する

さっそく、手を動かしながらn8nのワークフローを作っていきましょう!

はじめに「ユーザーがアップロードしたデータを受け取る仕組み」を作ります。
ここでアップロードしたデータがRAGの情報源となります。

n8nには「n8n Form Trigger」というノードがあり、このノードを使えばPDFやCSVなど、様々なデータをアップロードできます。
n8nで「n8n Form」と検索してノードを追加してください。

検索すると複数のノードが表示されますが、
「On new n8n Form event」
と表示されたノードを選んでください(下の画像を参考)。

「n8n Form Trigger」と検索してノードを追加

追加したら、以下のように設定します。

  1. Form titleに「保存したいファイルをアップロード」と入力
  2. 「Add Form Elements」をクリック
  3. Field Nameに「アップロードする情報を指定」と入力
  4. Element Typeで「File」を選択

ちょっとわかりにくいと思うので、下の画像を参考にしてください。

「n8n Form Trigger」の設定

Saveして実行すると、以下のフォームが起動するはずです。

「n8n Form Trigger」でファイルをアップロード

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」
を選んでください。

「add documents to vector store」を選択

追加したら、STEP③に進みましょう!

STEP③ アップロードしたデータからテキストを抽出する

STEP② で、データを保存する倉庫の用意ができました。
でも、RAGチャットボットはPDFなどのファイルを読むのが苦手です。
なので、STEP③ではファイルからテキストを抽出し、読み取りやすいようにします。
ここで登場するのが
「Default Data Loader(デフォルト・データ・ローダー)」
です。

Default Data Loaderノードには以下の役割を担当してもらいます。

  1. アップロードされたデータの形式を判別
  2. 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」
を選びます。

Embeddings Google Gemini」を追加

ノードを追加したら設定をクリックし、認証してください。
GeminiのAPIは以下のサイトで簡単に入手できます。
https://ai.google.dev/gemini-api/docs?hl=ja

Modelの設定はデフォルトのままでOKです。
設定が完了したらSaveし、次に進みましょう。

STEP⑤ RAGで使うファイルをアップロードする

STEP④まで完了すると、以下のワークフローが完成します。
※付箋(sticky note)はつけないでもOKです

RAGチャットボットの途中経過

ここで、RAG、つまり情報の参照先として使うファイルを実際にアップロードしてみましょう。
まず「Execute Workflow」をクリックしてください。
クリックすると以下の画面が表示されるはずです。

「n8n Form Trigger」でファイルをアップロード

ここでは、サンプルとして私が作った以下のPDFをダウンロードし、n8nにアップロードしてみてください(もちろん他のものでも大丈夫)。
AIに作ってもらった架空の就業規則です。
就業規則PDFサンプルをダウンロード

アップロードが完了したら、そのデータは

  1. 「Default Data Loader」によってPDFからテキスト変換
  2. 「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」を追加

ここまでで、以下のワークフローが出来ているはずです。

STEP⑥までの流れでできたワークフロー

次は、再び
「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」ノードです。
このノードを使うことで、人間の言葉をベクター形式に変換し、保存データと照合できるようになります。

「Embeddings Google Gemini」はすでにワークフローに追加されていますので、あとはノード同士を接続するだけです。
下の動画を参考に、「Simple Vector Store(検索用)」と「Embeddings Google Gemini」を接続してください。

これで設定はすべて完了です!

STEP⑨ チャットボットに質問してみる

ここまでで、以下のワークフローが完成しました。

RAGチャットボットのワークフロー完成系

RAGに使うデータはすでにアップロードしているので、チャットで質問してみてください。
チャット画面は「Open chat」をクリックすると左下に表示されます。

チャット画面は「Open chat」をクリックすると開く

この記事でダウンロードしたサンプルPDFは会社の就業規則です。
もしサンプルをそのままアップロードした場合、就業開始時間などを尋ねてみるのが良いと思います。

このワークフローを使っていて、

  • データを削除したいとき
  • 新しくファイルをアップしたのに反映されないとき

には、Simple Vector Store(保存用)ノードの設定で「Clean Store」をONにすることで、保存されていたベクターデータをリセット(削除)できます。
動作がおかしいと感じたときは、一度「Clean Store」をONにして実行し、データをクリアした状態であらためて新しいデータをアップロードしてみてください。

n8n初心者向け講座第7弾の解説は以上です!
ぜひ他の講座もチェックしてください↓

第7弾以外のn8n入門講座はこちら

この記事で紹介した第7弾以外の、n8n入門講座を一覧で紹介します。
どれもn8n初心者向けのワークフローですので、ぜひ参考にしてください。