サイトのAPI図鑑B版
掲載情報が正確でない可能性があります。
AI・機械学習API

ベクターデータベースAPIとRAGシステムの構築ガイド【Pinecone・Weaviate・Qdrant】

RAG(Retrieval-Augmented Generation)システムで使うベクターデータベースAPI(Pinecone・Weaviate・Qdrant・Supabase pgvector)の比較と実装方法を解説します。

#ベクターDB#RAG#Pinecone#Embeddings

ベクターデータベースとRAGの概要

RAG(Retrieval-Augmented Generation)は、LLMに独自のドキュメント・データを参照させるアーキテクチャです。社内規定・製品マニュアル・FAQなどのカスタムデータをLLMの知識ベースとして活用できます。ベクターデータベースはRAGシステムの核心をなすコンポーネントで、テキストのベクトル表現を保存し高速に類似検索を行います。

RAGシステムの基本構成

  1. インデックス化:ドキュメントをチャンク(段落・文)に分割
  2. Embedding生成:各チャンクをEmbeddings APIでベクトルに変換
  3. ベクターDB保存:ベクトルとメタデータをベクターDBに保存
  4. 検索:ユーザーの質問をベクトル化し、類似のチャンクを検索
  5. LLMに渡す:関連チャンクをコンテキストとしてLLMに渡し回答生成

主要ベクターDBの比較

Pinecone

  • タイプ:フルマネージドSaaS
  • 無料枠:100万ベクトルまで
  • 特徴:セットアップが簡単・高い可用性・メタデータフィルタリング
  • 向いているケース:素早くRAGを構築したい場合

Weaviate

  • タイプ:オープンソース(セルフホスト可)/ クラウド
  • 特徴:グラフ構造・複雑なフィルタリング・Module対応(Cohere・OpenAI連携)

Qdrant

  • タイプ:オープンソース / クラウド
  • 特徴:高パフォーマンス・Rust実装・スパースベクター対応

pgvector(Postgres拡張)

  • 特徴:既存Postgresデータベースで利用可能・SQLで検索
  • 向いているケース:既にPostgresを使っていて小〜中規模のベクター検索が必要な場合

RAGシステムの実装例(OpenAI + Pinecone)

import OpenAI from 'openai';
import { Pinecone } from '@pinecone-database/pinecone';

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const pinecone = new Pinecone({ apiKey: process.env.PINECONE_API_KEY });
const index = pinecone.index('my-rag-index');

// 1. ドキュメントをEmbeddingしてPineconeに保存
const embedDoc = async (text, id) => {
  const embedding = await openai.embeddings.create({
    model: 'text-embedding-3-small',
    input: text,
  });
  await index.upsert([{
    id,
    values: embedding.data[0].embedding,
    metadata: { text }
  }]);
};

// 2. ユーザーの質問に関連するドキュメントを検索
const searchDocs = async (query) => {
  const queryEmbedding = await openai.embeddings.create({
    model: 'text-embedding-3-small',
    input: query
  });
  const results = await index.query({
    vector: queryEmbedding.data[0].embedding,
    topK: 5,
    includeMetadata: true
  });
  return results.matches.map(m => m.metadata.text);
};

// 3. 関連ドキュメントをコンテキストにGPTで回答
const ragQuery = async (question) => {
  const contexts = await searchDocs(question);
  const response = await openai.chat.completions.create({
    model: 'gpt-4o-mini',
    messages: [
      { role: 'system', content: `以下のコンテキストを参考に回答してください:

${contexts.join('

')}` },
      { role: 'user', content: question }
    ]
  });
  return response.choices[0].message.content;
};

まとめ

ベクターデータベースとRAGシステムは、LLMを自社のドキュメント・データに特化させるための重要な技術です。Pineconeは素早く始められるSaaSとして最初の選択肢になりやすく、セルフホストならWeaviateやQdrantが有力です。既にPostgresを使っているシステムではpgvectorが低コストで始められます。社内FAQ・製品サポート・知識ベース検索など多くのビジネス課題に応用できます。

よくある質問

Q.ベクターデータベースと通常のデータベースの違いは?

通常のDBは完全一致・範囲検索に優れていますが、意味的な類似性検索は苦手です。ベクターDBはテキスト・画像等をベクトル(数値の配列)として保存し、コサイン類似度・ユークリッド距離などで意味的に近いデータを高速検索できます。RAGシステム・類似商品検索・推薦システムに欠かせません。

Q.Pineconeの無料枠はどのくらいですか?

Pineconeの無料スターターは1プロジェクト・1インデックス・最大100万ベクトル(1536次元)まで利用できます。開発・小規模なRAGシステムには十分な場合が多いです。

Q.pgvector(Postgres)でベクター検索はできますか?

はい。PostgreSQLの拡張機能pgvectorを使うと、既存のPostgresデータベースでベクター検索が可能になります。Supabase・Neon・AWS RDS等のマネージドPostgresでも利用できます。専用ベクターDBほどのスケーラビリティはありませんが、小〜中規模には十分です。

関連記事