百万字小说如何检索前文?拆解 OpenFic 基于 LanceDB 的 Agentic RAG 语义检索实现
AI 应用人工智能大模型AI AgentRAG后端前端桌面应用【免费下载链接】OpenFic专为小说创作打造的跨平台、用户友好、AI Native 的一站式 Vibe Writing 工具。A cross-platform, user-friendly, AI-native, all-in-one Vibe Writing tool designed specifically for novel writing.项目地址https://gitcode.com/gh_mirrors/op/OpenFic点击查看免费下载写长篇小说时最头疼的一件事写到第三百章却想不起来第一章埋的那条伏笔叫什么名字。OpenFic 是一款专为小说创作打造的 AI Native 一站式写作工具它内置了基于 LanceDB 的 Agentic RAG 语义检索引擎——把整本书的章节向量化入库让 AI Agent 用自然语言提问即可在百万字前文中精准捞出相关段落并且能自主判断索引是否过期、该不该重建。上图是 OpenFic 的主界面右侧面板中Agent 正在为当前章节检索前情返回了带章节标题和匹配分数的原文片段——这正是本文要拆解的整套语义检索链路。一、百万字小说的前文检索难在哪里传统方式有两个死穴关键词搜不准在编辑器里 CtrlF 搜玉鼠找不到角色外号铁掌判官对应的那段描写语义不同、字面不同就查不到。上下文装不下百万字 ≈ 上百万 token远超任何 LLM 的上下文窗口不可能把书全喂给模型。所以需要 RAGRetrieval-Augmented Generation先检索、再阅读。而 OpenFic 做的不是固定管线的 RAG而是Agentic RAG——检索能力被包装成 Agent 的工具由模型自己决定何时查、查什么、结果不满意要不要换关键词再查甚至主动触发索引重建。二、章节向量索引流水线从一章正文到可检索的表OpenFic 的索引以项目为单位每个项目对应 LanceDB 中一张独立表索引键形如chapters:{project_id}实现代码集中在 backend/app/retrieval/ 模块。流水线分四步1. 结构感知分块让每个片段都保留完整语义默认分块参数为800 字符/块、100 字符重叠可在设置中调整。分块器RecursiveCharacterChunker见 backend/app/retrieval/internal/indexing/chunking.py采用三级降级策略优先按段落空行为单元贪心打包单段超长时按句子边界。等二次切分仍然超长才按 chunk_size 硬切。这比纯滑动窗口更能避免把一段对话拦腰截断保证嵌入向量承载的是完整语义单元。更巧妙的是章节前缀注入每个分块入库时会拼接第 N 章 章节标题前缀再参与向量化backend/app/retrieval/chapter_index.py 中的_build_chapter_prefix同时原始正文单独存在raw_text列用于回传显示——这样向量既知道这段话说了什么也知道它是哪一章的。2. 批量向量化 写入 LanceDB分块完成后后台任务按每次请求最多 50 个分块的节奏调用你配置的 Embedding 模型default_embedding_model逐批写入 LanceDB。任务定义见 backend/app/background/jobs/definitions/retrieval_chapter_index_batch.py每批独立提交事务并向前端推送进度10/101 → 20/101 → …百万字长篇也能渐进构建、随时可取消。3. 三类索引各司其职写入后引擎会为表建立三种索引见 backend/app/retrieval/engine.py索引类型作用vectorIVF-HNSW-SQ余弦距离语义相似度检索抗改写、抗同义textFTS 全文倒排精确词面匹配专门面向中文做了 ngram 二元组分词关闭英文词干与停用词标量字段BTree按project_id/chapter_id/volume_id过滤这个向量 BM25双通道设计是中文场景的关键向量擅长意合换个说法也能找到全文索引擅长形合人名、地名、招式名必须字面对上两者互补。4. 状态机管理索引新鲜度索引不是一次性产物。OpenFic 为每章记录 SHA-256 内容哈希据此实时判定章节状态backend/app/retrieval/chapter_index.pystale过期你修改了已索引章节 → 内容哈希对不上自动标记过期needs_rebuild需重建更换了 Embedding 模型、向量维度或表结构版本 → 整个项目索引强制重建fresh新鲜全部章节与索引一致可直接检索。三、Agentic RAG 核心两个工具 一套查询管线检索能力最终以两个工具暴露给 Agent位于 backend/app/agent_runtime/tools/impls/chapter/工具一search_chapters —— 混合检索、RRF 融合、置信度裁剪Agent 传入一句自然语言如主角第一次展示异能的场景工具内部执行完整管线见 backend/app/agent_runtime/tools/impls/chapter/search_chapters.py 与 backend/app/retrieval/internal/query/builder.py双通道召回向量检索与 BM25 全文检索各取 Top 40 候选HNSW 的ef参数调至 200 保证召回率并按project_id过滤确保只搜当前项目RRF 融合排序用倒数排名融合k60向量权重 0.7合并两路结果归一化为 0~1 置信度无需对齐两种分数的量纲可选 Rerank 精排若开启了 Rerank 模型对候选做交叉编码精排进一步提升 Top 结果质量置信度裁剪低于 0.3 置信度的分块直接丢弃避免无关段落污染上下文按章节分组回传最终只返回 Top 5 分块按卷 → 章 → 片段 分数结构化组织Agent 拿到的是第 22 章 拍卖会……52.58这样可引用的结果。工具二update_index —— 让 Agent 自己决定何时重建这就是 Agentic 的精髓所在。检索前工具会先检查索引新鲜度索引状态Agent 拿到检索请求时的行为fresh直接执行混合检索stale提示索引非最新可用forcetrue强制检索或先更新索引needs_rebuild / no_index拒绝检索明确告知需要先建索引当自动索引策略设为由 Agent 决定时提示文本会顺带建议模型调用 update_index 工具入队重建任务。也就是说该重建了这个决策本身也被交给了模型——你只负责继续写Agent 自己维护记忆的时效性。四、新手上手指南开启语义检索只需 4 步添加一个 Embedding 模型在设置 → 模型中接入任意支持 embedding 的模型服务商并把它设为默认嵌入模型default_embedding_model选择启用范围进入设置 → 索引面板对应 frontend/src/features/settings/components/index-settings.tsx索引模式可选全部项目 / 指定项目 / 关闭还可微调分块大小与重叠可选配置 Rerank开启重排序并指定一个 rerank 模型Top 结果会更精准选择自动索引策略保存章节时立即索引、由 Agent 决定或手动三选一。首次点击更新索引后面板会实时显示每个项目的章节级进度10/101 → 20/101完成后即可检索。五、这套实现值得借鉴的 5 个设计点双通道召回是中文长文的刚需ngram FTS 与向量检索缺一不可RRF 融合免去了分数对齐的麻烦前缀注入 raw_text 分离一个设计同时解决向量缺上下文和回传要干净两个问题哈希驱动的新鲜度状态机stale / needs_rebuild / fresh 三态让索引可不可信变得可计算而不是玄学Agentic 的边界感检索工具拒绝在 needs_rebuild 状态下带病工作宁可让 Agent 走 update_index也不返回错误记忆工程化兜底置信度阈值裁剪噪声、50 块/批的渐进式索引、失败即整任务可重发——百万字场景下稳比快重要。如果你想在自己的创作工作流里复刻类似能力可以从 backend/app/retrieval/ 目录读起engine.py是最核心的 LanceDB 封装chapter_index.py展示了如何把通用检索引擎对接到具体业务章节、项目、哈希状态机两者分层清晰非常适合作为 RAG 落地参考。赞分享AI 应用人工智能大模型AI AgentRAG后端前端桌面应用【免费下载链接】OpenFic专为小说创作打造的跨平台、用户友好、AI Native 的一站式 Vibe Writing 工具。A cross-platform, user-friendly, AI-native, all-in-one Vibe Writing tool designed specifically for novel writing.项目地址https://gitcode.com/gh_mirrors/op/OpenFic点击查看免费下载相关推荐实测百万文本块搜索Memvid如何实现毫秒级语义检索实测百万文本块搜索Memvid如何实现毫秒级语义检索 在数据爆炸的时代高效管理和检索海量文本信息成为开发者面临的重要挑战。Memvid作为一款基于视频的A人工智能Agent 记忆RAG向量数据库LLM Zoomcamp 2025 向量检索模块基于 Qdrant 的语义搜索、RAG 实现与混合检索实战LLM Zoomcamp 2025 向量检索模块基于 Qdrant 的语义搜索、RAG 实现与混合检索实战 本文围绕 LLM Zoomcamp 2025 年课示例工程教程人工智能大模型TaskWeaver 文档检索角色DocumentRetriever实战指南基于 FAISS 的 RAG 检索实现TaskWeaver 文档检索角色DocumentRetriever实战指南基于 FAISS 的 RAG 检索实现 导读 本文围绕 TaskWeaverAI Agent数据分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

