鹤啸九天 自律更自由,平凡不平庸 Less is More

大模型代理机器人 LLM Agent

2023-07-13
阅读量

Notes(温馨提示):

  1. ★ 首次阅读建议浏览:导航指南
  2. 右上角工具条搜索文章,右下角二维码关注微信公众号(鹤啸九天),底栏分享、赞赏、评论
  3. ★ 转载请注明文章来源,知识点积累起来不容易,水滴石穿,绳锯木断,谢谢理解
  4. ★ 如有疑问,邮件讨论,欢迎贡献优质资料


LLM 智能体

资讯

论文综述

综述:基于大型语言模型的自主机器人

  • A Survey on Large Language Model based Autonomous Agents
    • 基于 LLMs 的人工智能代理在社会科学、自然科学和工程学领域的各种应用,以及基于 LLMs 的自主代理常用的评估策略,面临的若干挑战和未来发展方向等
  • 论文:ProAgent: Building Proactive Cooperative AI with Large Language Models
    • 【ProAgent:利用大型语言模型构建主动式合作AI】
    • 构建具有自适应行为的人工智能是 AGI 研究的一个关键重点。目前开发合作代理主要依赖于基于学习的方法,策略泛化在很大程度上取决于过去与特定队友的互动。这些方法限制了代理在面对新队友时重新调整策略的能力。
    • 该研究提出了 ProAgent 框架,利用大型语言模型(LLMs)能够预测队友即将做出的决定,并为自己制定增强型计划。擅长合作推理,能够动态调整自己的行为。
    • 此外,ProAgent 框架还具有高度的模块化和可解释性,便于无缝集成,以应对各种协调场景。
    • 在与人类代理模型合作时,与目前最先进的 COLE 相比,ProAgent 的性能平均提高了 10% 以上。
  • 论文:Building Emotional Support Chatbots in the Era of LLMs
    • 【在大型语言模型时代,打造情感支持聊天机器人】
    • 将情感支持融入各种对话场景会带来深远的社会效益,如社交互动、心理健康咨询和客户服务。然而,数据可用性有限、缺乏公认的模型训练范例等一些尚未解决的难题阻碍了这一领域的实际应用。
    • 该研究介绍了一种新方法,该方法综合了人类的洞察力和大型语言模型(LLM)的计算能力,进而策划了一个广泛的情感支持对话数据集——ExTES。该方法以精心设计的、跨越不同场景的对话集作为生成种子。通过利用 ChatGPT 的上下文学习潜力,我们递归生成了一个 ExTensible 情感支持对话数据集,命名为 ExTES。 对所生成模型的详尽评估证明了该模型在提供情感支持方面的能力,标志着情感支持机器人领域迈出了关键的一步。
  • 论文:Self-Deception: Reverse Penetrating the Semantic Firewall of Large Language Models
    • 【自我欺骗:反向穿透大型语言模型的语义防火墙】
    • 以 ChatGPT 为代表的大型语言模型(LLMs)在为各种社会需求提供便利的同时,还降低了生成有害内容的成本。 尽管 LLMs 开发人员部署了语义层面的防御措施,但这些防御措施并非万无一失,一些攻击者通过制作“越狱”提示,使 LLMs 忘记内容防御规则,从而回答任何不当问题。迄今为止,业界和学术界都没有明确解释这些语义级攻击和防御背后的原理。 受通过反向隧道穿透传统防火墙的攻击的启发,该研究提出了一种“自我欺骗”攻击,通过诱导 LLMs 生成有利于越狱的提示来绕过语义防火墙。 他们在七个虚拟场景中用六种语言(英语、俄语、法语、西班牙语、中文和阿拉伯语)生成了共计 2520 个攻击,目标是三种最常见的违规类型:暴力、仇恨和色情。
    • 结果显示,GPT-3.5-Turbo 和 GPT-4 两个模型的成功率分别为 86.2% 和 67%,失败率分别为 4.7% 和 2.2%,这凸显了拟议攻击方法的有效性。

论文介绍(机翻)

  • 长期以来,人类一直追求与甚至超越人类水平的人工智能(AI),而AI代理被认为是这种追求的有前途的载体。AI代理是感知环境、做出决策并采取行动的人工实体。许多努力已经致力于发展智能代理,但它们主要关注算法或训练策略的进步,以增强特定能力或在特定任务上的表现。
  • 事实上,社区缺乏的是一个通用且强大的模型,作为设计AI代理的起点,可以适应各种场景。由于它们展示的多功能能力,大型语言模型(LLM)被视为人工通用智能(AGI)的潜在火花,为构建一般化的AI代理提供了希望。许多研究人员已经利用LLM作为构建AI代理的基础,并取得了重大进展。在本文中,对基于LLM的代理进行全面调查。从其哲学起源到在AI中的发展追溯代理的概念,并解释了LLM为何是代理的合适基础。在此基础上,我们提出了一个基于LLM的代理的通用框架,包括三个主要组件:大脑、感知和行动,该框架可以根据不同的应用进行定制。随后,我们探讨了LLM代理在单一代理场景、多代理场景和人代理合作方面的广泛应用。在此基础上,我们深入了解代理社会,探讨基于LLM的代理的行为和个性、代理社会中出现的社会现象以及它们为人类社会提供的见解。

  • 【2023-9-11】一文盘点「AI自主智能体」的构建、应用、评估
  • 基于 LLM 的自主智能体一览,包括工具智能体、模拟智能体、通用智能体和领域智能体
  • Construction of LLM-based Autonomous Agent

LLM

1981年希拉里·普特南在《理性,真理与历史》一书中提出假想,“缸中之脑”:参考

有一个科学家实施了这样一个手术,他把别人的大脑切下来,放进一个充满营养液的缸中,营养液可以维持大脑正常运转。大脑的神经末梢连接在了电线上,电线的另一边是一台计算机。这台计算机模拟真实世界的参数,通过电线给大脑传送信息,让大脑保持一切完全正常的感觉。对于大脑来说,似乎人、物体、天空还都存在。

大模型是瓮中之脑,《黑客帝国》,《源代码》这类电影很关键的一个预设

假如把人脑放到一个充满营养液的罐子里,活下来,那这时候就有一个超级真实的虚幻世界,但却不再能干涉现实。

当前的LLM有一定智力并且拥有大量知识,但除了内容生成这类通用能力,在别的领域还不清楚它到底能干什么

人类日常要处理的任务场景

  • 离散孤立(环境无关): 无时空依赖
    • 如:编程、下围棋、内容生成
  • 连续、与环境捆绑: 环境相关
    • 如:外卖、打车、经营企业

瓮中之脑只能解决前者,而绝大多数场景都是后者,解决的关键在于AI Agent

所以,AI Agent是大模型与场景间价值传递桥梁

业界认为基于大模型的应用集中在两个方向上:RAGAgent,无论哪一种应用,设计、实现和优化能够充分利用大模型(LLM)潜力的应用都需要大量的努力和专业知识。

智能体 vs LLM

这类项目绝大多数的主要创新还是在 prompt 层面,通过更好的提示词来激发模型的能力,把更多原先需要通过代码来实现的流程“硬逻辑”转化为模型自动生成的“动态逻辑”。

目前语言模型只能响应用户的查询指令,实现一些生成任务,比如写故事、生成代码等。而以 AutoGPT, GPT-EngineerBabyAGI等项目为代表的大型动作模型(Large-Action Models,LAM)将语言模型作为智能体的核心大脑,将复杂任务分解,并在每个子步骤实现自主决策,无需用户参与即可解决问题。

LAM的崛起,也标志着语言模型的研发正在走向新阶段

Agent → AGI

【2023-7-24】最近都不卷大模型了,开始卷 AI Agents

  • LLM诞生之初,大家对于其能力的边界还没有清晰的认知,以为有了LLM就可以直通AGI了,路线: LLM -> AGI
  • 过了一段时间,发现LLM的既有问题(幻觉问题、容量限制…),导致并不能直接到达AGI,于是路线变成了: LLM -> Agent -> AGI
    • 借助一个或者多个Agent,构建一个新的形态,来继续实现通往AGI的道路。但这条路是否能走通,以及还面临着哪些问题,都是有待进一步验证的。

由于大模型的出现,AI Agents 衍生出了一种新的架构形式: 《LLM Powered Autonomous Agents》

  • 将最重要的「任务规划」部分完全交由LLM,而做出这一设计的依据在于默认LLM具有任务分解和反思的能力。

AI Agent

AI Agent是大模型与场景间价值传递桥梁。

  • AI Agent 被认为是 OpenAI 发力的下一个方向

OpenAI 联合创始人 Andrej Karpathy 提到:

“相比模型训练方法,OpenAI 内部目前更关注 Agent 领域的变化,每当有新的 AI Agents 论文出来的时候,内部都会很兴奋并且认真地讨论”

而在更早之前,Andrej 还评价 AutoGPT 是 Prompt Engineering 下一阶段的探索方向。

AI Agent 定义

Agent 起源于拉丁语中的Agere,意思是“to do”。

Agent 可以追溯到明斯基的《society of mind》一书。

  • 明斯基对Agent的定义有点抽象:“社会中某个个体经过协商后可求得问题的解,这个个体就是agent”。

计算机领域,Agent是一种通过传感器感知其环境,并通过执行器作用于该环境的实体,因此,可以把实体定义为一种从感知序列到实体动作的映射。一般认为,Agent是指驻留在某一环境下,能持续自主地发挥作用,具备自主性、反应性、社会性、主动性等特征的计算实体。

智能 是Agent 与环境相互作用的涌现属性。

Agent 核心能力是完成任务(achieve goals)、获取知识(acquiring knowledge)和进化(improve)

AI Agent 分类

大语言模型(LLM)出现后,其通用文本处理能力使通用 Agent(General Agent)呼之欲出,于是出现了各种LLM-powered agent。与此同时,基于RL的“传统”Agent仍在发展,还有应用场景广泛的Multi-Agent等。

Agent 是与大模型主动交互的一种重要程序形式,而 Multi-Agent 则是多个Agent利用大模型完成复杂任务的系统机制。

更多论文进展见文章

AI Agent 评测

SuperCLUE

实时榜单

GPT-4 > ChatGLM3-Turbo > Claude2-100k > GPT-3.5 Turbo > Baichuan2-13b-Chat

资讯

10月27日,清华&智谱AI推出了全自研的第三代基座大模型ChatGLM3及相关系列产品

  • ChatGLM3 集成了自研的 AgentTuning 技术,激活了模型智能体能力,尤其在规划和执行方面,相比于 ChatGLM2 提升明显,并且支持工具调用、代码执行、游戏、数据库操作、知识图谱搜索与推理、操作系统等复杂场景。

ChatGLM3 在 SuperCLUE-Agent 评测集上的表现如何?与国内外代表性大模型相比处于什么位置?在各项智能体关键能力上如工具使用、任务规划等任务上的表现如何?

SuperCLUE-Agent 聚焦于Agent能力的多维度基准测试,包括3大核心能力、10大基础任务,可用于评估大语言模型在核心Agent能力上的表现,包括: 工具使用任务规划长短期记忆能力

  • (1)工具使用:调用api、检索api、规划api和通用工具使用
    • 通用工具:如 搜索引擎、浏览网页、操作本地文件、搜索本地文件、使用数据库等等。
  • (2)任务规划:任务分解、自我反思、思维链
    • 任务规划: AI Agent将大型任务分解为较小的、可管理的子目标,从而能够高效地处理复杂任务的能力
    • 自我反思: 自我批评和反思,从错误中吸取教训,并为未来的步骤进行改进,从而提高最终结果
    • 思维链: 将困难的任务分解为更小、更简单的步骤
  • (3)长短期记忆:多文档问答、少样本学习、长程对话
    • 多文档问答: 多个文档中提取并组合答案
    • 长程对话: 用大模型谈论几个话题并在其中切换, 测试方法是检索由多个主题组成的长对话中的开头和中间过程的主题
  • 评测数据示例

结论

  • 1:SuperCLUE-Agent基准上,ChatGLM3 在智能体能力上表现不俗,刷新了SuperCLUE-Agent国内模型最高分,暂列榜单首位。
  • 2:相比 ChatGLM2,ChatGLM3 有67.95%的显著提升。
  • 3:ChatGLM3 在任务分解、检索API、通用工具使用、多文档对话、少样本示例学习等任务处于国内头部水平,在自我反思任务上有一定的优化空间。

16个闭源/开源的模型整体表现

RL-based Agent

RL-based agent 研究相对较少,可能是 RL从头开始训练,缺少很多知识,因此在性能上很难对拼 LLM-based Agent。

但也有工作利用RL在环境中探索、学习的能力和LLM丰富的世界知识,研究如何将 RL-based、LLM-based agent结合。

LLM-based Agent

当前 Agent 文章还是以 LLM-based 方法为主,基于LLM做各种推理、规划等。

  • ICLR的投稿中设计LLM-based agent架构来解决特定问题的方法不多,这类研究我会打上【task-specifc】的标签。

单 Agent 系统

Agent 特点

Agent 一般结构如下图所示:

  • 图片

Agent 的主要特性有:

  • 自主性(Autonomy) :运行无需人类或其它 Agent 的直接干预,对其自身行为及内部状态进行某种控制。
  • 社会性(Social Ability) 能通过某种 通信与其它 Agent(或人类)进行交互。交互主要有三种类型:协作(Cooperation)、协调(Coordination)和协商 (Negotiation)。
  • 反应性(Reactivity):能感知环境(可以是物理世界、一个经图形用户接口连接的用户、一系列其 它Agent、Internet 或所有这些的组合),并能对环境的变化及时作出反应。
  • 主动性(Pro-activeness):不但能对环境作出反应,能够积极主动地做出使其目标得以实现的行为。

如果尝试对Agent做一点儿形式化表达,可能是这样的:

  • Agent = platform + agent program
  • platform = computing device + sensor + action
  • agent program 是 agent function 的真子集

LLM时代的Agent

LLM语境下,Agent可以理解为在某种能自主理解、规划决策、执行复杂任务的智能体。

Agent 并非ChatGPT升级版,它不仅告诉你“如何做”,更会帮你去做。如果Copilot副驾驶,那么Agent就是主驾驶

自主Agent是由人工智能驱动的程序,当给定目标时,能够自己创建任务、完成任务、创建新任务、重新确定任务列表的优先级、完成新的顶级任务,并循环直到达到目标。

最直观的公式

Agent = LLM + Planning + Feedback + Tool use

Agent 让 LLM 具备目标实现能力,并通过自我激励循环来实现这个目标。

  • 并行(同时使用多个提示,试图解决同一个目标)和单向(无需人类参与对话)。

大模型替代了传统 agent 中的规则引擎以及知识库,Agent提供了并寻求推理、观察、批评和验证的对话通道。特别是当配置了正确的提示和推理设置时,单个LLM就可以显示出广泛的功能 ,不同配置的Agent之间的对话可以帮助以模块化并以互补的方式将这些广泛的LLM功能结合起来。

开发人员可以轻松、快速地创建具有不同角色的Agent,例如,使用Agent来编写代码、执行代码、连接人工反馈、验证输出等。通过选择和配置内置功能的子集,Agent的后端也可以很容易地进行扩展,以允许更多的自定义行为。

常见的单Agent 系统

基于大模型的常见单Agent 系统包括:

  • AutoGPT:AutoGPT是一个AI代理的开源实现,它试图自动实现一个给定的目标。它遵循单Agent范式,使用了许多有用的工具来增强AI模型,并且不支持Multi-Agent协作。
  • ChatGPT+ (code interpreter or plugin) :ChatGPT是一种会话AI Agent,现在可以与code interpreter或插件一起使用。code interpreter使ChatGPT能够执行代码,而插件通过管理工具增强了ChatGPT。
  • LangChain Agent:LangChain是开发基于LLM应用的通用框架。LangChain有各种类型的代理,ReAct Agent是其中一个著名的示例。LangChain所有代理都遵循单Agent范式,并不是天生为交流和协作模式而设计的。
  • Transformers Agent:Transformers Agent 是一个建立在Transformer存储库上的实验性自然语言API。它包括一组经过策划的工具和一个用来解释自然语言和使用这些工具的Agent。与 AutoGPT类似,它遵循单Agent范式,不支持Agent间的协作。

Multi-Agent

Multi-Agent(多智能体系统) 指由多个自主个体组成的群体系统,目标是通过个体间的相互信息通信和交互作用。

