n8n における RAG
RAG とは?
検索拡張生成(Retrieval-Augmented Generation、RAG)は、言語モデルを外部データソースと組み合わせることで、AI の回答品質を向上させる技術です。RAG システムはモデルの内部トレーニングデータに依存するだけでなく、関連ドキュメントを検索し、最新の情報や特定分野・プライベートな知識に基づいた回答を提供します。RAG ワークフローでは、通常、これらの外部データを効率的に管理・検索するためにベクトルデータベースが活用されます。
ベクトルデータベースとは?
ベクトルデータベースは、テキストや画像などのデータを数値表現(ベクトル)として保存・検索するために特化したデータベースです。ドキュメントをアップロードすると、ベクトルデータベースはそれを複数のチャンクに分割し、埋め込み(embedding)モデルを使って各チャンクをベクトルに変換します。
これらのベクトルに対して類似度検索を行うことで、キーワード一致ではなく意味的な類似性に基づいて結果を取得できます。この特性により、ベクトルデータベースは RAG や大量の知識を検索・推論する必要がある AI システムにとって強力な基盤となります。
n8n で RAG を使うには?
RAG テンプレートから始める
👉 RAG スターターテンプレート を使って、n8n での RAG をすぐに体験できます。このテンプレートには、ファイルをアップロードするワークフローと、そのファイルをクエリするワークフローの2つが含まれています。
データをベクトルデータベースに挿入する
エージェントがカスタムナレッジベースにアクセスできるようにするには、まずデータをベクトルデータベースにアップロードする必要があります:
- ソースデータを取得するための必要なノードを追加します。
- ベクトルデータベースノード(例:Simple Vector Store)を挿入し、操作として 「ドキュメントを挿入」 を選択します。
- テキストをベクトル埋め込みに変換するための 埋め込みモデル を選択します。適切な埋め込みモデルの選び方については、よくある質問をご覧ください。
- コンテンツをチャンクに分割するための
Default Data Loaderノードを追加します。デフォルト設定を使用するか、以下のようにチャンキング戦略をカスタマイズできます:- 文字単位で分割:指定した文字数で分割します。
- 再帰的文字分割:Markdown、HTML、コードブロック、またはプレーンテキストを再帰的に分割します(ほとんどのケースに適しています)。
- トークン単位で分割:指定したトークン数で分割します。
- (オプション)後続のフィルタリングを容易にするために、各チャンクに メタデータ を追加してコンテキストを豊かにできます。
データをクエリする
データのクエリには、主に2つの方法があります:エージェントを使う方法 と ノードを直接使う方法 です。
エージェントを使う場合
- ワークフローにエージェントを追加します。
- ベクトルデータベースを ツール として追加し、エージェントがいつ使うべきかを理解できるよう 説明文 を記述します:
- 取得件数の上限 を設定して、いくつのチャンクを返すかを定義します。
- メタデータを含める を有効にして、各チャンクに追加コンテキストを提供します。
- データ挿入時に使用したのと同じ 埋め込みモデル を追加します。
プロのテクニック
高価なモデルのトークン消費を抑えるため、まず Vector Store Question Answer Tool を使って関連データを検索し、その結果をエージェントに渡す方法があります。実際の使い方は、このテンプレート をご確認ください。
ノードを直接使う場合
- キャンバスにベクトルデータベースノードを追加し、操作として 「複数取得」 を選択します。
- クエリや質問を入力します:
- 取得件数の上限 を設定して、返すチャンク数を制御します。
- 必要に応じて メタデータを含める を有効にします。
よくある質問
適切な埋め込みモデルをどう選べばよいですか?
最適な埋め込みモデルはユースケースによって異なります。
一般的に、小さいモデル(例:text-embedding-ada-002)は高速でコストが低く、短いドキュメントや汎用的なシナリオ、軽量な RAG ワークフローに適しています。一方、大きいモデル(例:text-embedding-3-large)はより高度な意味理解が可能で、長いドキュメントや複雑なトピック、高い精度が求められるシナリオに向いています。
私のユースケースに最適なテキスト分割方法はどれですか?
これは主にデータの特性に依存します:
- 小さなチャンク(例:200~500トークン)は、細かい粒度での検索に適しています。
- 大きなチャンクはより多くのコンテキストを含みますが、曖昧になったりノイズが混入したりする可能性があります。
AI がチャンクのコンテキストを正しく理解するためには、適切なチャンク間のオーバーラップを設定することが重要です。そのため、Markdown やコードブロックに基づいた分割が、多くの場合でより良い結果をもたらします。
別の有効な方法として、チャンクに「どのドキュメント由来か」などの追加コンテキストを付与することが挙げられます。このトピックについてさらに知りたい場合は、Anthropic のこの優れた記事 をぜひお読みください。