“What are the termination terms in the Sharma contract?”——把这句话敲进去,屏幕上给出的不只是答案,还有这句话出自哪个文件、第几页。整个过程,Wi-Fi是关着的。

打开网易新闻 查看精彩图片

这是PrivateDesk做的事。它面向的是小型专业办公室:会计师事务所、诊所、小型律所。这些地方堆着成摞的PDF——合同、发票、登记表、政策文件,却常常没法把它们上传到云端AI工具,因为涉及客户保密。结果只有两条路:干脆不用AI,或者把敏感文件贴进一个自己控制不了的服务里。

PrivateDesk想解决的就是这个卡点。把PDF丢进去,用大白话提问,拿回来的答案带着确切的文件名和页码。语言模型、向量嵌入、数据库,全部跑在办公室自己的电脑上。

拆开看这套东西怎么转

运行时用到的组件都是开源且本地的。模型是一个小的开放权重Gemma模型,通过Ollama运行,默认gemma3:4b,可配置;它只依据从用户文档中检索出的片段来回答问题。

嵌入用nomic-embed-text,同样由本地Ollama提供,负责把文档分块和问题转成向量。PDF用pdfjs-dist逐页解析,再在每一页内部切成有重叠的块,这样每个块都保留着精确的页码。

块和向量存进MongoDB。对一个小办公室的文档量来说,在已存向量上做余弦相似度足够快,架构就保持简单。匹配度最高的几个块进入一个严格的提示词:只依据片段回答,每个结论都要标注[文件, 第N页],找不到就回一句“I couldn't find that in the uploaded documents”。生成的token边出边推到界面上。

应用层是Node/Express后端加React(Vite)前端,左侧上传栏、中间对话面板,来源以可点击的chip呈现,点开就是被检索到的那段原文。

引用不是装饰

作者把这一点列为最重要的设计选择:法律或临床文档给出一个错误答案,比不给答案更糟。所以应用始终展示答案从哪来,并且拒绝猜测。

现阶段的限制也说得直白:只支持文本型PDF,扫描件还没有OCR;小的本地模型在长条款或复杂条款上可能漏掉细微差别——这也是为什么来源片段永远只隔一次点击。

为什么开放创新在这里是前提

隐私就是产品本身。整套卖点就是文件不离开这台机器。换成闭源API,这句话立刻变成假话,目标客户在法律和伦理上都没法用这个工具。

成本决定生意能不能成立。托管API按token计费,而且是永远计费,文档密集的办公室每个月都要堆出一笔账单。本地模型没有按次查询成本,所以可以卖一次性部署加支持。

没有锁定。模型是一个设置项(CHAT_MODEL),不是对某家厂商定价或政策变化的依赖。出现更好的开放模型,办公室直接升级,不用重建任何东西。

离线可用。演示里关掉Wi-Fi它照样回答,这是闭源API做不到的。

商业模式很朴素:一次性部署加支持。装到他们的机器上,导入文档,负责更新。没有按席位订阅,没有按token账单,也没有厂商攥着他们的数据。愿意掏钱的画像也清楚——三五人的会计或律所,想要AI帮忙,但承担不起客户数据离开大楼的风险。

演示里的所有文档都是假的,名字和数据均为虚构。