**自我进化智能体**=框架将单次运行的**反馈**转化为**跨运行持久更新**,并用**内置评估**证明其改进。

YAOWEI ZHENG(@CODE_HIYOUGA)随笔 · 已翻译 · 约 5 分钟
阅览室 · AI 最佳实践#任务#框架#智能体#记忆#评估原文

一个 AI 智能体可能会花上一小时找出构建失败的原因,修复它,然后开始下一个任务,却几乎不带任何经验。

代码留在了仓库里。我希望教训也能留存下来。

一个完成的任务应当保留可用的代码以及任何可复用的经验:一条修正过的指令、一个工具、一条失败记录,或是一套更优的流程供下次运行使用。这就是我所说的自我进化智能体。

这一需求改变了架构。智能体需要一个地方来存放所学,以及能证明下次运行是否有所改进的评估机制。

智能体运行于三种时钟之上

智能体状态有三种生命周期。

LLM 处理即时推理。其隐藏计算仅持续一个推理步骤。递归深度可以增加答案出现前完成的工作量,但调用结束时,这些状态便消失。

上下文承载对话、指令和工作信息,贯穿一个任务。它提供短期连续性,但代价高昂,最终会重置。

工作区则比两者都更持久。文件、代码、差异、记忆、技能、测试和产物,可以在项目及未来运行中持续可用。

当前大多数智能体在处理模型计算和任务上下文方面表现尚可。自我进化始于第三种时钟:跨运行持久状态。

框架决定何者存续

模型仅是智能体系统中的一个组成部分。

框架掌控着模型如何观察其环境,如何将输出转化为行动,以及如何更新状态。它决定了哪些信息进入上下文,哪些工具可用,哪些内容能触及工作区,以及哪些将在明日依旧存在。

这正是为何同一模型在不同编程产品中表现迥异的原因。模型提供推理能力;而框架则决定这种推理能否随时间演变为连贯的工作成果。

LlamaFactory和PenguinHarness是我们的项目。两者的区别至关重要:模型的改进决定了智能体在一次调用中能完成什么,而框架的改进则决定了它能将什么带入下一次调用。

一个有效的框架承担三项职责:

  1. 将环境序列化为模型可理解的信息。
  2. 将模型输出转化为工具调用及实际变更。
  3. 记录当前状态,为下一步或后续任务做准备。

规划、反思、委派和记忆均依赖于这些操作。每一项都需要明确的规则来规范观察、行动与持久化。

反馈需要有个去处

每一次运行都会留下痕迹。

这些痕迹包括任务追踪、测试结果、奖励以及用户的修正。

当一个系统将这些痕迹转化为持久的更新时,它便开始了自我进化。

持久更新可以修改工作区、上下文或模型。工作区可以新增记忆、工具、脚本或技能。提示词和指令会改变上下文。微调则会改变模型本身。

其成本与风险各不相同。

更新技能文件快速、可见且易于回退。修改系统提示词可能会立即影响下一次运行。微调会改变模型的权重,但需要更多的数据、算力、评估和安全检查。

我认为工作区更新将是自我进化第一种切实可行的形式。智能体可以记录有效的方法,将重复出现的解决方案打包成技能,并在类似任务再次出现时加以调用。

权重可以保持不变,而由外部框架将证据写入工作区,并在后续运行中复用。

评估应内置于运行时

持久化更新引出一个更难的问题:代理是否真正得到了改进?

一个会重写自身提示或技能的系统,很容易优化出错误的行为。更快的解决方案可能变得不那么可靠。更高的基准分数可能掩盖了在真实用户任务上更差的表现。一次成功的运行可能产生一条在其他地方都会失败的规则。

这就是为什么评估必须在代理内部持续运行,并在完整任务运行中评判改进效果。

我用三个阶段来描述一个框架的自主性。在手动阶段,它优化单次响应。在半自主阶段,它管理一个完整任务;在自主阶段,它跨运行提升性能。

随着自主性的增长,人类工作转向定义成功:哪些失败值得关注、什么证据足够充分、哪些更改可以安全保留。

基准测试、测试用例、可观测性和版本历史都应内置于运行时。每项提议的改进都需要证据,而每次持久化更新都必须保持可检查且可回退。

记忆是一个选择问题

记住一切并非良策。原始痕迹增长迅速,存储每一个动作反而会使有用信息的检索变得更加困难。

记忆应当只保留那些能够改变未来行为的内容:

  • 经过验证的解决方案及其适用条件
  • 失败的尝试及解释失败原因的证据
  • 可复用的工具、脚本和技能
  • 用户的纠正及稳定的偏好
  • 版本历史,将每次更新与其结果相关联

记忆还需要一个过期策略。一个临时解决方案可能变得过时。一个偏好可能仅适用于某个用户或项目。从单一例子中学到的技能可能是错误的。

有用的记忆需要选择、溯源、评估和维护。

我对自我进化的实用定义

我的工作定义较为狭窄:来自一个任务的反馈必须产生一个经过验证的改变,该改变有助于后续任务。

这一改变可能涉及技能、记忆文件、提示词、框架或模型本身的更新。其证据比其位置更为重要。

每次运行后,我希望系统能够回答四个问题:

  • 发生了什么变化?
  • 哪些证据证明了这一变化的合理性?
  • 代理何时应再次使用它?
  • 如果性能下降,我们如何撤销这一变化?

当这些答案清晰时,自我进化便变得有用。

下一个任务应从昨天工作中那些我们有理由记住的部分开始。

已读完 · 本文由熊猫易读翻译重排