向量数据库基础

Alexer 发布于 阅读:12 AI栈

向量数据库就是存向量、按相似度找最近的库。文本、图片先被模型转成一串数字,也就是向量;意思相近,向量距离就小。检索时,把问题也转成向量,再去比距离,取最接近的几条。

使用分三步:资料切块,用同一个 embedding 模型把每块转成向量存进去;查询时把问题转成向量;调相似度查询接口,拿回最接近的若干条原文。

最小示例,Python 加 Chroma 内存模式,直接照着跑:

import chromadb

client = chromadb.Client()                 # 内存模式,进程退出即清空
col = client.create_collection("docs")

col.add(
    ids=["1", "2", "3"],
    documents=["怎么申请退款", "发票怎么开", "账号被锁了怎么办"],
    embeddings=[[0.1, 0.2, 0.3], [0.9, 0.1, 0.0], [0.1, 0.9, 0.2]],  # 实际由模型生成
)

res = col.query(query_embeddings=[[0.1, 0.2, 0.31]], n_results=1)
print(res["documents"])   # 打印最相似的那条原文

跑完能看到“怎么申请退款”被返回。这里手写向量,是为了让你看清结构;真实场景的向量由模型算出来。

坑一:建库和查询必须用同一个 embedding 模型。中途换模型,向量空间对不上,召回结果就全乱了,只能重建索引。坑二:只存向量不存原文和元数据,召回后拿不到内容,没法拼进上下文;切块也不要太大,几百字一段,太长会把多个主题混在一起,相似度被稀释。

AI 开发 调试工具 RAG