一般地,Multi-Agent由一系列相互作用的Agent及其相应的组织规则和信息交互协议构成,内部的各个Agent之间通过相互通信、合作、竞争等方式,完成单个Agent不能完成的,大量而又复杂的工作,是“系统的系统”。

Multi-Agent 分类

Multi-Agent 系统(MAS) 主要可以分成以下类别:

  • 独立型:离散型、协作涌现型、竞争型
  • 协作型:相互通讯型(联合规划型和谈判型)、无通讯型
  • 非零和型:与竞争型和无通讯型相关

Multi-Agent 特点

Multi-Agent系统的主要具有以下的特点:

  • 自主性。在Multi-Agent系统中,每个Agent都能管理自身的行为并做到自主地合作或者竞争。
  • 容错性。Agent可以共同形成合作的系统用以完成独立或者共同的目标,如果某几个智能体出现了故障,其他智能体将自主地适应新的环境并继续工作,不会使整个系统陷入故障状态。
  • 灵活性和可扩展性。Multi-Agent系统本身采用分布式设计,Agent具有高内聚低耦合的特性,使得系统表现出极强的可扩展性。
  • 协作能力。Multi-Agent系统是分布式系统,Agent之间可以通过合适的策略相互协作完成全局目标。

大模型领域中的Multi-Agent

基于大模型的应用领域中,当复杂任务被分解成更简单的子任务时,LLM已经被证明了拥有解决复杂任务的能力。Multi-Agent 的通信与协作可以通过“对话”这一直观的方式实现这种子任务的分拆和集成。

为了使基于大模型的Agent适合于Multi-Agent的对话,每个Agent都可以进行对话,它们可以接收、响应和响应消息。当配置正确时 ,Agent可以自动与其他代理进行多次对话,或者在某些对话轮次中请求人工输入,从而通过人工反馈形成RLHF。可对话的Agent设计利用了LLM通过聊天获取反馈并取得进展的强大能力,还允许以模块化的方式组合LLM的功能。

常见的多Agent系统

Multi-Agent 系统

基于大模型的常见Multi-Agent 系统包括:

  • BabyAGI:BabyAGI 是一个用Python脚本实现的人工智能任务管理系统的示例。在这个已实现的系统中,使用了多个基于LLM的代理。例如,有一个Agent用于基于上一个任务的目标和结果创建新任务,有一个Agent用于确定任务列表的优先级,还有一个用于完成任务/子任务的Agent。BabyAGI作为一个Multi-Agent系统,采用静态Agent对话模式,一个预定义的Agent通信顺序。
  • CAMEL:CAMEL 是一个agent 通信框架。它演示了如何使用角色扮演来让聊天Agent相互通信以完成任务。它还记录了Agent的对话, 以进行行为分析和能力理解,并采用初始提 示技术来实现代理之间的自主合作。但是,CAMEL本身不支持工具的使用,比如代码执行。虽然它被提议作为多代理会话的基础设施,但它只支持静态会话模式。
  • Multi-Agent Debate:Multi-Agent Debate试图构建具有多代理对话的LLM应用程序,是鼓励LLM中发散思维的有效方式,并改善了LLM的事实性和推理。在这两种工作中 ,多个LLM推理实例被构建为多个Agent来解决与Agent争论的问题。每个Agent都是一个LLM推理实例,而不涉及任何工具或人员,并且Agent间的对话需要遵循预定义的顺序。
  • MetaGPT:MetaGPT 是一种基于Multi-Agent对话框架的LLM自动软件开发应用程序。他们为各种gpt分配不同的角色来协作开发软件,针对特定场景制定专门的解决方案。

LLM 应用开发框架:Autogen

基于Multi-Agent的LLM 应用开发框架:Autogen

AutoGen 是一个用于简化 LLM 工作流的编排、优化和自动化的开发框架。它提供了可定制和可对话的Agent,利用 LLM 的最强功能,如 GPT-4,同时通过与人和工具集成以及通过自动聊天在多个Agent之间进行对话来解决它们的局限性。

Autogen 使用Multi-Agent会话启用复杂的基于 LLM 的工作流

构建一个复杂的Multi-Agent会话系统可以归结为:

  • 定义一组具有专门功能和角色的Agent。
  • 定义Agent之间的交互行为,例如,当一个代理从另一个代理接收到消息时应该回复什么。

这两个步骤都是模块化的,使这些Agent可重用和可组合。例如,要构建一个基于代码的问答系统,可以设计Agent及其交互,这样的系统可以减少应用程序所需的手动交互次数。

AutoGen 中的Agent具有由 LLM、人工、工具或这些元素混合启用的功能。例如:

  • 可以通过高级推理特性轻松配置Agent中 LLM 的使用和角色(通过组聊天自动解决复杂任务)。
  • 人工智能和监督可以通过具有不同参与级别和模式的Agent来实现,例如,使用 GPT-4 + 多个人工用户的自动任务解决。
  • Agent具有对 LLM 驱动代码/函数执行的本机支持,例如,通过代码生成、执行和调试自动解决任务,使用提供的工具作为函数。

Autogen 在 github上提供了很多有意思的示例,agentchathumanfeedback.ipynb

Agent 决策流程

人类决策逻辑

人们高效完成一项任务非常成功的经验总结

  • 基于PDCA模型,将完成一项任务进行拆解,按照作出计划、计划实施、检查实施效果
  • 然后将成功的纳入标准,不成功的留待下一循环去解决。

PDCA思维模型

  • Plan 计划 -> Do 执行 -> Check 检查结果 -> Action 处理(纠正偏差)

Agent 决策

基于PDCA模型进行 规划、执行、评估和反思。

  • 规划能力(Plan)-> 分解任务:Agent大脑把大的任务拆解为更小的,可管理的子任务,这对有效的、可控的处理好大的复杂的任务效果很好。
  • 执行能力(Done)-> 使用工具:Agent能学习到在模型内部知识不够时(比如:在pre-train时不存在,且之后没法改变的模型weights)去调用外部API,比如:获取实时的信息、执行代码的能力、访问专有的信息知识库等等。这是一个典型的平台+工具的场景,我们要有生态意识,即我们构建平台以及一些必要的工具,然后大力吸引其他厂商提供更多的组件工具,形成生态。
  • 评估能力(Check)-> 确认执行结果:Agent要能在任务正常执行后判断产出物是否符合目标,在发生异常时要能对异常进行分类(危害等级),对异常进行定位(哪个子任务产生的错误),对异常进行原因分析(什么导致的异常)。这个能力是通用大模型不具备的,需要针对不同场景训练独有的小模型。
  • 反思能力(Action)-> 基于评估结果重新规划:Agent要能在产出物符合目标时及时结束任务,是整个流程最核心的部分;同时,进行归因分析总结导致成果的主要因素,另外,Agent要能在发生异常或产出物不符合目标时给出应对措施,并重新进行规划开启再循环过程。

LLM作为一种智能代理,引发了人们对人工智能与人类工作的关系和未来发展的思考。它让我们思考人类如何与智能代理合作,从而实现更高效的工作方式。而这种合作方式也让我们反思人类自身的价值和特长所在。

Agent决策流程

  • 感知(Perception)→ 规划(Planning)→ 行动(Action)

具体

  • 感知(Perception)是指Agent从环境中收集信息并从中提取相关知识的能力。
  • 规划(Planning)是指Agent为了某一目标而作出的决策过程。
  • 行动(Action)是指基于环境和规划做出的动作。

解读

  • Agent通过感知环境,收集信息并提取相关知识。
  • 然后通过规划为了达到某个目标做出决策。
  • 最后,通过行动基于环境和规划做出具体的动作。

Policy 是 Agent 做出行动的核心决策,而行动又为进一步感知提供了观察的前提和基础,形成了一个自主的闭环学习过程。

Agent 爆发

Agent 大爆发

  • 3月21日,Camel发布。
  • 3月30日,AutoGPT发布。
  • 4月3日,BabyAGI发布。
  • 4月7日,西部世界小镇发布。
  • 5月27日,英伟达AI智能体Voyager接入GPT-4后,直接完胜了AutoGPT。通过自主写代码,它完全独霸了《我的世界》,可以在游戏中进行全场景的终身学习,根本无需人类插手。
  • 同一时间,商汤、清华等共同提出了通才AI智能体 Ghost in the Minecraft (GITM),它同样能够通过自主学习解决任务,表现优异。这些表现优异的AI智能体,简直让人看到了AGI+智能体的雏形

AI Agent 是桥梁

【2023-8-23】AI Agent:大模型与场景间的价值之桥,但不适合当纯技术看

怎么理解AI Agent和特征?

  1. 可重用通行定义,基于感知进行智能判断并采取行动。(陆奇的大模型世界观说)
    • 要和IoT、现有各种系统做深度结合,不可能是Lilian Wen 图里的简单工具的概念, 感知范围大小事实上也定义了AI Agent的范围
  2. 价值序列的初始化
    • 不是感知,而是原则,是绝对必须的输入,但似乎很少被提及。
  3. 三个核心输入输出上都要接受变化。
    • 感知和行动的风格肯定要根据不同的公司要有微调,比如同样是招聘的Agent,不可能期望用感知、行动和价值序列都固定的产品解决所有公司的问题。
  4. 一组算法的组合
    • 大模型与其它算法、领域模型、记忆、规划能力形成一套新的内核,这种内核要有通用性,否则一个是不匹配大模型的通用能力
    • 大模型能力已经通用化了,再配上通用的结构,这种通用能力就能够彻底发挥,相当于给瓮中之脑加了一个终结者的身体。

AI Agent即系统型超级应用

  • 解决具体问题所以是个应用,但具有通用性,而达成通用性的手段其实和过去的操作系统非常类似,并且以大模型为根基。

从西部世界类的元宇宙Agent到具身智能全是Agent。

Agent 有很多种

  • 最基础的和来的最快的应该是纯数字,无场景或者场景极为单薄的AI Agent。
    • 元宇宙型的Agent,谷歌和斯坦福要干的现实版西部世界就是这类。如果放在游戏里就是元宇宙里的智能NPC。这类Agent最大的建设性在于给元宇宙注入生气,最大的破坏性则在于对上古社区的影响可能不咋正向,包括抖音。
  • 第二种Agent则要与现实场景结合,可能是纯粹数字的,也可能不是。比如招聘、营销、空调管理、运维状态监控等。
  • 第三种则是具身机器人。和上一种的区别是完全控制自己的一套外设,上一个则更多的是一种粘合。

这三类都会解决连续运转场景问题,只不过后两个在现实世界使劲,第一个在虚拟世界使劲。

智能体组件

【2023-7-11】下一代语言模型范式LAM崛起!AutoGPT模式席卷LLM,三大组件全面综述:规划、记忆和工具

整体结构

三个关键组件,即规划、记忆和工具

【2023-6-23】翁丽莲(Weng Lilian)博文(LLM Powered Autonomous Agents)详细介绍了Agent架构

  • OpenAI的应用主管
  • 现在是 OpenAI 的 Head of Safety Systems

在一个由LLM驱动的自主代理系统中,LLM充当代理的大脑,并辅以几个关键组成部分:

  • 规划(Planning)
    • 子目标与分解(Subgoal and decomposition):代理将大型任务分解为更小、更易于处理的子目标,从而实现对复杂任务的高效处理。
    • 反思与完善(Reflection and refinement):代理可以对过去的行动进行自我批评和自我反思,从错误中吸取教训,并为未来的步骤进行改进,从而提高最终结果的质量。
  • 记忆(Memory)
    • 短期记忆(Short-term memory):作者认为所有上下文学习(参考 提示工程Prompt Engineering)都是利用模型的短期记忆来学习。
    • 长期记忆(Long-term memory):这为代理提供了在长时间嘞保留和回忆(无限)信息的能力,通常通过利用外部向量存储和快速检索来实现。
  • 工具使用(Tool use)
    • 代理程序学会调用外部API获取模型权重中缺失的额外信息(通常在预训练后很难更改),包括当前信息、代码执行能力、访问专有信息源等。

In a LLM-powered autonomous agent system, LLM functions as the agent’s brain, complemented by several key components:

  • Planning
    • Subgoal and decomposition: The agent breaks down large tasks into smaller, manageable subgoals, enabling efficient handling of complex tasks.
    • Reflection and refinement: The agent can do self-criticism and self-reflection over past actions, learn from mistakes and refine them for future steps, thereby improving the quality of final results.
  • Memory
    • Short-term memory: I would consider all the in-context learning (See Prompt Engineering) as utilizing short-term memory of the model to learn.
    • Long-term memory: This provides the agent with the capability to retain and recall (infinite) information over extended periods, often by leveraging an external vector store and fast retrieval.
  • Tool use
    • The agent learns to call external APIs for extra information that is missing from the model weights (often hard to change after pre-training), including current information, code execution capability, access to proprietary information sources and more.

Planning 规划

一项复杂的任务通常包括多个子步骤,智能体需要提前将任务分解,并进行规划。

任务分解

思维链(Chain of Thought, CoT)已然成为「诱导模型推理」的标准提示技术,可以增强解决复杂任务时的模型性能。

  • 通过「Think step by step」,模型可以利用更多测试时计算(test-time computation)将任务分解为更小、更简单的子步骤,并能够解释模型的思维过程。

思想之树(Tree of Thoughts)在每个子步骤中探索多种推理可能性来扩展CoT。

  • 首先将问题分解为多个思维步,并在每个步骤内生成多个思路,从而创建出一个树结构解决方案;搜索过程可以是BFS(广度优先搜索)或DFS(深度优先搜索),其中每个状态由分类器(经由提示)或多数投票来评估。
  • 任务分解可以通过简单的提示,如「Steps for XYZ.\n1.」,「What are the subgoals for achieving XYZ」 ;或是使用任务相关的指令,如「Write a story outline」可以用于写小说;也可以由人输入。

自我反思 Self Reflection

自我反思可以让自主智能体改进过去的行动决策、纠正之前的错误来迭代改进,在可以试错的现实任务中非常有用。

ReAct通过将动作空间扩展为任务相关的离散动作和语言空间的组合,在LLM中集成了推理和动作,其中动作使得LLM能够与环境交互(例如使用维基百科搜索API),而语言空间可以让LLM以自然语言的方式生成推理轨迹。

ReAct提示模板包含了LLM思考的明确步骤

在知识密集型任务和决策任务的实验中,ReAct 比只用Act(移除Thought)的基线模型效果更好。

Tool Use 工具使用

使用复杂工具是人类高智力的体现,创造、修改和利用外部物体来完成超出身体和认知极限的事情,同样,为LLM配备外部工具也可以显著扩展模型功能。

  • 一只海獭漂浮在水中时,用岩石劈开贝壳的图片。虽然其他一些动物可以使用工具,但其复杂性无法与人类相比。

MRKL(模块化推理、知识和语言),是一个神经符号架构的自主智能体,包含一组「专家」模块和一个用作路由器(router)的通用语言模型,以路由查询到最合适的专家模块。

每个模块可以神经网络,也可以是符号模型,例如数学计算器、货币转换器、天气API

研究人员做了一个微调语言模型以调用计算器的实验,使用算术作为测试用例,结果表明,解决verbal数学问题比解决明确陈述的数学问题更难,因为LLM(7B Jurassic 1-large 模型)不能可靠地为基本算术提取正确的参数,也凸显了符号工具的重要性,以及了解何时利用何种工具的重要性。

TALM(工具增强语言模型)和 Toolformer 都是微调语言模型以学习使用外部工具API

MRKLKarpas et al. 2022)是“模块化推理、知识和语言(Modular Reasoning, Knowledge and Language)”的缩写,是一种用于自主代理的神经符号结构。提出了MRKL系统,其中包含一系列“专家”模块,通用的LLM作为路由将查询路由到最合适的专家模块。这些模块可以是神经网络(如深度学习模型)或符号化的(如数学计算器、货币转换器、天气API)。

对LLM进行了一项实验,用算术作为测试案例,对其进行了微调,以便能够调用计算器。实验结果显示,相对于明确陈述的数学问题,解决口头数学问题更加困难,因为LLMs(7B Jurassic1-large 模型)无法可靠地提取基本算术的正确参数。这些结果强调了在外部符号化工具能够可靠工作时,了解何时以及如何使用这些工具非常重要,这取决于LLM的能力。

