INNER 05 / RAG / 03 · ENGINE v1
语义检索引擎构建(Module 2: SemanticSeek)
本关练习:构建带元数据预过滤的本地 Chroma/Qdrant 语义检索管道。
30 SECONDS / 30 秒看懂
这一关只解决一件事:在 StepByStep-RAG 的第二模块 SemanticSeek 与 AI Infra Engineer Learning (Mod 110) 中,传统的 Ctrl+F 或关键词搜索在面对“用戶问:电脑连不上公司内网怎么办”而知识库原文写的是“企业 VPN 客戶端认证失败排查指南”时,会因为字面词汇零重合而完全搜不到结果。语义检索(Semantic Search)通过将文本块编码为稠密向量并存入向量数据库(如 Chroma、Qdrant、Weaviate),同时绑定结构化元数据过滤条件(Metadata Filtering,如 department == "IT" 且 year >= 2025),实现“既懂弦外之音、又守精确边界” 的高效检索。
- 设计文档入库(Upsert)时的三维结构:id、document_text、embedding 与 metadata(含版本号、生效状态 is_active、适用部门)(
- 5 分);
- 编写检索查询逻辑,在计算向量相似度前先通过 where={"is_active": True} 过滤掉历史废止文档;
3 MINUTES / 3 分钟拆解
先看来源里的例子:PDF 本关任务(来源)
知识库里同时存有 2023 年(已废止)和 2026 年(现行有效)的差旅报销标准,单纯靠向量相似度检索经常把 2023 年的旧住宿标准排在第一名。
发生了什么
来源要求:设计文档入库(Upsert)时的三维结构:id、document_text、embedding 与 metadata(含版本号、生效状态 is_active、适用部门)( / 5 分); / 编写检索查询逻辑,在计算向量相似度前先通过 where={"is_active": True} 过滤掉历史废止文档;
输出
参考答案:参考答案:带元数据过滤的 Chroma/Qdrant 向量入库与检索 # 1. 结构化入库结构(绑定版本与生效状态元数据) collection.upsert( ids=["policy_2026_chunk_01", "policy_2023_chunk_01"], embeddings=[embed_model.encode(text_2026), embed_model.encode(text_2023)], documents=
术语拆开
- 元数据
- 描述文档版本、部门、状态等信息。
- Upsert
- 插入或更新文档记录。
为什么有效
来源核心原理:在 StepByStep-RAG 的第二模块 SemanticSeek 与 AI Infra Engineer Learning (Mod 110) 中,传统的 Ctrl+F 或关键词搜索在面对“用戶问:电脑连不上公司内网怎么办”而知识库原文写的是“企业 VPN 客戶端认证失败排查指南”时,会因为字面词汇零重合而完全搜不到结果。语义检索(Semantic Search)通过将文本块编码为稠密向量并存入向量数据库(如 Chroma、Qdrant、Weaviate),同时绑定结构化元数据过滤条件(Metadata Filtering,如 department == "IT" 且 year >= 2025),实现“既懂弦外之音、又守精确边界” 的高效检索。
结构长什么样
设计文档入库(Upsert)时的三维结构:id、document_text、embedding 与 metadata(含版本号、生效状态 is_active、适用部门)(
5 分);
编写检索查询逻辑,在计算向量相似度前先通过 where={"is_active": True} 过滤掉历史废止文档;
说明为什么查询向量(Query Embedding)与文档入库向量必须使用完全相同的 Embedding 模型与归一化方式。为什么过滤要发生在相似度计算之前?
SOURCE READING / 来源精读
在 StepByStep-RAG 的第二模块 SemanticSeek 与 AI Infra Engineer Learning (Mod 110) 中,传统的 Ctrl+F 或关键词搜索在面对“用戶问:电脑连不上公司内网怎么办”而知识库原文写的是“企业 VPN 客戶端认证失败排查指南”时,会因为字面词汇零重合而完全搜不到结果。语义检索(Semantic Search)通过将文本块编码为稠密向量并存入向量数据库(如 Chroma、Qdrant、Weaviate),同时绑定结构化元数据过滤条件(Metadata Filtering,如 department == "IT" 且 year >= 2025),实现“既懂弦外之音、又守精确边界” 的高效检索。
逐点读懂
- 设计文档入库(Upsert)时的三维结构:id、document_text、embedding 与 metadata(含版本号、生效状态 is_active、适用部门)(
- 5 分);
- 编写检索查询逻辑,在计算向量相似度前先通过 where={"is_active": True} 过滤掉历史废止文档;
怎么对应本关练习
先读 30 秒与 3 分钟拆解,再读本关原文与实验,最后做客观题和实操题;答案在下方。
例子在哪
本关任务与参考答案见页面下方;来源为本册 PDF 对应关卡。
本关先记住:设计文档入库(Upsert)时的三维结构:id、document_text、embedding 与 metadata(含版本号、生效状态 is_active、适用部门)(
核心原理
在 StepByStep-RAG 的第二模块 SemanticSeek 与 AI Infra Engineer Learning (Mod 110) 中,传统的 Ctrl+F 或关键词搜索在面对“用戶问:电脑连不上公司内网怎么办”而知识库原文写的是“企业 VPN 客戶端认证失败排查指南”时,会因为字面词汇零重合而完全搜不到结果。
语义检索(Semantic Search)通过将文本块编码为稠密向量并存入向量数据库(如 Chroma、Qdrant、Weaviate),同时绑定结构化元数据过滤条件(Metadata Filtering,如 department == "IT" 且 year >= 2025),实现“既懂弦外之音、又守精确边界” 的高效检索。
第 3 关实操练习题:构建带元数据预过滤的本地 Chroma/Qdrant 语义检索管道
任务背景
知识库里同时存有 2023 年(已废止)和 2026 年(现行有效)的差旅报销标准,单纯靠向量相似度检索经常把 2023 年的旧住宿标准排在第一名。
通关硬性要求(满分 12.5 分)
1. 设计文档入库(Upsert)时的三维结构:id、document_text、embedding 与 metadata(含版本号、生效状态 is_active、适用部门)(
4.5 分);
2. 编写检索查询逻辑,在计算向量相似度前先通过 where={"is_active": True} 过滤掉历史废止文档(5 分);
3. 说明为什么查询向量(Query Embedding)与文档入库向量必须使用完全相同的 Embedding 模型与归一化方式(3 分)。
PRACTICE / 本关练习 · 本地规则 + 覆盖检查
构建带元数据预过滤的本地 Chroma/Qdrant 语义检索管道
本地检查在你的浏览器里完成,不上传。覆盖检查需要先登录(免费注册),并把这段答案发送到服务器计算一次,算完即弃、不存档,需你点同意;只核对本关评分项覆盖的方向,不在评分项里的题目不会被检查。
评分项
结构分 — / 12.5 分
查看参考答案与得分点 先自己写,再打开+
参考答案与得分要点
参考答案:带元数据过滤的 Chroma/Qdrant 向量入库与检索 # 1. 结构化入库结构(绑定版本与生效状态元数据) collection.upsert( ids=["policy_2026_chunk_01", "policy_2023_chunk_01"], embeddings=[embed_model.encode(text_2026), embed_model.encode(text_2023)], documents=[text_2026, text_2023], metadatas=[ {"doc_name": "差旅制度", "effective_year": 2026, "is_active": True, "dept": "ALL"}, {"doc_name": "差旅制度", "effective_year": 2023, "is_active": False, "dept": "ALL"} ] ) # 2. 检索时强制前置过滤 is_active == True,彻底屏蔽废止旧制度 results = collection.query( query_embeddings=[embed_model.encode("一线城市出差住宿报销上限是多少?")], n_results=3, where={"$and": [{"is_active": {"$eq": True}}, {"effective_year": {"$gte": 2026}}]} ) 得分要点拆解:完整定义四维入库结构与 `is_active` 元数据(4.5 分);使用 `where` 过滤器在向量比对前剔除失效旧文档(5 分);说明不同 Embedding 模型向量空间正交不可混用、必须保持同一模型与归一化标准 (3 分)。 第 4 关
网页永久免费。完整 PDF 会按顺序发给留邮箱的读者,不转售、不群发广告。
留邮箱,获取完整 PDF ↗