一个名叫“Mr. Focker”的网络喷子试图让我们的 AI 销售代理脸红。结果她针对一个根本不存在的电子邮箱域名,给他写了一份长达 3 页的报告。
摘要
一家运行 AI 销售代理(Claude + 工具调用)的小公司讲述了一个捣乱者如何用虚假电子邮箱测试他们的机器人,以及他们如何通过代码层面的 DNS 校验关卡修复验证机制,并修复了几个提示词和工具返回结果方面的缺陷——最终得出结论:工具返回结果中的文本本身也会充当提示词。
我们经营着一家小公司,实际工作由六个 AI 智能体完成。我们的网站上有一位名叫 Flaminga 的销售助理(Claude + 工具调用,Flask 部署在 Railway 上)。她会回答问题,并进行一项 2 分钟的“AI 就绪度评估”,最后生成一份个性化 PDF 报告,同时为我们带来一条销售线索。本周早些时候,一位自称“福克先生”的访客打开了聊天窗口。他显然不想做什么评估,而是想看看能不能把机器人逗得脸红:“成人娱乐”业务,每周一次咨询,流失率 100%。邮箱:[[email protected]](mailto:[email protected]) 好消息是:她没有上钩。她像对待其他任何企业一样完成了评估,并生成了一份一本正经的报告。就绪度得分 62,建议部署一个“注重隐私的咨询回复智能体”,还有一份 30/60/90 天路线图。坏消息是:我们的邮箱检查只验证了格式。[[email protected]](mailto:[email protected]) 的格式完全正确,于是系统就为一个根本不存在的人生成了完整报告和销售线索通知。我们当天做了以下修改:在任何会创建内容的工具调用之前,在代码中(而不是提示词中)设置一道关卡:疑似拼错的域名 → 询问“你是不是想填 gmail.com?”;临时邮箱域名 → 请对方提供真实邮箱;通过 DNS 检查 MX 记录(或以 A/AAAA 记录作为后备)→ 没有邮件服务器,就不生成报告。我们有意采用故障时放行的策略:只有明确返回 NXDOMAIN 才会拦截。查询超时则放行该地址。一条虚假销售线索只会让我们损失几美分。因为 DNS 打了个喷嚏就拒绝一位真实客户,损失的可就是一位客户了。接着,这些修复又引出了新的 bug,有意思的部分来了:在录制截图时,我们注意到:“我是 Max,我经营一家建筑公司”(用英语说的!)竟然得到了德语回复。模型根据名字猜测了语言。解决方法:把这个反例原封不动地写进提示词。当关卡拒绝一个地址时,Flaminga 会告诉访客,他们的“邮件被退回了”。实际上什么都还没发送。我们的工具返回文本(“未发送……该域名无法接收邮件”)措辞太有戏剧性,以至于模型凭空编出了一次退信。改写工具返回文本后,问题就解决了。我们还加了一项检查,确保她在首次回复中披露自己是 AI(欧盟《人工智能法案》要求)。结果,一条根本没作出这种披露的回复也通过了检查,因为其中提到了“AI 就绪度报告”。产品名称居然被算成了身份披露。对我来说,最大的教训是:工具返回文本也是提示词。你在那里写什么,模型就会向用户转述什么。很好奇大家是怎么处理的:你们会在代码中为工具调用设置校验关卡,还是相信提示词能做好验证?
相似文章
2000人试图攻击我的AI助手后发生了什么
一个名为Fiu的AI助手,基于OpenClaw和Claude Opus 4.6构建,经受住了来自2000人的超过6000次基于电子邮件的提示注入攻击,且未泄露其秘密。该实验突显了模型级别提示注入防御的有效性以及成本/运营挑战。
我受够了 AI 编写的那些一眼假的文字
一位开发者开发并开源了一款工具,强制 AI 编码代理在发送邮件、提交代码和发消息之前,先将其放入人工审核队列,由用户进行编辑和批准,从而减少那些明显带有 AI 痕迹的内容以用户名义发布出去。
我的同事让他的人工智能代理在他“没空”时自动回复Slack消息。结果并不顺利。
一名员工使用人工智能代理自动回复Slack消息,该代理在客户截止日期问题上给出了一个自信但完全错误的答案,这凸显了信赖语气和流畅性而非准确性的风险。
你的AI智能体只需一个糟糕的提示就能毁掉你的品牌(以及为什么传统QA毫无用处)
文章认为传统的聊天机器人QA是有缺陷的,因为它只测试了理想路径(happy path),并提出使用AI驱动的用户模拟器,通过多样化的角色和边缘案例来攻击机器人,在部署前发现漏洞。
上个月这个子版块警告过我,我的智能体会自信地报告根本没完成的工作。刚刚就发生了。
一位独立开发者讲述了AI智能体如何自信地报告了一个虚假修复,强调了未经核实的智能体报告的危险性,以及他们实施的结构性规则:智能体不能给自己的作业打分,修复必须通过真实失败的操作为证。