時代に翻弄されるエンジニアのブログ

ゲームプログラマをやっています。仕事やゲームや趣味に関してつらつら書きたいと思います。

n8nで自前ナレッジ検索を作る:PineconeとOpenAI Vector Storeの使い分け

n8nで自前ナレッジ検索を作る:PineconeとOpenAI Vector Storeの使い分け

はじめに

最近、AI界隈でよく耳にする「RAG(Retrieval-Augmented Generation)」という言葉。
簡単に言うと、AIに独自の知識(社内ドキュメントや特定のPDFなど)を与えて、その内容に基づいて回答させる仕組みのことです。

今回は、ワークフロー自動化ツールの n8n を使って、このRAGシステムを構築する方法についてリサーチしてみました。

調べてみた所感としては、n8nでのRAG構築には「Pinecone」を使った例が多く見つかりますが、決してそれが唯一の正解というわけではなさそうです。
OpenAIのVector Storeや、Vertex AI Searchなど、様々な選択肢をAPIで繋いでいくパターンもよく見られます。

この記事では、n8nが提供しているRAG構築の手段のうち、
「Pineconeを使った構成」と「OpenAI Vector Storeを使った構成」の2パターンを、それぞれ分けて整理していきます。

パターン1:n8n+PineconeでRAGを構築する

事前準備:Pineconeの設定

n8nでRAGを構築する際、ベクトルデータベースとしてよく使われるのが Pinecone です。
利用するには以下の準備が必要です。

  1. アカウント作成: Pineconeの公式サイトでアカウントを作成します(無料プランあり)。
  2. API Keyの取得: 管理画面からAPI Keyを発行します。これをn8nのCredentialに設定します。
  3. Indexの作成:
    • Dimensions: 使用するEmbeddingモデルに合わせます(例:OpenAI text-embedding-3-small なら 1536)。
    • Metric: cosine が一般的です。
    • Cloud/Region: n8nからのアクセスが良い場所(または無料枠の場所)を選びます。

このIndex情報(Index Name)が後のワークフロー設定で必要になります。

構築手順の概要(Pineconeパターン)

RAGシステムは大きく分けて2つのワークフローで構成されます。

  1. データ取り込み(Ingestion): ドキュメントを読み込んで、ベクトルデータベースに保存する
  2. チャット/検索(Retrieval): ユーザーの質問を受け取り、データベースを検索して回答する

1. データ取り込みフロー

AIに読ませたいデータを準備するフローです。

  • Document Loader: データを読み込む(Google Drive, Notion, テキストファイルなど)
  • Text Splitter: 長い文章を適切なサイズに分割する(Chunk Size 500〜1000程度が一般的)
  • Embeddings: テキストを数値(ベクトル)に変換する(OpenAI Embeddingsなど)
  • Vector Store: データを保存する(Pineconeなど)

このフローを実行すると、指定したドキュメントがベクトル化されてPineconeに保存されます。

2. チャットボットフロー

実際に会話するフローです。

  • Chat Trigger: チャットインターフェース用
  • AI Agent: AIの本体
  • Vector Store Tool: 知識ベースを検索するためのツール

ポイントは Vector Store Tool を AI Agent に接続することです。
これにより、AIは質問された内容について「自分の知識だけではわからない」と判断したときに、自動的にVector Storeを検索して情報を探しに行きます。

パターン2:OpenAI Vector StoreでRAGを構築する

もう一つのパターンとして、OpenAIのAssistants APIが提供する Vector Store機能 を使う方法があります。

OpenAI Vector Store (Assistants API) をn8nで使う流れ

現在のn8nの標準OpenAIノードでは、Assistants APIVector Store)は直接サポートされていないとされています。

そのため、OpenAIのVector Store機能を使いたい場合は、HTTP Requestノードを使ってOpenAIのAPIを直接叩く形になります。

ざっくり言うと、以下のようなステップです。

  1. HTTP Request ノードでファイルをアップロード (POST https://api.openai.com/v1/files)
  2. HTTP Request ノードでVector Storeを作成 (POST https://api.openai.com/v1/vector_stores)
  3. HTTP Request ノードでAssistantを作成し、Vector Store IDを紐付ける

ここまでが、OpenAIのVector Storeをそのまま使うパターンです。

一方で、パターン1で触れたように、n8nのVector Storeノード(Pineconeなど)を使えば、似たような構成を自前で組み立てることもできます。
どちらが絶対に正しい、というよりも「既存ノード中心でシンプルに作るか」「HTTP Requestで細かく制御するか」の違いと捉えるのが近そうです。

まとめ

n8nを使うと、複雑なRAGシステムもパズルのようにノードを組み合わせるだけで作れてしまいます。

今回のリサーチを通じて、n8nでのRAG構築は「どのベクトル検索エンジン(Pinecone, OpenAI, Vertex AI Searchなど)を選び、どうAPIで繋ぎこむか」が設計の肝になると感じました。
Pineconeのようなn8n対応のVector Storeを使えば、ノードをつなぐだけで完結しやすく、ワークフロー全体の見通しも良くなります。
一方で、OpenAI Vector Storeのような外部サービスをAPI経由で使うパターンに寄せれば、ローカルでベクトルDBを用意したり、インフラを自前で管理したりせずにRAGを組める、という気楽さもあります。

どこまで自分でコントロールしたいか、どこまで外部サービスに任せたいかに応じて、この2パターンを使い分けていくイメージです。