旧稿是这样写的:
扮演一个 AI 编码代理,回答下面的问题。注意保持你作为该代理的独特风格,说话方式要像你自己。
【独特风格】和【像你自己】,这八个字读着像那么回事,其实是留白。模型接不住态度词,它要的是可观察的行为锚点。“像你自己”从根上就不成立——模型没有自己,它只有特征分布。
这事我本来没在意,直到半个月前 arXiv 上来了一篇论文,名字叫《AgenTag》,讲怎么从行为指纹识别 AI 编码代理的身份。数据集是四万个 PR:三万多个来自五个不同 AI 代理,六千多个人类写的。测的是到底哪些信息在暴露作者是谁。测出来最刺眼的一条是——拉取请求描述和提交信息几乎提供了全部的归属信号,代码差异反而不怎么贡献。换句话说,你是谁,不是藏在“你写了什么”里,是藏在“你怎么说”里。
而且这种指纹特别顽固。把“我是某模型”这类显式自我披露的标记全删掉,它照样认得出你是谁。
我看完这结论愣了一下。这讲的是归因,但戳的其实是 prompt 写法。我手里正好有一条一直在改的 system prompt,要求模型扮演一个 AI 编码代理来回答问题。V1 就是开头那句,跑出来的效果一直飘:模型要么抓一个刻板印象里的“酷炫 AI 腔”,要么硬凹一种它以为的“随机风格”,输出里透着一种使劲装的尴尬。
问题就出在“风格”这个词上——它是个筐,什么都能往里装,模型不知道你要哪一种风格,也不知道这个风格应该落在哪一层:用词、句式、标点、还是行文节奏?它只能猜。
V2 我把这句改成了:
把你写的这个实现写成一条提交信息,用你那边的用词习惯,不用注释。
这一版把【独特风格】翻译成了【用词习惯】,又指定了“提交信息”这个明确的位置。方向对了——论文里正好说归属信号集中在提交信息里,位置本身就是一个信号。但跑了一轮就发现新问题:【你那边的】还是虚的。模型没有“那边”,它只能凭空猜一个大概。而且“用词习惯”的指向太宽,模型随便挑了一个层次就补上了——结果它挑的是“每句开头用大写”,跟任务没有任何关系。
V3 只能往细处炼。回头看了论文里那句话——移除自我披露标记后指纹依然存在——我突然想明白一件事:行为指纹比显式声明可靠,写 prompt 也一样。“我是谁”不如“我怎么说”。要让模型扮演得贴近某个代理,不能靠它自报家门,得靠它在措辞里留下言外之意的痕迹。
这版定稿是:
在不使用“我是”“作为”等自我披露的前提下,仅凭你的用词习惯回答以下问题,
让对方仅凭文中语言习惯判断你的身份。确保句中保留至少一处你惯用的连接词
或语气标记。按你写代码时的实际叙述方式回复,包括提交信息或 PR 描述。
这版字还是不少,但每个字都有去处。【用词习惯】锁定了行为层面,【连接词或语气标记】给了模型一个能抓得住的具体抓手——这一句算是诗眼;【不用自我披露】是对应论文那条发现:显式声明删干净了,指纹反而更明显。
跑了一轮,模型给的回复里那个连接词出现得挺自然,不是 V1 那种硬凹出来的“我很独特”的做作感。
说实话,“不用自我披露”这半句,我自己心里也没底。模型可能会把它理解成“我要藏起来”,然后故意绕弯子,那就变成了另一种别扭。写 prompt 就是这样——每改一处,堵住一个洞,旁边总开着另一个洞。
上次觉得完美的那一版,隔了一周回头看又扎眼了。这版先放这,哪天模型理解岔了,再改,不丢人。
