~/VibeHandbook
$39

数据库

github.com

Vector Databases

是什么

向量数据库存储高维向量(embedding),这些向量表征文本、图像或其他数据的含义,并能找出与查询向量最相似的条目。它不是匹配精确关键词,而是用余弦相似度等距离度量按语义接近程度对结果排序。它们为 AI 应用驱动语义搜索、推荐和检索增强生成(RAG)。

优势

  • 通过 ANN 索引,在数百万个 embedding 上进行快速相似度搜索。
  • 实现理解含义而非仅匹配关键词的语义搜索和 RAG。
  • 选择众多:pgvector、Pinecone、Qdrant、Weaviate、Milvus、Chroma。
  • 元数据过滤把语义搜索与结构化约束结合起来。
  • 借助近似最近邻算法,可扩展到大型语料库。

权衡取舍

  • 结果是近似的;调优需要在召回率和速度之间权衡。
  • embedding 质量完全取决于生成这些向量的模型。
  • 如果更换模型,就需要对整个语料库重新做 embedding。
  • 存储和内存随维度数量和数据集规模而增长。

何时使用

将向量数据库用于语义搜索、文档问答、推荐、去重,以及把相关上下文喂给 LLM 的 RAG 流水线。对于适中的规模,pgvector 扩展让你把向量与关系型数据一起保存在 PostgreSQL 中。

与 vibe coding 的契合度

指挥 AI 时,要明确三件事:你使用哪个 embedding 模型(好让向量维度与索引匹配)、距离度量(文本通常用余弦),以及你在 embedding 之前如何对源文档分块。要求 AI 在每个向量旁存储有用的元数据,以便你做过滤(例如按 user_iddoc_type),并让 embedding 代码和查询代码使用同一个模型。一个好建议:让 AI 构建一个 RAG 检索步骤,返回 top-k 个分块及其来源 id,这样答案才可追溯,你也能验证模型实际使用了哪些上下文。

-- 带 pgvector 扩展的 PostgreSQL
CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE documents (
  id        BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  content   TEXT NOT NULL,
  doc_type  TEXT,
  embedding VECTOR(1536)            -- 必须与你的 embedding 模型匹配
);

-- 用于余弦距离的近似最近邻索引
CREATE INDEX ON documents
  USING hnsw (embedding vector_cosine_ops);

-- 与查询 embedding($1)最相似的前 5 个分块
SELECT id, content
FROM documents
WHERE doc_type = 'manual'
ORDER BY embedding <=> $1
LIMIT 5;