
ReadAny语义搜索深度教程向量检索BM25混合不记关键词也能找回观点【免费下载链接】ReadAnyAI-powered cross-platform e-book reader with semantic search, RAG chat, local vector store, notes, TTS, and WebDAV sync.项目地址: https://gitcode.com/gh_mirrors/re/ReadAnyReadAny 是一款 AI 电子书阅读器内置语义搜索能力把整本书切成小块做向量化再结合 BM25 关键词索引用混合检索帮你找到只记得大意、不记得原话的内容。读完这篇教程你会明白它为什么比传统CtrlF聪明以及如何三步开启。一、为什么你需要语义搜索读技术书时常见场景你记得作者说过缓存命中率有个平方根之类的规律但完全不记得那句话的关键词。传统关键词搜索会一无所获。语义搜索的思路是把意思变成向量。你的问题被转换成一组数字embedding书中每个段落也预先转成了向量意思越接近向量夹角越小余弦相似度越高在 ReadAny 中这部分逻辑集中在 search.ts它同时实现了vector、bm25、hybrid三种搜索模式。二、两个检索引擎向量检索与 BM251️⃣ 向量检索懂意思每本书先被 chunker.ts 切分成小块再逐块生成向量查询时计算向量与所有块的余弦相似度取 Top K阈值默认 0.3见 search.ts适合换个说法找观点但对精确专有名词人名、API 名有时不如关键词匹配2️⃣ BM25 关键词检索懂字面BM25 是经典的信息检索算法ReadAny 用倒排索引加速它inverted-index.ts 预先建好词 → 文档映射并算好 IDF 权重把检索复杂度从 O(k·n·m) 降到 O(k·d)tokenizer.ts 是亮点支持中英文日韩混排中文采用单字 二元组切分如人工智能 → 人工、智能还内置了中英文停用词表所以哪怕你只输入智能两个字也能命中标题为人工智能的段落。三、混合检索Hybrid为什么 112单独用任何一种检索都有盲区。ReadAny 的混合模式做了两件事并行召回向量检索和 BM25 各自取 2×TopK 候选RRF 融合排序用倒数排名融合Reciprocal Rank Fusionk60给每条结果打分——一个段落只要在两路榜单中靠前总分就高见 rrfFusion 实现还有两层保底设计向量服务不可用时如模型没下载好自动降级为纯 BM25搜索不会直接失败如果换过 embedding 模型系统会检测到索引与查询模型不匹配并提示你重新向量化这本书避免拿旧向量硬算出错结果四、三步开启从向量化到搜索第 1 步为书建立向量索引在图书上点击向量化会弹出进度对话框VectorizeDialog.tsx实时显示已处理 N / 共 M 个文本块。 建议用内置本地模型builtin 模式基于 Transformers.js状态管理见 vector-model-store.ts无需 API Key、数据不出本地也可以切到远程 API 模型。第 2 步直接用自然语言问打开 AI 对话页提问即可。AI 背后会调用 RAG 检索工具rag-tools.ts从书中捞出最相关的段落作为上下文回答并附带出处。第 3 步连笔记和高亮一起搜不只是正文knowledge/search.ts 提供知识库搜索把book、note、highlight三类来源一起检索。你在书上划的高亮、随手记的笔记都能被意思搜索找回来。五、常见问题FAQQ1换 embedding 模型后搜索报错这是防错机制旧索引的维度/模型与新模型不一致。重新对这本书做一次向量化即可。Q2只有关键词能搜到、语义搜不到说明该段落的 embedding 相似度低于 0.3 阈值可换个更贴近原意的问法或直接用 BM25 模式精确匹配。Q3中文分词会不会漏词不会漏得太厉害——单字 二元组双重切分让只命中一个字也有机会召回这是为 CJK 语言专门设计的。六、总结能力传统关键词搜索ReadAny 混合语义搜索必须记住原词✅ 必须❌ 说大意就行精确专有名词强有 BM25 兜底中文短句召回一般二元组分词优化笔记/高亮同库搜索通常不支持支持核心要点一句话向量化一次之后用意思搜书向量 BM25 双路召回 RRF 融合让记不住关键词不再是障碍。延伸阅读混合检索的完整实现见 packages/core/src/rag/知识库搜索见 packages/core/src/knowledge/。【免费下载链接】ReadAnyAI-powered cross-platform e-book reader with semantic search, RAG chat, local vector store, notes, TTS, and WebDAV sync.项目地址: https://gitcode.com/gh_mirrors/re/ReadAny创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考