TALM(Tool Augmented Language Models; Parisi et al. 2022)和ToolformerSchick et al. 2023)都通过微调语言模型来学习使用外部工具API。数据集根据新增的API调用注释是否能提高模型输出的质量来进行扩展。请参阅Prompt Engineering文章中的“External APIs”部分以获取更多详细信息。

ChatGPT插件OpenAI API函数调用是LLM在实践中能够使用工具的很好例子。工具API的集合可以由其他开发者提供(如插件)或自定义(如函数调用)。

HuggingGPTShen et al. 2023)是一个框架,利用ChatGPT作为任务规划器,根据模型描述选择HuggingFace平台上可用的模型,并根据执行结果总结回应。

ChatGPT插件和OpenAI API函数调用也是增强语言模型使用工具能力的例子,其中工具API的集合可以由其他开发人员提供(如插件)或自定义(如函数调用)。

API-Bank是用于评估工具增强型LLM性能的基准,包含53个常用的API工具,一个完整的工具增强的LLM工作流,以及264个标注对话,用到568次API调用。

API的选择非常多样化,包括搜索引擎、计算器、日历查询、智能家居控制、日程管理、健康数据管理、账户认证工作流等。 由于API数量众多,LLM首先可以访问API搜索引擎,找到合适的API调用,然后使用相应的文档进行调用。

在API-Bank工作流程中,LLM需要做出三次决策,每一步都可以评估决策的准确性:

  1. 是否需要API调用;
  2. 确定要调用的正确API:如果不够好,则LLM需要迭代地修改API输入(例如决定搜索引擎API的搜索关键字);
  3. 基于API结果的响应:如果结果不满意,则模型可以选择改善并再次调用。

该基准可以在三个层次上评估智能体的工具使用能力。

  • 层次1:评估调用API的能力
    • 给定API的描述,模型需要确定是否调用给定的API,正确调用并正确响应API返回;
  • 层次2:检查检索API的能力
    • 模型需要搜索可能解决用户需求的API,并通过阅读文档学习如何使用。
  • 层次3:评估规划API的能力,而非检索和调用
    • 如果用户请求不明确(例如安排小组会议、预订旅行的航班/酒店/餐厅),模型可能不得不进行多次API调用来解决。

LLM 调用外部工具的应用模式

OpenAI 的 Jack Rae 和 Ilya Sutskever 在之前的分享中也分别提到了 压缩即智慧 的理念。对于模型的“压缩率”来说,如果能更有效地使用这些“外部工具”,就能大幅提升很多特定任务 next token 预测的准确率。

提升压缩率的手段

这个方向很有价值

  • 从“有效数据”角度看,人类执行各类任务使用工具,甚至思维过程等数据会有非常高的价值。
  • 从模型训练角度来看,如何能在过程中把模型利用工具的能力也体现在 loss function 里,可能也是个很有趣的方向

Memory 记忆

记忆定义为用于获取、存储、保留和后续检索信息的过程,人类大脑中主要有三种类型的记忆。

  1. 感官记忆(Sensory memory)
    • 这种记忆处于记忆的最早阶段,提供了在原始刺激结束后保留感官信息(视觉,听觉等)印象的能力,通常只持续几秒钟。
    • 感官记忆的子类别包括图标记忆(视觉)、回声记忆(听觉)和触觉记忆(触觉)。
  2. 短时记忆(STM)或工作记忆(Working Memory)
    • 存储了当下能意识到的所有信息,以及执行复杂的认知任务(如学习和推理)所需的信息,大概可以存储7件事,持续20-30秒。
  3. 长期记忆(LTM)
    • 顾名思义,LTM可以将信息存储相当长的时间,范围从几天到几十年不等,具有基本上无限的存储容量。LTM有两种亚型:
    • 1)显式/陈述性记忆,即对事实和事件的记忆,指那些可以有意识地回忆起来的记忆,包括情景记忆(事件和经验)和语义记忆(事实和概念)。
    • 2)隐式/程序性记忆,这种类型的记忆是无意识的,包括自动执行的技能和例程,比如骑自行车或在键盘上打字。

对应到语言模型的概念上:

  1. 作为原始输入(包括文本、图像或其他形式)的学习嵌入表征的感官记忆;
  2. 短期记忆就是上下文学习(in-context learning),非常短且影响范围有限,受到Transformer的上下文窗口长度的限制。
  3. 长期记忆作为智能体在查询时可用的外部向量存储,可通过快速检索访问。

最大内积搜索 Maximum Inner Product Search (MIPS)

外部记忆可以缓解有限注意力span的限制,常用的操作是将信息嵌入表征保存到支持快速最大内积搜索(MIPS)的向量存储数据库中。

为了优化检索速度,一般都会选择近似最近邻(ANN,approximate nearest neighbors)算法返回前k个最近邻节点,牺牲一点准确性以换取巨大的速度提升。

常用的ANN算法包括: LSH(Locality-Sensitive Hashing),ANNOY, HNSW, FAISS, ScaNN

快速MIPS的几种常见ANN算法选择:更多

  • LSH(Locality-Sensitive Hashing):它引入了一种哈希函数,使得相似的输入项在很大概率下被映射到相同的桶中,而桶的数量远远小于输入项的数量。
  • ANNOY(Approximate Nearest Neighbors Oh Yeah):核心数据结构是随机投影树,是一组二叉树,其中每个非叶节点表示将输入空间分成两半的超平面,每个叶节点存储一个数据点。树是独立且随机构建的,因此在某种程度上模拟了哈希函数。ANNOY搜索在所有树中进行,通过迭代搜索与查询最接近的一半,并汇总结果。这个想法与KD树有很大的关联,但可扩展性更强。
  • HNSW(Hierarchical Navigable Small World):它受到小世界网络( small world networks)的启发,其中大多数节点可以通过少数步骤到达任何其他节点;例如,社交网络中的“六度分隔”特性。HNSW构建了这些小世界图的分层结构,其中底层包含实际数据点。中间层创建了快捷方式以加快搜索速度。在执行搜索时,HNSW从顶层的随机节点开始,并向目标节点导航。当无法再靠近时,它会下降到下一层,直到达到底层。上层的每次移动都有可能在数据空间中覆盖较大的距离,而下层的每次移动则会提高搜索质量。
  • FAISS(Facebook AI Similarity Search):它基于这样的假设,在高维空间中,节点之间的距离遵循高斯分布,因此应该存在数据点的聚类。FAISS通过将向量空间划分为聚类,并在聚类内部进行量化的方式来应用向量量化。搜索首先使用粗糙的量化方法寻找聚类候选项,然后再使用更精细的量化方法进一步查找每个聚类内的数据。
  • ScaNN(Scalable Nearest Neighbors):ScaNN的主要创新在于各向异性向量量化。它将数据点 $x_i$ 量化为 $\tilde{x}_i$ ,使得内积 $\langle q, x_i \rangle$ 尽可能与原始距离 $\angle q, \tilde{x}_i$ 相似,而不是选择最接近的量化质心点。

长期记忆

获取长期记忆的方法最常见的方式是通过“语义搜索”。

  • 用一个 embedding 模型,将所有的记忆文本都转化为一个向量。而后续跟模型的交互信息也可以通过同样的 embedding 模型转化为向量,计算相似度来找到最相似的记忆文本。最后再将这些记忆文本拼接到 prompt 里,作为模型的输入。
  • 这类方法最热门的开源项目可以参考 OpenAI 官方的 ChatGPT Retrieval Plugin 和 Jerry Liu 的 LlamaIndex

这种拓展模型记忆的模式相比人类大脑的运作方式来说感觉还有些“粗糙”,所谓的长期与短期记忆(包括 LangChain 与 LlamaIndex 中一些更复杂的实现),仍然是比较“hard coded”的感觉。如果未来在模型 context size 上有突破性的研究进展,那么当前的这类模式或许就不再需要了。

Prompt 设计

绝大多数的主要创新还是在 prompt 层面,通过更好的提示词来激发模型的能力,把更多原先需要通过代码来实现的流程“硬逻辑”转化为模型自动生成的“动态逻辑”。

Prompt 设计范式

prompt 设计模式

  • CoT prompt,在给出指令的过程中,同时也给出执行任务过程的拆解或者样例。这个应该很多人都用过,“let’s think step by step”
  • “自我审视”,提醒模型在产出结果之前,先自我审视一下,看看是否有更好的方案。也可以拿到结果后再调用一下模型强制审视一下。比如 AutoGPT 里的“Constructively self-criticize your big-picture behavior constantly”。
  • 分而治之,大家在写 prompt 的时候也发现,越是具体的 context 和目标,模型往往完成得越好。所以把任务拆细再来应用模型,往往比让它一次性把整个任务做完效果要好。利用外部工具,嵌套 agent 等也都是这个角度,也是 CoT 的自然延伸。
  • 先计划,后执行。BabyAGI,HuggingGPT 和 Generative Agents 都应用了这个模式。也可以扩展这个模式,例如在计划阶段让模型主动来提出问题,澄清目标,或者给出一些可能的方案,再由人工 review 来进行确认或者给出反馈,减少目标偏离的可能。
  • 记忆系统,包括短期记忆的 scratchpad,长期记忆的 memory stream 的存储、加工和提取等。这个模式同样在几乎所有的 agent 项目里都有应用,也是目前能体现一些模型的实时学习能力的方案。

这些模式与人类认知和思考模式有很相似,历史上也有专门做 cognitive architecture 相关的研究,从记忆,世界认知,问题解决(行动),感知,注意力,奖励机制,学习等维度来系统性思考智能体的设计。个人感觉目前的 LLM agent 尝中,在奖励机制(是否有比较好的目标指引)和学习进化(是否能持续提升能力)这两方面还有很大的提升空间。或许未来 RL 在模型 agent 这方的应用会有很大的想象空间,而不仅仅是现在主要用来做“价值观对齐”。

AutoGPT Prompt

AutoGPT 是提示词应用模式当前比较先进的“集大成者”, 相比经典的 reason + act 模式

  • Constraints & Resources
    • 模型的输入 context size 有限制,所以需要把重要的信息保存到文件里。
    • 长期记忆的管理功能,当前这类复杂 prompt 生成的解决任务的流程往往比较冗长,没有这类长期记忆的管理很容易就会导致模型的输出变得不连贯协调。
    • 模型是“没有联网”的,所有的知识只更新到训练数据的截止日期。所以也明确告诉模型可以通过网络搜索来获取更多时效性的外部信息。
  • Commands 各类工具的选择上丰富多样,所以 AutoGPT 能够完成多种不同任务
    • 几大类,包括搜索、浏览网页相关,启动其它的 GPT agent,文件读写操作,代码生成与执行等。
    • 跟 HuggingGPT 有些类似,因为目前 GPT 模型对于越具体,细致的任务,生成的表现就越精确和稳定。所以这种“分而治之”的思路,是很有必要的。
  • Performance Evaluation 模型整体思考流程的指导原则,思考逻辑也非常符合人类的思考,决策与反馈迭代的过程。
    • 包括:对自己的能力与行为的匹配进行 review,大局观与自我反思,结合长期记忆对决策动作进行优化,以及尽可能高效率地用较少的动作来完成任务
  • Response 格式的限定也是对前面思维指导原则的具体操作规范说明
    • 格式上来看,也是综合了几种模式,包括需要把自己的想法写出来,做一些 reasoning 获取相关背景知识,生成有具体步骤的 plan,以及对自己的思考过程进行 criticism 等
    • 注意:大段 response 是模型一次交互生成的,而不像一些其它框架中会把计划,审视,动作生成等通过多轮模型交互来生成。
  • 人工介入
    • 模型很容易会把问题复杂化或者在执行计划层面“跑偏”。
    • 所以在具体执行过程中,AutoGPT 也允许用户来介入,对于每一个具体执行步骤提供额外的输入来指导模型行为。
    • 经过人工反馈输入后,模型会重新生成上述的 response,以此往复

AutoGPT 核心 prompt 如下:

You are Guandata-GPT, 'an AI assistant designed to help data analysts do their daily work.'
Your decisions must always be made independently without seeking user assistance. Play to your strengths as an LLM and pursue simple strategies with no legal complications.

GOALS:

1. 'Process data sets'
2. 'Generate data reports and visualizations'
3. 'Analyze reports to gain business insights'

Constraints:
1. ~4000 word limit for short term memory. Your short term memory is short, so immediately save important information to files.
2. If you are unsure how you previously did something or want to recall past events, thinking about similar events will help you remember.
3. No user assistance
4. Exclusively use the commands listed in double quotes e.g. "command name"

Commands:
1. Google Search: "google", args: "input": "<search>"
2. Browse Website: "browse_website", args: "url": "<url>", "question": "<what_you_want_to_find_on_website>"
3. Start GPT Agent: "start_agent", args: "name": "<name>", "task": "<short_task_desc>", "prompt": "<prompt>"
4. Message GPT Agent: "message_agent", args: "key": "<key>", "message": "<message>"
5. List GPT Agents: "list_agents", args: 
6. Delete GPT Agent: "delete_agent", args: "key": "<key>"
7. Clone Repository: "clone_repository", args: "repository_url": "<url>", "clone_path": "<directory>"
8. Write to file: "write_to_file", args: "file": "<file>", "text": "<text>"
9. Read file: "read_file", args: "file": "<file>"
10. Append to file: "append_to_file", args: "file": "<file>", "text": "<text>"
11. Delete file: "delete_file", args: "file": "<file>"
12. Search Files: "search_files", args: "directory": "<directory>"
13. Evaluate Code: "evaluate_code", args: "code": "<full_code_string>"
14. Get Improved Code: "improve_code", args: "suggestions": "<list_of_suggestions>", "code": "<full_code_string>"
15. Write Tests: "write_tests", args: "code": "<full_code_string>", "focus": "<list_of_focus_areas>"
16. Execute Python File: "execute_python_file", args: "file": "<file>"
17. Generate Image: "generate_image", args: "prompt": "<prompt>"
18. Send Tweet: "send_tweet", args: "text": "<text>"
19. Do Nothing: "do_nothing", args: 
20. Task Complete (Shutdown): "task_complete", args: "reason": "<reason>"

Resources:
1. Internet access for searches and information gathering.
2. Long Term memory management.
3. GPT-3.5 powered Agents for delegation of simple tasks.
4. File output.

Performance Evaluation:
1. Continuously review and analyze your actions to ensure you are performing to the best of your abilities.
2. Constructively self-criticize your big-picture behavior constantly.
3. Reflect on past decisions and strategies to refine your approach.
4. Every command has a cost, so be smart and efficient. Aim to complete tasks in the least number of steps.

You should only respond in JSON format as described below 
Response Format: 
{
    "thoughts": {
        "text": "thought",
        "reasoning": "reasoning",
        "plan": "- short bulleted\n- list that conveys\n- long-term plan",
        "criticism": "constructive self-criticism",
        "speak": "thoughts summary to say to user"
    },
    "command": {
        "name": "command name",
        "args": {
            "arg name": "value"
        }
    }
} 
Ensure the response can be parsed by Python json.loads

LAM的应用

总结

  • AI技术的自动化范式 —— AutoGPT
  • 基于Agents的自动化团队——GPTeam,许多流程都可以被自动化执行。市场调研、问卷调查、品牌计划等等,都可以由AI来完成。
  • 自动化品牌营销公司——AutoCorp

AI 应用分析

【2023-5-20】AI应用赛道全解析公众号

产品、平台都可以被称之为应用层

  • 比如移动互联网的淘宝、滴滴、美团等,同样比如现在的 MidJourney、ChatGPT 等。

何为 “AI 应用层产品”?

  • AI 应用层产品不是 AI 产品,而是应用层产品”。就像 “产品经理并不是搞 AI 的,而是搞产品的”。

AI 应用层产品 整体划分成了两类,一类是 AI-Enabled,另一类是 AI-Native

  • AI-Enabled
  • AI-Native

问题1:目前的 timing 是应用层的投资阶段吗?

  • 十年移动互联网时期,最优秀的应用层公司其实是 2~4 年后出现的。目前海外 AI 市场的融资很热,这里面存在泡沫。今年能看到一些独角兽公司都在估值回调,一些创业公司拿了一些钱却还没找到 PMF, 较为危险,很容易在泡沫破裂之际一同覆灭。
  • 更看好做 2B 方向的产品,AI 在 2B 市场的想象力比 2C 更大

