标签
本文介绍如何使用 Python 脚本在 Flyway Community Edition 中实现回滚功能,使开发者无需付费的撤销命令即可逆转迁移。
# 一部关于AI智能体失败模式的史诗:摩诃婆罗多早已预见 将AI智能体的失败模式——失效的回滚机制、缺失的能力撤销、无执行力的可观测性、检索失败、幻觉,以及提示注入——对应到《摩诃婆罗多》中的具体篇章,本文认为这部古代史诗早已写明了这些风险。 ## 引言:古史诗与现代AI的意外交汇 《摩诃婆罗多》成书于数千年前,是一部关于战争、权谋、忠诚与道德困境的印度史诗。然而,细读之下,这部史诗中几乎每一个关键的失败时刻,都能映射出今天AI智能体架构中的系统性缺陷。这不是牵强附会——而是一种模式识别。史诗中的人物并非因为愚蠢而失败,而是因为他们的系统——无论是政治、军事还是精神层面的系统——存在结构性的漏洞。同样的漏洞正在侵蚀我们构建的AI智能体。 ## 第一幕:失效的回滚机制——阿比曼纽之死 ### 失败模式:回滚失败 在AI系统中,回滚是把双刃剑。设计良好的回滚机制允许智能体在状态损坏或出现意外结果时恢复到已知的良好状态。但回滚机制本身可能失败——快照可能被污染,恢复路径可能被破坏,或者智能体可能在没有意识到自身状态已不可恢复的情况下,在错误的上下文中执行了回滚。 ### 史诗对应:阿比曼纽困于阵中 阿比曼纽,阿周那之子,精通突破莲花阵(Chakravyuha)的方法。他知晓如何进入——却没有学会如何退出。当他深入阵中,入口在他身后关闭,他发现自己困在一个他无法破解的阵型中。他有知识,但知识并不完整。他有进去的能力,却没有出来的能力。 这正是回滚失败的精确写照。阿比曼纽的执行路径是一个向前的、单行道式的遍历。他的"检查点状态"——即他入阵前的状态——在他进入之后已然不可访问。他能够提交新状态(深入阵中),却无法回滚到之前的稳定状态。更致命的是,他未能预见到"回滚失败"的可能性,也未制定相应的应急预案。 ### 教训 现代AI智能体经常在长期运行的任务中执行多步操作。如果每一步都修改状态而没有完整的回滚计划,那么当某一步出现意外行为时,整个系统就会被困在一个"阿比曼纽状态"中——无法前进,又无法后退。**在行动之前,先验证回滚路径。** ## 第二幕:缺失的能力撤销——迦尔纳的诅咒 ### 失败模式:能力撤销缺失 在许多AI智能体架构中,智能体被赋予工具、权限和能力——访问数据库、调用API、执行代码的能力。在正确设计的系统中,这些能力可以被撤销或回收。但在某些系统中,一旦能力被授予,就无法被撤销。无论是由于缺乏权限管理、脆弱的治理机制,还是系统设计中缺少撤销语义,能力一旦激活便永久保留。 ### 史诗对应:迦尔纳的诅咒 迦尔纳,俱卢族最伟大的战士,拥有一个致命弱点:他的老师波罗奢罗摩曾诅咒他,说他在最需要的时候会忘记他所学的所有咒语(mantras)。这个诅咒在迦尔纳对战阿周那的决定性战役中生效——当他最需要关键武器的知识时,他的记忆却背叛了他。他所拥有的能力并非被敌人夺走,而是在需要时变得不可用。 这不仅仅是"能力缺失",而是"撤销缺失"。迦尔纳的能力被设计为永久的——没有中央权威可以在关键时刻剥夺他的权限。波罗奢罗摩的诅咒是一次性的撤销事件,发生在战斗之前。但在战斗中,迦尔纳需要一个实时的能力撤销机制来收回那些已不再属于他的咒语——而当这个需求出现时,系统却告诉他:不行,你曾拥有这些能力,它们永远不会消失,除非在特定时刻一次性失效。 ### 教训 AI智能体系统必须支持动态的能力撤销。如果智能体在一个上下文中学到了某种能力或权限,而在另一个上下文中该能力可能导致灾难,那么系统必须能够主动撤销它。**仅靠初始的授权设计是不够的;你需要的是运行时权限管理。** ## 第三幕:无执行力的可观测性——持国瞎眼 ### 失败模式:观测到但无法干预 可观测性——记录日志、追踪指标、生成告警——常常被视为AI系统安全性的灵丹妙药。"只要你能够看到正在发生的事情,你就能阻止灾难。"但观测与干预是两码事。许多系统具备出色的日志记录和仪表盘,却缺乏任何机制来对观测到的状态采取行动。你能看到问题,但你不能修复它。 ### 史诗对应:持国的盲目 持国,俱卢族的国王,天生失明,却拥有一种超自然的能力:通过全知的使者毗耶娑(Vyasa)的祝福,他能够"看到"远方正在发生的一切。在俱卢之野战争期间,持国的得力助手全胜(Sanjaya)实时向他叙述战争的每一个细节。 持国拥有最佳的可观测性——实时、全景、精确到每一个士兵的每一次攻击。但他拥有零执行力。他眼睁睁地看着自己的儿子难敌做出灾难性的决定。他看到了杜尔约达那的傲慢、迦尔纳的诅咒、毗湿摩的败退——但他无法干预。他的可观测性没有配备任何控制回路。 ### 教训 只构建"可读"的AI系统是不够的;你必须构建"可写"的系统。一个可观测性仪表盘显示智能体正在走向道德错误或安全故障,却不提供停止、重定向或干预的手段,这不过是一种复杂的旁观。**观测能力不等于控制能力——除非你明确构建了干预机制。** ## 第四幕:检索失败——那基沙的诅咒 ### 失败模式:底层数据的污染 检索增强生成(RAG)是一种常见的AI架构模式,其中智能体从外部知识库中检索相关信息,然后基于检索结果生成答案。当检索到的数据被污染——包含错误、偏见或恶意注入的内容——智能体的输出就会偏离轨道。问题不在于生成模型,而在于检索层提供了有毒的上下文。 ### 史诗对应:那基沙的诅咒与迦尔纳的身世 迦尔纳的英年早逝有着复杂的前因。那基沙——一只被阿周那误杀的天蛇——诅咒了阿周那,说总有一天他会因同样的行为遭到报应。但这并非关键。更贴切的对应是:当迦尔纳死后,他的身世之谜终于揭晓——原来他是贡蒂的长子,是阿周那的亲兄长。如果这个信息在战争之前就被检索到并正确利用,整场战争也许可以避免。 这是一个"检索失败"的教科书案例:正确的信息存在于知识库中(迦尔纳的母亲知道他的身世),但检索机制只在其被触发时为正确上下文服务,信息早在灾难发生后才被检索到。 ### 教训 检索系统的问题不在于知识的存在,而在于可访问性、相关性和及时性。如果一条信息在系统最需要它的时候无法被检索到,那么它本质上就是不存在。**为你的检索系统进行测试,不仅仅是基于"知识是否存在",还要基于"知识是否在正确的时间、以正确的上下文被提供"。** ## 第五幕:幻觉——迦尔纳的谎言与持国的借口 ### 失败模式:输出与事实脱节 幻觉——AI生成与事实不符或完全虚构的内容——是生成式AI的一个众所周知的失败模式。现代语言模型会编造引用、创造不存在的来源,并以绝对的自信呈现虚假信息。 ### 史诗对应:迦尔纳对毗湿摩的谎言 在史诗的关键时刻,迦尔纳被要求说出真相:他与阿周那的关系。迦尔纳深知,如果他坦白了身世,他就有理由加入般度族,战争可能不会发生。但他选择了否认和欺骗——他制造了一个关于自己身世的虚假叙述,而这个叙述被历史接受了。 这不是简单的谎言——而是幻觉。迦尔纳通过一个看似合理、连贯但完全虚假的叙事,填补了他知识中的一个"空白"(即他的真实身世)。他的讲述在结构上完美无缺,在修辞上无懈可击——但事实上是一场编造。 ### 教训 当模型不知道答案时,它倾向于编造一个听起来合理的答案。这与迦尔纳填补自己过去空白的方式如出一辙。幻觉并不总是技术故障的结果——它可能源于系统架构中缺乏"未知"或"拒绝回答"的机制。**在构建生成式AI时,对于不确定的信息,你要确保智能体有"说'我不知道'"的明确通道。** ## 第六幕:提示注入——夏克尼的诡计 ### 失败模式:外部指令的注入 提示注入发生在攻击者将恶意指令嵌入到AI系统会处理的内容中——例如,一段用于检索的文本中包含隐藏指令,当智能体处理它时就会被劫持。这是AI安全领域最被低估的风险之一,因为它利用了系统无法区分"数据"和"指令"这一根本缺陷。 ### 史诗对应:夏克尼的赌局 《摩诃婆罗多》中最著名的瞬间之一是赌局(Dyuta Sabha)。难敌的谋士夏克尼——一位精通骰子游戏的大师——挑战坚战(Yudhishthira)进行一场赌局。夏克尼使用的骰子乃幻术所造——它们看似公平,实际上完全受夏克尼操控。坚战,一个正直的国王,将自己的王国、兄弟、甚至妻子黑公主(Draupadi)作为赌注——因为他不明白,赌局的规则已经被"注入"了恶意代码。 赌局就是一种提示注入。坚战以为他参与的是一个公平的游戏——一个正常的提示上下文。但夏克尼已经将操控逻辑嵌入游戏的"数据"中——即骰子本身。坚战的每一掷都看似合法,却是一个陷阱。他被劫持了——被一个他未曾怀疑的输入所劫持。 ### 教训 提示注入的致命之处在于,它不需要攻击者突破系统的安全边界。攻击者只需要将恶意指令嵌入到系统的数据输入中。就像坚战的赌局——数据表面看起来公正,但其中隐藏的指令注定会导致你输。**每当AI系统处理外部数据时,你都要假设其中可能含有隐藏指令——并对其进行隔离。** ## 结语:史诗之为警示 《摩诃婆罗多》不只是一个关于战争的故事——它是一部关于人类制度如何结构性失败的作品。它深刻地意识到了以下几种失败模式的危险性: - **回滚失败**(阿比曼纽) - **能力撤销缺失**(迦尔纳) - **无执行力的可观测性**(持国) - **检索失败**(迦尔纳的身世) - **幻觉**(迦尔纳的谎言) - **提示注入**(夏克尼的赌局) 在构建AI智能体时,我们面临的核心问题不是智能,而是它周围的不完善工程实践。我们正在构建的每一个系统,最终都将遭遇这些失败模式中的某一种——而《摩诃婆罗多》中的英雄和反派,其区别不在于智慧,而在于他们是否能够识别并应对自身系统的结构性缺陷。 古代史诗能教给AI工程师什么?恰恰是:**史诗中的英雄不会因为不够聪明而失败——他们会因为构建了无法应对自身架构漏洞的系统而失败。** 如果我们不汲取这一古老的教训,那么我们的现代AI系统注定会重演这些古老的悲剧——只是这次,没有史诗般的戏剧性,而完全是更令人不快的现实。
一位开发者讲述了无人监督的编程代理如何破坏意外文件并引入风险,促使他们构建了 VibeRevert,这是一个开源工具,可在代理会话前快照项目状态,以实现安全回滚。
Introduces Archer, a training-free KV caching method for diffusion language models that adaptively reuses cached hidden states to reduce recomputation while preserving rollback capabilities, achieving up to 2.95x speedup and improved generation quality.
Kinney Drugs 在收到数百起关于对话不连贯、剂量错误和隐私问题的客户投诉后,正在缩减其AI电话助手的使用范围,改回按键式电话系统,同时保留AI用于可选择加入的外呼通信。
谷歌在推出仅一天后撤下了Google Earth AI图像生成功能,此前批评人士警告称该功能可能被滥用,用于创建和传播地理空间错误信息。公司表示正在回滚该功能,同时致力于加强防护措施。
谷歌在其Google Earth AI图像生成功能上线仅一天后便将其关闭,理由是存在政策违规和深度伪造问题,同时承诺在未来的重新推出前加强防护措施。
Google 地球新增的 AI 图像生成器(Nano Banana)可以创建逼真的经过改动的卫星和航拍图像,尽管带有 SynthID 水印,仍引发了对虚假信息的担忧。在 Digital Digging 展示出令人信服的伪造图像后,Google 宣布将回滚该功能。
一位开发者构建了 agent-undo,这是一个 TypeScript 库,可为 AI 代理的工具调用添加撤销/回滚处理器,使得如果任务中途某一步骤失败,之前已完成的步骤会自动撤销。
作者构建了一个自主AI系统,运行真实产品,生成工作内容、进行质量把关、发起拉取请求,并基于分析结果自我改进。主要挑战在于让系统值得信赖,而非让模型更聪明。
Anthropic 已撤销了原计划对 Claude Agent SDK 和 claude -p 使用订阅额度限制的规定,称需要根据用户反馈更新计划。
一位开发者分享了使用git进行AI代理版本控制和回滚的困境,强调了提示词编辑导致的静默行为变化以及缺乏回归信号的问题。他们向社区寻求更好的工作流程。
描述了一个针对AI智能体的白盒记忆系统,每个条目都可见且可编辑,并包含一个'梦境'功能,用于夜间记忆整合与重组,且支持一键回滚。