# 《WaLiAPI - 本地 LLM API 网关》第3-8节:混合检索调优与检索可视化
作者:小傅哥
博客:https://bugstack.cn (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!😄
大家好,我是技术UP主小傅哥。
在 3-4 节我们实现了"向量 + FTS5"的混合检索,但当时权重是写死的 0.7/0.3,模式也只有一种。实际使用中你会发现:查"Rust 的所有权机制"适合语义检索,查"exact match 报错码"适合关键词检索——一刀切的权重无法适应所有查询。
这一节我们把检索能力参数化、可视化:让用户自由切换检索模式、调整权重,并把每个 chunk 的"向量分、关键词分、命中符号"全部展示出来。
# 一、本章诉求
- 实现三种检索模式——hybrid(混合)/ vector(纯向量)/ keyword(纯关键词)
- 实现权重参数化——vector_weight / keyword_weight 贯穿全链路
- 实现 CJK Bigram 中文分词——解决 FTS5 对中文检索不友好的问题
- 实现评分分解——ScoredSearchResult 记录每个 chunk 的向量分/关键词分
- 实现 RetrievalDetail——RAG 回答附带完整的检索明细(分数 + 符号 + 片段)
- 实现前端检索配置面板——模式切换 + 权重滑块 + top_k 调整
- 实现前端检索详情展示——Ask 回答下方可展开每个 chunk 的评分明细
# 二、三种检索模式
# 2.1 为什么需要模式切换
不同查询的"最优检索方式"不同:
| 查询类型 | 示例 | 最优模式 | 原因 |
|---|---|---|---|
| 语义理解型 | "如何处理并发安全" | vector | 语义相近的词("线程安全""锁机制")都能召回 |
| 精确匹配型 | "tokio::spawn 的返回值" | keyword | 需要精确命中函数名,语义向量会"漂移" |
| 通用型 | "Rust 错误处理最佳实践" | hybrid | 语义 + 关键词互补 |
v0.1.4 之前只有一种混合模式(0.7 向量 + 0.3 关键词)。这一节把检索方式的选择权交给用户。