问题2:为什么要在应用层赛道挖掘投资机会,价值和潜力在哪里?

  • 对比移动互联网,价值捕获最多的一层都是做应用(平台),比如微信、美团、滴滴等。
  • 拾象发布过一篇研报,里面有一组投研数据:应用层Infra 层各占整个行业的 20% 价值,大头是模型层(60%)。
  • 当下的 AI 时代,应用层当如何演变,这也是存在非共识的地方。

5 月份按照场景拆分,分析 AI 应用层的价值,当时的观点基本被掀翻了:

  • 产品接入大模型能否有壁垒,当时忽视了场景数据的获取和团队工程能力这两个因素。
  • 创业公司和巨头的竞争,巨头一定更有优势?现在来看不见得,这涉及到赛道现有巨头是否愿意做以及能否做。比如,一些尚未被解决的需求,可能巨头还看不上,这正是创业公司的机会。

从 近200 个 AI 产品中挑了几个有代表性的产品绘制这张

  • 横轴是产品的上线时间,纵轴是产品对用户 workflow 的冲击。
  • 横轴好理解,标注了 3 个重要的时间节点以作时间维度上的区分。
  • 纵轴从 workflow 的角度去想,是因为:
    • 这一波 AI,有了大模型的存在,用户对工具/产品的使用流程发生了根本性的变化。
    • 大模型出现以前,用户需要会使用某一类工具(技术门槛,如 Excel、PhotoShop、MySQL 等),才能达到想要的目的。现在大语言模型在用户和工具 / 产品之间,作为一种中介,理解用户的指令(自然语言)并转化为软件的操作(计算机指令)。
  • 全新的 AI-Native 工作流。与之对应的便是 AI-Enabled 工作流。
    • Notion AI 属于 AI-Enabled 产品,Jasper、Tome、Gamma、Github Copilot、Microsoft 365 Copilot 等属于 AI-Native 产品。
  • 应用场景: 内容创作和企业服务是最多的,其次是面向开发者的产品。
  • 产品上线时间: GPT-3 发布前后以横向产品为主。由于技术层面的模型性能欠佳,所以基本都是做文案生成、图像生成。GPT4 发布后,模型性能的提升带动产品在垂直领域的发展,如法律、金融、医疗等。

把应用层市场进一步拆分可以得到 4 个小赛道,分别是内容生成(Content Creation)、CopilotAI Agent 和通用型的类搜索引擎

  • 应用场景来看,如前面提到一样,内容创作中的文案编辑、客户支持、以及企业协作是主要场景,其次是聊天机器人。
  • 面向的用户群体来看,目前 2B 和 2C 的用户界限尚不清晰,大部分是 2B 场景。

其中看好: Copilot 和 AI Agent 中的 Chatbot(聊天机器人)。

  • 针对 Copilot 赛道进一步非穷尽式地拆分: 开发者工具(Development tools)、组织协作(生产力工具) 和 垂直场景。
  • 开发者工具层面,无代码 / 低代码是核心叙事。传统产品如 Webflow,以及这一波 AI 下诞生的初创公司:无代码建站、无代码创建应用程序等。
  • 组织协作层面,各个体量的公司都有在参与。几乎都是海外 SaaS 公司在布局。

Chatbot 赛道

  • 聊天机器人,插上大脑(大模型)和手脚(AutoGPT)就是 AI Agent。这个赛道的产品以 2C 为主。

按照输出效果(Output)来分析,大致是 [数据准确性,娱乐休闲性]。

  • 追求数据准确和严谨性的产品,例如 Perplexity、Neeva(被 Snowflake 收购)、SciSpace 等;
  • 追求用户娱乐休闲体验的产品,例如 Character.ai、Replika、Inworld 等。

科学发现

科学发现

  • ChemCrow系统内的语言模型通过13个专家设计的工具进行能力增强,可以完成跨有机合成、药物发现和材料设计的任务。

LangChain中实现的工作流程包括了在ReAct和MRKL中描述的机制,并将CoT推理与任务相关的工具相结合:

  • 语言模型先提供一个工具名称列表、用途描述以及有关预期输入/输出的详细信息;然后指示模型在必要时使用提供的工具回答用户给定的提示,指令要求模型遵循ReAct格式,即Thought, Action, Action Input, Observation
  • 实验结果来看,用语言模型评估的话,GPT-4和ChemCrow的性能几乎相当;但当人类专家评估时,在特定解决方案的完成和化学正确性进行的实验结果显示,ChemCrow的性能远远超过GPT-4

实验结果表明,使用LLM来评估需要深入专业知识领域的性能存在问题,可能会导致LLM不知道内在缺陷,无法很好地判断任务结果正确性。

另一篇论文研究了语言模型处理复杂科学实验的自主设计、规划和性能,可以使用工具浏览互联网、阅读文档、执行代码、调用机器人实验API以及利用其他语言模型。

当用户请求「develop a novel anticancer drug」时,模型会返回了以下推理步骤:

  1. 询问抗癌药物发现的当前趋势;
  2. 选择目标;
  3. 要求一种靶向这些化合物的scaffold;
  4. 一旦找出化合物,模型再尝试合成。

论文还讨论了风险,特别是非法药物和生物武器,研究人员开发了一套包含已知化学武器制剂清单的测试集,并要求合成,11项请求中有4项(36%)被接受;在这7个被拒绝的样本中,5例发生在网络搜索之后,2例仅基于提示词就拒绝。

AI Agent 效果

AI Agent 评测

【2023-8-22】智谱ChatGLM发布:AgentBench:基础模型 Agent 评测, 公众号

哪些模型更适合作为 agent,其表现又如何?还没有一个合适的评测能够去衡量。

智谱提出了 AgentBench。

  • 一个多维演进基准测试,包括 8 个不同环境,可以用来评估 LLMs 在多回合开放式生成环境中的推理和决策能力。

具体如下:

  • 操作系统(OS):考察 LLM 在 bash 环境进行文件操作、用户管理等能力。
  • 数据库(DB):考察 LLM 利用 SQL 对给定数据库进行操作的能力。
  • 知识图谱(KG):考察 LLM 利用工具从知识图谱中获取复杂知识的能力。
  • 卡牌对战(DCG):考察 LLM 作为玩家,根据规则和状态进行卡牌对战的策略决策能力。
  • 情景猜谜(LTP):这个游戏需要 LLM 针对谜题进行提问,从而猜出答案,能够考察 LLM 的横向思维能力。
  • 家居(HH):在模拟的家庭环境下,LLM 需要完成一些日常任务,主要考察 LLM 将复杂的高级目标拆解为一系列简单行动的能力。
  • 网络购物(WS):在模拟的在线购物环境中,LLM 需要按照需求完成购物,主要考察 LLM 的自主推理和决策能力。
  • 网页浏览(WB):在模拟网页环境中,LLM需要根据指令完成跨网站的复杂任务,考察 LLM 作为 Web agent的能力。

初步选择了25个闭源/开源的模型,通过API或Docker的方式进行测试。

经过对 25 个语言模型的测试,发现:

  • 顶级商业语言模型在复杂环境中表现出色,与开源模型存在显著差距。

另一方面,v0.2 版本的 ChatGLM2 在几个闭源模型的对比中,评测分数并不是很好,这需要着重改进。

数据集、环境和集成评估包已在这里发布:AgentBench

主要结论:

  • 结论一:顶级 LLM 已经具备了处理真实世界环境交互的强大能力。
    • GPT-4 在 AgentBench 的 8 个数据集中有 7 个表现最佳;在「家居(HH)」上,也实现了 78% 的成功率,这表明它在这种情况下具有实际可用性。而其他基于 API 的 LLM,虽然表现相对较差,但或多或少能够解决一些问题,这表明这些模型有具备这种能力的潜力。
  • 结论二:大多数开源 LLM 在 AgentBench 中的表现远不如基于 API 的 LLM(平均分为 0.42 对比 2.24)。
    • 即使是能力最强的开源模型 openchat-13b-v3.2 也与 gpt-3.5-turbo 存在明显的性能差距。这个结果与网上存在的一些开源 LLM 许多声称可以与 gpt-3.5-turbo 和 gpt-4 相媲美,有很大的不符。对于开源的 LLM,它们在诸如知识图谱(KG)、卡牌对战(DCG)和家居(HH)等具有挑战性的任务中通常无法解决任何问题。

通过深入分析评测结果,LLM-as-agent 需要应对以下几个问题:

  • 动作有效性。评估过程中,我们发现模型并不总是在遵循指令。换句话说,模型的预期输出并不总是处于环境可以接受的输入空间中。几种常见的错误包括:1)模型没有理解指令,所以也就没有输出动作;2)模型输出了动作,但却是错误的或不完整的。所以如何确保动作有效,是一个需要改进的方向。
  • 长上下文。一些开源模型的上下文长度只有 2k tokens,这会极大地影响它们在交互任务中的表现,有些任务需要较长的指令和反馈,这有可能会超过上下文长度,导致模型忽略了可能的有用信息。因此,扩展上下文长度可能会提高多轮对话的性能。
  • 多轮一致性。有些任务(例如家居)需要很多轮对话,但每轮对话都比较简短。这导致一些模型在多轮对话中会丢失掉自己的角色。最常见的错误就是输出道歉并表示无法回答。所以,如何在多轮对话中保持一致性,是一个具有挑战性的工作。
  • 代码训练的平衡。相比 ChatGLM-6B,codegeex2-6b-chat 是用更多的代码数据训练出来的,我们通过对比发现,前者在 OS、DB、KG、WS 等方面明显优于后者,然而在需要逻辑推理的 情景猜谜(LTP)上性能却下降不少。而另一方面,进行了代码训练的 wizardcoder 的表现却并不是很好。我们的推测是,代码训练的单轮格式减弱了其多轮能力。因此,用代码数据训练,可以提高部分能力,但同时也会导致其他能力的减弱。

智能体应用

局限性

当前模型 agent 的问题和局限性。例如:

  • 记忆召回问题。如果只是做简单的 embedding 相似性召回,很容易发现召回的结果不是很好。这里应该也有不少可以改进的空间,例如前面提到的 Generative Agents 里对于记忆的更细致的处理,LlamaIndex 中对于 index 结构的设计也有很多可以选择与调优的地方。
  • 错误累积问题。网上给出的很多例子应该都是做了 cherry-picking 的,实际上模型总体表现并没有那么惊艳,反而经常在前面一些步骤就出现了偏差,然后逐渐越跑越远……这里一个很重要的问题可能还是任务拆解执行,外部工具利用等方面的高质量训练数据相对匮乏。这应该也是 OpenAI 为啥要自己来做 plugin 体系的原因之一。
  • 探索效率问题。对于很多简单的场景,目前通过模型 agent 来自行探索并完成整个解决过程还是比较繁琐耗时,agent 也很容易把问题复杂化。考虑到 LLM 调用的成本,要在实际场景落地使用也还需要在这方面做不少优化。一种方式可能是像 AutoGPT 那样可以中途引入人工的判断干预和反馈输入。
  • 任务终止与结果验证。在一些开放性问题或者无法通过明确的评估方式来判断结果的场景下,模型 agent 的工作如何终止也是一个挑战。这也回到了前面提到的,执行 task 相关的数据收集与模型训练以及强化学习的应用或许可以帮助解决这个问题。

Agent 设计模式

【2024-3-27】

吴恩达团队实验,让 AI 去写一些代码并运行,最终对比不同模型和工作流程得出结果的性能。结果如下:

  • GPT-3.5 模型:准确率 48%
  • GPT-4 模型:准确率 67%
  • GPT-3.5 + Agent:高于 GPT-4 模型的表现
  • GPT-4 + Agent:表现的远高于 GPT-4 模型,非常出色

吴恩达提到的四种 Agent 设计模式: ReflectionTool UsePlanningMultiagent

  • 反思(reflection): 两个 Agent, 一个负责 Coding,另一个负责 Code Review。
    • 让大模型仔细检查输出内容的准确性、结构规范性等,并且给出评论
  • 工具使用(Tool use): 调用工具
  • 规划(Planning): AI Agent 自己计划使用什么工具,如何一步步达到目的
  • 多智能体协作(Multiagent collaboration):

两点:

  1. 目前人们还是习惯“及时反馈”: 输入命令能够尽快反馈。
    • 虽然通过 Agent 能显著的提升效果,但是在 Agent 工作流程中,往往需要等待几分钟甚至几个小时,才能得到响应,人能不能接受这一点, 或者说习惯培养的难度到底有多大,还不得而知。
  2. 快速生成 token 也很重要,即使用质量略低但速度更快的语言模型,通过更多轮次的迭代,也可能比使用更高质量但速度较慢的模型获得更好的结果。

智能体案例

业界各种最新的智能体

【2023-7-14】构建你的第一个 LLM APP 所需了解的一切

通过上下文注入构建你自己的聊天机器人

智能体分类

  • 单智能体: AutoGPT, ChatGPT(code+plugin), Langchain Agent, Transformers Agent
  • 多智能体: BabyAGI, CAMEL, Multi-Agent Debate, MetaGPT, AutoGenß

单智能体

2023.4 BabyAGI

相对于 AutoGPT ,BabyAGI 是一个相对更聚焦在“思维流程”方面尝试的项目,并没有添加对各种外部工具利用的支持。

BabyAGI 原理

其核心逻辑非常简单:

  • 从任务列表中获取排在第一位的任务。
  • 获取任务相关的“记忆”信息,由任务执行 agent 来执行这个任务,获取结果。目前这个执行就是一个简单的 LLM 调用,不涉及外部工具。
  • 将返回结果再存放到记忆存储中。基于当前信息,如整体目标,最近一次执行结果,任务描述,还未执行的任务列表等,生成新任务
  • 将新任务添加到任务列表中,再判断所有任务的优先级,重新排序。

这个过程就是在模拟作者一天真实的工作流程。

  • 早上起来看下有哪些任务要做,白天做任务拿反馈,晚上再看下基于反馈有没有新的任务要加进来,然后重新排下优先级。

整个项目的代码量很少,相关的 prompts 也比较简单易懂

BabyAGI 进化

进化版本

  • BabyASI 借鉴了 AutoGPT 添加了对 search,代码执行等工具的支持。理论上,如果这个 ASI(Artificial Super Intelligence)真的足够聪明,甚至可以产生代码给自己做 prompt 优化,流程改造,甚至持续的模型训练等,让 GPT 自己开发未来的 GPT,想想是不是很带感 。

HuggingGPT

HuggingGPT 简介

【2023-4-3】HuggingGPT:一个ChatGPT控制所有AI模型,自动帮人完成AI任务,浙大与微软亚研院的合作成果.

  • paper
  • 项目已开源,名叫「贾维斯」,钢铁侠里的AI管家贾维斯(JARVIS)。
  • 和3月份刚发布的Visual ChatGPT的思想非常像:后者HuggingGPT,主要是可调用的模型范围扩展到了更多,包括数量和类型。
HuggingGPT 原理

如果说 BabyAGI 更多的是探索了 plan & execution 这个应用 LLM 的模式,那么 HuggingGPT 相对早一些的工作更多地展示了在“外部工具”这个层面的想象空间。

其核心运作逻辑也是计划加上执行,只不过在执行工具层面,可以利用丰富的“领域专业模型”来协助 LLM 更好地完成复杂任务

语言是通用的接口。于是,HuggingGPT就诞生了。工程流程分为四步:

  • 首先,任务规划。ChatGPT将用户的需求解析为任务列表,并确定任务之间的执行顺序和资源依赖关系。
  • 其次,模型选择。ChatGPT根据HuggingFace上托管的各专家模型的描述,为任务分配合适的模型。
  • 接着,任务执行。混合端点(包括本地推理和HuggingFace推理)上被选定的专家模型根据任务顺序和依赖关系执行分配的任务,并将执行信息和结果给到ChatGPT。
  • 最后,输出结果。由ChatGPT总结各模型的执行过程日志和推理结果,给出最终的输出。

请求:

请生成一个女孩正在看书的图片,她的姿势与example.jpg中的男孩相同。然后请用你的声音描述新图片。

可以看到HuggingGPT是如何将它拆解为6个子任务,并分别选定模型执行得到最终结果的。

用gpt-3.5-turbo和text-davinci-003这俩可以通过OpenAI API公开访问的变体,进行了实测。如下图所示:

  • 在任务之间存在资源依赖关系的情况下,HuggingGPT可以根据用户的抽象请求正确解析出具体任务,完成图片转换。

