ホーム / n8n ワークフローテンプレート / OpenAIとQdrantによる自動ドキュメント埋め込みとベクトルストレージ

OpenAIとQdrantによる自動ドキュメント埋め込みとベクトルストレージ

Qdrant Vector Database Embedding Pipeline

このワークフローは、FTP経由でJSONファイルを取得し、ドキュメントに変換し、テキストをチャンクに分割し、OpenAI埋め込みを生成し、セマンティック検索のためにQdrantベクトルデータベースに保存するプロセスを自動化します。

手動9 ノードAI・機械学習AIベクトルデータベースデータ処理

このワークフローについて

Qdrantベクトルデータベース埋め込みパイプライン:包括的な概要

**「Qdrantベクトルデータベース埋め込みパイプライン」**と題されたこのN8nワークフローテンプレートは、OpenAIの埋め込みを使用して、JSONドキュメントを抽出、処理し、ベクトルデータベース(Qdrant)に埋め込むプロセスを自動化します。これは、構造化されていない、または半構造化されたテキストデータを検索可能な高次元ベクトルに変換する必要があるセマンティック検索アプリケーション向けに設計されています。

このパイプラインは、FTP経由のファイル処理、ドキュメント解析、テキストチャンキング、AI駆動の埋め込み生成、およびベクトルストレージを統合しており、これらすべてがn8n自動化プラットフォーム内でオーケストレーションされます。これにより、組織は最小限の手作業で、スケーラブルな検索拡張生成(RAG)システム、ナレッジベース、またはインテリジェント検索エンジンを構築できます。


ワークフローの機能

このワークフローは、エンドツーエンドのデータ取り込みおよびベクトル化パイプラインを実行します。

  1. 指定されたディレクトリ内のすべての.jsonファイルをリストするためにFTPサーバーに接続します。
  2. 各ファイルをバイナリ形式で繰り返しダウンロードします。
  3. JSONコンテンツをLangChain互換のドキュメントオブジェクトに解析します。
  4. 定義された区切り文字("chunk_id")に基づいてテキストコンテンツを小さなチャンクに分割します。
  5. OpenAIのtext-embedding-ada-002モデルを使用して、各テキストチャンクの埋め込みを生成します。
  6. 埋め込まれたチャンク(メタデータを含む)をsv_lang_dataという名前のQdrantベクトルデータベースコレクションに保存します。

ストリーミングおよびバッチ処理メカニズムを活用することで、バッチ処理をサポートし、大規模データセットの効率的な処理を保証します。


主な機能と能力

  • 自動ファイル取り込み: FTPノードを使用してJSONファイルを自動的に検出およびダウンロードします。
  • スケーラブルなバッチ処理: Split In Batchesノードを使用して一度に1つのファイルを処理し、メモリ使用量とAPIレート制限を制御できるようにします。
  • 柔軟なドキュメント解析: Default Data Loaderを使用して、バイナリJSONペイロードを構造化されたLangChainドキュメントに変換します。
  • 設定可能なテキストチャンキング: "chunk_id"を区切り文字として使用した文字ベースの分割を適用し、ソースデータの構造に合わせた論理的なセグメンテーションを可能にします。
  • OpenAI駆動の埋め込み: OpenAI APIと安全に統合し、セマンティック類似性に最適化された1536次元の埋め込みを生成します。
  • Qdrantでのベクトルストレージ: 埋め込まれたドキュメントを事前に設定されたQdrantコレクションにプッシュし、高速な近似最近傍(ANN)検索をサポートします。
  • メタデータの保持: 変換および保存中に元のファイルから関連メタデータを保持します。
  • 視覚的なドキュメント: 各ステージを説明する付箋が含まれており、可読性と保守性を向上させます。

主要なノードとその目的

ノード名 タイプ 目的
「ワークフローをテスト」をクリック 手動トリガー テスト目的でワークフローを手動で開始します。
すべてのファイルをリスト FTPノード(リスト操作) リモートFTPディレクトリOracle/AI/embedding/svenska内のすべてのファイルのリストを取得します。
1つのアイテムをループ Split In Batches リストから一度に1つのファイルエントリを処理し、逐次的な制御された実行を可能にします。
アイテムのダウンロード FTPノード(ダウンロード) 現在のファイル({{ $json.name }}で参照)をバイナリ形式でダウンロードし、binary.dataの下に保存します。
Default Data Loader LangChain Document Loader ダウンロードされたバイナリJSONデータを、後続のNLPタスクに適したLangChain Documentオブジェクトに変換します。
Character Text Splitter LangChain Text Splitter "chunk_id"を区切り文字として長いテキストを小さなチャンクに分割します。埋め込みモデルの入力を準備します。
Embeddings OpenAI LangChain Embeddings Node OpenAI APIを呼び出して、各テキストチャンクのベクトル埋め込みを生成します(text-embedding-ada-002を使用)。
Qdrant Vector Store LangChain Vector Store Node 生成された埋め込みを関連メタデータと共にsv_lang_dataコレクションに挿入します。

