
Webnovel Writer 检索策略实战vector、bm25、hybrid、graph_hybrid 怎么选【免费下载链接】webnovel-writer基于 Claude Code 的长篇网文辅助创作系统解决 AI 写作中的「遗忘」和「幻觉」问题支持 200 万字量级 连载创作。项目地址: https://gitcode.com/GitHub_Trending/we/webnovel-writerWebnovel Writer 是跑在 Claude Code 上的长篇网文辅助创作系统靠 RAG 检索历史章节来对抗 AI 写作的「遗忘」和「幻觉」。它的检索引擎内置了四种策略vector向量语义检索、bm25关键词检索、hybrid混合检索、graph_hybrid图谱增强检索。本文带你用 10 分钟搞懂每种策略的原理、适用场景和切换方式让你写 200 万字长篇时也能精准召回设定。为什么检索策略决定连载质量 写到第 300 章时AI 能不能想起第 45 章埋的伏笔、主角的外号、某个配角的关系完全取决于检索质量召回不够准→ AI 拿错上下文人设漂移、战力乱写召回太泛→ 无关内容挤占上下文关键信息被稀释Webnovel Writer 把历史章节拆成「场景切片scene」和「章节摘要summary」两种 chunk同时建立向量索引和BM25 倒排索引存储在 SQLite 中再用不同的检索策略组合召回实现逻辑在 rag_adapter.py 中。四种策略速览一张表看懂策略原理优势短板典型耗时vector向量嵌入 余弦相似度懂语义「大长老」能命中「宗门掌门」依赖 Embedding API专有名词可能失手中需调用 Embeddingbm25关键词倒排索引 TF-IDF 打分零外部依赖、快人名地名命中率极高不懂同义改写换个说法就查不到低纯本地计算hybrid向量 BM25 并行召回 → RRF 融合 → Rerank 精排兼顾语义与关键词默认最稳比单路略慢需要双 API中高graph_hybridhybrid 基础上叠加实体关系图谱扩展专治「谁和谁什么关系」类查询需要先积累实体图谱开销最大高 补充CLI 还支持一个backtrack模式——先召回场景切片再自动带上所属章节摘要适合需要「场景 全章背景」的查询。vector向量语义检索如何工作vector策略的链路是把查询文本调用 Embedding API 转成向量默认模型Qwen/Qwen3-Embedding-8B与向量库中每个 chunk 的向量计算余弦相似度按分数排序返回 Top-K它的强项是「换一种说法也能查」。比如你查「主角的师父」而正文里写的是「药老」向量检索有机会建立这种语义关联。需要注意两点没配 Embedding API Key 时会直接返回空结果系统此时自动回退 BM25日志会标记DEGRADED_MODE功能不中断但语义召回变弱小规模库走全表向量扫描保证召回库大了以后 hybrid 会自动启用预筛选先用 BM25 候选 近期章节缩小范围再算向量避免 O(n) 扫描拖慢速度相关逻辑见 rag_adapter.pybm25关键词检索为何是「兜底之王」bm25_searchrag_adapter.py是纯本地实现中文按字、英文按词分词建倒排索引用标准 BM25 公式k11.5, b0.75打分。它有两个 vector 比不了的优点零外部依赖——不需要任何 API Key离线也能用专有名词精准——人名、地名、功法名这类越精确的词BM25 命中越稳在auto自动路由里「地点/场景/设定/世界观」这类意图恰恰被分配给 BM25见 query_router.py因为查「宗门所在的山脉叫什么」这种问题关键词匹配比语义模糊匹配更可靠。hybrid向量 BM25 RRF 融合 Rerank 精排hybrid是系统默认推荐策略完整流水线rag_adapter.py查询 ──┬─→ 向量检索 Top-30 ──┐ │ ├─→ RRF 融合k60─→ 候选 ─→ Rerank 精排 ─→ 最终 Top-K └─→ BM25 检索 Top-20 ─┘RRF 融合不直接比两种不同量纲的分数而是按排名融合1/(k rank 1)谁在两条路都排得靠前融合分就高——两边都认可的才是「真相关」Rerank 精排融合出的候选再交给jina-reranker-v3做交叉编码打分把最相关的推到最前默认参数vector_top_k30、bm25_top_k20、rerank_top_n10、rrf_k60定义在 config.pyRerank 失败时不中断直接返回 RRF 排序结果——这种「层层降级」的设计贯穿整个检索引擎。graph_hybrid用实体关系图谱召回「隐藏关联」这是最重的策略专解一类高频难题「萧炎和云韵什么关系最近一次互动在哪」纯向量/BM25 检索的问题是答案所在的章节里可能根本没出现这两个名字写的是「少年」和「她」字面都匹配不到。graph_hybridrag_adapter.py四步走基础召回先跑一遍 hybrid 打底图谱扩展从查询中抽取种子实体沿实体关系图扩展一跳关联实体师徒、敌对、盟友……候选重算 先验加分在图谱扩展出的候选 chunk 上重算向量分并叠加先验——正文含种子实体名 0.2、含关联实体名 0.1、章节越新加分越多rag_adapter.pyRerank 收尾融合结果精排出 Top-K⚠️ 注意graph_rag_enabled默认是关闭的config.py。不开启时graph_hybrid会自动退化为普通 hybrid日志标记graph_hybrid_fallback不会报错。想启用图谱增强在书项目.env或配置里打开该开关即可。auto让 QueryRouter 替你选策略绝大多数时候你不需要手动挑策略——把strategy设为autoquery_router.py 会做意图识别查询意图识别信号示例自动选择的策略关系/图谱「关系」「图谱」「谁和谁」「敌对」graph_hybrid图谱开启时否则hybrid角色实体「人物」「角色」「谁」「身份」hybrid地点场景「地点」「场景」「哪里」bm25世界观设定「设定」「规则」「体系」bm25一般剧情「剧情」「发生」「事件」hybrid路由器还会顺手解析「第 3 章」「第 10-20 章」这类时间范围自动把检索限制在指定章节内避免旧内容干扰。实战选型指南不同场景该怎么选 你的场景推荐策略理由日常写作备上下文默认场景auto或hybrid均衡、稳定Rerank 兜底质量查「A 和 B 什么关系 / 最近互动」graph_hybrid--center-entities图谱扩展能召回字面不含名字的章节查具体人名、功法、地名bm25专有名词命中最准还免 API 开销没配 Embedding Key / 离线环境bm25唯一可靠选项功能自动降级不中断查「第 N 章附近发生了什么」任意策略 章节范围过滤路由自动解析章节号结果限定在该章之前手动指定策略的入口在 CLIsearch --mode auto|vector|bm25|hybrid|graph_hybrid|backtrackrag_adapter.py。传了未知策略名时系统统一降级为hybrid而不是报错——对新手很友好。一句话总结拿不准就用auto查关系用graph_hybrid查专有名词或断网时用bm25需要纯语义模糊匹配时单独用vector。相关配置与文件索引资料路径RAG 检索流程与 .env 配置说明docs/guides/rag-and-config.md检索引擎实现四种策略 降级逻辑webnovel-writer/scripts/data_modules/rag_adapter.py意图识别与策略路由webnovel-writer/scripts/data_modules/query_router.py默认参数top_k、rrf_k、图谱增强开关webnovel-writer/scripts/data_modules/config.py写章时自动备上下文的触发逻辑webnovel-writer/scripts/extract_chapter_context.py数据流说明query 技能文档webnovel-writer/skills/webnovel-query/references/system-data-flow.md.env只需两行核心配置EMBED_API_KEY语义检索和RERANK_API_KEY精排。缺任何一个系统都会自动降级而不是罢工——这也是为什么新手可以先跑起来再逐步补齐配置。【免费下载链接】webnovel-writer基于 Claude Code 的长篇网文辅助创作系统解决 AI 写作中的「遗忘」和「幻觉」问题支持 200 万字量级 连载创作。项目地址: https://gitcode.com/GitHub_Trending/we/webnovel-writer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考