怎么证明文档没有离开浏览器
用开发者工具做一次五分钟自查,证明文件确实留在本机;看清哪些做法看上去私密、实际在上传;以及哪几种情况仍然必须由人读一遍原文才能决定。
· 9 分钟阅读
文档留在本机,依据是浏览器从没把它放进任何请求体。标语不作数,网络面板的记录才作数。以下给出五分钟自查步骤和必须由人复核的情况。
为什么纯前端架构让这次自查有意义
本站是一份静态产物:HTML、样式、脚本,以及执行嵌入模型的 ONNX 运行时,都是一次取回、之后留在本地的普通文件。没有接收文档的接口,没有排队队列,没有服务端工作进程,也没有哪一行数据库存着你的正文。PDF、Word、Markdown、CSV 的解析器编译在页面里,打开文件是一次本地函数调用,不需要任何往返。
假如存在上传通路,它在网络面板里会非常显眼:一个带着几兆请求体的 POST、路径里出现文件名、一条持续传输的进度请求。架构上不提供这条通路,比口头承诺“不会用”更可靠,这也是看一眼日志就能把问题定下来的原因。
想了解内部机制而不是做审计,可以打开工作原理页:按魔数嗅探格式,PDF 按页取文本并保留页码,Word 按样式还原标题层级,去掉重复的页眉页脚,约 700 字符带 15% 重叠切块,本地向量化,最后走混合检索。这些步骤全部发生在你眼前这个标签页里。
五分钟自查:一步步看网络面板
用桌面浏览器,最近两年的 Chrome、Edge、Firefox、Safari 表现一致。
- 打开应用页,按 F12(Chrome、Edge、Firefox)或 Option+Command+I(Safari)。
- 切到 Network 面板,按清空按钮让列表归零,然后保持面板打开。
- 拖入一份 PDF、DOCX、Markdown 或纯文本,等状态徽标显示索引完成。
- 提一个答案就在这份文件里的问题,等回答和编号引用出现。
- 现在看列表。首次访问会看到模型下载;之后的访问什么都没有。
- 把限速下拉框切到 Offline,再问一次。
- 切到 Application 面板,看 IndexedDB 与 Cache Storage,然后点 Clear site data 并刷新。
下表列出各阶段应该看到的画面,用来和你自己的屏幕对照。
| 阶段 | Network 面板里应该出现什么 | 它代表什么 |
|---|---|---|
| 页面加载 | 本站域名下的 HTML、CSS、脚本,以及 /ort/ 里的 ONNX 运行时文件 |
应用外壳,此时还没有任何文档参与 |
| 拖入一份 3MB 的 PDF | 没有新请求 | 文件经由浏览器自身的文件选择器读进内存 |
| 首次访问的第一个问题 | 一两条指向公开模型托管站(HuggingFace 或镜像)的 GET,取 model.onnx、tokenizer.json 这类文件,合计约 25MB |
按文件名取模型权重,PDF 内容既不在请求体里也不在 URL 里 |
| 之后任何一次提问 | 什么都没有 | 权重由你自己浏览器配置下的 Cache Storage 提供 |
| 切到 Offline 后再提问 | 同样没有请求,回答照常出现 | 嵌入、检索、抽取式回答都不需要网络 |
| 清除站点数据后刷新 | 模型下载再次出现,约 25MB | 是你自己删掉的,我们这边没有留副本可恢复 |
唯一一次外发请求里有什么
它是一条普通的 HTTPS GET,路径指向某个公开模型仓库里的文件名,比如一个小型嵌入模型的权重和分词器。没有请求体,返回的是一堆二进制数字。文件清单在你选文档之前就已经固定,这条请求由常量拼出来,你的文档库没有机会混进去。
体积小,是因为默认档位刻意做小了。中文文档库用约 25MB 的模型,英文文档库用约 23MB,中英混排的库可以手动切到约 120MB 的多语模型。切换是手动动作,下载面板会先把数字写清楚。
可选的生成档是另一笔大得多的带宽支出:跑在处理器的版本约 400MB,WebGPU 版本约 1.0GB。它只在你确认一个写明模型名和体积的对话框之后才开始。如果你从不打开那个面板,这条请求永不发生,抽取式回答照旧可用。
四种看着私密、实际在上传的做法
看着私密和真的私密是两件事。下面四种在真实的文档工作里都很常见,每一种都有字节外流的位置。
| 看起来是什么 | 为什么感觉安全 | 文档实际去了哪里 |
|---|---|---|
| 装在浏览器里的 PDF 阅读扩展 | 它在浏览器内运行,紧挨着你的文件 | 扩展持有主机权限,可以自行发请求。商店审核属于政策,不属于技术约束。能发就能外流 |
| 在线预览器或“在线转文本”页面 | 预览就在标签页里渲染,文件像是没动 | 渲染需要字节待在服务器上。上传发生在预览出现之前 |
| 扫描件的云端 OCR | 识别文字听起来机械又本地 | 识别跑在别人的硬件上。页面图像离机,之后如何留存由服务方的策略决定 |
| 带账号和同步目录的桌面客户端 | 装在本机,感觉自成一体 | 有账号和同步目录,意味着服务器上有一份登录名下的副本。删掉本地目录删不掉那份副本 |
这四种做法没有一种是天然错的。团队共用的工作区有它存在的理由,签了合同和数据处理协议的云端 OCR 也可以是正确选择。真正的失误,是在以为用的是另一种东西的时候用了其中一种。如果这份文档重要,要么挑一个架构上就没有上传通路的工具,要么在明知代价的前提下接受它。
这份说法本身的边界
这次审计证明的只是某个时刻的某个页面。
- 它不代表别的工具、别的站点,也不代表另一个浏览器版本的行为。
- 本站靠广告获得收入。广告脚本只在你点“接受”之后注入,从那之后网络面板里会出现指向 Google 广告域名的请求。不点接受,日志里就不会有它们。广告框拿不到文档正文、文本块和提问,但请求确实存在——正因如此,自查应该在点接受之前做,或者把选择设成仅必要。
- 扩展和注入的脚本与工具同处一个页面。要严格审计,请用一个没装扩展、也没开别的标签页的干净浏览器配置。
- 我们没法替你审计别人的软件。文中说到其他类工具时只描述它大致的工作方式,具体到某一家,请以对方的文档和你自己的抓包为准。
- 存储本身没有由应用加密。文本块和向量在 IndexedDB 里,模型权重在 Cache Storage 里,保护它们的是你系统的磁盘加密和浏览器配置加密,或者两者都没有。
什么时候必须由人读原文
默认回答是抽取式的:它从文本块里挑句子,逐句挂上 [1]、[2] 这样的标注。这让答案可追溯,但不等于可以直接采信。
四种情况需要多花那一步。
- 有后果的数字。 剂量、税率、公差、合同日期。点开引用去读原段落,不要读那句概括。
- 依赖你没导入的内容的答案。 少了一份附件,答案会从残缺的库里拼出一个看起来很肯定的结论。工具没法告诉你一个你从没给过它的文件夹里缺了什么。
- 文档之间互相矛盾。 两份文件说法不一致时,检索会把两份都取回来,答案可能并排列出。判断哪一份适用于你的情况,是关于你处境的判断,不是检索问题。
- 贴着材料边缘的问题。 相关度门控在最好稠密分低于 0.25、最好 BM25 分低于 2.0 时会判定问题超出范围,严格模式下直接拒答。拒答是设计行为,它往往提示你换用文档里的说法重问,而不是证明答案不存在。
把它当成一个随时给出出处的私有索引。阅读和判断留给你自己。