30秒快速回答: 向量数据库不同于传统数据库用精确匹配查询数据,它通过「语义距离」找到最相似的内容。比如你问「苹果最近有什么新产品」,传统数据库只能找到包含这几个字的记录,向量数据库能找到关于「iPhone」「MacBook」等语义相关的内容——即使它们没有出现「苹果」二字。Pinecone、Milvus、Chroma、Weaviate 是 2026 年最主流的向量数据库。


为什么需要向量数据库?

传统数据库擅长精确查询,但在”模糊理解”上很弱:

传统数据库(MySQL/PostgreSQL) 向量数据库(Pinecone/Milvus)
WHERE title LIKE '%苹果%' 搜”苹果”也能找到 iPhone/MacBook
精确匹配关键词 语义相似度匹配
适合结构化数据 适合非结构化数据(文本/图片/音频)
不能直接支持 AI 专为 AI 应用设计

核心场景

  • RAG 问答系统: 在知识库中检索与用户问题最相关的内容
  • 语义搜索: 用户输入自然语言,找到意思相近的文档
  • 推荐系统: 找到与用户偏好”最相似”的内容
  • 图片检索: 用文字描述找最匹配的图片
  • 异常检测: 找到与正常模式”最不同”的数据点

向量数据库的工作原理

第一步:文本转向量(Embedding)

文本「北京的秋天很美」
    ↓  Embedding 模型(如 text-embedding-3-small)
向量 [0.023, -0.451, 0.789, ..., -0.112]  # 通常是 768 或 1536 维

Embedding 模型将文本映射到高维空间中的一个点。语义相似的文本在空间中距离更近。

第二步:近似最近邻搜索(ANN)

向量数据库的核心是高效找到”最近的邻居”。对于百万级向量,精确搜索太慢,所以使用近似算法:

算法 速度 精度 代表实现
HNSW 极快 高 (>95%) Milvus、Weaviate
IVF 中高 Faiss
PQ(乘积量化) 最快 Faiss
暴力搜索 100% 小规模场景

完整流程

┌─────────────────────────────────────────────┐
│  离线索引阶段                                 │
│                                              │
│  文档/图片/数据                               │
│      ↓  Embedding 模型                       │
│  向量数组                                     │
│      ↓  存入向量数据库 + 原始数据关联          │
│  索引文件 + 元数据                            │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│  在线查询阶段                                 │
│                                              │
│  用户问题                                     │
│      ↓  Embedding 模型(同一个)              │
│  查询向量                                     │
│      ↓  ANN 搜索(取 Top-K)                  │
│  最相似的 K 个向量                            │
│      ↓  返回对应的原始文本/图片/数据           │
│  最终结果                                     │
└─────────────────────────────────────────────┘

实战:用 Chroma 搭建本地向量搜索

# 安装: pip install chromadb sentence-transformers

import chromadb
from sentence_transformers import SentenceTransformer

# 1. 初始化
client = chromadb.PersistentClient(path="./my_knowledge_base")
embedder = SentenceTransformer("shibing624/text2vec-base-chinese")

# 2. 创建集合
collection = client.get_or_create_collection(
    name="company_docs",
    metadata={"description": "公司内部文档知识库"}
)

# 3. 添加文档
documents = [
    "2026年Q3营收目标为5000万元,同比增长30%。",
    "公司年假政策:入职满1年享有5天,满3年享有10天。",
    "弹性工作制:核心工作时间10:00-16:00,其余时间自由安排。",
    "健康保险覆盖员工及其直系亲属,入职当日生效。",
    "绩效奖金每季度发放,与个人OKR完成度挂钩。",
]

# 生成向量并批量插入
embeddings = embedder.encode(documents).tolist()
collection.add(
    documents=documents,
    embeddings=embeddings,
    ids=[f"doc_{i}" for i in range(len(documents))]
)

# 4. 语义搜索
query = "放假能休几天?"
query_embedding = embedder.encode([query]).tolist()

results = collection.query(
    query_embeddings=query_embedding,
    n_results=2  # 返回 Top-2
)

print("用户问题:", query)
print("最相关结果:")
for doc, score in zip(results["documents"][0], results["distances"][0]):
    print(f"  [{score:.2f}] {doc}")

# 输出:
# 用户问题: 放假能休几天?
# 最相关结果:
#   [0.32] 公司年假政策:入职满1年享有5天,满3年享有10天。
#   [0.45] 弹性工作制:核心工作时间10:00-16:00,其余时间自由安排。

注意:向量数据库找到的是”年假政策”而不是”放假”——这就是语义搜索的力量。


2026 年主流向量数据库对比

产品 类型 特点 适合场景
Pinecone 云托管 零运维、毫秒级延迟、Serverless 生产环境、不想管基础设施
Milvus 开源 十亿级向量、分布式架构 超大规模、自建集群
Chroma 开源 轻量级、Python-native、本地运行 开发原型、小项目
Weaviate 开源 GraphQL 接口、混合搜索 需要向量+关键词混合搜索
Qdrant 开源 Rust 编写、高性能 性能敏感场景
pgvector PostgreSQL 扩展 无需额外数据库 已有 PostgreSQL 的项目
Elasticsearch 全文搜索+向量 混合搜索(BM25+向量) 企业搜索平台

选择建议

个人学习 / 原型开发  →  Chroma(最简单)
小团队 / 创业公司    →  Pinecone Serverless(省心)
企业自建 / 敏感数据  →  Milvus(可控性强)
已有 PostgreSQL      →  pgvector(零额外成本)
需要关键词+语义混合   →  Elasticsearch 或 Weaviate

常见问题

Q: 向量数据库和传统数据库能一起用吗?

当然。实际项目中通常是——PostgreSQL 存业务数据 + 向量数据库(或 pgvector)存向量。查询时先搜向量找到 ID,再回 PostgreSQL 取完整数据。

Q: 向量数据库需要多少数据才能有效果?

即使只有 100 条文档,向量数据库也比关键词搜索更准确。但数据量越大,优势越明显——当数据量达到数万条时,关键词搜索几乎不可用,向量搜索依然精准。

Q: Embedding 模型怎么选?

中文场景推荐:text2vec-base-chinese(本地免费)、text-embedding-3-small(OpenAI,付费但效果好)、bge-large-zh(开源中文最优之一)。英文场景:text-embedding-3-smallall-MiniLM-L6-v2(免费)。


下一步建议: 用 Chroma 搭一个你自己的本地知识库搜索系统,体验从”关键词搜不到”到”语义秒找”的飞跃。