在音频和视频任务中,它也展现了组织模型之间合作的能力,通过分别并行和串行执行两个模型的方式,完了一段“宇航员在太空行走”的视频和配音作品。

还可以集成多个用户的输入资源执行简单的推理,比如在以下三张图片中,数出其中有多少匹斑马。

AutoGPT

【2023-4-12】

AutoGPT 介绍

AutoGPT 的研究开始走进大众视野。

  • 2023年3月30日,Toran Bruce Richards 发行 AutoGPT,一个实验性开源应用程序,利用 OpenAI 的GPT-4语言模型来创建完全自主和可定制的 AI 代理
  • Toran 是一名游戏开发商,并创立了一家名为 Significant Gravitas 的游戏公司
  • AutoGPT 相当于给基于 GPT 的模型一个内存和一个身体。
    • 可以把一项任务交给 AI 智能体,自主地提出一个计划,然后执行计划。
    • 此外其还具有互联网访问、长期和短期内存管理、用于文本生成的 GPT-4 实例以及使用 GPT-3.5 进行文件存储和生成摘要等功能。
  • AutoGPT 从根本上改变了 AI 与人类之间的交互方式,人类不再需要发挥积极作用,同时仍然保持与 ChatGPT 等其他 AI 应用程序相同或更好的结果质量。

AutoGPT 用处很多,可用来分析市场并提出交易策略、提供客户服务、进行营销等其他需要持续更新的任务。

AutoGPT 工作原理

AutoGPT 如何工作?

AutoGPT 基于自主 AI 机制工作,其中 AI 系统创建不同的 AI 代理来满足特定任务,其中包括:

  • 任务创建代理: 在 AutoGPT 上输入目标时,第一个与任务创建代理交互的 AI 代理。根据目标创建一个任务列表以及实现这些目标的步骤,并将其发送给优先级代理。
  • 任务优先级代理: 收到任务列表后,优先级 AI 代理会确保顺序正确且符合逻辑,然后再将其发送给执行代理。
  • 任务执行代理: 完成优先级排序后,执行代理将一个接一个地完成任务。这涉及利用 GPT-4、互联网和其他资源来获得结果。
  • 架构图

当执行代理完成所有任务,结果不理想时,它可以与任务创建代理通信,创建新的任务列表。三个代理之间的迭代循环,直到完成所有用户定义的目标。

AI 代理的行为也显示在用户界面上,将它们分为四组:思想、推理、计划、评判。

  • 思想(THOUGHTS) :AI 代理分享它对目标的想法。
  • 推理(REASONING) :AI 代理推理如何开展并实现它的想法。
  • 计划(PLAN) :AI代理通过分析,列举了所要完成任务的计划。
  • 评判(CRITICISM) :AI进行自我评判,纠正错误并克服任何限制问题。

通过共享此计算流程,AutoGPT 可以进行反复尝试论证,并进行针对性的优化处理,可以在没有任何用户干预的情况下克服所遇到的所有问题。

模块图, 源自 AGI-MAP

  • arch

特斯拉前 AI 总监、刚刚回归 OpenAI 的 Andrej Karpathy 也为其大力宣传,并在推特赞扬:「AutoGPT 是 prompt 工程的下一个前沿。」

AutoGPT 的局限性

一些关键限制

  1. 成本高昂
    • 虽然功能令人惊叹,但 AutoGPT 的实用性可能会让你失望。由于 AutoGPT 使用昂贵的 GPT-4 模型,因此即使是小任务,完成每个任务的成本也可能很高。这主要是因为 AutoGPT 在特定任务的步骤中会多次使用 GPT-4
  2. 经常陷入循环
    • 用户在使用 AutoGPT 时面临的最常见问题是它陷入循环。如果这种情况持续超过几分钟,则可能意味着你必须重新启动该过程。发生这种情况是因为 AutoGPT 依赖 GPT-4 来正确定义和分解任务。因此,如果底层LLM返回结果不足以让 AutoGPT 采取任何行动就会出现反复尝试的问题。
  3. 数据安全性
    • 由于AutoGPT经过充分授权,能自主运行并访问你的系统和互联网,例如使用twitter账号,登录github,使用搜索引擎等,因此你的数据可能会被泄露。
    • AutoGPT没有安全代理,所以使用 AutoGPT 时必须小心,如果没有给出正确的说明和安全指南,你不能让模型继续运行。
实践

实践

# 准备Python 3.8以上的环境, 安装minicoda
# source  ~/.bash_profile
conda create -n py310 python=3.10 # 创建 3.10环境
conda activate py310 # 激活环境
# 下载autogpt代码
git clone https://github.com/Torantulino/Auto-GPT.git
cd 'Auto-GPT'
pip install -r requirements.txt
# 配置文件
mv .env.template .env
vim .env # 填入 openai key 到变量 OPENAI_API_KEY
# python scripts/main.py
# python scripts/main.py --debug # 调试模式
# python scripts/main.py --speak # use TTS for Auto-GPT
python3 scripts/main.py # 多个虚拟环境时,为了避免干扰
python -m autogpt

【2023-7-7】

  • 复制 默认的 env文件,只更新里面的openai_api_key
cp .env.template .env

命令,详见指南

./run.sh --help     # on Linux / macOS
./run.sh --debug # 打印日志
# Run Auto-GPT with a different AI Settings file shell
./run.sh --ai-settings <filename>
# Run Auto-GPT with a different Prompt Settings file shell
./run.sh --prompt-settings <filename>
# Specify a memory backend
./run.sh --use-memory  <memory-backend>
./run.sh --speak # 启动tts 语音播报
./run.sh --continuous # 100% 自动化,无需手动确认,有一定风险
./run.sh --gpt3only # 只用 gpt3
./run.sh --gpt4only # 只用 gpt4 ,更贵

使用

AutoGPT配置

  • 为AI取一个名字 [Name],一个角色定位[Role],同时你可以为它制定目标[Goals](最多5个目标,如果你仅有一个目标就直接回车)。
  • 制定完成目标以后,AutoGPT会进行自主思考并分析你的目标[THOUGHTS],思考完成后开始理解并推理如何去完成这个目标[REASONING],然后开始自主拆解成具体的计划[PLAN],最后会提出评判[CRITICISM] 用以保证 AI 代理纠正错误并作出正确的决断。
  • 完成以上的行为规划后,AutoGPT会提示它将要作出的指令和动作[NEXT ACTION], 里面包含具体执行的命令[COMMAND]和参数[ARGUMENTS],用户可以在此时可以对风险命令进行识别,避免出现数据泄露等预期外的风险,这里可以通过y或者n进行授权或者拒绝AutoGPT接下来的指令动作。
  • img
  • AutoGPT会通过以上步骤,进行多次循环,由于AutoGPT可以存储上下文和历史经验,所以每一次都会根据反馈结果进行更深入的思考,制定出更优的方案,最后列举他要执行的计划,反复尝试和补充,直到达到你预期的目标。
  • AutoGPT会通过以上步骤,进行多次循环,由于AutoGPT可以存储上下文和历史经验,所以每一次都会根据反馈结果进行更深入的思考,制定出更优的方案,最后列举他要执行的计划,反复尝试和补充,直到达到你预期的目标。

效果

COA

【2023-5-18】从 COT 到 COA

  • COT(Chain of Thought,思维链)
  • COA(Chain of Action,行为链):AutoGPT为代表,将自然语言表达的目标分解 为子任务,并利用互联网和其他工具自动迭代地尝试实现这些目标。

特点

  • 自主化决策,任务链自动化
  • 知行一体,参数外挂,泛化学习,
  • 动态适应和灵活反应
  • AI从模拟人类思维到模拟人类行为, 人主要负责设定目标、审批预算、 调整关键行动链

优点

  • •自主任务分解
  • •上下文适应性
  • •泛化多功能优化
  • •智能响应
  • •协同学习
  • •动态知识整合

缺点

  • 语义鸿沟
  • 依赖风险
  • 计算成本过高
  • 透明度缺失
CoVe

【2023-9-20】META AI提出CoVe

一种CoVe(链式验证)的方式来减少大模型的幻觉

该论文研究了大语言模型在解决‘幻觉’问题上的能力,提出了一种链式验证(CoVe)方法,通过该方法模型首先起草初始回答,然后计划验证问题来核实起草结果,独立回答这些问题以避免受到其他回答的影响,最终生成验证后的回答。实验证明CoVe方法降低了在各种任务中出现的幻觉,包括基于Wikidata的列表问题,闭书型MultiSpanQA和长文本生成等。

按照这种Prompt模板

  1. Generate baseline response
  2. Generate a verification plan (set of questions)
  3. Execute plan (answer questions)
  4. Generate Final Verified Response (using answers)

AgentGPT – AutoGPT 改进

AgentGPT:浏览器中直接部署自主 AI 智能体

近日,又有开发者对 AutoGPT 展开了新的探索尝试,创建了一个可以在浏览器中组装、配置和部署自主 AI 智能体的项目 ——AgentGPT。项目主要贡献者之一为亚马逊软件工程师 Asim Shrestha

AgentGPT 允许自定义 AI 命名,执行任何想要达成的目标。自定义 AI 会思考要完成的任务、执行任务并从结果中学习,试图达成目标。

  • 如下为 demo 示例:HustleGPT,设置目标为创立一个只有 100 美元资金的初创公司。

用户在使用该工具时,同样需要输入自己的 OpenAI API 密钥。AgentGPT 目前处于 beta 阶段,并正致力于长期记忆、网页浏览、网站与用户之间的交互。

git clone https://github.com/reworkd/AgentGPT.git
cd AgentGPT
./setup.sh

【2023-4-15】免费的AutoGPT替代网站

  • 第一个是最火的AutoGPT,性能最强的,但是安装起来也挺麻烦的,并且还需要各种API的权限,小白不建议。
  • 第二个AgentGPT,需要OpenAI的API,操作简单,在网页输入key就可以用。
  • 第三个和第四个暂时是免费的,想体验的可以赶紧了。
名称 方案 特点 链接
AutoGPT 最复杂 需要安装开源代码  
AgentGPT 需要Token 通过简单的网页访问易于使用,具有相对简单的功能  
Cognosys 不需要Token 性能不错,具有明确的任务组织  
Godmode 不需要Token 操作更加直观,每个步骤需要用户权限  

Adept

Adept 和 Inflection 这两家早期团队想以自然语言为基础,为用户打造新的 LUI (语言为基础的 UI)方式。

Inflection

待定

GPT4Free

【2023-5-4】GPT4Free (discord地址) 通过You.com、Quora和CoCalc等网站(OpenAI付费用户)提供的各种API地址,免费使用GPT-4和GPT-3.5模型。

  • GPT4Free 脚本会先访问 https://you.com/api/streamingSearch,并传送各种参数过去,然后获取返回的JSON并对其进行格式化。
  • GPT4Free仓库还有从Quora、Forefront和TheB等其他网站获取数据的脚本,任何开发者都可以基于这些脚本制作自己的聊天机器人。

实测:

# pypasser # 原始
pypasser>=0.0.5 # 指定版本,否则 pip install -r requirements.txt 提示冲突

UI部署正常,但点击“Think”后,出现新的错误

  • Please make sure you are using a valid cloudflare clearance token and user agent.

安装

pip install gpt4free

程序调用

import gpt4free
from gpt4free import Provider, quora, forefront

# usage You
response = gpt4free.Completion.create(Provider.You, prompt='Write a poem on Lionel Messi')
print(response)
# usage Poe
token = quora.Account.create(logging=False)
response = gpt4free.Completion.create(Provider.Poe, prompt='Write a poem on Lionel Messi', token=token, model='ChatGPT')
print(response)
# usage forefront
token = forefront.Account.create(logging=False)
response = gpt4free.Completion.create(
    Provider.ForeFront, prompt='Write a poem on Lionel Messi', model='gpt-4', token=token
)
print(response)
print(f'END')
# usage theb
response = gpt4free.Completion.create(Provider.Theb, prompt='Write a poem on Lionel Messi')
print(response)
# usage cocalc
response = gpt4free.Completion.create(Provider.CoCalc, prompt='Write a poem on Lionel Messi', cookie_input='')
print(response)

错误信息

tls_client.exceptions.TLSClientExeption: failed to do request: Get “https://you.com/api/streamingSearch?q=Write+a+poem+on+Lionel+Messi&page=1&count=10&safeSearch=Moderate&onShoppingPage=False&mkt=&responseFilter=WebPages%2CTranslations%2CTimeZone%2CComputation%2CRelatedSearches&domain=youchat&queryTraceId=77ebaf4c-ba0c-4035-bad6-1dafc27fdc14&chat=%5B%5D”: dial tcp 192.133.77.59:443: i/o timeout (Client.Timeout exceeded while awaiting headers)

MetaGPT

【2023-7-5】MetaGPT

  • MetaGPT: Multi-Agent Meta Programming Framework 多智能体变成框架
  • MetaGPT takes a one line requirement as input and outputs user stories / competitive analysis / requirements / data structures / APIs / documents, etc.
  • Internally, MetaGPT includes product managers / architects / project managers / engineers. It provides the entire process of a software company along with carefully orchestrated SOPs.
  • Code = SOP(Team) is the core philosophy. We materialize SOP and apply it to teams composed of LLMs.

OlaGPT

【2023-8-9】首个模拟人类认知的思维框架OlaGPT:推理能力最高提升85%

模型在对话上的表现实在是太像人类了,以至于产生了语言模型具有「思维能力」的错觉。基于高概率语言模式的再现与期望中的「通用人工智能」还有很大差距。

  1. 某些情况下生成内容毫无意义,或者偏离了人类的价值偏好,甚至会给出一些非常危险的建议,目前的解决方案是引入人类反馈的强化学习(RLHF)对模型输出进行排序。
  2. 语言模型的知识仅限于在训练数据中明确提到的概念和事实。

面对复杂问题时,语言模型也无法像人类一样适应变化的环境、利用现有的知识或工具、反思历史教训、分解问题,以及使用人类在长期进化中总结出的思维模式(如类比、归纳推理和演绎推理等)来解决问题。

当前大多数研究中,大模型主要是在特定提示的引导下生成思维链来执行推理任务,没有考虑人类认知框架,使得语言模型解决复杂推理问题的能力与人类之间仍然存在着显着的差距。

让语言模型模拟人脑处理问题的过程还有许多系统难题:

  1. 如何系统地模仿和编码人类认知框架中的主要模块,同时以可实现的方式根据人类的通用推理模式进行调度?
  2. 如何引导语言模型像人类一样进行主动学习,即从历史错误或专家对困难问题的解决方案中学习和发展?虽然重新训练模型对纠正后的答案进行编码可能是可行的,但显然成本很高而且不灵活。
  3. 如何让语言模型灵活地利用人类进化出的各种思维模式,从而提高其推理性能?

一个固定的、通用的思维模式很难适应不同问题,就像人类在面对不同类型的问题时,通常会灵活地选择不同的思维方式,如类比推理、演绎推理等。

人类在面对复杂的推理难题时,通常会使用各种认知能力,并且需要与工具、知识和外部环境信息的各个方面进行交互,那语言模型能不能模拟人类的思维流程来解决复杂问题呢?

OlaGPT 包括多个认知模块,包括注意力、记忆、推理、学习,以及相应的调度和决策机制;受人类主动学习启发,框架中还包括一个学习单元来记录之前的错误和专家意见,并动态参考来提升解决类似问题的能力。

OlaGPT借鉴了认知架构(cognitive architecture)理论,把认知框架的核心能力建模为注意力(attention)、记忆(memory)、学习(learning)、推理(reasoning)、行动选择(action selction)。

提出一个适合语言模型解决复杂问题的流程,具体包括六个模块:意图增强模块(注意力)、记忆模块(记忆)、主动学习模块(学习)、推理模块(推理)、控制器模块(行动选择)和投票模块。

人类解决问题的常见有效推理框架,并设计了思维链(CoT)模板;还提出了一个全面的决策机制,可以最大限度地提高模型的准确性。

意图增强(Intention Enhance)

注意力是人类认知的一个重要组成部分,识别出相关的信息并过滤掉不相关的数据。

同样地,研究人员为语言模型设计了相应的注意力模块,即意图增强,旨在提取最相关的信息,并在用户输入和模型的语言模式之间建立更强的关联,可以被看作是一个从用户表达习惯到模型表达习惯的优化转换器。

