青训营笔记:AI agent 扩展学习

259 阅读8分钟

(AI Agent) 指能自主感知环境并采取行动实现目标的智能体。基于大语言模型(LLM)的 AI Agent 利用 LLM 进行记忆检索、决策推理和行动顺序选择等,把Agent的智能程度提升到了新的高度。LLM驱动的Agent具体是怎么做的呢?接下来的系列分享会介绍 AI Agent 当前最新的技术进展。

一个精简的Agent决策流程:

Agent:P(感知)→ P(规划)→ A(行动)

感知(Perception) 是指Agent从环境中收集信息并从中提取相关知识的能力。

规划(Planning) 是指Agent为了某一目标而作出的决策过程。

行动(Action) 是指基于环境和规划做出的动作。

其中,Policy是Agent做出Action的核心决策,而行动又通过观察(Observation) 成为进一步Perception的前提和基础,形成自主地闭环学习过程。

框架

AutoGPT

AutoGPT 定位类似个人助理,帮助用户完成指定的任务,如调研某个课题。AutoGPT比较强调对外部工具的使用,如搜索引擎、页面浏览等。

user-images.githubusercontent.com/70048414/23…

GPT-Engineer

GPT-Engineer 旨在根据自然语言中指定的任务创建一个完整的代码仓库。GPT-Engineer 被指导去构建的一系列较小的组件,并在需要时要求用户输入以澄清问题

MetaGPT

MetaGPT 现在可以生成2000行左右代码的项目,未来目标是万行甚至更长。

ChatDev

直接使用LLMs生成整个软件系统可能会导致严重的代码幻觉,如不完整的实现、缺失的依赖关系和未被发现的错误。这些幻觉可能源于任务的不具体性和决策中缺乏交叉审查。

ChatDev 的思路借鉴自瀑布模型(waterfall model) ,将开发过程分为四个明确的时间顺序阶段:设计(designing)、编码(coding)、测试(testing)和文档编制(documenting) 。每个阶段都会涉及到一组代理人,例如程序员、代码审查者和测试工程师,以促进合作对话并促进流畅的工作流程。聊天链(Chat Chain) 充当了一个促进者的角色,将每个阶段细分为原子子任务。

ChatDev 通过将每个阶段细分为多个原子性的聊天,每个聊天都专注于涉及两个不同角色指导者:instructor/user, 发号施令的合作者/助手:collaborator/assistant, 干活的)的面向任务的角色扮演。通过指导和合作两个角色的代理人之间的不断交互,实现了每个聊天的期望输出。

这个过程如下图中展示,其中展示了一系列中间态为解决任务而开展的聊天,称为“聊天链(Chat Chain) ”。在每个聊天中,一个指导者启动指令,引导对话朝向任务完成的方向,而助手则遵循指令,提供适当的解决方案,并参与关于可行性的讨论。指导者和助手通过多轮对话进行合作,直到他们达成共识并确定任务已经成功完成。

架构由阶段级聊天级组件组成。在阶段级别上,使用瀑布模型将软件开发过程分解为四个顺序阶段。在聊天级别上,每个阶段进一步划分为原子聊天。这些原子聊天涉及两个代理之间的任务导向角色扮演,促进合作性沟通。沟通遵循指令跟随的风格,代理互动以完成每个聊天中的特定子任务。

这种方法确保了对客户需求的分析,创新想法的生成,原型系统的设计和实施,潜在问题的识别和处理,调试信息的解释,吸引人的图形的创建,以及用户手册的生成。

聊天链提供了软件开发过程的透明视角,揭示了决策路径,并在出现错误时提供了调试的机会,使用户能够检查中间输出、诊断错误,并在必要时干预推理过程。此外,聊天链确保在每个阶段都对特定的子任务有一个细粒度的关注,促进了有效的合作,并推动了期望输出的实现。

