发布于 ,更新于 

Agent入门和通信模式

1. 什么是Agentic AI

智能体AI工作流是一个基于大语言模型的应用程序执行多个步骤以完成任务的过程。 这个过程最终会产生好得多的工作输出。

2. 和工作流的区别

  • 工作流具有预定的代码路径,并被设计成按一定的顺序运行。
  • 代理是动态的,并定义自己的过程和工具使用。

3. Agent 模式

四个关键设计模式是:反思工具使用规划以及多智能体协作

3.1 反思 Reflection

  • 要求LLM检查自己的输出,或者引入一些外部信息源,例如运行代码并查看是否生成任何错误消息,并以此作为反馈再次迭代
  • 设置一个专门的批评智能体。这个批评智能体本质上就是一个被赋予了特定指令的LLM,比如:“你的角色是代码评审员,这是一段旨在完成某个任务的代码,请仔细检查代码”等等。第二个批评智能体或许会指出错误或运行单元测试。通过让两个模拟智能体(每个智能体只是一个被赋予特定角色的LLM)进行交互,它们可以来回讨论、迭代,从而获得更好的输出

3.2 工具使用 tool-use

3.2.1 介绍

LLM能够决定使用哪些工具(即调用哪些函数),这使得模型能够完成更多任务

示例:

3.2.2 基本原理

  • 如今的大语言模型都经过直接训练(Function Calling)来使用工具
  • 在大语言模型被直接训练使用工具之前,或者有些大语言模型还不支持Function Calling , 那如何做呢.

编写如下系统提示词:“你可以访问一个名为 getCurrentTime 的工具。要使用它,我希望你输出以下文本:先输出全大写的 FUNCTION,然后输出 getCurrentTime。如果我看到这个文本(全大写的 FUNCTION 后面跟着 getCurrentTime),我就知道你想要我为你调用 getCurrentTime 函数”

3.3.3 MCP 介绍

MCP(模型上下文协议)旨在为LLM提供更多上下文和工具支持,MCP试图解决的痛点:不在重复造轮子

现在已有许多MCP客户端。这些是需要访问工具或数据的应用程序,以及服务端(通常是软件封装器)

3.3 planning 规划

3.3.1 介绍

在规划模式中,LLM决定它需要采取哪些行动序列,以便能够以正确的顺序执行正确的步骤序列来完成该任务。这样一来,不再是开发者预先硬编码步骤序列,而是实际上让LLM来决定需要采取哪些步骤

能够进行规划的智能体更难控制

示例:

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

模型可以自动决定,为了执行此任务,它首先需要找到一个姿势判定模型来确定男孩的姿势。接着进行图像姿态处理,生成一个女孩的图像并进行图文处理,最后进行语音合成

3.3.2 基本原理

  • 生成计划

基本工作流程是让LLM写出一个多步骤计划,然后让其依次执行计划中的每个步骤,并附带一些关于任务是什么、有哪些可用工具等适当的上下文信息。

示例:

Q: 你们有100美元以下的圆形太阳镜现货吗?

为此,我们将为大型语言模型提供一套工具,使其能够获取商品描述(例如查找不同眼镜是否为圆形)、检查库存、处理商品退货(虽然此查询不需要,但处理其他查询时需要)、获取商品价格、查看过往交易记录、处理商品销售等等。

为了让LLM找出响应客户请求的正确工具使用序列,您可能会编写如下提示:您可以访问以下工具(并向其描述LLM拥有的六个甚至更多工具中的每一个),然后指示其返回执行用户请求的逐步计划。

针对这个特定查询,LLM可能输出的一个合理计划可能是:首先使用”获取商品描述”工具检查不同描述以找到圆形太阳镜,然后使用”检查库存”工具查看它们是否有库存,最后使用”获取商品价格”工具检查库存结果中哪些价格低于100美元。

在LLM输出这个包含三个步骤的计划后,我们可以将第一步的文本(即此处用红色标出的文本)传递给LLM,可能附加上关于可用工具、用户查询等额外背景信息,让LLM执行第一步。在这种情况下,希望LLM会选择调用”获取商品描述”工具来获取相应的商品描述,该第一步的输出可以让其筛选出哪些是圆形太阳镜。然后,将这第一步的输出与第二步的指令(即我在此处用蓝色标出的指令)一起传递给LLM以执行计划的第二步。希望它随后会获取我们在上一步找到的两副圆形太阳镜并检查库存,而第二步的输出则用于另一次LLM调用,您将第二步的输出以及第三步的操作指令传递给LLM,让它获取商品价格。最后,将此输出反馈给LLM进行最后一次调用,以生成给用户的最终答案。

  • 计划优化

    a. 用json格式的计划 代替 文本计划

    原因:纯文本可能是这些选项中最不可靠的。要么使用 JSON,要么使用 XML,都是让大语言模型明确格式化计划的不错选择。就是这样。通过以 JSON 格式制定计划,你就可以解析它,并让下游工作流更系统地执行计划的不同步骤。

