三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

[智能体-288]:向量数据库查询返回的是词还是向量?

[智能体-288]:向量数据库查询返回的是词还是向量?

一、核心结论

向量数据库 ANN 相似度检索底层只返回:数据 ID + 相似度分值,既不返回词语、也不默认返回向量。词语(原文)、向量都是附加字段,需要手动配置参数才会附带返回

  • ID:用来关联原始文本(词语);
  • Score:余弦 / L2 相似度;
  • metadata(元数据):存词语、分类等文本信息,勾选才返回;
  • embedding(向量):存储的浮点数组,勾选才返回。

工程标准拆分:

向量库存 ID + 向量 + 标签;

MySQL 存放词语 / 正文,检索拿到 ID 后去 MySQL 查文字

二、数据准备(沿用水果词向量示例)

入库结构(Chroma)

表格

主键 iddocument (词语)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"])

三、工业生产真实架构(最常考)

架构拆分

  1. MySQL(关系库):id | word | price | type|id|word|type| |----|----|----| |1 | 苹果 | 水果 | |2 | 香蕉 | 水果 |

  2. 向量数据库:id | embedding|id | 向量 | |----|----| |1|[0.61,0.22,-0.55]| |2|[0.58,0.25,-0.52]|

检索全流程

  1. 用户提问 → 生成提问词向量;
  2. 向量库查询 → 得到 [1,2] 两个 id + 相似度
  3. select word from fruit where id in (1,2)去 MySQL 查出:苹果、香蕉;

向量库永远不存原始词语,只存 ID 和向量,靠 ID 取文字。

四、精简背诵总结

  1. 原生检索结果:ID + 相似度,既无词也无向量;
  2. 要词语:入库存 document/metadata,查询配置开启返回文档;
  3. 要向量:查询参数开启 embedding 字段返回;
  4. 企业规范:文字存 MySQL,向量存向量库,ID 做关联。
← 返回列表