在代码生成中,简单直接的指令有时会带来不预期的“幻觉”错误。这在代码生成环节尤为明显。比如,如果仅简单地告诉程序员去实现所有未完成的函数,这种不够精确的指令可能会误导程序,如错误地包含被标记为 unimplemented 的接口方法。为了解决这个问题,作者引入了 “思维指令(thought instruction) ” 的机制,这一思路受到了 CoT 的启发。这一机制着重于在指令中明确地表达解决问题的思维过程,就像按步骤解决不同的子任务一样。从图 4(a) 和 4(b) 可以看到,这种方法会首先更改角色,询问哪些函数尚未完成,再切换回原来的角色给出更具体的实施步骤。借助“思维指令”,代码编写过程更为专注、直接。

明确的指令可以帮助消除歧义,确保生成的代码完全符合预期。这不仅使得代码生成更为精确和有上下文感,还大大减少了“幻觉”错误,保证输出代码的可靠性和完整性。

存在的问题

让agent之间互相对话,除了费钱外,最终的成功率其实不算高

角色扮演(role-playing) 的agents对话,还存在很多问题,比如几个月前发表的 CAMEL 论文,总结了发现的几类问题:

  • 角色转换(Role Flipping) :一大问题是助理与用户在对话中的角色转换。这通常发生在助理开始主导对话,提供指导或命令,而非响应用户的指示,导致对话中的角色逆转。为避免此类情况,助理应尽量避免提问,因为这会加剧问题。
  • 助理的重复性回应(Assistant Repeats Instruction) :我们还发现,有时助理仅仅重复用户的指令,而并没有发生角色转换。
  • 敷衍的答复(Flake Replies) :有时,助理会给出模糊的回答,例如 "I will..."。这种回应并不助于完成目标,因为尽管助理表达了意愿,但最终却未付诸行动。
  • 对话陷入死循环(Infinite Loop of Messages) :助理和用户有时会陷入一个内容空洞的对话循环,如不停地互相致谢或道别,但对话没有任何实质进展。有趣的是,尽管双方都知道对话陷入循环,但都无法打破这种僵局。

总结

AutoGPTGPT-EngineerGenerative AgentsMetaGPTChatDev
场景个人小助理职业/项目场景生活场景职业/项目场景职业/项目场景
Agents数量
环境(Environment)--其他Agents + 外部世界其他Agents其他Agents
与用户交互量
记忆(Memory)短期短期短期 + 长期短期为主全局变量 + 当前阶段的对话
Agents的动作执行顺序--并行串行串行
动作空间-
输入和输出格式偏结构化偏结构化偏自然语言偏结构化偏结构化
动作轮次-
对反思与规划的要求低;goal 和 plan 基本都事先定好低;goal 和 plan 基本都事先定好
Agents之间如何交互--对话获取其他agent执行动作所产生的结果全局变量 + 当前阶段的多轮对话

项目

斯坦福AI小镇

虚拟小镇,一个agent就是一个虚拟人物,25个agents之间的故事。

代理(Agents)感知他们的环境,当前代理所有的感知(完整的经历记录)都被保存在一个名为 "记忆流"(memory stream) 中。基于代理的感知,系统检索相关的记忆,然后使用这些检索到的行为来决定下一个行为。这些检索到的记忆也被用来形成长期计划,并创造出更高级的反思,这些都被输入到记忆流中以供未来使用。

AgentVerse:ChatDev

提供了一个多功能的框架,简化了为大型语言模型(LLMs)创建自定义多智能体环境的过程。

github.com/OpenBMB/Age…

将环境抽象为这五个组件创建了一个高度灵活且可扩展的框架,可以构建和定制自己的多智能体环境。

SPRING:GPT4简易版我的世界

SPRING: GPT-4 Out-performs RL Algorithms by Studying Papers and Reasoning**

思路是比较好的,其实就是利用了环境论文作为先验知识。

目前好像还没开源

LLM:星际争霸2