ddraw.dll反编译实战:还原DirectDraw内部结构与兼容性修复

ddraw.dll反编译实战:还原DirectDraw内部结构与兼容性修复

简介:本资源为 Windows DirectDraw 图形子系统核心组件 ddraw.dll 的反编译源代码实现,面向图形编程初学者、逆向分析爱好者及 Windows 底层开发学习者,旨在帮助理解 DirectDraw 的初始化流程、表面(Surface)管理、位块…

2026/10/14 18:35:56 阅读更多 →
dsh-pet 工作状态状态机:DSH会话事件如何压缩成6档动画+“真收尾才庆祝“的goal续跑判定

dsh-pet 工作状态状态机:DSH会话事件如何压缩成6档动画+“真收尾才庆祝“的goal续跑判定

AI 插件dsh-plugin交互助手桌面应用 【免费下载链接】dsh-pet DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI 视频自造专属宠物 项目地址: https://gitcode.c…

2026/10/15 20:55:44 阅读更多 →
teams-for-linux Wayland 屏享拾取器 Spike(2534)技术方案解析:用应用内 StreamSelector 接管 getDisplayMedia

teams-for-linux Wayland 屏享拾取器 Spike(2534)技术方案解析:用应用内 StreamSelector 接管 getDisplayMedia

桌面应用即时通讯 【免费下载链接】teams-for-linux Unofficial Microsoft Teams for Linux client 项目地址: https://gitcode.com/gh_mirrors/te/teams-for-linux 点击查看 免费下载 导读 本文围绕 teams-for-linux 仓库中的 Spike 方案文档 2026-05-13-spike-2…