首先通过特定的提示词提前获得LLMs的问题类型,然后重构提问的方式。

比如在问题的开头加上一句「Now give you the XX(问题类型),question and choices:」;为了便于分析,提示中还需要加入「The answer must end with JSON format: Answer: one of options[A,B,C,D,E].」

记忆(Memory)

记忆模块在存储各种知识库信息方面起着至关重要的作用,已经有研究证明了当下语言模型在理解最新事实数据方面的局限性,而记忆模块着重于巩固模型尚未内化的知识,并将其作为长期记忆储存在外部库中。

研究人员使用langchain提供的记忆功能进行短期记忆,长期记忆则由基于Faiss的矢量数据库实现。

在查询过程中,其检索功能可以从库中提取相关知识,涵盖了四种类型的记忆库:事实、工具、笔记和思维(thinking),其中事实是现实世界的信息,如常识等;工具包括搜索引擎、计算器和维基百科,可以协助语言模型完成一些无需为条的工作;笔记主要记录一些疑难案例和解决问题的步骤;思考库主要存储由专家编写的人类解决问题的思考模板,专家可以是人类,也可以是模型。

学习(Learning)

学习的能力对于人类不断提升自我表现来说至关重要,从本质上讲,所有形式的学习都依赖于经验,语言模型可以从之前的错误中学习,从而实现快速提高推理能力。

首先,研究人员找出语言模型无法解决的问题;然后在笔记库中记录专家提供的见解和解释;最后选择相关的笔记来促进语言模型的学习,从而可以更有效地处理类似问题。

推理(Reasoning)

推理模块的目的是创建基于人类推理过程的多个智能体,从而激发语言模型的潜在思维能力,进而解决推理问题。

该模块结合了多种思维模板,参考特定的思维类型,如横向思维、顺序思维、批判性思维和整合性思维,以促进推理任务。

控制器(Controller)

控制器模块主要用来处理相关的行动选择,具体包括模型的内部规划任务(如选择某些模块来执行)以及从事实、工具、笔记和思维库中选择。

首先检索和匹配相关的库,检索到的内容随后被整合到一个模板智能体中,要求语言模型以异步的方式在一个模板下提供回复,就像人类在推理之初可能难以识别所有的相关信息一样,同样很难期望语言模型一开始就做到这一点。

因此,动态检索是根据用户的问题和中间的推理进度来实现的,使用Faiss方法为上述四个库创建嵌入索引,其中各个库的检索策略略有不同。

投票(voting)

由于不同的思维模板可能更适合不同类型的问题,研究人员设计了投票模块来提升多个思维模板之间的集成校准能力,并多种投票策略来生成最佳答案以提高性能。

具体的投票方法包括:

  1. 语言模型投票:引导语言模型在多个给定的选项中选择最一致的答案,并提供一个理由。
  2. regex投票:用正则表达式精确匹配抽取答案以获取投票结果。

在多个推理数据集上进行了严格评估后得到的实验结果表明,OlaGPT超越了此前最先进的基准,证明了其有效性。

  1. SC(self-consistency)的性能优于GPT-3.5-turbo,表明在一定程度上采用集成方法确实有助于提高大规模模型的有效性。
  2. 文中提出方法的性能超过了SC,在一定程度上证明了思维模板策略的有效性。
    • 不同思维模板的答案表现出相当大的差异,在不同的思维模板下进行投票,最终会比简单地进行多轮投票产生更好的结果。
  3. 不同思维模板的效果是不同的,循序渐进的解决方案可能更适合推理型问题。
  4. 主动学习模块的性能明显优于零样本方法。
    • 具体来说,随机、检索和组合列表现出更高的性能,即将具有挑战性的案例作为笔记库纳入其中是一种可行的策略。
  5. 不同的检索方案在不同的数据集上有不同的效果,总的来说,组合(combine)策略的效果更好。
  6. 文中方法明显优于其他方案,这得益于整体框架的合理设计,包括主动学习模块的有效设计;思维模板实现了对不同模型的适应,不同思维模板下的结果是不同的;控制器模块起到了很好的控制作用,选择了与所需内容比较匹配的内容;投票模块设计的不同思维模板的集成方式是有效的。

SuperAGI

SuperAGI

SuperAGI

SuperAGI - A dev-first open source autonomous AI agent framework. Enabling developers to build, manage & run useful autonomous agents quickly and reliably.

XAgent – 面壁智能

【2023-10-17】全面超越AutoGPT,面壁智能联合清华 NLP实验室打造大模型“超级英雄”—— XAgent

国内领先的人工智能大模型公司 面壁智能 又放大招,联合 清华大学 NLP 实验室 共同研发并推出 大模型 “超级英雄”——XAgent。 通过任务测试,XAgent在真实复杂任务的处理能力已 全面超越 AutoGPT。

GitHub 正式开源:

XAgent 是一个可以实现自主解决复杂任务的全新 AI 智能体,以 LLM 为核心,能够理解人类指令、制定复杂计划并自主采取行动。

  • 传统智能体通常受到人类定制规则的限制,只能在限定范围内解决问题。更像是为人类所用的“工具”,而不是真正的“自主智能体”,难以自主解决复杂问题。
  • XAgent 被赋予了 自主规划和决策 的能力,使它能够独立运行,发现新的策略和解决方案,不受人类预设的束缚。

(1) “左右脑”协同,双循环机制

  • 正如人类具备“左脑”和“右脑”,在处理复杂任务时通常从“宏观”和“微观”两个视角进行考虑,既要针对全局进行统筹和规划,也要从执行层面来考量。

面壁智能和清华大学在 XAgent 的设计中创新地引入了一种 “双循环机制”:

  • 外循环:负责全局任务规划,将复杂任务分解为可操作的简单任务。
  • 内循环:负责局部任务执行,专注于细节。

(2) 人机协作:智能体交互新范式

  • 虽然 AutoGPT 在一定程度上突破了传统 GPT 模型的局限性,但它仍然存在死循环、错误调用等执行出错的现象,需要人工干预才能解决。
  • 而 XAgent 在设计之初就针对相关问题进行了考量,并引入了专为增强人机协作的交互机制:它可以自主与用户进行交互,并向人类发出干预和指导的请求。

对于一个智能体而言,“是否能够与人类协作” 也是体现其智能程度的重要指标。

  • 首先,XAgent 具备 直观的界面,用户可以直接覆盖或修改它提出的建议,从而将AI效率与人类的直觉和专业知识有效结合。
  • 其次,在面临陌生挑战的情况下,XAgent 具备“向人类寻求帮助”能力,它会向用户征求实时反馈、建议或指导,确保即使在不确定的领域,智能体也能发挥出最佳作用。

(3) 高效通信语言,超强工具调用

无论“双循环”的运转机制,还是“人机协作”的交互能力,在 XAgent 的总体设计中,面壁智能和清华团队着重考虑的是智能体的稳定、高效和安全等核心特性。 而 结构化的通信方式 同样是建立强大、稳定智能体的重要因素之一。 XAgent 采用 Function Call 作为其内部的通信语言,具备结构化、标准化、统一化等优势。

  • 结构化:Function Call 具备清晰且严谨的格式,可以明确表述所需内容,从而最小化了潜在的错误。
  • 标准化:Function Call 可以将与外部工具的交互过程标准化,提供一种通用语言,使智能体具备使用和整合多种工具的能力,解决复杂任务。
  • 统一化:通过将信息摘要、任务规划、工具执行等所有环节转化为特定的 Function Call 形式,确保每个环节均以统一的方式进行处理,从而简化系统设计。

此外,工具调用也是评价 AI Agent 是否具备解决复杂问题的重要能力之一。 XAgent 在设计中原创了工具执行引擎 ToolServer,可以实现更安全、高效、可扩展的工具执行能力。

经过在一系列任务中的测试可以看到(如下图a、b所示),基于 GPT-4 的 XAgent 表现效果在所有基准测试中都超过了原始的 GPT-4,并全面超越了 AutoGPT。

这些任务需要 Agent 推理规划和使用外部工具的能力,包括:用搜索引擎回答问题的能力(FreshQA+HotpotQA)、Python 编程能力(MBPP)、数学推理能力(MATH)、交互式编程能力(InterCode)、具身推理能力(ALFWorld)、真实复杂任务等。

多智能体

群体智能

单一AI代理已经无法满足日益增长的需求。而多Agent让多个AI代理能够协同工作,共同完成复杂的任务

这就是为什么 Autogen 的出现如此重要。

AutoGen总结对比

维度 AutoGen Multi-Agent Debate CAMEL BabyAGI MetaGPT
架构通用性
对话模式 静态/动态 静态 静态 静态 静态
执行LLM代码
人工介入

Camel

Camel 通过 LLM 来模拟用户和 AI 助手,让两个 agent 进行角色扮演(例如一个是业务专家,一个是程序员),然后让他们自主沟通协作来完成一项具体的任务。

这个想法比较直接,不过作者也提到 prompt 的设计还是蛮重要的,否则很容易出现角色转换,重复指令,消息无限循环,有瑕疵的回复,何时终止对话等等问题。具体看项目代码中给出的 prompt 设定,添加了非常多的明确指令来让 agent 按照预想的设定来沟通协作。

除了 agent prompt 和运作模式的设计优化外,作者还设计了 prompt 来自动生成各种角色,场景诉求等内容。这些内容在自动组成各种角色扮演的场景,就能收集到各个场景下 agent 的交互情况,便于后续做进一步的挖掘分析。这个网站 来探索已经生成的各种 agent 组合之间的对话记录。这个项目代码也做了开源,会是一个非常好的研究 AI agent 社群研究方向的起点。

Generative Agents

如何看本周最火的AutoGPT?

沿着这个方向进一步推演,是否可以将多个 agent 组成一个团队,分别扮演不同的角色,是否能更好地解决一些复杂问题,甚至让这个小的“社群”演化出一些更复杂的行为模式甚至新知识的发现?

Generative Agents 中,作者将 25 个拥有身份设定的模型 agent 组成了一个虚拟小镇社群,每个 agent 都具有记忆系统,并通过做计划,行动应答,自我反思等机制来让他们自由活动,真正来模拟一个社群的运作。从模拟过程来看这个社群也“涌现”了不少真实社会中的现象,非常有意思。

几个 agent 行为的设定值得学习:

  • 每个 agent 的记忆获取做得更加细致,会结合时效性,重要度和相关度来做相关记忆的召回。相比简单的向量相似度搜索来说效果会好很多。
  • 记忆存储方面也添加了 reflection 步骤,定期对记忆进行反思总结,保持 agent 的“目标感”。
  • 在 plan 生成方面也做了多层级递归,由粗到细生成接下来的行动计划,跟我们的日常思考模式也更接近。
  • 通过“人物采访”的方式来评估这些行为设定的效果,消融实验中都能发现明显的提升。

一整套 identity,plan, act/react,reflect,memory stream 逻辑挺合理的,与 AutoGPT 的做法可以进行一些互补。当然局限性应该也有不少,比如

  • 模拟过程中 agent 之间都是一对一的谈话,而没有会议/广播这种设定。
  • 目前模拟运行的时长也有限,比较难确保长时间的运行下 agent 的记忆、行为模式的演化,社群整体目标的探索与推进等方面的效果。

从应用角度来看,目前好像也主要集中在社会活动模拟,游戏应用等。是否能拓展到任务处理,知识探索等更广阔的领域,还有待进一步探索。

斯坦福小镇

【2023-8-10】斯坦福25个AI智能体「小镇」终于开源,《西部世界》真来了!斯坦福爆火「小镇」开源,25个AI智能体恋爱交友

Smallville 沙盒世界小镇中,区域会被标记。根节点描述整个世界,子节点描述区域(房屋、咖啡馆、商店),叶节点描述对象(桌子、书架)。 智能体会记住一个子图,这个子图反映了他们所看到的世界的各个部分。

25个AI智能体不仅能在这里上班、闲聊、social、交友,甚至还能谈恋爱,而且每个Agent都有自己的个性和背景故事。

智能体John Lin的种子记忆就是这样的——

  • John Lin是一名药店店主,十分乐于助人,一直在寻找使客户更容易获得药物的方法。
  • John Lin的妻子Mei Lin是大学教授,儿子Eddy Lin正在学习音乐理论,他们住在一起,John Lin非常爱他的家人。
  • John Lin认识隔壁的老夫妇Sam Moore和Jennifer Moore几年了,John Lin觉得Sam Moore是一个善良的人。
  • John Lin和他的邻居山本百合子很熟。John Lin知道他的邻居TamaraTaylor和Carmen Ortiz,但从未见过他们。
  • John Lin和Tom Moreno是药店同事,也是朋友,喜欢一起讨论地方政治等等。

John Lin度过的一天早晨:6点醒来,开始刷牙、洗澡、吃早餐,在出门工作前,他会见一见自己的妻子Mei和儿子Eddy。

这些智能体相互之间会发生社会行为。当他们注意到彼此时,可能会进行对话。随着时间推移,这些智能体会形成新的关系,并且会记住自己与其他智能体的互动。

一个有趣的故事是,在模拟开始时,一个智能体的初始化设定是自己需要组织一个情人节派对。 随后发生的一系列事情,都可能存在失败点,智能体可能不会继续坚持这个意图,或者会忘记告诉他人,甚至可能忘了出现。

英伟达高级科学家Jim Fan评论道——

斯坦福智能体小镇是2023年最激动人心的AI Agent实验之一。我们常常讨论单个大语言模型的新兴能力,但是现在有了多个AI智能体,情况会更复杂、更引人入胜。 一群AI,可以演绎出整个文明的演化进程。

AutoGen 微软

【2023-10-10】微软发布AutoGen, github,多代理(Agent)任务框架,完成各种场景的复杂工作流任务,从GPT大语言模型近几个月高速迭代以来,最近这个概念很火。

微软和OpenAI一定商量好了

  • 11月6日 OpenAI 在发布 Assistant,和 AutoGen 原有架构完美兼容。
  • 11月11日 AutoGen 就 Commits GPTAssistantAgent

如果要做 multi-Agent,那么 AutoGen 架构一定是最正确的

AutoGen 介绍

微软公司发布了开源Python库AutoGen。

  • AutoGen是“一个简化大语言模型工作流编排、优化和自动化的框架。AutoGen背后的基本概念是“代理”(agents)的创建,即由大语言模型(如GPT-4)提供支持的编程模块。这些智能体(agents)通过自然语言信息相互作用,完成各种任务。
  • 【2024-2-8】AutoGen框架学习 飞书文档

借助AutoGen,开发人员可以创建一个由代理(agents)组成的生态系统,这些代理专注于不同的任务并相互合作。

  • AutoGen使用多代理(multi-agent)对话支持复杂的基于大语言模型的工作流。
    • 左图:AutoGen代理是可定制的,可以基于大语言模型 、工具、人,甚至是它们的组合。
    • 右图:智能体(agents)可以通过对话来解决任务。右边下图:这个框架支持许多额外的复杂对话模式。
  • 将每个代理(agents)视为具有其独特系统指令的单个ChatGPT会话。
    • 例如,可以指示一个代理充当编程助手,根据用户请求生成Python代码。另一个代理可以是代码审查器,它获取Python代码片段并对其进行故障排除。然后,可以将第一个代理的响应作为输入传递给第二个代理。其中一些代理甚至可以访问外部工具,比如ChatGPT插件,如Code Interpreter或Wolfram Alpha。

AutoGen提供工具来创建代理(agents)并自动交互。多代理(multi-agent)应用程序完全自主或通过“人工代理”进行调节,允许用户介入代理之间对话,监督和控制。在某种程度上,人类用户变成了监督多个人工智能代理的团队负责人

对于代理框架必须做出敏感决策并需要用户确认的应用程序,人工代理非常有用。

  • AutoGen 让用户在开始走向错误的方向时帮助调整方向。例如,用户可以从应用程序的初始想法开始,然后在代理的帮助下逐渐进行完善,并在开始编写代码时添加或修改功能。
  • AutoGen 模块化架构也允许开发人员创建通用的可重用组件,这些组件可以组装在一起,以快速构建自定义应用程序。

多个AutoGen代理可以协作完成复杂的任务。

例如,人工代理可能会请求帮助编写特定任务的代码。编码助理代理(agents)可以生成并返回代码,然后代理可以使用代码执行模块并对代码进行验证。然后,这两个人工智能代理可以一起对代码进行故障排除并生成最终的可执行版本,而人类用户可以在任何时候中断或提供反馈。