​ b. 用软件代码表达其计划

​ 原因:在实践中,我见过一些团队在遇到越来越多的查询时,最终创建了越来越多、越来越多的工具,试图为模型提供足够的工具来覆盖人们可能对这类数据 集询问的所有范围。所以这种方法既脆弱又低效,我见过团队不断地处理边缘情况并试图创建更多工具

3.4 multi-agent 多智能体协同

3.4.1 介绍

雇佣一组多个智能体(可能每个智能体专精于不同的角色)并让它们协同完成复杂任务

多智能体工作流程更难控制,因为你并不总能提前知道智能体会做什么

示例:

营销手册:雇佣一个三人团队,比如一名研究员进行在线研究,一名营销人员撰写营销文案,最后一名编辑来编辑和润色文案

示例五子棋游戏:多个具有不同角色(如首席执行官、程序员、测试员、设计师等)的智能体进行协作,仿佛它们组成了一个虚拟的软件公司,能够协同完成一系列软件开发任务

3.4.2 基本原理

示例:

以创建营销素材为例,详细了解一下研究员、平面设计师和撰稿人可能分别做什么。

研究员的任务可能是分析市场趋势和研究竞争对手。在设计研究型智能体时,需要牢记的一个问题是,研究员需要哪些工具才能生成关于市场趋势和竞争对手动态的研究报告。因此,一个研究型智能体自然可能需要使用的工具就是网络搜索。因为一个被要求完成这些任务的人类研究员可能需要在线搜索来撰写报告。

对于一个平面设计师智能体,他们可能负责创建可视化和 artwork。那么,一个智能体软件平面设计师可能需要什么工具呢?他们可能需要图像生成和处理的API。或者,也许就像你在咖啡机例子中看到的那样,它可能需要代码执行来生成图表。

最后,撰稿人负责将研究报告转化为报告文本和营销文案。在这种情况下,除了大语言模型本身就能生成的文本能力之外,他们不需要任何其他工具

我将使用这些紫色方框来表示一个智能体。你构建单个智能体的方式是通过提示一个大语言模型,让其扮演研究员、平面设计师或撰稿人的角色,这取决于它属于哪个智能体部分。

3.4.3 通信模式(架构)

3.4.3.1 线性模式 Linear

示例:

在这种情况下,构建多智能体工作流的优势在于,当设计研究员、平面设计师或撰稿人时,你可以一次只专注于一件事。所以,我可以花些时间构建可能是我能做出的最好的平面设计师智能体,而我的合作者可能同时在构建研究型智能体和撰稿人智能体。最后,我们将它们串联起来,形成这个多智能体系统

3.4.3.2 管理者模式 Supervisor

由一个经理协调多个其他智能体工作的层级模式,也是一种相当常见的规划沟通模式的方式。

示例:

给一个大语言模型调用不同智能体的选项,让它请求不同的智能体帮助完成不同的任务。

具体来说,你可能会写这样的提示:”你是一名营销经理,拥有以下智能体团队可供协作“,然后给出这些智能体的描述。这与我们进行规划和使用工具时非常相似,只不过工具(绿色方框)被替换成了智能体(这些紫色方框),大语言模型可以调用它们。

3.4.3.3 辩论模式 Debate

微舆” 是一个从0实现的创新型 多智能体 舆情分析系统,帮助大家破除信息茧房,还原舆情原貌,预测未来走向,辅助决策。用户只需像聊天一样提出分析需求,智能体开始全自动分析 国内外30+主流社媒 与 数百万条大众评论。

https://github.com/666ghj/BettaFish?tab=readme-ov-file

3.4.3.3 深度层级 Deeper Hierarchy

更高级、使用频率较低但实践中有时会用到的沟通模式

这将是一个智能体的层级组织,其中一些智能体自身可能会调用其他子智能体

示例:

假设营销经理向研究员、平面设计师和撰稿人分配任务,但也许研究员自己又可以调用另外两个智能体,比如网络研究员和事实核查员。也许平面设计师独自工作,而撰稿人手下有一位初稿撰稿人和一位引文核查员

3.4.3.4 全互联沟通 All2All (Network)

在这种模式下,任何人都可以随时与任何其他人交谈

在实践中,全互联沟通模式的结果有点难以预测。因此,一些不需要高度控制的应用可以采用它。您可以运行它看看得到什么结果。如果营销宣传册效果不好,也许也没关系。您只需再次运行,看看是否能得到不同的结果。

示例:

实现这种方式的方法是,您提示所有四个智能体(在这个例子中),告诉它们还有另外三个智能体可以决定调用

4. 工作流框架使用示例