2026/10/15 20:04:45 阅读更多 →

最新新闻

具身智能中的协同机理研究(107):双引擎并行实现毫秒级精确控制

具身智能中的协同机理研究(107):双引擎并行实现毫秒级精确控制

前沿技术探索:TVA智能体(简称TVA) TVA智能体(亦称“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的新型工业视觉系统,也是当前最具代表性的具身视觉技术之一。它有机融合深度强化学习(DRL)、卷积神经网络(CNN)与因式分解算法(FRA),构成了具身智…

2026/10/15 20:54:55 阅读更多 →
foobox-cn 完整上手指南:给 foobar2000 换一套现代化中文界面

foobox-cn 完整上手指南:给 foobar2000 换一套现代化中文界面

foobox-cn 完整上手指南:给 foobar2000 换一套现代化中文界面 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 如果你也遇到这种情况:foobar2000 解码稳、格式全,可…

2026/10/15 20:54:55 阅读更多 →
Samba文件服务器安全(1)

Samba文件服务器安全(1)

在企业 IT 基础设施中,Samba 文件服务器往往扮演着"沉默的枢纽"角色——它让 Windows 客户端能够无缝访问 Linux 上的共享目录,让 Active Directory 域中的用户凭同一套身份凭证读写文件。然而,正是这种跨平台桥接能力,使 Samba 服务器成为网络安全链条上最容易被…

2026/10/15 20:54:55 阅读更多 →
大模型人才报告解读:岗位图谱、技能栈与能力培养路径

大模型人才报告解读:岗位图谱、技能栈与能力培养路径

简介:由中国软件行业协会发布的《2024人工智能大模型的技术岗位与能力培养研究报告》,围绕大模型引发的岗位变革与人才需求展开,适合想进入AI大模型方向的开发者、在校学生以及负责技术团队建设与课程规划的管理者阅读。资料为单个PDF文件&am…

2026/10/15 20:54:55 阅读更多 →
深海数据中心测试:从故障注入到代码生存的实操指南

深海数据中心测试:从故障注入到代码生存的实操指南

接到“深海数据中心测试”这个任务时,团队里一度以为是在整活。把装了几十台服务器的标准机柜塞进耐压舱体,沉到几十米深的海床上,让它以接近工业级可靠性的标准连续运行——这个听起来有点科幻片味道的项目,其实催生了一连串极其…

2026/10/15 20:54:55 阅读更多 →
CentOS 8.2 自建 NextCloud 私有云盘:LNMP 环境搭建与优化实战

CentOS 8.2 自建 NextCloud 私有云盘:LNMP 环境搭建与优化实战

1. 为什么我选择在 CentOS 8.2 上自建 NextCloud把时间倒回几年前,我第一次接触网盘类工具的时候,用的还是各种公有云服务。免费额度小、上传下载限速、文件格式被审查、分享链接随时失效,这些痛点想必你也遇到过。后来我开始琢磨&#xff1a…

2026/10/15 20:53:54 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →