自主的AI智能体(AI Agent)成为各路研究与开发人员关注的新焦点。AI智能体基于大模型(LLM)强大的理解与推理能力,通过自然语言的交互即可自动地完成各类数字化任务,为我们展示了通往AGI(通用人工智能)的巨大可能。开源社区的各类面向AI智能体的开发框架与工具也层出不穷,本文将介绍与探讨新近发布的一个实验性的开源智能体项目,项目名字就叫Agents。
AI智能体工具的常见问题随着大模型的突飞猛进,出现了很多基于LLM的开源智能体工具项目。这一类项目通常有两种形式,一种是开箱即用的专注于某些特定任务的智能体。即基本可以直接使用的智能体,二次开发能力相对较弱(部分项目正在逐渐强化二次定制能力)。这类项目比如:
AutoGPT/BabyAGI:按照能够按照用户需求自主执行任务的通用智能代理。Generative Agents:能够模仿人类社交行为的LLM Agent。Web Agent:能够接受自然语言指令完成web任务,比如在线订餐。MetaGPT:一个多Agent的项目,最初用来实现多智能体协作开发软件。另外一种是用于构建基于LLM的智能体的框架与工具包。具备较强的二次开发能力。比如LangChain(可用于构建端到端的基于LLM的AI Agent的应用开发框架)、Camel等。这一类无法直接作为智能体来使用,但通过其SDK可以开发出适用于自己需要的AI智能体,使用门槛相对较高。