加えて:

  • 付箋は、各フェーズを説明するインラインドキュメントを提供します。
  • Qdrant API認証情報(「QdrantApi svenska」)およびOpenAI APIキーは、保存された認証情報を通じて安全に参照されます。
  • FTPアカウントは、リストおよびダウンロード操作のために複数のノードで再利用されます。

ユースケースとメリット

ユースケース

  • エンタープライズナレッジマネジメント: セマンティック検索のために社内ドキュメント、サポートチケット、またはトレーニング資料をインデックス化します。
  • 多言語セマンティック検索: 特にスウェーデン語のデータ(「svenska」から推測)を対象としており、スカンジナビア市場に最適です。
  • データレイク統合: FTPサーバー上のJSON形式でデータを保存しているレガシーシステムからの取り込みを自動化します。
  • RAGパイプライン: コンテキストの接地を必要とするLLMアプリケーションに、処理および埋め込まれたコンテンツを供給します。
  • コンプライアンスおよびアーカイブシステム: 自然言語クエリを使用してアーカイブされたレコードを高速に検索できるようにします。

メリット

  • エンドツーエンドの自動化: データ準備および埋め込みにおける手作業を排除します。
  • 高精度: インテリジェントなチャンキングを通じてコンテキストを保持し、最先端の埋め込みを使用します。
  • 効率的なスケーリング: バッチ処理により過負荷を防ぎ、数百または数千のファイルに最適です。
  • 安全な認証情報管理: すべての機密キー(OpenAI、Qdrant、FTP)は、n8nの暗号化された認証情報システムを通じて管理されます。
  • 拡張可能な設計: 他の言語、埋め込みモデル、または代替ベクトルデータベース(例:Pinecone、Weaviate)に合わせて簡単に変更できます。

ステップバイステップのワークフローロジック

  1. トリガー実行

    • ユーザーが「ワークフローをテスト」をクリックすると(手動トリガー)、ワークフローが開始されます。
    • すべてのファイルをリストノードに制御が渡されます。
  2. FTPからのファイルリスト取得

    • FTPノードがサーバーに接続し、/Oracle/AI/embedding/svenska内のすべてのファイルをリストします。
    • ファイルエントリ(名前、サイズ、日付など)の配列を出力します。
  3. ファイルを1つずつ反復処理

    • Split In Batchesノードが、反復ごとに1つのファイルを処理します。
    • 安定性を確保し、下流のサービスへの過負荷を防ぎます。
  4. 現在のファイルのダウンロード

    • 別のFTPノードが、動的パスを使用して選択されたファイルをダウンロードします。
      =Oracle/AI/embedding/svenska/{{ $json.name }}
    • ファイルをバイナリデータとしてbinary.dataに保存します。
  5. バイナリJSONをドキュメントに解析

    • Default Data LoaderがバイナリJSONを読み取り、LangChain Documentオブジェクトに変換します。
    • 各ドキュメントにはpageContent(テキスト)とmetadataが含まれます。
  6. テキストをチャンクに分割

    • Character Text Splitterが、"chunk_id"が現れるたびにドキュメントテキストを分割します。
    • セマンティック境界(例:セクションごとまたはレコードごとの分割)が尊重されることを保証します。
    • 一様なベクトル化のためにオプションですが推奨されます。
  7. 埋め込みの生成

    • Embeddings OpenAIノードが、各テキストチャンクをOpenAIのAPIに送信します。
    • テキストの意味を表す1536次元ベクトルを返します。
  8. Qdrantにベクトルを保存

    • Qdrant Vector Storeノードが、埋め込みと元のドキュメントの両方を受け取ります。
    • それらをsv_lang_dataコレクションに挿入します。
    • 最適なパフォーマンスのためにバッチサイズ100を使用します。
    • Qdrantコレクションが次のように事前作成されていることを前提としています。
      {
        "vectors": {
          "size": 1536,
          "distance": "Cosine"
        }
      }
      
  9. 完了まで繰り返す

    • すべてのファイルが処理されるまでループが続行されます。
    • 最終出力は、すべてのドキュメントのインデックス作成が成功したことを確認します。

このワークフローは、n8nがコードを書かずに複雑なAI/データパイプラインをどのようにオーケストレーションできるかを示す例であり、ファイル操作、言語モデル、およびベクトルデータベースを堅牢で本番環境に対応したソリューションに組み合わせています。

使い方:JSON をダウンロードし、n8n で「ファイルからインポート」を選択します。