第九章:学习与适应(Learning and Adaptation)

← 上一章:记忆管理 | 返回目录 | 下一章:模型上下文协议 →


第九章:学习与适应(Learning and Adaptation)

学习与适应对于增强人工智能体的能力至关重要。这些过程使智能体能够超越预设参数的限制,通过经验和环境互动进行自主改进。通过学习和适应,智能体可以有效应对新情况,并在无需持续人工干预的情况下优化其性能。本章将详细探讨智能体学习和适应的基本原理与机制。

宏观视角(The big picture)

智能体通过根据新经验和数据改变其思维、行动或知识来进行学习和适应。这使得智能体能够从简单地遵循指令,逐步演变为随着时间推移变得更智能。

  • 强化学习(Reinforcement Learning):智能体尝试采取行动,对积极结果获得奖励,对消极结果受到惩罚,从而在不断变化的环境中学习最优行为。适用于控制机器人或玩游戏的智能体。
  • 监督学习(Supervised Learning):智能体从带标签的示例中学习,将输入与期望输出联系起来,从而实现决策制定和模式识别等任务。是用于邮件分类或趋势预测智能体的理想选择。
  • 无监督学习(Unsupervised Learning):智能体在无标签数据中发现隐藏的连接和模式,有助于洞察、组织信息以及创建其环境的“心智图”。适用于在没有具体指导下探索数据的智能体。
  • 基于大语言模型(LLM-Based Agents)的少样本/零样本学习(Few-Shot/Zero-Shot Learning):利用大语言模型的智能体能以极少的示例或清晰的指令快速适应新任务,从而对新命令或情况做出快速响应。
  • 在线学习(Online Learning):智能体通过新数据不断更新知识,这对于在动态环境中的实时反应和持续适应至关重要。对于处理连续数据流的智能体至关重要。
  • 基于记忆的学习(Memory-Based Learning):智能体回忆过去的经验,以在相似情境中调整当前行动,从而增强上下文感知和决策能力。对具备记忆回忆能力的智能体有效。

智能体通过基于学习改变策略、理解或目标来进行适应。这对于处于不可预测、变化或新环境中的智能体至关重要。

近端策略优化(Proximal Policy Optimization, PPO)

近端策略优化(PPO)是一种强化学习算法,用于训练在具有连续动作范围的环境中运行的智能体,例如控制机器人的关节或游戏中的角色。其主要目标是可靠且稳定地改进智能体的决策策略,即其策略(policy)

PPO 的核心思想是对智能体的策略进行微小而谨慎的更新。它避免了可能导致性能崩溃的剧烈变化。其工作原理如下:

  1. 收集数据:智能体使用其当前策略与环境互动(例如,玩游戏),并收集一批经验(状态、动作、奖励)。
  2. 评估“替代”目标(Surrogate Goal):PPO 计算潜在的策略更新将如何改变预期奖励。然而,它并非仅仅最大化此奖励,而是使用一个特殊的“裁剪”(clipped)目标函数。
  3. “裁剪”机制(The “Clipping” Mechanism):这是 PPO 稳定性的关键。它在当前策略周围创建了一个“信任区域”或安全区。算法被阻止进行与当前策略差异过大的更新。这种裁剪作用就像一个安全刹车,确保智能体不会采取巨大的、有风险的步骤,从而导致学习成果被抹去。

简而言之,PPO 平衡了性能的提升与保持与已知、可行策略的接近性,这防止了训练期间的灾难性失败,并带来了更稳定的学习。

直接偏好优化(Direct Preference Optimization, DPO)

直接偏好优化(DPO)是一种较新的方法,专门设计用于将大语言模型(LLMs)与人类偏好对齐。它为完成此任务提供了比使用 PPO 更简单、更直接的替代方案。

要理解 DPO,首先了解传统的基于 PPO 的对齐方法会有所帮助:

PPO 方法(两步过程)

  1. 训练奖励模型(Train a Reward Model):首先,收集人类反馈数据,即人们对不同 LLM 响应进行评分或比较(例如,“响应 A 比响应 B 更好”)。此数据用于训练一个单独的 AI 模型,称为奖励模型(reward model),其任务是预测人类会对任何新响应给出多少分数。
  2. 用 PPO 进行微调(Fine-Tune with PPO):接下来,使用 PPO 对 LLM 进行微调。LLM 的目标是生成能从奖励模型获得最高分数的回应。奖励模型在训练博弈中充当“评判者”。

这个两步过程可能复杂且不稳定。例如,LLM 可能会找到一个漏洞,学会“欺骗”奖励模型,从而为不好的回应获得高分。

DPO 方法(直接过程):DPO 完全跳过了奖励模型。它不是将人类偏好转化为奖励分数,然后优化该分数,而是直接使用偏好数据来更新 LLM 的策略