这些项目都展示基于大模型的AI智能体的无穷潜力,但是当前也都存在一些问题,这些问题制约了AI智能体在更多场景与任务下的应用:
一些项目只是为了展示LLM在构建Agent的可能性与能力,而不是一个成熟的可以用来构建与定制自己的AI Agent的平台或工具类似LangChain虽然具有强大的通用性与广泛的兼容性,但是相对较为复杂,需要较多的技术开发、调试、测试工作部分的开源项目仅仅关注与展示了AI Agent必须的核心能力中的某一部分,比如任务规划、长期记忆,或者工具的使用,缺乏足够的完整性最主要的问题,也是很多使用者或者构建过AI Agent的开发者的体会:当前很多工具构建的智能体都依赖于较为简单的自然语言任务描述(一般为几句话),然后完全依赖于LLM来规划与执行,具有很大的不可控性甚至随机性,导致不可预知的结果受限于上一个问题,也带来智能体项目通常具有难以调试与纠错的问题,即使对于经验丰富的技术人员,很多时候也只能毫无头绪的不断修改提示词(Prompt)以期望改善结果。Agents:构建更可控的智能体Agents项目宣称针对这些已有的痛点,尝试让LLM智能体的构建更具有通用性、更加简洁、且智能体的运行过程更加可控,同时又具备Agent所必备的一些基础能力,包括长短期记忆、工具使用等。其整体结构如下:
参考该架构图,也结合我们的实践与简单实测,Agents的确具备了一些不同于传统智能体工具与框架的特点:
一个更简洁、更易于使用的构建多场景下的LLM智能体系统的工具。基于Agents可以简单的通过一个配置文件(config.json)来实现一个针对特定场景的LLM智能体,你可以基于官方提供的配置文件模版或者提供的Web UI界面来配置你的智能体。相对于LangChain应用框架需要熟悉其大量的基础技术组件与关系,Agents可谓有着非常友好的使用界面。支持多智能体的交互与协作。多智能体(Multi-Agent)的确是实际AI应用场景中经常需要具备的能力。多智能体能力让AI智能体的应用场景大大延伸,具备了更强的通用性。实际测试中也发现,Agents的多智能体并非简单固化的各自行动,而是支持通过LLM来进行控制,根据当前的任务阶段、智能体的行为、以及环境,来决定智能体的动作,这更符合人类解决实际任务的场景需要。可以想象一些常见的多智能体场景:游戏中的NPC智能体不同岗位的AI机器人组成的AI软件公司内容(剧本/小说等)创作工作室支持人类-智能体交互。这里的人类-智能体交互不是简单的人类把任务描述给智能体,或者智能体简单的回答人类的问题。更多的体现在多智能体的场景中,人类不再是一个简单的旁观者,而是可以充当任务中的某个角色,并与任务中的其他AI智能体进行交互与合作。比如在一个多AI智能体的辩论场景中,人类可以参与到辩论中担任某个辩手;又或者在游戏场景中,与其他的NPC合作完成游戏任务等;或者在一个机器人软件公司中,人类担任BOSS或者Team Leader。基于SOP(标准作业流程)的更强的智能体可控性。这是Agents的核心亮点之一。即通过SOP,对单个智能体/多个智能体的任务执行过程及必要细节进行控制。包括子任务、以及各个字任务的智能体角色、任务描述、规则甚至示例等进行定义,从而让智能体能够按照人类确认过的流程进行运作,进而减少智能体过度依赖LLM而导致的失控问题。此外,由于SOP定义的流程,所以在智能体发生故障,或者未达到预期目标时可以更方便的进行故障定位。当然,Agents也实现了AI智能体所必备的一些基本能力组件,包括长短期记忆、工具使用、web搜索等。
实测:一个简单的对话智能体
我们首先用Agents构建一个单智能体来了解Agents的工作方式。假设我们需要构建这样一个对话智能体,这个智能体的工作方式很简单:
借助LLM来理解你的问题,并确定是否使用搜索以及搜索关键词通过搜索引擎,比如Bing来获得必要的信息将获得的信息再交给LLM,总结后回答你的问题虽然是一个非常简单的AI智能体,而且也并无太大的直接应用价值,但是却展示了Agent的几个基本能力,包括借助LLM规划完成任务(web搜索)、工具使用(使用Bing)、短期记忆能力(对话上下文)等。
基于LangChain开发
LangChain很好地封装了LLM、外部工具的使用接口、以及把工具与LLM组装成直接使用的Agent,通常,实现上述简单的工具智能体大致的模拟代码如下:
基于Agents构建
在Agents构建这样一个智能体则是需要提供一个配置文件,在这个配置文件中你需要去定义在应用场景中的AI智能体的各种信息,包括:
涉及的主要AI智能体角色、其中哪个角色是人类自己(如果需要)使用的大语言模型,以及必需的接口参数url/key等最核心的是SOP定义(标准作业流程)。大致可以理解为这样的一类信息:任务场景中的子任务/子目标(在Agents中用多个State来表示)。在简单的对话场景中可能只有一个主要的State,比如对话状态,因为不涉及复杂的任务;但是在一些复杂的多智能体的任务场景中,比如一个软件开发的自主任务,那么你可以定义设计状态、开发状态、调试状态等,在不同的状态中,会有不同的智能体或者人类担任对应的角色。比如一个叫Tom的智能体在设计状态不担任任何角色,但是在开发状态会担任“程序员“角色。每个State中所需要的角色(比如这里的网络搜索助手,或者软件公司智能体中的架构师、程序员、团队领导等主要角色)、任务的起始角色与输出(最先输出的角色)、给角色安排任务的控制方式(不同角色的工作顺序),以及每个角色在这个State中所需要使用的LLM、语言风格、任务描述、任务规则、任务示例等,这些对角色的约束主要会通过大语言模型的Prompt提示来实现。多个State之间的顺序、关系和切换规则。即什么时候从一个State进入到下一个State,最终进入到end_state(结束状态),即任务完成。比如软件公司智能体的从设计到开发再到调试,最后交付文档与代码。下面是简单的配置示例,在这个单智能体的例子中,SOP相对简单(这里只有一个主要的Response_state,更复杂的可参考下一个案例):
实测:“软件公司”智能体
这个例子的场景是构建一个由Agent智能体组成的软件公司,这个机器人的软件公司将会接受一个软件开发的任务,然后按照软件开发的流程进行软件的需求分析、架构设计、代码编写与调试,最终完成这个软件的开发任务。
基于MetaGPT构建
我们使用另外一个开源的多智能体框架MetaGPT来做对比。基于MetaGPT构建这样一个智能体需要简单的开发,大致的模拟代码如下:
也挺简单的,是不是?但是很难对其工作过程进行更细粒度的控制。
基于Agents构建
基于Agents构建这样一个机器人“软件公司”,最主要的工作就是通过配置文件来定义相关Agent与SOP,比如你首先需要定义多个AI智能体:
你还需要定义详细的SOP,这是最主要的配置工作。你需要了解软件开发的过程并给智能体定义标准的软件开发作业流程,即把整个任务划分成多个State,然后在每个State中确定需要的角色(Role)以及哪个智能体来担任该角色,以及该角色在此阶段的任务、风格、规则等(图中只展示一个develop_state即开发阶段,实际上还有design_state,debug_state等):
通过简单的配置运行后,我们可以看到这个机器人“软件公司”的模拟运作过程:
结束语在上面的实际测试中,我们可以看到Agents除了通过配置化实现智能体的定制,从而让使用更简洁外,其最大的亮点是通过SOP的定义让Agents的工作过程更加可控。这使得自主智能体的运作不再是一个开盲盒的过程,人类可以更加精细的对整个智能体系统的运行进行精细化的控制,可以对任务过程中的不同角色、任务、规则等进行设计,这对于复杂任务来说显得尤其重要。
当然,我们也认为Agents目前都还处于实验性的阶段,还需要在以下一些方面进行迭代完善:
当前的基于LLM的AI智能体系统侧重在文本内容输出型任务的领域(如软件代码、影视剧本、方案设计等),这自然与LLM自身的特点有关。虽然具备了一定的外部工具能力,但在一些偏操作型的任务上(如涉及软件操作、系统控制、应用通信等)需要有更多的接口与框架支持。这也是大部分智能体框架都面临的问题。Agents的以配置为主的定制不同场景的智能体系统虽然降低了使用门槛,简化了开发过程,但同时也在灵活性与扩展性上做出了一定的牺牲(软件的灵活性与易用经常是一对矛盾体)。当前如果使用Agents来定制企业复杂场景的自主智能体,在与外部应用的集成、私有知识的连接、以及其他工具的使用上,仍然会面临较大的开发量。在对复杂环境的兼容与封装上,Agents还缺乏足够的完善。相对于LangChain这样较为成熟的LLM开发框架,Agents在对大量的LLM、嵌入模型、向量库、外部工具/API、Prompt工程模式等的支持上,还较为简单或者缺乏,相关的SDK也未完善,希望在未来的的版本中不断完善。我们期待Agents能够在后续的版本迭代中不断完善,尽快的从实验阶段走向真正的实用与生产!
私信“交流”
一起探讨AI大模型的应用实践