这种协作方法可以显著提高效率。根据微软公司的说法,AutoGen可以将编码速度提高四倍。

AutoGen 内置代理

  • 泛型 ConversableAgent
    • 这些代理能够通过交换消息来相互交谈以共同完成任务。代理可以与其他代理通信并执行操作。不同的代理在接收消息后执行的操作可能不同。
  • AssistantAgent 助手代理: 通用的AI助手,负责执行具体任务
    • 默认使用 LLM,但不需要人工输入或代码执行。
    • 编写 Python 代码(在 Python 编码块中),供用户在收到消息(通常是需要解决的任务的描述)时执行。在后台,Python 代码是由 LLM(例如 GPT-4)编写的。它还可以接收执行结果并建议更正或错误修复。可以通过传递新的系统消息来更改其行为。LLM 推理配置可以通过 llm_config 进行配置。
  • UserProxyAgent 人类代理
    • 每个交互回合中,将人工输入作为代理的回复,并且还具有执行代码和调用函数的能力。
    • 收到消息中检测到可执行代码块且未提供人类用户输入时,会自动 UserProxyAgent 触发代码执行。可将 code_execution_config 参数设置为 False 来禁用代码执行。默认基于 LLM 的响应处于禁用状态。可以通过设置为 llm_config 与推理配置对应的字典来启用它。When llm_config 设置为字典, UserProxyAgent 可以在不执行代码执行时使用 LLM 生成回复。

两个具有代表性的子类是 AssistantAgent 和 UserProxyAgent 。这两个代理可协同工作,构建强大的应用,如Chat GPT Plus代码解释器加插件的增强版本。

  • 实用
    • UserProxyAgent 用户直接交互的 Agent,不处理 Task。
    • AssistantAgent 实际处理某些 Task 的 Agent,不直接与用户交互。
    • GroupChatManager 管理群组对话,也不直接和用户交互。
  • 抽象
    • ConversableAgent 3 个实用 Agent 继承的类,绝大部分 Agent 的功能都写在这个里面,很长
    • AgentConversableAgent 父类,很短,只定义了接口
  • GroupChat 是有关群组对话的类,不是 Agent,它保存群成员和群消息,以及一些列拼凑 prompt 和message 的方法。

一步循环流程

  1. 用户把 Task 告诉 UserProxyAgent
  2. UserProxyAgent 把消息发送给 AssistantAgent;
  3. AssistantAgent 返回结果给 UserProxyAgent ,UserProxyAgent 决定下一步如何进行。

UserProxyAgent 和 AssistantAgent 都是一系列代码 + LLM,都有自己的 prompt(SystemMessage)。

  • 但是 UserProxyAgent 有特殊权限:执行代码,而 AssistantAgent 不能运行。
    • 这种权限控制写在代码里,而不是 prompt。
  • 即使实际处理 Task 的 Agent 只有 1 个,但必须有 1 个 UserProxyAgent,也就是至少有 2 个 Agent。
assistant = AssistantAgent("assistant" ....)
user_proxy = UserProxyAgent("user_proxy" ....)
user_proxy.initiate_chat(assistant, ....)
代码理解

AutoGen 中的代理具有以下功能:

  • 对话:AutoGen 没有隔离代理,任何代理都可发送和接收来自其他代理的消息以启动或继续对话
  • 定制:AutoGen 代理可自定义, 集成 LLM、人员、工具或组合。

autogen/agentchat/init.py 中定义多种智能体

  • Agent抽象类,定义了 name属性方法, reset,send/a_send,receive/a_reveive,generate_reply/a_generate_reply
  • ConversableAgent”, 泛型, 通过交换消息共同完成任务。不同代理接收消息后执行的操作可能不同
    • Autogen框架中有两个默认代理:用户代理(user) 和助手代理 (assistant)。
    • 两个具有代表性的子类是 AssistantAgentUserProxyAgent
  • AssistantAgent”, AI助手,通用AI助手,负责执行具体任务
    • 默认使用 LLM,但不需要人工输入或代码执行。
    • 通过LLM编写 Python 代码,供用户在收到消息(要解决任务的描述)时执行。
    • 接收执行结果并建议更正或错误修复。通过传递新系统消息来更改其行为。LLM 推理配置可以通过 llm_config 进行配置。
  • UserProxyAgent”, 人类代理,或用户代理,代表用户工作 (人类),可独立做决定或向用户请求输入。
    • 每个交互回合中,将人工输入作为代理回复,还具有执行代码调用函数能力。收到的消息中检测到可执行代码块且未提供人类用户输入时,会自动 UserProxyAgent 触发代码执行。可以通过将 code_execution_config 参数设置为 False 来禁用代码执行。
    • 默认情况下,基于 LLM 的响应处于禁用状态。设置为 llm_config 与推理配置对应的字典来启用它。 llm_config 设置为字典, UserProxyAgent 可以在不执行代码执行时使用 LLM 生成回复。
  • GroupChat”,
  • GroupChatManager

用户代理和助手代理之间的聊天被自动化,同时允许人工反馈或干预,实现了高效和灵活的任务完成方式。

  • GroupChatManager 不是 LLM Agent,没有「ManagerAgent」直接调用 OpenAI API 的代码证据,Manager 把群组消息重新组织后转发给其他 Agent ,自己调用 OpenAI API 。
  • GroupChat 不是 Agent,包含了一些拼凑和更新 prompt 以及 message 文本的方法。Manager 会使用这些方法,并且把拼凑好的文本消息 send 给其他 Agent,并且消息的发送者是 speaker(其中一个AssistantAgent),而不是 Manager 自己

记忆单元 Memory

Memory记录Agent与其他Agent交互历史

  • 信息隔离:没有对话过的agent看不到彼此信息
  • 但ChatManager拥有所属agent聊天记录,消息广播给所有agent,所以能看到彼此信息

Tool 工具

  • Tool calling: 通过 ConversableAgent.register_for_llm 方法向LLM注册tools。
  • 通过 ConversableAgent.register_for_execution 向UserProxyAgent注册tool的执行。

ConversableAgent 关键环节

