AIアプリのためのベクターデータベース:Pinecone vs pgvector vs Weaviate

Dev.to / 2026/4/7

💬 オピニオンDeveloper Stack & InfrastructureTools & Practical Usage

要点

  • ベクターデータベースは、高次元空間における埋め込みベクトル同士の距離比較によって類似したアイテムを見つけることで、セマンティック検索とリトリーバルを可能にします。
  • pgvectorは、すでにPostgreSQLを使っているチームにとって最もわかりやすい選択肢であり、埋め込みをPostgresに保存でき、ivfflatやcosine演算子のようなベクターインデックスで高速化できます。
  • Pineconeは、目的に特化したマネージド型ベクターデータベースとして位置づけられており、大規模なデータベース/インデックスの設計・エンジニアリングを行わずに類似検索をデプロイしやすくします。
  • Weaviateも、専用のベクターデータベースの選択肢であり、ベクター検索および関連機能のための専門的なインフラストラクチャ層が欲しい場合、AIアプリのワークロードに強く適合する可能性があります。
  • この記事の実践的な指針は、既存のスタックと運用ニーズに基づいて選ぶことです:Postgres中心のセットアップにはpgvector、目的に特化した、またはマネージドなベクターインフラにはPinecone/Weaviateを選びます。

AIアプリのためのベクターデータベース:Pinecone vs pgvector vs Weaviate

セマンティック検索、RAGパイプライン、レコメンデーションシステムはすべてベクターストレージを必要とします。
主要な選択肢の比較と、それぞれを使うべきタイミングをまとめました。

ベクターデータベースとは?

厳密一致の代わりに、ベクターデータベースは高次元空間での
埋め込みベクトル間の距離を測ることで、似たアイテムを見つけます。

Query: '認証はどう扱えばいい?'
Embedding: [0.23, -0.41, 0.87, ...] (1536次元)

Nearest neighbors:
  - '認証セットアップガイド'(距離:0.12)
  - 'JWTトークン管理'(距離:0.18)
  - 'OAuth2の実装'(距離:0.21)

オプション1:pgvector(PostgreSQL拡張)

すでにPostgreSQLを使っているなら、最も簡単な道です:

-- 拡張を有効化
CREATE EXTENSION vector;

-- 埋め込みをデータと一緒に保存する
ALTER TABLE documents ADD COLUMN embedding vector(1536);

-- 高速な類似検索用のインデックスを作成
CREATE INDEX documents_embedding_idx
ON documents USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);
import OpenAI from 'openai'
import { db } from '@/lib/db'  // Prismaまたはpgクライアント

const openai = new OpenAI()

async function searchDocuments(query: string, limit = 5) {
  // クエリの埋め込みを生成
  const { data } = await openai.embeddings.create({
    model: 'text-embedding-3-small',
    input: query,
  })
  const queryEmbedding = data[0].embedding

  // 類似ドキュメントを探す
  const results = await db.$queryRaw`
    SELECT id, title, content,
           1 - (embedding <=> ${queryEmbedding}::vector) AS similarity
    FROM documents
    ORDER BY embedding <=> ${queryEmbedding}::vector
    LIMIT ${limit}
  `

  return results
}

最適: すでにPostgreSQL上にあるアプリ、小規模データセット(<1Mベクトル)、緊密な予算。

オプション2:Pinecone(マネージド・スケーラブル)

npm install @pinecone-database/pinecone
import { Pinecone } from '@pinecone-database/pinecone'

const pc = new Pinecone({ apiKey: process.env.PINECONE_API_KEY! })
const index = pc.index('my-index')

// ベクトルをアップサート
await index.upsert([
  {
    id: 'doc-1',
    values: embedding,  // float[]
    metadata: { title: 'Auth Guide', source: 'docs' },
  },
])

返却形式: {"translated": "翻訳されたHTML"}// 類似するベクトルをクエリする
const results = await index.query({
  vector: queryEmbedding,
  topK: 5,
  includeMetadata: true,
  filter: { source: { $eq: 'docs' } },  // メタデータのフィルタリング
})

const docs = results.matches.map(m => ({
  id: m.id,
  score: m.score,
  ...m.metadata,
})) 

おすすめ: 本番環境のAIアプリ、1M以上のベクトル、管理されたスケーリングが必要な場合。

RAGパイプラインを構築する

async function ragAnswer(question: string): Promise<string> {
  // 1. 質問を埋め込む
  const { data } = await openai.embeddings.create({
    model: 'text-embedding-3-small',
    input: question,
  })

  // 2. 関連するチャンクを取得する
  const relevant = await searchDocuments(data[0].embedding, 3)

  // 3. コンテキストを構築する
  const context = relevant
    .map(doc => `[${doc.title}]
${doc.content}`)
    .join('

')

  // 4. コンテキストを使って回答を生成する
  const completion = await openai.chat.completions.create({
    model: 'gpt-4o-mini',
    messages: [
      {
        role: 'system',
        content: `このコンテキストに基づいて回答してください:

${context}`,
      },
      { role: 'user', content: question },
    ],
  })

  return completion.choices[0].message.content!
}

チャンク分割戦略

function chunkDocument(text: string, chunkSize = 500, overlap = 50): string[] {
  const words = text.split(' ')
  const chunks: string[] = []

返却形式: {"translated": "翻訳されたHTML"}for (let i = 0; i < words.length; i += chunkSize - overlap) {
    chunks.push(words.slice(i, i + chunkSize).join(' '))
    if (i + chunkSize >= words.length) break
  }

  return chunks
}

比較

機能 pgvector Pinecone Weaviate
セットアップ 簡単(既存のPG) 簡単(マネージド) 中程度
スケール <1Mベクター 無制限 無制限
コスト 無料 無料枠 + 有料 セルフホストまたはマネージド
メタデータフィルター SQL 組み込み GraphQL
ハイブリッド検索 限定的 あり あり

SaaSにAI機能を組み込みますか? AI SaaS Starter Kit には、ストリーミング対応で事前設定された Claude/OpenAI API のルートが含まれています。お好みのベクターデータベースを追加してください。$99 の一回限り。

返却形式: {"translated": "翻訳されたHTML"}

AIアプリのためのベクターデータベース:Pinecone vs pgvector vs Weaviate | AI Navigate