LLM 开发中目前最热门的可以说是非 Agent 莫属。因此六月份的写作重点将聚焦在 Agent 上,准备写一个 Multi-Agent 系列,从三个角度进行:
1-使用 AutoGen 搭建多智能体,从代码的角度实现 Multi-Agent Conversations;
2-使用支持本地化部署的大模型开发软件 ,以零代码的方式搭建多智能体;
3-使用字节的 Coze,搭建一个基于 Agent 微信公众号小助手。
第一种基于 AutoGen 的多智能体协同,可能是未来大模型应用构建的新范式,更多的是面向开发者;第二种是前一种的零代码实现,面向开发者和非技术的业务人员;第三种最为普适,面向无编程和技术背景的小伙伴,旨帮助大家在日常中应用 Agent。
希望借助本系列文章,能帮助大家掌握最新的多智能体协同的机制。
一、AI Agent在 AI 领域,Agent 通常被定义为一种具有感知能力的实体,它能够通过对其所处环境的观察来做出相应的决策和反应,比如我们在《图解强化学习》中提到的 Agent。
Agent 既可以是软件形式的程序,例如对话机器人,也可以具备物理形态,如机器人。在 LLM 领域,AI Agent 是指应用了LLM 能力的 Agent。
Agent 的核心架构由 Planning(规划)、Tools(工具)、Memory(记忆)三个模块组成:
Planning-规划Planning 制定计划,可以根据过去的行为与目标动态规划下一步的行动。实现 Planning 模块的功能又分为以下几种技术:
Reflexion-反思:Agent 思考他们从任务中获得的反馈,然后存储其任务回合中的记忆,以帮助他们在下一步做出更好决定。这是 Agent 内部的一种自我完善机制,使其能够从过去的行动中吸取教训,对结果进行反思,并在未来的任务中做出更好的决策。这与我们在强化学习中介绍过的 Agent 行为相似, Model-free 算法正是基于这样的方式找到最优决策。
二者的区别在于,强化学习中的策略更新通常有明确的数学定义和优化目标, 主要基于数值优化和策略更新算法;而 Reflexion 更依赖于经验和启发式方法,且具体实现上更灵活,包含逻辑推理在内的多个方面。
Chain of Thought-思维链:可以利用提示技术,要求大语言模型建立与人类推理相似的思维,从而得到答案。论文《Tree of Thoughts》,就提出了采用树或图的数据结构进行上下文管理,从而减少所需的提示次数。Decompose-分解: Agent 将复杂的问题分解成更小、更容易解决的模块;然后再利用不同的工具来处理模块化问题。ReAct:使用 ReAct 将 Reflexion 和 Action 结合起来,使 Agent 能够反复思考、行动和观察,动态地解决复杂的任务。LangChain 和 LlamaIndex 已在其代理框架中实现了这一概念。Tools-工具有了解决问题的计划之后,Agent 就可以利用一些工具按计划解决问题。
RAG:RAG 通过整合外部数据、存储在向量数据库中的外部信息,或任何大型语料库,来增强 Agent 的响应问题的能力。关于 RAG 的详细技术说明可参考这篇文章。Search Tools:Agent 可以使用各种实用工具来浏览和检索信息,帮助他们做出决策,如 Google、Bing、维基百科等。Code interpreter:帮助 Agent 更好地理解和执行代码的外部工具。Custom tools:在定制工具中利用任何外部功能或外部 API 端点,这极大增强了 Agent 的能力。记忆Agent 的记忆分为短期记忆和长期记忆两种。
Short-term Memory-短期记忆: 短期记忆是 Agent 在当前任务或对话会话中存储和使用的信息。它通常包含近期对话的上下文、当前任务的状态和临时数据。短期记忆是临时的,只在当前任务或会话中有效,主要用于保持对话的连贯性和上下文。例如,在对话过程中,短期记忆可以帮助模型记住之前的对话内容,从而在回答问题时提供相关信息。一旦任务完成或会话结束,这些信息通常会被清除或不再被使用。ChatGPT 的一轮对话中,会记忆你这这一轮对话中的所有上下文信息,并在每次对话中都可能使用这些信息。Long-term Memory-长期记忆: 长期记忆是指 Agent 在多个任务或会话中存储和使用的信息。它包含了更稳定和持久的数据,如用户偏好、历史记录、知识库和经验教训。长期记忆是持久的,信息在不同任务和会话之间被保留。即使会话结束或系统重启,这些信息仍然存在。长期记忆可以将不同任务和会话中的信息关联起来,形成更全面的知识网络。现在的 ChatGPT 中“Memory”的设置了实际上就是长期记忆。在LLM中,长期记忆可以通过多种方式实现,包括数据库、知识图谱和外部存储系统。长期记忆还可以将不同任务和会话中的信息关联起来,形成更全面的知识网络。
Semantic or standard cache-语义缓存与标准缓存:作为长期存储器的扩展,可以将指令对和 LLM 答案存储在数据库或向量数据库中。在向 LLM 发送下一个查询之前,代理可以检查缓存,以加快响应时间,降低调用基于 API 的 LLM 的成本。若将 Agent 类比为人类,则可以将 LLM + Planning + Memory 类比为 Agent 的大脑,而 Tools 则是 Agent的四肢。
二、 Multi-Agent
以上我们讨论的是单一 Agent 的架构。将多个 Agent,按照一定的工作流进行编排,每个 Agent 负责不同的任务,即组成了多智能体架构(Multi-Agent )。这非常类似于我们实际中的工作流程或组织结构:拥有不同能力的人,负责不同的任务,每个工序执行的结果给到下一个工序,最终得到最后的任务成果。
举一个实际的例子。现在我要设计一个智慧城市的数据分析工作流,由于数据来源比较复杂,并且要同时考虑模型的经济和分析地高效,可以设计三个不同的 Agent:
Agent-1 代理负责数据收集,从各种数据源(如气象部门、交通部门、环保部门的数据共享接口),收集原始数据,并进行去重、缺失值填补、格式转换等数据预处理工作。为了经济,使用 GPT-3.5 模型.Agent-2 拿到 Agent-1 的结果,然后进行数据加载和深度数据分析,使用本地微调过的 Mistral 7B 模型。Agent-3 则负责最终的数据可视化,将上一步的数据分析结果展示为可视化图表,并提供用户界面,可以选择允许用户与可视化结果进行交互,如筛选、放大、导出等。这就是一个 multi agent 的例子,它允许不同角色的 Agent 完成任务,其中某个 Agent 擅长检索数据,余下的 Agent 则擅长数据分析或数据可视化。
相比于 single agent , multi agent 有哪些优势呢?我们可以从接口 (Interface) 和架构 (Architecture) 两个维度分析:
InterfaceInterface 是指,从用户的角度来看,是在与单个 Agent 进行交互,还是能明确地看到多个 Agent 在工作,甚至需要与多个 Agent 交互。
单一的交互可以使许多应用程序的用户体验更加简单明了。但某些情况下,这不是最佳方案。比如当应用程序要让多个 Agent 就某个主题进行辩论时,用户需要看到每个 Agent 的发言。这种情况下,让用户实际看到多个 Agent 的行为是更好的。再如社会模拟实验中,用户也希望看到每个 Agent 的行为。
ArchitectureArchitecture 是指,后台是否有多个 Agent 在运行。
从架构的角度,与 single agent 相比,multi-agent 架构更易于维护扩展。即使是基于 single agent 的接口,使用 multi-agent 的实施架构也可能使系统更加模块化,开发人员更容易添加或删除功能组件。目前的技术条件下,无法构建出一个满足所有功能的 single agent ,但可以将不同的 Agent 和 LLM 进行组合,构建出一个满足使用要求的 multi-agent。
三、AutoGen
multi-agent 开发框架有 AutoGen,CrewAI ,Agent Protocol 等。本系列文章中的代码实践均基于 AutoGen 进行。
AutoGen 是一个框架,可以使用多代理开发 LLM 应用程序。
这些代理可以相互对话以完成任务。AutoGen 的代理可定制、可对话,允许人类无缝参与。它们可以采用 LLMs、人工输入和工具组合的各种模式运行。
四、多代理对话框架(Multi-Agent Conversation Framework)Autogen 通过多代理对话框架(multi-agent conversation)实现 LLM 应用程序的构建,提供可定制、可对话的 Agent,将 LLMs、工具和人类整合在一起。通过自动化多个具有不同能力的 Agent 之间的聊天,可以地让其共同、自主执行任务,或在人类反馈下执行任务。
如上图所示,在多代理框架中, 用户代理 User Proxy Agent 扮演一个中间人的角色,用户使用 shell 与 User Proxy Agent 在环境中交互;助手代理 (Assistant Agent) 配置为一个编写 Python 代码的大模型。User、User Proxy Agent、Assistant Agent 在上述对话中的具体步骤为:
对话开始,用户通过 User Proxy Agent 提出了请求:“绘制META和TESLA股票价格变化的图表”。这一请求是由用户直接输入的,用户代理作为接口接收用户的指令。User Proxy Agent 请求 Assistant Agent 绘制 META 和 TESLA 股票价格变化的图表。Assistant Agent 提供了一段执行代码,但 User Proxy Agent 反馈错误,指出未安装 yfinance 包。Assistant Agent 建议首先安装yfinance包,然后再执行代码。User Proxy Agent 随后进行安装。安装完成后,Assistant Agent 生成了一个图表输出。User Proxy Agent 请求绘制百分比变化的图表。Assistant Agent 提供了修正后的代码。最终生成了一个显示百分比变化的图表。总结
本文介绍了 Agent 和基本概念。在后续的文章中,将使用展示多智能体应用的搭建过程,并进一步深入探讨本篇文章中的相关概念。
参考资料:
Medium 文章,作者 Han HELOIR:https://towardsdatascience.com/the-future-of-generative-ai-is-agentic-what-you-need-to-know-01b7e801fa69通往 AGI 之路知识库文章:https://waytoagi.feishu.cn/wiki/CT3UwDM8OiVmOOkohPbcV3JCndbDB-GPT 项目负责人陈发强的文章:https://www.bestblogs.dev/article/d90296论文《Tree of Thoughts》:https://arxiv.org/pdf/2305.10601AutoGen 官方博客:https://microsoft.github.io/autogen/blogAutoGen 官方文档:https://microsoft.github.io/autogen/