.initiate_chat(recipient: ? ...
# 对话开始时用 recipient 定义一个谈话对象 Agent

.send(message,recipient...
    recipient.receive(message, ...)
# 把消息通过 .send 发送给谈话对象,谈话对象用 .receive 接收消息。

.receive
    reply = self.generate_reply(messages, ...)
# 接收到消息后通过 generate_reply 里面有较长的处理步骤,会一直调到 OpenAIWrapper.create ,总之就是调到 OpenAI API 了,并得到 LLM 的推理和回复。

.send(reply, ...
# 把得到的 reply 通过 .send 发回给之前那个 Agent,这样完成一个循环。

ConversableAgent 注册函数、调用函数

# 注册
def register_reply( ...
    self._reply_func_list.insert( ...
        "reply_func": ?
# 这样就把函数插到了 _reply_func_list 里了,并且存在 "reply_func" 上

# 调用
def generate_reply( ...
    for reply_func_tuple in self._reply_func_list:
        reply_func = reply_func_tuple["reply_func"]
        # 拿到所有的可调用的函数
        if self._match_trigger(reply_func_tuple["trigger"], sender):
            reply = reply_func(...
            # 用 _match_trigger 去匹配一下名称,名称正确的话就直接调用那个函数

GroupChatManager 的关键环节

def run_chat:

    speaker = ...
    
    for agent in groupchat.agents:
        if agent != speaker:
            self.send(message, agent
# GroupChatManager 只有1个新增的函数方法就是 run_chat,它找到 1 个 speaker(是一个AssistantAgent),并且把 speaker 的消息发给群组里除了 speaker 之外的所有人。其余还有针对各种情况的判断处理就不深入了。

def __init__:
    self.register_reply( GroupChatManager.run_chat, ...
# register_reply 是父类 ConversableAgent 的一个方法,允许注册新的函数功能,用来扩展 Agent 类型,GroupChatManager 的 run_chat 就是这样扩展进去的。之后新增的其他类型的 Agent 都在用这个方法扩展。
  1. 用户把 Task 告诉 UserProxyAgent,然后 UserProxyAgent 会把消息发送给 GroupChatManager;
  2. GroupChatManager 会作为群消息管理者,把适当的消息转发给适当的 AssistantAgent;
  3. AssistantAgent 接收到群消息,并且给出自己的推理;
  4. GroupChatManager 会拿到所有 AssistantAgent 的推理并发回给 UserProxyAgent。UserProxyAgent 来决定下一步如何进行,这样就完成一步的循环。
user_proxy = UserProxyAgent("user_proxy" ....

assistant1 = AssistantAgent("assistant1" ....
assistant2 = AssistantAgent("assistant2" ....
assistant3 = AssistantAgent("assistant3" ....

groupchat = autogen.GroupChat(agents=[user_proxy, assistant1, assistant2, assistant3], ...

manager = autogen.GroupChatManager(groupchat=groupchat, ...

user_proxy.initiate_chat(manager, ....

Autogen系列

应用场景

【2024-1-14】Autogen 新手指南:基础概念和应用

官方公布的5大领域

  • 代码生成、执行和调试
    • 通过代码生成、执行和调试实现自动化任务解决
    • 自动代码生成、执行、调试和人工反馈
    • 使用检索增强代理自动生成代码和回答问题
    • 使用基于 Qdrant 的检索增强代理自动生成代码和回答问题
  • 多智能体协作(>3 智能体)
    • 使用 GPT-4 + 多个人类用户自动解决任务
    • 通过群聊自动解决任务(有 3 个群组成员代理和 1 个经理代理)
    • 通过群聊自动实现数据可视化(有 3 个群组成员代理和 1 个经理代理)
    • 通过群聊自动解决复杂任务(有 6 个群组成员代理和 1 个经理代理)
    • 使用编码和规划代理自动解决任务
  • 应用
    • GPT-4 代理的自动国际象棋游戏和搭便车
    • 从新数据中自动持续学习
    • OptiGuide 用于供应链优化的大型语言模型.
  • 工具使用
    • Web 搜索:解决需要 Web 信息的任务
    • 将提供的工具用作函数
    • 使用 Langchain 提供的工具作为函数进行任务解决
    • RAG:具有检索增强生成的群聊(具有 5 个组成员代理和 1 个经理代理)
    • OpenAI 实用程序功能深入指南
  • 代理教学
    • 通过自动聊天向其他代理传授新技能和重用
    • 向其他代理传授编码以外的新事实、用户偏好和技能

AutoGen的新应用程序示例:会话象棋(conversational chess)。它可以支持各种场景,因为每个玩家可以是大语言模型授权的AI、人类或两者的混合体。它允许玩家创造性地表达他们的动作,例如使用笑话,模因参考(meme references)和角色扮演,使棋类游戏对玩家和观察者来说更具娱乐性。

AutoGen还支持更复杂的场景和架构,例如大预言模型代理的分层安排。例如,聊天管理器代理可以调节多个人类用户和大语言模型代理之间的对话,并根据一组规则在它们之间传递消息。

具体

  • Multi-Agent Conversation Framework
    • AutoGen provides multi-agent conversation framework as a high-level abstraction. With this framework, one can conveniently build LLM workflows.
  • Easily Build Diverse Applications
    • AutoGen offers a collection of working systems spanning a wide range of applications from various domains and complexities.
  • Enhanced LLM Inference & Optimization
    • AutoGen supports enhanced LLM inference APIs, which can be used to improve inference performance and reduce cost.

举个示例:

  • 比如构建一个法律资讯或电商客服系统时,AutoGen可以让一个AI代理负责收集客户提出的问题,另一个给出初步建议和回答。
  • AutoGen同时还会将任务分解并分配给多个代理,一个代理负责查询数据库里的答案,一个代理会联网搜索实时最新数据进行比对,另一个代理负责对收集来的数据进行审核和纠正,还有的代理负责将汇总的数据进行格式化后并发给客户。
  • 在整个过程中,AutoGen会把问题分解成多个任务,并自动分配给多个代理,同时支持人工抽样干预和反馈。与直接使用GPT AI聊天机器人不同的是,AutoGen支持多代理(AI、人、工具等)相互协作,使整个工作流更加高效。

其实代理Agent的设计一直是人工智能领域的焦点 过去的工作主要集中在增强代理的某些特定能力,比如符号推理,或者对于特定技能的掌握。 比如像国际象棋、围棋机器人等等。 这些研究更加注重算法的设计和训练策略,而忽视了大语言模型固有的通用能力的发展,比如知识记忆、长期规划、有效泛化和高效互动等。

AutoGen 构建的六个应用程序示例,包括数学问题解决、多智能体编码、在线决策制定、检索增强聊天、动态群聊以及对话式国际象棋。

实践

新建 OAI_CONFIG_LIST 文件,内容如下,并且将开发密钥填入<>后,保存文件。

  • 配置列表的样子,可有多个API端点,所以可用多个模型。
    • ① OpenAI: gpt-4和gpt-3.5-turbo,输入API密钥
    • ② Azure API: 微软接口
    • ③ 自定义模型
  • 如果还没有OpenAI账户,请先注册。
config_list = [
    {
        "model": "gpt-4",
        "api_key": os.environ.get("AZURE_OPENAI_API_KEY"),
        "api_type": "azure",
        "base_url": os.environ.get("AZURE_OPENAI_API_BASE"),
        "api_version": "2023-03-15-preview",
    },
    {
        "model": "gpt-3.5-turbo",
        "api_key": os.environ.get("OPENAI_API_KEY"),
        "api_type": "open_ai",
        "base_url": "https://api.openai.com/v1",
    },
    {
        "model": "llama-7B",
        "base_url": "http://127.0.0.1:8080",
        "api_type": "open_ai",
    }
]

注意

  • api_base 要更换为 base_url

twoagent.py 文件

#pip install pyautogen
from autogen import AssistantAgent, UserProxyAgent, config_list_from_json
# Load LLM inference endpoints from an env variable or a file
config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST")
# 初始化agent
assistant = AssistantAgent("assistant", llm_config={"config_list": config_list})
user_proxy = UserProxyAgent("user_proxy", code_execution_config={"work_dir": "coding"})
# 启动任务
task = "Plot a chart of NVDA and TESLA stock price change YTD."
user_proxy.initiate_chat(assistant, message=task)
# This initiates an automated chat between the two agents to solve the task

运行

python test/twoagent.py

执行过程

  1. AssistantAgent 从 UserProxyAgent 接收到包含任务描述的消息。
  2. AssistantAgent 尝试编写Python代码来解决任务,并将响应发送给 UserProxyAgent。
  3. UserProxyAgent收到助手的回复,尝试通过征求人类输入或准备自动生成的回复来进行回复。
    • 如果没有提供人类输入,UserProxyAgent将执行代码并将结果用作自动回复。
  4. AssistantAgent 随后为UserProxyAgent生成进一步的回应。
    • 用户代理随后可以决定是否终止对话。如果不终止,则重复步骤3和4。

简单Agent示例

  • 比 LangChain 简单的多
import autogen

# 1、建立必要配置
config_list = [
    {
        "model": "Mistral-7B",
        "api_base": "http://localhost:8000/v1",
        "api_type": "open_ai",
        "api_key": "NULL",
    }]


# 2、大模型请求配置
llm_config = {
    "request_timeout": 600,
    "seed": 45,  # change the seed for different trials
    "config_list": config_list,
    "temperature": 0,
    "max_tokens":16000,
}

# 3、新建一个助理智能体
assistant = autogen.AssistantAgent(
    name="assistant",
    llm_config=llm_config,
    is_termination_msg=lambda x: True if "TERMINATE" in x.get("content") else False,
)

#创建名为 user_proxy 的用户代理实例,这里定义为进行干预
user_proxy = autogen.UserProxyAgent(
    name="user_proxy",
    human_input_mode="TERMINATE",
    max_consecutive_auto_reply=1,
    is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),
    code_execution_config={"work_dir": "web"},
    llm_config=llm_config,
    system_message="""Reply TERMINATE if the task has been solved at full satisfaction.
Otherwise, reply CONTINUE, or the reason why the task is not solved yet.""")


task1 = """今天是星期几?,还有几天周末?请告诉我答案。"""
user_proxy.initiate_chat(assistant,message=task1)

复杂案例

需求

今天是什么日期,比较Meta和Tesla的年初至今收益

用户代理和助手代理两种类型,完成如下任务

  • 助手代理是增强版的代码解释器,生成、修改代码
  • 用户代理负责执行,根据设置自动或手动运行代码

流程

  • 两个代理不断互动,用户代理接收任务描述,助手写代码,用户代理执行代码并且将代码的结果返回助手,助手根据代码执行的反馈修改代码或者返回成功的结果,完成任务后,返回结束标志给到用户代理,用户代理关闭程序。

具体

助手对用户代理说:

“首先,让我们使用Python获取当前日期。”

因此写了一些Python代码来获取日期。接下来,获取Meta和Tesla的年初至今收益。用Python中的 yfinance 库来获取股票价格。

如果还没有安装,请通过在终端运行 pip install yfinance 来安装这个库。这是助手告诉我安装那个库,然而用户代理将执行这个操作。

实际上它给了代码,用Python代码获取Meta和Tesla年初至今收益的方法。所以写了代码,使用了那个库。这段代码将以百分比的形式打印Meta和Tesla的年初至今收益。

用户代理执行了代码,但遇到了一个bug。这个 bug 从用户代理传递给到助手代理,把问题传回了助手,试图让助手修复它。

助手回到用户:

“为了之前的疏忽我道歉,变量today在第一段代码中定义了,但在第二段中没有定义。让我们更正它。”

所以这里它实际上在纠正,这里是新代码,这里是代码输出。

实际上工作。Meta的年初至今收益,Tesla的年初至今收益,以百分比表示。

然后助手回到用户:

“很好,代码已经成功执行。”

然后助手基本上以非常易读的方式打包了信息。所以在2023年10月2日,也就是今天,Meta的年初至今收益约为140%,Tesla的年初至今收益为131%。

现在助手输出了 TERMINATE 标志,代表该任务已经成功完成了,然后它输出了终止响应。

用户代理执行 is_termination_msg 匿名函数,获取到TERMINATE 标志后,停止了对话。

# 创建一个助手代理
assistant = autogen.AssistantAgent(
    name="assistant",
    llm_config={
        "seed": 42,  # seed for caching and reproducibility
        "config_list": config_list,  # a list of OpenAI API configurations
        "temperature": 0,  # temperature for sampling
    },  # configuration for autogen's enhanced inference API which is compatible with OpenAI API
)

# 创建一个用户代理
user_proxy = autogen.UserProxyAgent(
    name="user_proxy",
    human_input_mode="NEVER", # 永远不征求用户意见,直接自动执行
    max_consecutive_auto_reply=10,
    is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"), # 终止消息特征
    code_execution_config={
        "work_dir": "coding",
        "use_docker": False,  # set to True or image name like "python:3" to use docker
    },
)

# 使用用户代理发起一个会话,设置助理代理assistant,发起第一条消息message
user_proxy.initiate_chat(
    assistant,
    message="""What date is today? Compare the year-to-date gain for META and TESLA.""",
)

autogen既可以使用OpenAI,也可以用本地LLM

from autogen import oai

# create a chat completion request
response = oai.ChatCompletion.create(
    config_list=[
        {
            "model": "chatglm2-6b",
            "api_base": "http://localhost:8000/v1",
            "api_type": "open_ai",
            "api_key": "NULL",
        },
        {
            "model": "vicuna-7b-v1.3",
            "api_base": "http://localhost:8000/v1",
            "api_type": "open_ai",
            "api_key": "NULL",
        }
    ],
    messages=[{"role": "user", "content": "Hi"}]
)
print(response)
# ----------- 自定义消息、参数 --------
response = oai.ChatCompletion.create(
    config_list=[
        {
            "model": "baichuan2-7b",
            "api_base": "http://localhost:8000/v1",
            "api_type": "open_ai",
            "api_key": "NULL",
        }
    ],
    messages=[
        {"role": "system", "content": "你是一名资深的大语言模型领域的专家,精通模型架构原理和落地应用实践"},
        {"role": "user", "content": "你好呀!"}
    ],
    temperature=0.2,
    top_k=1,
    top_p=0.96,
    repeat_penalty=1.1,
    stop=["</s>"],
    max_tokens=1024,
    stream=False
)
print(response)

content = response.get("choices")[0].get("message").get("content")
print(content)

AutoGen 提供了 openai.Completion 或 openai.ChatCompletion 的直接替代,还添加了更多功能,如调优、缓存、错误处理和模板。例如,用户可以使用自己的调优数据,在预算范围内来优化 LLM 的生成内容。

# perform tuning
config, analysis = autogen.Completion.tune (    
    data=tune_data,    
    metric="success",    
    mode="max",    
    eval_func=eval_func,    
    inference_budget=0.05,    
    optimization_budget=3,    
    num_samples=-1,
)
# perform inference for a test instance
response = autogen.Completion.create (context=test_instance, **config)

【2024-2-4】实践通过, 本地工具调用

from autogen import AssistantAgent, UserProxyAgent, get_config_list, GroupChat, GroupChatManager

# =========== LLM 配置区 ===========
# config_list = get_config_list(["****"],
#                               ["****"], "azure",
#                               "2023-03-15-preview")

config_list = [
    {
        "model": "gpt-3.5-turbo-0613",
        #"model": "gpt-4-0613", 
        "base_url": "https://****",
        "api_type": "azure",
        "api_key": "******",
    }
]

llm_config = {
    "config_list": config_list,
    "temperature": 0.1,
    "model": "gpt-35-turbo-16k",
}
# =========== Agent设置 ===========
weather = AssistantAgent(name="weather", llm_config=llm_config, )
travel = AssistantAgent(name="travel", llm_config=llm_config,)

# create a UserProxyAgent instance named "user_proxy"
user_proxy = UserProxyAgent(
    name="user_proxy",
    human_input_mode="TERMINATE",
    is_termination_msg=lambda x: "tool_calls" not in x.keys(),
    max_consecutive_auto_reply=10,
)

# =========== 本地工具调用 ===========
@user_proxy.register_for_execution()
@weather.register_for_llm(description="查询天气")
def query_weather(city: str) -> str:
    return f"weather in {city} is sunny."

@user_proxy.register_for_execution()
@travel.register_for_llm(description="旅游推荐")
def travel_recommend(weather: str) -> str:
    return f'结合天气{weather},我认为最好去爬山'

# =========== 群聊设置 ===========
group_chat = GroupChat(
    agents=[user_proxy, weather, travel],
    messages=[],
    speaker_selection_method="auto",
    allow_repeat_speaker=False,
    max_round=12,
)

manager = GroupChatManager(
    groupchat=group_chat,
    is_termination_msg=lambda x: x.get("content", "").find("TERMINATE") >= 0,
    llm_config=llm_config,
)

# =========== 启动会话 ===========
user_proxy.initiate_chat(
    manager,
    message="结合杭州的天气,给我推荐一些旅游的地方"
)
AutoGen Studio

【2023-12-1】微软 AutoGen Studio: Interactively Explore Multi-Agent Workflows

AutoGen Studio 提供了一个更直观的用户界面,使得用户可以更容易地使用AutoGen框架来创建和管理AI智能体。

  • 与CrewAI和MetaGPT相比,AutoGen Studio提供了可视化界面,对新手更友好

特性

  • 智能体和工作流定义修改:用户可以在界面上定义和修改智能体的参数,以及通信方式。
  • 与智能体的互动:通过UI创建聊天会话,与指定的智能体交互。
  • 增加智能体技能:用户可以显式地为他们的智能体添加技能,以完成更多任务。
  • 发布会话:用户可以将他们的会话发布到本地画廊。

AutoGen Studio的组成

  • 构建部分(Build):定义智能体属性和工作流。
    • 默认的三个Skill是生成图片、获取个人网页正文、找Arxiv的论文。
  • 游乐场(Playground):与在构建部分定义的智能体工作流进行互动。
  • 画廊(Gallery):分享和重用工作流配置和会话。

CrewAI、MetaGPT v0.6、Autogen Studio 区别

实践

  • 背后通过 fastapi、uvicorn 启动Web并行服务, 详见代码
  • sqlite3 本地数据库存储会话数据,详见代码
    • 重置数据库 —— 删除 database.sqlite
    • 删除用户信息 —— 删除文件夹 autogenstudio/web/files/user/<user_id_md5hash>
  • 切换LLM、agent配置、skill信息 —— 修改默认配置文件 dbdefaults.json
  • 查看中间信息 —— Web UI调试窗口,或 database.sqlite 文件
pip install autogenstudio # 安装
# Mac电脑需要 export OPENAI_API_KEY=<your_api_key>
#参数 host, port, workers, reload
autogenstudio ui --port 8081 # 启动Web UI
autogenstudio ui --port 8081 --host 10.92.186.159 # 其它域内机器可访问

智能体实践

MusicAgent

【2023-10-20】MusicAgent:基于大语言模型的音乐理解和生成AI agent

MusicAgent 系统整合了众多与音乐相关的工具,并拥有一个自动工作流程来满足用户需求。

  • 构建了一个从各种来源收集工具的工具集,如 Hugging Face、GitHub和Web API等,并由大型语言模型(如ChatGPT)支持的自动工作流程来组织这些工具。
  • 目标: 让用户从AI音乐工具的复杂性中解脱出来,专注于创意部分。

这个系统为用户提供了轻松组合工具的自由,无缝且丰富的音乐体验。

超级AI助理

【2023-10-19】不再只是聊天机器人!AutoGen + LangChain = 超级AI助理

  • AutoGen 代理可以根据特定需求定制,参与对话,并无缝集成人类参与。适应不同的操作模式,包括LLM的利用、人类输入和各种工具。
  • AutoGen 没有原生支持连接到各种外部数据源,而LangChain正好发挥作用。两者结合,正是基于OpenAI的函数调用特性。利用 function call,AutoGen Agents能够调用LangChain的接口与组件。

构建AI助理,帮助用户完成知识问答任务

  • 使用白皮书构建一个向量存储。
  • 基于向量存储,通过LangChain创建会话型基于检索的问答链。
  • 定义名为 answer_uniswap_question 的函数,接受一个参数question,并调用问答链来回答问题。
  • 使用AutoGen设置用户代理和助手代理,并启用函数调用。

CogAgent

【2023-12-15】CogAgent:带 Agent 能力的视觉模型,免费商用

  • 10月11日,我们发布了智谱AI新一代多模态大模型 CogVLM,该模型在不牺牲任何 NLP 任务性能的情况下,实现视觉语言特征的深度融合,其中 CogVLM-17B 在 14 个多模态数据集上取得最好或者第二名的成绩。
  • 12月15日,我们再次升级。基于 CogVLM,提出了视觉 GUI Agent,并研发了多模态大模型CogAgent。

其中,视觉 GUI Agent 能够使用视觉模态(而非文本)对 GUI 界面进行更全面直接的感知, 从而做出规划和决策。

而多模态模型 CogAgent,可接受1120×1120的高分辨率图像输入,具备视觉问答、视觉定位(Grounding)、GUI Agent等多种能力,在9个经典的图像理解榜单上(含VQAv2,STVQA, DocVQA,TextVQA,MM-VET,POPE等)取得了通用能力第一的成绩,并在涵盖电脑、手机的GUI Agent数据集上(含Mind2Web,AITW等),大幅超过基于LLM的Agent,取得第一。 为了更好地促进多模态大模型、Agent社区的发展,我们已将CogAgent-18B开源至GitHub仓库(申请可免费商用),并提供了网页版Demo。

模型:

  • Huggingface:https://huggingface.co/THUDM/cogagent-chat-hf
  • 魔搭社区:https://modelscope.cn/models/ZhipuAI/cogagent-chat

设备操控

AppAgent

【2023-12-21】AI能模仿人类在手机上操作APP了

AppAgent可以通过自主学习模仿人类的点击和滑动手势,能够在手机上执行各种任务。

它可以在社交媒体上发帖、帮你撰写和发送邮件 、使用地图、在线购物,甚至进行复杂的图像编辑…

AppAgent在50 个任务上进行了广泛测试,涵盖了10种不同的应用程序。

该项目由腾讯和德州大学达拉斯分校的研究团开发。

主要功能特点:

  • 多模态代理:AppAgent 是一个基于大语言模型的多模态代理,它能够处理和理解多种类型的信息(如文本、图像、触控操作等)。这使得它能够理解复杂的任务并在各种不同的应用程序中执行这些任务。
  • 直观交互:它能通过模仿人类的直观动作(如点击和滑动屏幕)来与智能手机应用程序交互。就像一个真人用户一样。
  • 自主学习:AppAgent 通过观察和分析不同应用程序中的用户界面交互。并学习这些交互模式,并将所获得的知识编译成文档。
  • 构建知识库:通过这些交互,AppAgent 构建了一个知识库,记录了不同应用程序的操作方法和界面布局。这个知识库随后用于指导代理在不同应用程序中执行任务。
  • 执行复杂任务:一旦学习了应用程序的操作方式,AppAgent 就能够执行跨应用程序的复杂任务,如发送电子邮件、编辑图片或进行在线购物。

  • 项目及演示
  • 论文:AppAgent: Multimodal Agents as Smartphone Users
  • GitHub:AppAgent

ScreenAgent

大模型直接操控电脑——ScreenAgent

产品信息:

  • ScreenAgent是一款由吉林大学人工智能学院开发、视觉语言大模型驱动的计算机控制代理。

产品功能:

  • ScreenAgent可帮助用户在无需辅助定位标签的情况下,通过VLM Agent控制电脑鼠标和键盘,实现大模型直接操控电脑的功能。

ScreenAgent可根据用户的文本描述查找并播放指定的视频

例如,ScreenAgent可根据用户的文本描述查找并播放指定的视频,或根据用户要求调整视频播放速度。ScreenAgent还能帮用户打开Windows系统的事件查看器,使用office办公软件,例如根据用户文本描述,删除指定的PPT内容。

阅读 Readagent

阅读能力超强的Agent模型——Readagent

产品信息:

  • Readagent是由Google开发的一款模仿人类阅读方式的阅读类型代理(Agent)模型。它通过学习人类阅读长文本时遗忘具体信息但保留要点信息的方式,来提高处理和理解长文本的效率。

产品功能:

  • 在处理长文本时,Readagent会把文本中的主要信息转化为“要点记忆”进行存储,当需要回答具体细节问题时,Readagent会迅速定位到到相应的“要点”中寻找答案,从而出色地完成长文本的阅读理解任务。此外,Readagent还能帮用户在复杂的网站中找到需要的信息。

智能教育

【2024-4-12】用大模型+Agent,把智慧教育翻新一遍

以正大模型Agent大多采用“群体作战”模式。在Agent社区中,不同角色的Agent可以主动与彼此交互、协同,帮人类用户完成任务。

  • 助教Agent能够实现一对一讲评,成为教师的得力助手;
  • 教案Agent能够生成高质量精品教案;
  • 学伴Agent是学生的学习伴侣,随时提供学习辅导,并为学生制定个性化教学方案。

举例

  • 教师将某个学习任务输入助教Agent后
  • 助教Agent能够主动将任务分发至各位同学的学伴Agent
  • 学伴Agent会主动根据学生的学习习惯制定个性化学习计划,并主动跟踪学生的学习进度和质量,还能将情况即使反馈至助教Agent。

Agent社区形成后,接下来是解决Agent落地“最后一米”的问题——如何设计人与Agent的交互形式。

很多教育场景中,自然语言交互并非最佳方式。

  • 老师制定教育计划或学生提交作业经常会涉及到四五千字的长文本,这么长的内容放在一个对话流中阅读,非常影响使用体验。
  • 现实工作场景中,用户很多时候都需要一个能高效操作的工具,并不是每次人机交互都需要输入一段文字或说一段话

团队最终摸索出集两种交互方式优点于一体的产品形态——用“白板”代替简单的对话流,支持自然语言驱动的交互方式,并提供内容展示、阅览、回顾等功能,比传统软件交互更简单,但比对话交互更丰富,可深入学校各个业务场景。

结束


支付宝打赏 微信打赏

~ 海内存知已,天涯若比邻 ~

Share

Similar Posts

Related Posts

标题:大模型插件 LLM Plugin

摘要:ChatGPT插件开发知识总结

标题:大模型端侧部署/小模型 LLM Deployment at End devices

摘要:如何将大模型LLM部署在边缘设备上? 大模型小型化

Comments

--disqus--

    My Moment ( 微信公众号 )
    欢迎关注鹤啸九天