一个问题是怎么被回答的,而任何数据都没有离开你的机器
SecureRAG 是一条跑在单个浏览器标签页里的检索增强生成(RAG)管线。你的文档在内存中被解析、切成片段、转成向量、在本地建立索引,并在你提问时被检索。这一页逐步说明每个环节,以及整个应用唯一会发出的那个网络请求。
最后更新:
把文件拖进来的那一刻发生了什么
四个阶段依次执行,全部在你的设备上完成。每个阶段都是普通的 JavaScript,并且都会上报进度,你能看见时间花在了哪一步。
摄取
文件经浏览器 File API 读入 ArrayBuffer。格式识别用的是魔数而不是扩展名,所以改了后缀的文件不会悄悄变成空文本。PDF 的文字层、Word 的标题层级、Markdown 的结构都会被保留下来。
规范化与分块
重复的页眉页脚会被剔除,段落内的硬换行会被重新拼接,然后按标题、段落、句子的顺序切分——每块约 700 字符、15% 重叠,保证一个句子不会和它的上下文被硬切开。
向量化
每个块由一个小型量化 Transformer 模型在 Web Worker 中转成 384 或 512 维向量。向量做均值池化并 L2 归一化,于是相似度计算就变成了点积。
建索引
文本块与向量写入你浏览器配置目录下的 IndexedDB。这意味着刷新页面不会丢失进度,而清除站点数据就能彻底删除,不会在别处留下副本。
检索是怎么挑出关键段落的
你提问时,问题本身会用同一个模型转成向量,索引同时被两条路径搜索。稠密向量检索找出“换个说法但意思相同”的段落;基于 BM25 的关键词检索找出包含完全相同词元的段落——合同编号、型号、定义术语——这类东西单靠向量检索经常漏掉。两份排序用倒数排名融合(RRF)合并,再用最大边际相关(MMR)剔除近重复段落,最后把前六段交给回答环节。
| 方法 | 擅长找到 | 会漏掉 |
|---|---|---|
| 向量检索(嵌入) | 换说法的内容:问“通知期”能命中“解约需事先书面通知” | 少见的精确词元,如“§8.2”或内部编号 |
| 关键词检索(BM25) | 精确标识符、数字、定义术语、产品名 | 你没碰巧用到的同义词与表述 |
| 组合(RRF 融合) | 以上两者的并集,分别排序后合并 | 没有白拿的好处——融合可能把两边各一个弱段落推上来 |
回答是怎么生成的
有两档,由你决定启用哪一档。默认的检索档中,没有任何语言模型参与写作:系统按覆盖率与相似度从检索到的段落里挑出最相关的句子,按原文顺序拼接,每句都保留指回来源的编号引用。可选的生成档会下载一个小型指令微调模型(0.5B–1.5B 参数)在本地运行,用同样的检索段落写出通顺回答。无论哪一档,引用都在文本到达你眼前之前就已挂好——我们不会让模型自己产出引用,因为模型会编造引用。
到底有什么会离开你的设备
一个请求,只在首次使用时发出,此外什么都没有。下表的内容与站内「网络盾牌」面板实时显示的完全一致。
| 请求 | 目标 | 载荷 | 首次使用之后 |
|---|---|---|---|
| 模型权重(GET) | 公开模型托管站(HuggingFace 或镜像) | 只有模型文件名——不含文档、不含问题、不含任何标识 | 没有请求;由浏览器缓存提供,可离线工作 |
| 文档解析 | 哪儿都没有 | 不适用 | 任何请求都没有 |
| 向量化与检索 | 哪儿都没有 | 不适用 | 任何请求都没有 |
| 回答生成 | 哪儿都没有 | 不适用 | 任何请求都没有 |
这套方案会在哪里出错
我们更愿意把失败情形列清楚,而不是假装它们不存在。每一种都会在界面上明确提示,而不会藏在一句自信的话后面。
- 没有文字层的扫描件 PDF 完全抽不出文本。SecureRAG 会检测到并告诉你,而不是返回一个空回答。
- 长文档可能在分块边界处被切开,导致一个定义和它的例外条款被分开。提高重叠比例、或切换到生成档都能缓解;《提升检索准确率》那篇指南里有详细做法。
- 本地小模型的文笔不如云端前沿模型。这就是你付出的代价,对比页里写得很直白。
- 移动浏览器的内存限制更严。手机上文档数量上限会自动调低,工具会明确告诉你,而不是在建立索引到一半时崩掉。
五分钟内自己验一遍
- 打开工具页,并另开一个窗口打开开发者工具的 Network 面板。
- 添加两份你手边的文件——一份 PDF、一份 Word。看着索引进度走,同时注意没有任何请求发出。
- 问一个你已知答案的问题。点一下引用编号,确认它跳到了正确的段落。
- 把严格度设为「仅依据文档」,再问一个文档里根本答不出的问题。确认你得到的是“未找到”而不是编出来的答案。
- 把 DevTools 切到 Offline,重复第 3 步。然后清除站点数据,确认文档库已空。