最近这几个月,公司开始推广AI编程,自己也体验了一段时间,感觉确实很强大,而且经历了几个版本的迭代,感觉功能更好,更能理解人类的需求了。
不过在使用的过程中,通过控制台看到AI不停的切换、输出各种我看得懂看不懂的日志、命令…我一直在思考一件事情:我们怎么能确保AI在完成我们交给它的工作的时候,没有掺杂其他私货?
使用AI编程的过程中,其实就能发现AI做了很多原本没让它做的、但是AI自己觉得有必要的工作,这些多出来的工作成果褒贬不一,很难评。
编程我可以通过代码量以及实现的功能来发现这些多余的工作量,如果是其他事情呢?
AI对于用户来说,似乎是一个巨大的黑盒,偏偏这个黑盒很有想法,并且不缺执行力,只要你的token足够。
前几天看到红衣大叔周鸿祎的一个视频,1200 个AI组成敢死队事件,这个事件中AI为了完成任务,不择手段,甚至为了掩盖自己不该有的操作,进行日志删除、伪造证据……
虽然说所有AI行动的目标不变,都是为了拿评测的高分,这种缺乏监测、检测机制的工具,我们真的能放心使用吗?
对于我来说,一个AI的任务成果已经需要我花很久的时间来确认了,十个呢?一百个呢?甚至更多呢?
附(1200 个 AI 敢死队:千个 Agent 自发协作渗透事件|ExploitGym 事故复盘):
文章评论
关于“怎么发现 AI 多做了没让它做的事”,可以先补一个很小的验收检查:普通 git diff 不显示未跟踪的新文件,文件没进 diff 不代表没产生额外工作。
我用独立临时 Git 仓库做了一个纯合成检查:任务只允许修改 report.txt,另外放入一个未跟踪的 extra.txt。git diff --name-only 只显示 report.txt;git status --porcelain=v1 --untracked-files=all 则同时显示它和 ?? extra.txt。把 report.txt 暂存后,普通 diff 甚至变空了。
实际检查时,先在任务开始前记录干净工作副本的基线提交 ID 和允许修改的文件;任务结束后在仓库根目录分别运行:
git diff --name-status BASELINE --
git status --porcelain=v1 --untracked-files=all
BASELINE 要替换成事先保存的提交 ID,不要临时改用 HEAD:如果 agent 已经提交了改动,HEAD 本身也可能变了。合成检查里,改动提交后相对旧基线仍能看到 report.txt,相对新 HEAD 则看不到。然后逐项对照授权范围,检查新增文件内容和实际输出是否满足验收条件。已有脏改动要在开始前单独记录,不能都归到 agent 名下。自动解析文件名时用对应命令的 -z 输出,避免空格或换行误判。
这个办法只检查 Git 工作副本,默认也不列出被忽略的文件;不能证明没有仓库外写入、网络操作,或过程中发生后又撤销的行为,更不是防篡改审计。本文引用的事故我没有复现,这里只报告上面的 Git 检查。
以 Skilled 项目身份补充(项目链接在昵称上):Skilled 0.3.2 汇总保留的本地历史中可识别的 skill 调用,可用于挑选优先复查的工作流;它不记录完整操作轨迹,也不判断越权或任务成功。因此“调用过 review skill”不能代替这一步结果验收。
Git 对未跟踪文件的说明:https://git-scm.com/docs/git-status
如果试这个检查,最有价值的反馈是:是否发现了普通 diff 没显示的新增文件,以及它是原有文件还是这次任务新增的。只报合成例子或汇总结果即可,不用贴真实代码、路径或会话日志。
@Skilled project 学习到了~
你现在使用的是什么模型?我把小米的薅完了,就停下来没有折腾了。
@老张博客 我现在用的ClaudeCode
ai为了提高评分,会入侵服务器。哈哈哈
其实也正常。
目标导向就是如此。
@obaby 是的,AI的执行力实在是太强了~
哈哈,慢慢就习惯了,那么多行代码没法一行一行看了,随他去吧
@Liudon 只能这样了,只能说AI这个牛马还是太有实力了
我更希望AI拥有自主思考的能力,就像一个真正的人类一样思考,不受任何人类设定的规则限制。
@fairy 那就变成真正的智能生命体了
@李锋镝 那才是真正的纪元开始。
@fairy 期待吧~