# 《WaLiAPI - 本地 LLM API 网关》第3-8节:混合检索调优与检索可视化

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!😄

大家好,我是技术UP主小傅哥。

在 3-4 节我们实现了"向量 + FTS5"的混合检索,但当时权重是写死的 0.7/0.3,模式也只有一种。实际使用中你会发现:查"Rust 的所有权机制"适合语义检索,查"exact match 报错码"适合关键词检索——一刀切的权重无法适应所有查询

这一节我们把检索能力参数化、可视化:让用户自由切换检索模式、调整权重,并把每个 chunk 的"向量分、关键词分、命中符号"全部展示出来。

# 一、本章诉求

  1. 实现三种检索模式——hybrid(混合)/ vector(纯向量)/ keyword(纯关键词)
  2. 实现权重参数化——vector_weight / keyword_weight 贯穿全链路
  3. 实现 CJK Bigram 中文分词——解决 FTS5 对中文检索不友好的问题
  4. 实现评分分解——ScoredSearchResult 记录每个 chunk 的向量分/关键词分
  5. 实现 RetrievalDetail——RAG 回答附带完整的检索明细(分数 + 符号 + 片段)
  6. 实现前端检索配置面板——模式切换 + 权重滑块 + top_k 调整
  7. 实现前端检索详情展示——Ask 回答下方可展开每个 chunk 的评分明细

# 二、三种检索模式

# 2.1 为什么需要模式切换

不同查询的"最优检索方式"不同:

查询类型 示例 最优模式 原因
语义理解型 "如何处理并发安全" vector 语义相近的词("线程安全""锁机制")都能召回
精确匹配型 "tokio::spawn 的返回值" keyword 需要精确命中函数名,语义向量会"漂移"
通用型 "Rust 错误处理最佳实践" hybrid 语义 + 关键词互补

v0.1.4 之前只有一种混合模式(0.7 向量 + 0.3 关键词)。这一节把检索方式的选择权交给用户