(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) :助理和用户有时会陷入一个内容空洞的对话循环,如不停地互相致谢或道别,但对话没有任何实质进展。有趣的是,尽管双方都知道对话陷入循环,但都无法打破这种僵局。
总结
| ㅤ | AutoGPT | GPT-Engineer | Generative Agents | MetaGPT | ChatDev |
|---|---|---|---|---|---|
| 场景 | 个人小助理 | 职业/项目场景 | 生活场景 | 职业/项目场景 | 职业/项目场景 |
| Agents数量 | 单 | 单 | 多 | 多 | 多 |
| 环境(Environment) | - | - | 其他Agents + 外部世界 | 其他Agents | 其他Agents |
| 与用户交互量 | 无 | 少 | 少 | 无 | 无 |
| 记忆(Memory) | 短期 | 短期 | 短期 + 长期 | 短期为主 | 全局变量 + 当前阶段的对话 |
| Agents的动作执行顺序 | - | - | 并行 | 串行 | 串行 |
| 动作空间 | 小 | - | 大 | 小 | 小 |
| 输入和输出格式 | 偏结构化 | 偏结构化 | 偏自然语言 | 偏结构化 | 偏结构化 |
| 动作轮次 | 少 | - | 多 | 少 | 中 |
| 对反思与规划的要求 | 高 | 低 | 高 | 低;goal 和 plan 基本都事先定好 | 低;goal 和 plan 基本都事先定好 |
| Agents之间如何交互 | - | - | 对话 | 获取其他agent执行动作所产生的结果 | 全局变量 + 当前阶段的多轮对话 |
项目
斯坦福AI小镇
- Generative Agents: Interactive Simulacra of Human Behavior , 2023.04, Stanford
- 代码已开源:github.com/joonspk-res…
虚拟小镇,一个agent就是一个虚拟人物,25个agents之间的故事。
代理(Agents)感知他们的环境,当前代理所有的感知(完整的经历记录)都被保存在一个名为 "记忆流"(memory stream) 中。基于代理的感知,系统检索相关的记忆,然后使用这些检索到的行为来决定下一个行为。这些检索到的记忆也被用来形成长期计划,并创造出更高级的反思,这些都被输入到记忆流中以供未来使用。
AgentVerse:ChatDev
提供了一个多功能的框架,简化了为大型语言模型(LLMs)创建自定义多智能体环境的过程。
将环境抽象为这五个组件创建了一个高度灵活且可扩展的框架,可以构建和定制自己的多智能体环境。
SPRING:GPT4简易版我的世界
SPRING: GPT-4 Out-performs RL Algorithms by Studying Papers and Reasoning**
思路是比较好的,其实就是利用了环境论文作为先验知识。
目前好像还没开源