它的工作原理是利用一种数学关系,直接将偏好数据与最优策略联系起来。它本质上是教导模型:“增加生成类似于首选回应的概率,并减少生成类似于非首选回应的概率。

总而言之,DPO 通过直接在人类偏好数据上优化语言模型来简化对齐。这避免了训练和使用单独的奖励模型的复杂性和潜在的不稳定性,使对齐过程更高效、更稳健。

实际应用和用例(Practical Applications & Use Cases)

自适应智能体通过由经验数据驱动的迭代更新,在可变环境中展现出增强的性能。

  • 个性化助理智能体通过对个体用户行为的长期分析来完善互动协议,确保生成高度优化的响应。
  • 交易机器人智能体通过根据高分辨率的实时市场数据动态调整模型参数来优化决策算法,从而最大化财务回报并减轻风险因素。
  • 应用智能体通过基于观察到的用户行为进行动态修改来优化用户界面和功能,从而提高用户参与度和系统直观性。
  • 机器人和自动驾驶车辆智能体通过整合传感器数据和历史行动分析来增强导航和响应能力,从而在各种环境条件下实现安全高效的操作。
  • 欺诈检测智能体通过利用新识别出的欺诈模式来精炼预测模型,从而改善异常检测,增强系统安全并最小化财务损失。
  • 推荐智能体通过采用用户偏好学习算法来提高内容选择的精确度,提供高度个性化且与上下文相关的推荐。
  • 游戏 AI 智能体通过动态调整策略算法来增强玩家参与度,从而增加游戏的复杂性和挑战性。
  • 知识库学习智能体(Knowledge Base Learning Agents):智能体可以利用检索增强生成(RAG)来维护一个动态的、包含问题描述和已证明解决方案的知识库(见第 14 章)。通过存储成功的策略和遇到的挑战,智能体可以在决策过程中参考这些数据,使其能够通过应用先前成功的模式或避免已知的陷阱来更有效地适应新情况。

案例研究:自改进编码智能体(The Self-Improving Coding Agent, SICA)

由 Maxime Robeyns、Laurence Aitchison 和 Martin Szummer 开发的自改进编码智能体(SICA)代表了基于智能体学习的进步,展示了一个智能体修改自身源代码的能力。这与一个智能体训练另一个智能体的传统方法形成对比;SICA 既是修改者也是被修改的实体,它迭代地完善其代码库,以提高在各种编码挑战中的性能。

SICA 的自我改进通过一个迭代周期运行(见图 1)。最初,SICA 审查其过去版本的存档及其在基准测试中的性能。它会选择性能得分最高的版本,该得分是基于一个考虑到成功率、时间和计算成本的加权公式计算得出的。这个被选中的版本随后进行下一轮的自我修改。它分析存档以识别潜在的改进,然后直接修改其代码库。修改后的智能体随后根据基准进行测试,结果被记录在存档中。这个过程重复进行,从而实现了直接从过去性能中学习。这种自我改进机制允许 SICA 在不需要传统训练范式的情况下演进其能力。

图片

图 1:SICA 的自我改进,基于其过去的版本进行学习和适应

SICA 经历了显著的自我改进,带来了代码编辑和导航方面的进步。最初,SICA 采用基本的文件覆写方法进行代码更改。随后,它开发了一个能够进行更智能、上下文感知的编辑的“智能编辑器(Smart Editor)”。这演变为一个“Diff 增强型智能编辑器(Diff-Enhanced Smart Editor)”,它结合了 diff 差异补丁来进行有针对性的修改和基于模式的编辑,以及一个“快速覆写工具(Quick Overwrite Tool)”以减少处理需求。

SICA 进一步实施了“最小 Diff 输出优化(Minimal Diff Output Optimization)”和“上下文敏感型 Diff 最小化(Context-Sensitive Diff Minimization)”,使用抽象语法树(AST)解析来提高效率。此外,还添加了一个“SmartEditor 输入规范器(SmartEditor Input Normalizer)”。在导航方面,SICA 独立创建了一个“AST 符号定位器(AST Symbol Locator)”,利用代码的结构图(AST)来识别代码库中的定义。后来,开发了一个“混合符号定位器(Hybrid Symbol Locator)”,结合了快速搜索和 AST 检查。通过“混合符号定位器中的优化 AST 解析(Optimized AST Parsing in Hybrid Symbol Locator)”进一步优化,以专注于相关的代码段,提高了搜索速度。(见图 2)

图片

图 2:跨迭代的性能。关键改进之处标注了其对应的工具或智能体修改。(图片由 Maxime Robeyns、Martin Szummer、Laurence Aitchison 惠允)

SICA 的架构包括一个用于基本文件操作、命令执行和算术计算的基础工具包。它包含了结果提交和调用专业子智能体(编码、问题解决和推理)的机制。这些子智能体分解复杂任务并管理 LLM 的上下文长度,特别是在扩展的改进周期中。

