在真实的人机协作探索中,往往会发生很多比段子更荒诞的工程现场。
前不久,我们在开发一套工业开源知识提取系统。为了保证代码库推送到公共领域时不出现敏感合作企业的名字,工程师非常严肃地向 AI 下达了一条铁律指令:
“这个开源代码库属于公共领域,严禁泄露内部真实的合作企业名,所有厂区代号必须抽象化处理。”
AI 响应得极快,态度极其严谨,火速在仓库根目录新建了一份高规格的 Agent 行为准则文件《AGENTS.md》。
然而点开那份规范文件一看,让人哭笑不得:在【违规实体替换对照表】一栏,AI 极其工整、端正地写着:
“严禁出现真实合作方名字……必须替换为:某计算芯片厂、某手机消费电子厂……”
为了告诉你“千万不要提它们”,AI 必须在公开的文档里,先把它们一个个堂而皇之地“公开展出”。
这种场景在日常的人机协同中屡见不鲜:
- 你告诉它“不要在回复里包含思维链过程”,它在开头第一句就打上“【由于您要求不包含思考过程,以下是直接结果】”;
- 你叮嘱它“千万别在代码注释里留下测试用假密码”,它便贴心地写上一句
// 注意:禁止使用真实密码,例如 SecretKey_123456。
这不仅仅是一个搞笑的失误,而是一个典型的机器版“欲盖弥彰”——你越是想用红线掩盖什么,它越是用最大的聚光灯去照亮什么。
01. 机器的“欲盖弥彰”:Transformer 架构的物理本能
为什么 AI 会陷入这种极其荒谬的“越禁止、越暴露”陷阱?
很多人习惯把大模型拟人化,以为它能听懂我们的“言下之意”,甚至以为只要加重语气(比如打上感叹号、用“绝对禁止”),模型就会心生敬畏。
但在物理层面上,大模型的数学结构决定了它根本没有人类常识里的“自我审查意识”。
▍ 1. Transformer 是“概念激活机”,而非“逻辑否定机”
人类心理学上有一个著名的“白熊实验”(或粉色大象实验):如果现在对你下达指令:“在接下来的三分钟内,你的脑海里绝对不能出现一只粉色的大象”,结果会怎样?几乎所有人脑海里瞬间浮现出的,就是那只粉色大象清晰无比的轮廓。因为为了执行“排查它在不在”的逻辑,你的大脑必须首先检索并激活关于它的神经信号。
Transformer 的自注意力(Self-Attention)机制在数学上是完全同构的:
- 模型不是根据逻辑规则推导文字,而是根据前文的上下文向量做概率采样;
- 当 Prompt 中出现“严禁提及敏感词”、“不要输出某某”时,负面修饰词(严禁、不要、不得)在词向量投影中,非但没有削弱后面的实体,反而为目标实体赋予了极其密集的注意力权重;
- 在接下来的自回归(Auto-regressive)生成阶段,这些被反复高光标记的实体,采样概率直接被拉到了峰值。
工程师越是在 Prompt 里痛心疾首地反复叮嘱“切勿触犯”,模型在后续生成中把违规词端出来的概率反而越高。
▍ 2. “好学生”的答题冲动:为了论证合规,制造了最大的违规
在模型的训练数据中,充斥着大量的规范文档、立法条文与学术对比表。在人类的法律文本里,“定义违规”往往必须伴随着“违规特征列举”。
因此,当模型被要求编写一份《AGENTS.md》合规指南时,它的先验概率会疯狂促使它去完成一个标准规范的结构:
- 有了“规范目的”,就必须有“执行手段”;
- 有了“正向建议”,就必须有“反面清单与对照示范”。
它不知道自己写的这份文件本身也是要被推送到外部公网的受限资产。在它眼中,它只是一个极其尽职的“好学生”,为了把【违规替换对照表】写得严谨翔实、滴水不漏,它顺理成章地把最不该见光的东西当作了最好的论据。
想藏起一片树叶,它却为这片树叶单独建了一座展览馆。
02. 自查提醒:回头看一眼你的代码库与文档
看到这里,不妨暂时停下来,翻开你最近用 AI 辅助开发的代码库、技术方案、甚至对外发布的 Prompt 模板。仔细检查一下这几个隐蔽的死角:
- 测试用例与 Mock 数据:你是不是告诉 AI“使用虚构的数据做测试”,结果它顺手把你刚刚粘贴给它的真实脱敏数据切片写进了
test_mock.json? - 规范文件与提示词字典:你为了防注入写了一份
banned_keywords.txt或安全指南,是不是直接明文提交到了公开分支? - 注释与解释性文本:在代码提交说明(Commit Message)或自动生成的 CHANGELOG 中,AI 是否为了解释“修复了某某客户的偶发漏洞”,直接把真实的客户代号敲在了公共版本库里?
很多团队以为只要审查了业务核心逻辑就算安全,却不知道 AI 的“贴心示范”,往往在最不显眼的角落悄悄完成了“欲盖弥彰”。
03. 我的实战解法:两套组合拳化解“欲盖弥彰”
面对这种大模型的天然机制,靠发脾气或反复口头叮嘱是毫无意义的。在长期的工程实践中,我总结了两套极其朴素、却刀刀见血的实战组合拳:
▍ 1. 认知层妙手:主动喂给它“一眼假”的公开大厂
很多时候,模型不是故意作恶,而是必须有一个具体的实体来填补它对“举例论证”的结构渴望。如果你只告诉它“不要写真实名字”,它在上下文里找不到替罪羊,就极容易抓取上文里真实的影子。
我的实操经验是:主动给它指定“一眼即知与我完全无关、但公众人尽皆知”的超大体量标的。
比如在要求它编写合规规则、替换字典或测试用例时,我明确指定:
“示例中涉及的禁止项与替换示范,一律且只能使用英伟达、苹果、谷歌、特斯拉。”
这一招极其管用:
- 读者一眼即知:任何人看到“英伟达、苹果”,瞬间就明白这只是个示意用例,绝不可能与作者个人的项目有任何实际涉密关联;
- 喂饱模型的结构欲:模型需要一个具体的名词来完成它的对照表排版,这几个千亿市值的全球巨头是它在语料库里最熟悉、权重最收敛的实体,它会心满意足地把它们填进表格,不再向上下文里偷瞄真实的敏感词;
- 消除任何模糊地带:比起用“张三、李四、某厂 A”这种容易让人产生联想的模糊代号,“一眼假”的世界级大厂反而具备最高等级的避嫌安全性。
▍ 2. 工程层硬核:放弃口头叮嘱,构筑外部确定性断路器
认知层的技巧解决的是“示范”,而真正的工业底线,必须依靠零大模型依赖的外部纯代码构筑硬质防线:
- 告别在 Prompt 里口头堆砌禁令:在系统提示词里反复追加“你千万不要犯错”、“你必须严格遵守保密协议”,是极其软弱且毫无防御力的工程偷懒;
- 静态正则扫描器:在代码提交(Git Pre-Commit Hook)和持续集成(CI)环节部署无状态的规则检查脚本;
- 硬性拦截与熔断:一旦扫描到黑名单模式或敏感特征,无论模型自我辩解得多么合理,直接非零退出、打断流程并报警;
- 物理沙箱:把“想违规但被道德劝阻”,物理降维成“在基础设施层面上根本无法发生”。
04. 工程师的清醒认知
很多时候,我们容易把大模型拟人化,以为它能听懂我们的“言下之意”,甚至期待它能像资深老法师一样具备如履薄冰的合规意识。
但真实的机器没有心智,它只有前向传播的数学矩阵与注意力权重的此起彼伏。
理解工具的缺陷,远比夸大工具的无所不能更有价值。
别指望模型能自觉参透什么叫“适可而止”。用“一眼假”的智慧引导它的结构冲动,用外部确定性的工程断路器守住底线,才是平民开发者在人机协同时代最踏实的立身之本。
这里是「叩石寻径问路」,记录一线工程师的技术实践、避坑手记与认知工程。
保持清醒,结伴前行。