[智能体-288]:向量数据库查询返回的是词还是向量?
一、核心结论
向量数据库 ANN 相似度检索底层只返回:数据 ID + 相似度分值,既不返回词语、也不默认返回向量。词语(原文)、向量都是附加字段,需要手动配置参数才会附带返回。
- ID:用来关联原始文本(词语);
- Score:余弦 / L2 相似度;
- metadata(元数据):存词语、分类等文本信息,勾选才返回;
- embedding(向量):存储的浮点数组,勾选才返回。
工程标准拆分:
向量库存 ID + 向量 + 标签;
MySQL 存放词语 / 正文,检索拿到 ID 后去 MySQL 查文字。
二、数据准备(沿用水果词向量示例)
入库结构(Chroma)
表格
| 主键 id | document (词语) | metadata 分类 | embedding (3 维词向量) |
|---|---|---|---|
| 1 | 苹果 | {"type":"水果"} | [0.61,0.22,-0.55] |
| 2 | 香蕉 | {"type":"水果"} | [0.58,0.25,-0.52] |
| 3 | 汽车 | {"type":"交通工具"} | [-0.62,0.28,0.35] |
python
运行
import chromadb client = chromadb.PersistentClient("./vec_test") coll = client.get_or_create_collection("fruit") # 写入数据 ids = ["1","2","3"] docs = ["苹果","香蕉","汽车"] metas = [{"type":"水果"},{"type":"水果"},{"type":"交通工具"}] embs = [ [0.61,0.22,-0.55], [0.58,0.25,-0.52], [-0.62,0.28,0.35] ] coll.add(ids=ids, documents=docs, metadatas=metas, embeddings=embs) # 查询向量:苹果向量 q_vec = [[0.61,0.22,-0.55]]场景 1:只查 ID + 相似度(include=[],默认底层结果)
python
运行
res1 = coll.query(query_embeddings=q_vec, n_results=2, include=[]) print(res1) # 输出:{'ids': [['1', '2']], 'distances': [[0.0, 0.0018]]}✅ 返回:ID、距离(相似度) ❌没有词语【苹果、香蕉】,没有向量数组
场景 2:附带返回词语(include=["documents"])
python
运行
res2 = coll.query(query_embeddings=q_vec, n_results=2, include=["documents"]) print(res2["documents"]) # [['苹果', '香蕉']]开启 documents,才会把入库时保存的词语拿出来。
场景 3:附带返回存储的原始向量(include=["embeddings"])
python
运行
res3 = coll.query(query_embeddings=q_vec, n_results=2, include=["embeddings"]) print(res3["embeddings"]) # [[[0.61,0.22,-0.55],[0.58,0.25,-0.52]]]单独配置 embeddings,才返回数据库里保存的词向量。
场景 4:全部返回(ID + 分数 + 词语 + 向量 + 标签)
python
运行
res4 = coll.query(query_embeddings=q_vec,n_results=2, include=["documents","embeddings","metadatas"])三、工业生产真实架构(最常考)
架构拆分
MySQL(关系库):id | word | price | type|id|word|type| |----|----|----| |1 | 苹果 | 水果 | |2 | 香蕉 | 水果 |
向量数据库:id | embedding|id | 向量 | |----|----| |1|[0.61,0.22,-0.55]| |2|[0.58,0.25,-0.52]|
检索全流程
- 用户提问 → 生成提问词向量;
- 向量库查询 → 得到 [1,2] 两个 id + 相似度;
select word from fruit where id in (1,2)去 MySQL 查出:苹果、香蕉;
向量库永远不存原始词语,只存 ID 和向量,靠 ID 取文字。
四、精简背诵总结
- 原生检索结果:ID + 相似度,既无词也无向量;
- 要词语:入库存 document/metadata,查询配置开启返回文档;
- 要向量:查询参数开启 embedding 字段返回;
- 企业规范:文字存 MySQL,向量存向量库,ID 做关联。
