Spring AI 10 · 相似检索 similaritySearch

📅 2026/8/25 6:01:12
Spring AI 10 · 相似检索 similaritySearch
10 · 相似检索 similaritySearch 学完能做什么用 SearchRequest 控制 TopK 与相似度阈值读懂返回结构与相似度分数为 RAG 检索质量打基础。⏱️ 预计耗时40 分钟含动手 依赖前置第 08、09 章 pgvector 文档11、13 难度一句话similaritySearch(SearchRequest)把「和问题最像的 TopK 条」查回来调好 topK 和 similarityThreshold是 RAG 答得准的关键。1. 最小检索示例ListDocumenthitsvectorStore.similaritySearch(SearchRequest.builder().query(我买的东西能退吗)// 查询文本自动转向量.topK(3)// 返回最相似的 3 条.build());for(Documentd:hits){System.out.println(d.getText());System.out.println(score d.getScore());// 相似度分数}query会被自动 embedding再和库里向量算距离。返回按相似度从高到低排序的Document列表。2. SearchRequest 的关键参数SearchRequest.builder().query(...)// 必填查询文本.topK(5)// 返回条数RAG 常用 3~8.similarityThreshold(0.7)// 相似度阈值低于它的丢弃.filterExpression(...)// 元数据过滤第 11 章.build();topK 怎么选场景建议 topK精确问答答案集中在 1~2 条3 左右综合性问题需多条拼凑5~8太大噪音多、token 贵、可能干扰模型similarityThreshold 怎么用取值 0~1越大越严格只要非常像的。作用过滤掉不相关结果避免把无关资料塞给模型导致乱答。典型值 0.5~0.75需按你的数据实测调整。// 严格模式宁缺毋滥没有够像的就返回空 → 模型答「不知道」SearchRequest.builder().query(q).topK(5).similarityThreshold(0.75).build();3. 读懂 score相似度分数Spring AI 把底层距离归一化成相似度分数score越接近1 越相似不是距离别搞反。similarityThreshold比较的就是这个 score。hits.forEach(d-System.out.printf(%.3f | %s%n,d.getScore(),d.getText()));// 0.912 | 退货政策7 天无理由...// 0.681 | 配送说明48 小时发货... ← 若阈值 0.7这条会被丢掉4. 检索 过滤预告真实场景常要「在某租户/某分类范围内」检索。用filterExpressionListDocumenthitsvectorStore.similaritySearch(SearchRequest.builder().query(退货).topK(3).filterExpression(category 售后 tenantId 1001).build());过滤语法与构建器详见第 11 章。这里先知道「检索能圈定范围」即可。5. 一个可复用的检索服务ServiceclassSearchService{privatefinalVectorStorevectorStore;SearchService(VectorStorevectorStore){this.vectorStorevectorStore;}ListDocumentsearch(Stringquery,inttopK,doublethreshold){returnvectorStore.similaritySearch(SearchRequest.builder().query(query).topK(topK).similarityThreshold(threshold).build());}}6. 检索质量排查清单现象可能原因查不到明明存在的内容阈值太高 / topK 太小 / 分块太大导致语义稀释返回一堆不相关的阈值太低 / 没设阈值中文检索效果差embedding 模型对中文弱换 bge-zh / 通义结果顺序怪距离类型和建索引不一致第 08 章全空库里没数据 / 维度不匹配 / 过滤条件太严更系统的检索调优对答案质量的影响在第 18 章召回评估在 pgvector 文档23。7. 一句话总结检索 similaritySearch(SearchRequest)topK控数量、similarityThreshold控质量score 越接近 1 越像、filterExpression控范围三者配合决定 RAG 喂给模型的资料好坏。➡️ 下一章11-元数据过滤FilterExpression.md学会用表达式与构建器按 metadata 精确圈定检索范围。