语义搜索

知识库简介

语义搜索的输入不是“一个字符串”,而是带身份、时间和业务条件的信息需求;输出不是最终答案,而是一组可追溯、已授权、足够高召回的证据候选。完整的第一阶段检索通常组合:

  • 关键词/BM25 等词面信号;
  • Embedding 产生的稠密向量信号;
  • 可选的学习式稀疏表示;
  • tenant、ACL、状态、语言、产品和有效期等硬过滤;
  • RRF 或经校准的分数融合;
  • query—document relevance judgment 与离线/在线评测。

语义搜索不等于向量相似度:错误码、型号、数字、否定和专名常需要词面通道;“语义相似”也不等于“回答了问题”。检索系统必须能解释每个候选来自哪一路、满足什么权限、使用哪个表示版本,以及在本地 query 集上是否改善业务相关性。

能力边界

向量数据库负责存储、ANN、过滤执行和生命周期;本库负责 query、召回、融合与 relevance 评测;Reranking用更昂贵的联合模型重排候选;RAG组织证据、引用和回答。Reranker 与生成模型都无法找回第一阶段完全漏掉的文档。

在总路线中的位置

本库位于“检索与数据”知识域。在 RAG 角色路径中,文档解析、Chunking策略 和 知识库构建 产生可追溯检索单元,Embedding 与 向量数据库 提供稠密表示和执行基础。本库把这些组件组合为可评测的召回系统,再进入 Reranking;这里表达集成顺序,不新增整门课程硬前置。

学习目标

完成本库后,你应能:

  • 区分用户原话、信息需求、query、document/chunk、qrels 与最终答案;
  • 为不对称检索定义 query/document 编码、文本拼接、截断和版本契约;
  • 解释 BM25 的词频、文档频率和长度归一化直觉;
  • 正确使用 cosine、dot/L2,拒绝跨模型直接比较原始分数;
  • 比较 sparse/keyword、dense 和 hybrid 三条独立基线;
  • 用 RRF 融合不可比的通道排名,并理解 rank window 与候选预算;
  • 从可信身份构造 tenant/ACL filter,使空权限和异常状态 fail-closed;
  • 设计包含同义改写、错误码、数字、否定、多语言、无答案和权限边界的 query 集;
  • 区分 ANN recall、业务 Recall@k/Hit@k、MRR、nDCG 与安全门禁;
  • 用可重复实验判断 query 改写、过滤、融合或模型升级是否真正改善系统。

前置知识

只需会运行 Python 3 标准库脚本;本库不要求真实模型、数据库或 API key。

核心术语

术语初学者解释不能混淆
information need用户真正想解决的问题不等于原始字符串
query一次可回放检索请求,含文本、身份、过滤和版本改写后仍须保留 original query
document / passage可被返回、评判并追溯来源的检索单元应与线上返回单位一致
qrelsquery 对 document 的相关性标注不是数据库权限表
sparse / lexical由词项及权重表示,适合倒排索引BM25 与学习式 sparse 不是同一算法
dense固定维向量近邻检索相似度不是相关概率
first-stage retrieval廉价地产生较大候选集不追求最终完美排序
fusion合并多路候选原始分数不能默认直接相加
rank window每路进入融合的最大候选数不等于最终 top-k
hard filtertenant、ACL、状态、有效期等不可违反条件不能在生成后补救

推荐学习顺序

顺序课程学习产出
1边界与检索单元query/document/qrels、相关性等级和无答案规则
2Query 与 Document 表示sparse/dense 输入、编码与版本契约
3相似度、分数与阈值分数方向、候选预算、阈值与去重实验
4稀疏、稠密与混合检索BM25、dense、RRF 三条可比较基线
5Query 处理与过滤可降级 query pipeline 与 fail-closed filter
6召回与离线评测分层 query/qrels、指标、错误分类与发布门禁
7项目:离线混合检索严格 fixture 上的 BM25 + toy dense + RRF 实验

前两课先定义“搜什么”和“如何表示”,第 3~5 课构造安全召回管线,第 6 课建立证据,最后通过项目复现结果。

动手实践入口

  • semantic-search-fixture.json:10 条文档、7 条 query、graded qrels、tenant/ACL/status 和手工单位向量;
  • toy_semantic_search.py:严格加载、中文二字符/BM25、exact dense、RRF、指标与 protected_audit 安全报告;
  • test_toy_semantic_search.py:34 项契约、数学、检索、权限、评测和 CLI 测试;覆盖重复排名拒绝与完整候选窗口安全审计。

从项目根目录(同时包含 docs/ 与 .website/)运行:

$env:PYTHONDONTWRITEBYTECODE = '1'
python -B -W error '.\docs\语义搜索\examples\toy_semantic_search.py' `
    --fixture '.\docs\语义搜索\examples\semantic-search-fixture.json' `
    --top-k 3 `
    --rank-window 5 `
    --rrf-constant 60

Fixture 中的 dense 向量是人为一热向量,只用于验证管线因果关系;它不是 Embedding 模型,也不能证明中文语义质量。fixture 里的 tenant/ACL 是教学数据,真实身份、授权、撤权、缓存失效和审计访问控制必须由系统边界另行实现;项目的 protected_audit envelope 含 qrels、禁返集与完整候选窗,不能直接投影给用户。

掌握标准

  • 我能写出线上 query/document 单元、相关性等级和无答案规则。
  • Query/document 表示具有模型、revision、前缀、截断、归一化与 metric 契约。
  • 我能解释 BM25 为什么偏好稀有匹配并抑制长文词频堆叠。
  • Sparse、dense、hybrid 分别评测,融合记录每路 rank/score。
  • Tenant、ACL、status 和有效期在评分前生效,空身份 fail-closed。
  • 我不会把 cosine 阈值、RRF 常数或厂商默认写成普适真理。
  • Query 集覆盖真实频率、高风险长尾、hard negatives 与权限边界。
  • 报告 Recall/MRR/nDCG、p95/p99、no-result、安全错误与索引新鲜度。
  • 模型或 query pipeline 升级能回放旧请求、分层比较并回滚。

与其他知识库的关系

知识库关系
Chunking策略决定 document/passages 的边界、上下文和去重单元
Embedding提供 dense query/document 表示及兼容性契约
向量数据库执行 exact/ANN、payload filter、分片和生命周期
Reranking在召回候选上联合判断 query—document relevance
RAG消费已授权候选,组织引用和生成
评测体系将检索指标、安全门禁与端到端任务质量联结
运行监控监测延迟、无结果、通道贡献、漂移和新鲜度

主要参考资料

来源获取/复核日期:2026-07-22。模型、SDK、产品 API、融合参数和默认值会变化;锁定版本后仍须用本地 query/qrels 复验。