学了两个多月,昨天第一次在一个确认键前面卡住。
不是“要不要按”的犹豫。是我按不下去。也说不清为什么按不下去。
事情特别小。一个多步骤的活儿,同桌是 Claude Code,我说你把项目跑一遍,该读的读。它列了清单给我,第一项:读 .env。
我把手放上去,停了好几秒。
里面真没什么见不得人的。练手项目,本地数据库口令,测着玩的 key,就这些。但我忽然意识到,我不知道它读完 .env 之后会把这些内容拼进哪一步、发给谁、中间会不会停在我完全没预料的地方。
任务是一路连着跑的,改功能、跑测试、提一个 commit,中间它还要读多少文件、每次读的时候 context 里已经装着什么东西,我一点数都没有。
一开始我以为自己担心的是“它会不会把 key 抄进代码里”。这个好办,搜一遍就是。后来发现不是。我真正说不清的是——它读了 A,又读了 B,这两件分开看都没毛病,那合起来呢?合起来是不是就等于告诉了谁什么东西?
两周前翻到一篇论文,2610.40714,cs.CR 底下。标题里有个 PrivacyBench。我第一眼扫过去以为是老一套:塞一堆带手机号身份证号的 prompt 进去,看 agent 会不会原样吐出来。这种看我干嘛,我又不往 prompt 里放身份证号。
结果不是。
它讲的是多步骤、环境还会变的那种任务。986 个任务序列,5873 个任务。
「序列」这个词我盯了很久。
单步任务里,泄没泄露是看一眼就知道的事。多步不是。前面几步都在做各自该做的事,每一步单独拎出来都挑不出错。问题出在把这几步连起来之后,能推出什么。
这个我在此之前真的一次都没想过。
然后我试着把自己这个练手项目的数据流捋一遍。捋到第三步就乱了。
读 .env → 拿到 DB_URL
读 src/db.ts → 连接配置引用了 DB_URL
跑测试 → 报错信息里带出完整连接串(?)
那三行画完,我在最后一行后面打了个问号,然后就停在那儿了。
我确实不确定这次报错会不会把连接串打出来。也不确定它打出来之后会不会被原样塞进 commit message、贴进它自己的日志、或者留在我看不见的某个地方。
我想往下画,但不知道下一格该写什么。不是不够仔细,是我手里根本没有一个“什么算敏感”的清单。论文里好像叫敏感信息允许集合,基于情景完整性那套。看的时候觉得这词挺学术,看完发现它无非在说一件事:同一个东西,在这个场景里交出去没问题,换个场景就不行。
道理我懂。但我没法把它翻成能写进代码的判断。
这块到现在还是夹生的。
论文提了个防御方法,PrivacyFlow,把隐私规划和任务执行拆成两步,一步慢想,一步快做。每次要共享数据之前,先把数据流的来源和用途追一遍,再给接收方“已经知道什么”建个模,然后模拟一下外部的人能从这次披露里推出什么。
我的第一反应:哦,先想再做。
第二反应:那“想”的那部分,我怎么知道它想对了?
尤其“给接收方已经知道什么建模”这句,我卡了很久。我上哪知道对方已经知道什么?对面是另一个 agent,我还能瞎猜一下;对面是人,我自己知道什么我都不一定说得清。
不过真正让我坐直的是前面那句——模拟外部的人能从这次披露里推出来什么。
我一直以为隐私就是“别说漏嘴”,是单点的,是把某个词咽回去。
举个我自己想的、不一定成立的例子:我在一个技术群里问报错,路径里带了我的用户名和项目名;过几天又在另一个地方说了我在哪个城市。这两句分开看,一句是代码问题,一句是闲聊。合起来能推出什么?我不确定。但我以前从来不会往这个方向想第二次。
这条我认。虽然例子很糙。
实验结果那段,说六种模型上,未检测到隐私违规的完整任务序列占比提高了 22 到 55 个百分点。
第一眼:挺猛。第二眼开始犯嘀咕——区间拉这么宽,是不是换个模型效果就掉一半?还是基线本来就参差不齐?这个跨度是怎么摊开的,我看不懂,也不打算假装看懂。评论区蹲一个真读明白了的,能不能说说这个 22 到 55 在六个模型上到底怎么分布。
最后一点让我最不舒服。
PrivacyFlow 在不确定的时候会停下来问用户。论文自己也说这是个新权衡:多问,拿到授权的任务完成率上去了,但决策负担被推回给了用户。
我一直以为“多问我几句”是好事,是安全网。
但我承认我就是那种被弹窗问的时候直接点第一个选项的人。「是否允许读取 .env」跳出来,我根本没细看它问的是哪一步的读、读完之后要拿去干什么,手已经点下去了。
所以“它会来问我”这件事,落在我身上可能根本不算防线。它只是把一个我判断不了的判断摆到我面前,让我用 0.5 秒假装判断了一下。
写完这句我自己都愣了一下。但这两天越想越觉得是这么回事。也许我该先练的是“被问的时候能答上来”,而不是指望 agent 少问两句。
我到现在也没搞清楚这个练手项目到底有没有风险。估计没有,玩具项目,损失约等于零。但那阵说不清它读了什么的慌,是真的。
明天想把那条数据流画完,画到画不动为止,看看究竟卡在第几步。
有没有人画过类似的东西?蹲一个。