一个异步的监督者,另一个 LLM,监视 SICA 的行为,识别潜在问题,例如循环或停滞。它与 SICA 通信,并在必要时可以介入停止执行。监督者接收 SICA 行动的详细报告,包括调用图(callgraph)和消息与工具行动的日志,以识别模式和低效率。

SICA 的 LLM 在其上下文窗口(即其短期记忆)中以结构化方式组织信息,这对它的运作至关重要。这种结构包括定义智能体目标的系统提示(System Prompt)、工具和子智能体文档以及系统指令。**核心提示(Core Prompt)**包含问题陈述或指令、开放文件的内容和目录映射。**助理消息(Assistant Messages)**记录了智能体逐步的推理、工具和子智能体调用记录及结果,以及监督者通信。这种组织结构有助于高效的信息流,增强 LLM 操作并减少处理时间和成本。最初,文件更改被记录为 diff,仅显示修改,并定期进行合并。

SICA:代码一瞥

深入研究 SICA 的实现揭示了支撑其能力的几个关键设计选择。如前所述,该系统是基于模块化架构构建的,整合了多个子智能体,例如编码智能体、问题解决智能体和推理智能体。这些子智能体由主智能体调用,很像工具调用,用于分解复杂任务并有效管理上下文长度,特别是在那些扩展的元改进迭代中。

该项目正在积极开发中,旨在为那些对在工具使用和其他智能体任务上对后训练 LLM 感兴趣的人提供一个强大的框架,其完整代码可在 GitHub 仓库 https://github.com/MaximeRobeyns/self_improving_coding_agent/ 上获取,供进一步探索和贡献。

为了安全起见,该项目强烈强调 Docker 容器化,这意味着智能体在专用的 Docker 容器内运行。鉴于智能体执行 shell 命令的能力,这是一个关键措施,因为它提供了与宿主机器的隔离,减轻了像意外文件系统操作等风险。

为确保透明度和控制,系统通过一个交互式网页提供强大的可观察性,该网页可视化事件总线上的事件和智能体的调用图。这提供了对智能体行动的全面洞察,允许用户检查单个事件、阅读监督者消息,并折叠子智能体轨迹以便更清晰地理解。

在其核心智能方面,智能体框架支持来自各种提供商的 LLM 集成,从而可以试验不同的模型,以找到最适合特定任务的模型。最后,一个关键组件是异步监督者,这是一个与主智能体并发运行的 LLM。该监督者定期评估智能体的行为是否存在病理偏差或停滞,并通过发送通知甚至在必要时取消智能体的执行进行干预。它接收系统状态的详细文本表示,包括调用图和 LLM 消息、工具调用及响应的事件流,这使其能够检测低效模式或重复工作。

在最初的 SICA 实现中,一个显著的挑战是促使基于 LLM 的智能体在每次元改进迭代中独立提出新颖、创新、可行且引人入胜的修改。这种局限性,特别是在培养 LLM 智能体的开放式学习和真实创造力方面,仍然是当前研究的一个关键领域。

AlphaEvolve 和 OpenEvolve

AlphaEvolve 是 Google 开发的一个 AI 智能体,旨在发现和优化算法。它利用大语言模型(特别是 Gemini 模型:Flash 和 Pro)、自动化评估系统以及一个进化算法框架相结合的方法。该系统旨在推动理论数学和实际计算应用的进步。

AlphaEvolve 采用 Gemini 模型群。Flash 用于生成广泛的初始算法提案,而 Pro 则提供更深入的分析和精炼。提议的算法随后根据预定义的标准进行自动评估和评分。此评估提供反馈,用于迭代改进解决方案,从而带来优化和新颖的算法。

在实际计算中,AlphaEvolve 已部署在 Google 的基础设施内。它已证明可以改善数据中心调度,从而将全球计算资源使用量减少 0.7%。它还通过为即将推出的张量处理单元(TPUs)中的 Verilog 代码建议优化,为硬件设计做出了贡献。此外,AlphaEvolve 还加速了 AI 性能,包括将 Gemini 架构的一个核心内核速度提高了 23%,并将用于 FlashAttention 的低级 GPU 指令优化高达 32.5%

在基础研究领域,AlphaEvolve 为矩阵乘法新算法的发现做出了贡献,包括一个用于 4x4 复值矩阵的方法,该方法使用 48 次标量乘法,超过了先前已知的解决方案。在更广泛的数学研究中,它在 75% 的情况下重新发现了超过 50 个开放问题的现有最先进解决方案,并在 20% 的情况下改进了现有解决方案,例如在接吻数问题上的进展。

OpenEvolve 是一个利用大语言模型(LLMs)的进化编码智能体(见图 3),用于迭代优化代码。它编排了一个由 LLM 驱动的代码生成、评估和选择的管道,以持续增强各种任务的程序。OpenEvolve 的一个关键方面是它能够进化整个代码文件,而不仅仅局限于单个函数。该智能体设计用于多功能性,支持多种编程语言,并与用于任何 LLM 的 OpenAI 兼容 API 兼容。此外,它结合了多目标优化,允许灵活的提示工程,并能够进行分布式评估,以高效处理复杂的编码挑战。

图片

图 3:OpenEvolve 内部架构由一个控制器管理。该控制器编排着几个关键组件:程序采样器(program sampler)、程序数据库(Program Database)、评估器池(Evaluator Pool)和 LLM 群(LLM Ensembles)。其主要功能是促进它们的学习和适应过程以增强代码质量。

以下代码片段使用 OpenEvolve 库对程序进行进化优化。它使用初始程序、评估文件和配置文件的路径来初始化 OpenEvolve 系统。evolve.run(iterations=1000) 行启动进化过程,运行 1000 次迭代以找到程序的改进版本。最后,它打印在进化过程中找到的最佳程序的指标,格式化为小数点后四位。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from openevolve import OpenEvolve

# Initialize the system
evolve = OpenEvolve(
   initial_program_path="path/to/initial_program.py",
   evaluation_file="path/to/evaluator.py",
   config_path="path/to/config.yaml"
)

# Run the evolution
best_program = await evolve.run(iterations=1000)
print(f"Best program metrics:")
for name, value in best_program.metrics.items():
   print(f"  {name}: {value:.4f}")

概要速览(At a Glance)

是什么 (What)

AI 智能体通常在动态且不可预测的环境中运行,预先编程的逻辑不足。当面临最初设计时未预料到的新情况时,其性能可能会下降。如果不能从经验中学习,智能体就无法优化其策略或随着时间推移个性化其交互。这种僵化限制了它们的有效性,并阻止它们在复杂的现实场景中实现真正的自主性。


为什么 (Why)

标准化的解决方案是集成学习和适应机制,将静态智能体转变为动态、不断演进的系统。这使得智能体能够根据新数据和交互自主地完善其知识和行为。智能体系统可以使用各种方法,从强化学习到更高级的技术,例如在自改进编码智能体(SICA)中看到的自我修改。像 Google 的 AlphaEvolve 这样的高级系统利用 LLM 和进化算法来发现全新的、更高效的复杂问题解决方案。通过不断学习,智能体可以掌握新任务、增强其性能,并适应不断变化的环境,而无需持续的手动重新编程。


经验法则 (Rule of thumb)

当构建必须在动态、不确定或不断演变的环境中运行的智能体时,请使用此模式。它对于需要个性化持续性能改进以及自主处理新情况能力的应用至关重要。


视觉摘要

图片

图 4:学习与适应模式

关键要点(Key Takeaways)

  • 学习与适应关乎智能体通过利用其经验来更好地完成任务和处理新情况。
  • 适应”是智能体行为或知识因学习而产生的可见变化
  • SICA,即自改进编码智能体,通过根据过去的性能修改其代码来实现自我改进。这带来了像智能编辑器AST 符号定位器这样的工具。
  • 拥有专业的“子智能体”和“监督者”有助于这些自改进系统管理大型任务并保持正常运行。
  • LLM 的“上下文窗口”的设置方式(包括系统提示、核心提示和助理消息)对于智能体高效运作至关重要
  • 这种模式对于需要在不断变化、不确定或要求个性化的环境中运作的智能体至关重要。
  • 构建会学习的智能体通常意味着将它们与机器学习工具连接起来并管理数据流
  • 一个配备了基本编码工具的智能体系统,可以自主编辑自身,从而提高其在基准任务上的性能。
  • AlphaEvolve 是 Google 的 AI 智能体,它利用 LLM 和进化框架自主发现和优化算法,显著增强了基础研究和实际计算应用。

结论(Conclusion)

本章探讨了学习与适应在人工智能中的关键作用。AI 智能体通过持续获取数据和经验来增强其性能。自改进编码智能体(SICA)通过自主修改代码来提高其能力,为我们提供了一个实例。

我们回顾了智能体 AI 的基本组成部分,包括架构、应用、规划、多智能体协作、记忆管理以及学习与适应。学习原则对于多智能体系统中的协同改进尤为重要。为了实现这一点,调整数据必须准确反映完整的交互轨迹,捕获每个参与智能体的个体输入和输出

这些要素促成了重大的进步,例如 Google 的 AlphaEvolve。该 AI 系统通过 LLM、自动化评估和进化方法独立发现和完善算法,推动了科学研究和计算技术的进展。这些模式可以组合起来构建复杂的 AI 系统。AlphaEvolve 等发展表明,AI 智能体实现自主算法发现和优化是可行的。

参考文献(References)