探索新一代大模型代理(LLM agent)及其架构

在人工智能大模型(AI)的浪潮中,2023年我们见证了检索增强生成(Retrieval Augmented Generation, RAG)的兴起,而2024年则无疑成为了“代理”agent的元年。各大AI企业纷纷投身于聊天机器人代理的研发中,工具如MultiOn通过与外部网站的连接实现了快速增长,而框架如LangGraph和LlamaIndex Workflows则助力全球开发者构建结构化的代理应用。然而,尽管代理在AI生态系统中备受瞩目,它们却仍未能在消费者或企业用户实际业务场景中掀起波澜。今天我们一起来探索一下新一代的大模型代理及其架构。

大模型代理(llm agent)的基础概念

首先,让我们明确什么是大模型代理(llm agent)。基于LLM的代理是软件系统,它们通过串联多个处理步骤,包括LLM调用,api调用,方法调用等等以实现期望的最终结果。这些大模型代理通常包含一定量的条件逻辑或决策能力,以及在执行步骤间可访问的工作内存。了解代理的构建方式、当前面临的问题及初步解决方案,对于我们导航新框架和代理发展方向至关重要。

ReAct代理的失败与反思

回顾过去,代理的概念并非新鲜事物。去年,AI领域的社交媒体上涌现了大量声称具备惊人智能能力的ReAct(reason, act)代理。然而,这些第一代代理大多以高度的抽象化设计著称,尽管承诺广泛的结果,但实际上却难以使用且效果有限。

ReAct代理的失败促使人们开始重新思考代理的结构。过去一年中,我们见证了巨大的进步,引领我们进入第二代代理的时代。新一代代理以更严格的方式定义了代理可能采取的路径,从而避免了ReAct代理开放式设计的缺陷。这种趋势趋向于缩小解空间,即每个代理能够执行的任务范围,虽然限制了多样性,但通常能打造出更强大、更易定义的代理。

第二代大模型代理(llm agent)的核心特征

第二代代理在多个方面展现出显著的特征。首先,它们往往采用LLM路由,并在迭代循环中处理数据。许多代理包含一个名为“路由器(router)”的节点或组件,负责决定下一步应该采取的行动。router可能是由LLM或分类器等驱动的,它们根据输入信息选择执行路径。

每个行动通常由一个组件表示,这些组件是完成特定小任务的代码块,可能调用LLM、执行内部API调用或运行应用程序代码。在LangGraph中,这些组件被称为节点;而在LlamaIndex Workflows中,它们则被称为步骤。一旦组件完成其工作,它可能返回路由器或移动到其他决策组件。

无论大模型代理是否使用框架,我们都看到了解决方案空间越来越小的趋势——也就是说每个代理可以做的事情越来越少。解决方案空间越小,代理就越容易定义,这通常会使代理更强大。

大模型代理的架构模式

代理的部署通常遵循一些常见的架构模式。最简单的形式可能仅包括一个LLM路由器和一个工具调用,我们称之为“单一路由器与功能”架构。在这种架构中,路由器根据系统输入决定调用哪个工具或功能。

稍微复杂的架构则是“单一路由器与功能集”,其中路由器调用的不再是简单的工具或函数调用,而是更复杂的工作流程或功能集,这些可能包含多个组件和深度链接的动作链。

更高级的架构则将LLM调用与工具和状态混合,形成复杂的分支结构。路由器根据用户问题调用不同的功能,每个功能可能更新共享状态,并可能涉及一个或多个LLM调用来生成用户响应。

为了应对代理的复杂性,出现了如LangGraph和LlamaIndex Workflows等框架,它们旨在通过提供结构化的方式来简化代理开发。LangGraph基于Pregel图的概念,定义了节点和边,使代理能够沿其移动。而在LlamaIndex Workflows中,则使用事件和事件监听器来在不同节点间移动。

大模型代理的一些思考

是否应使用框架开发大模型代理

在决定是否使用大模型代理框架来开发代理时,我们需要权衡其提供的额外结构与复杂性之间的平衡。对于大型、复杂的大模型代理应用,大模型代理框架提供的结构和最佳实践可以大大降低开发难度。然而,对于高度定制化或特定需求的代理,直接使用代码可能更为灵活。

以我们一个项目为例,我们在开发自己的代理时采用了多层路由器架构,虽然我们没有直接使用LangGraph等框架,但我们的设计在一定程度上借鉴了它们的抽象概念。我们发现,对于当前的项目需求而言,直接使用代码比依赖框架更为高效。然而,我们也认识到随着框架的不断完善,未来可能会考虑采用这些框架来加速开发进程。

你真的需要大模型代理吗?

在决定构建大模型代理之前,我们首先需要明确代理的适用场景。如果你的应用遵循基于输入数据的迭代流程,需要根据先前的行动或反馈进行调整,或者存在一个可遍历的状态空间,那么代理可能是一个很好的选择。

然而,代理并非万能的解决方案。它们在复杂任务分解、长期规划和性能一致性方面仍面临挑战。为了克服这些挑战,我们需要采用一系列策略,如缩小解空间、引入领域和业务启发式、明确行动意图和创建可重复的过程等等,真是落地还需要很多实际业务场景的探索

使用大模型代理常见问题及可能的解决方案

问题

1.长期规划难题:Agent在分解复杂任务和避免陷入循环方面存在困难,常需人类干预。

2.不一致的性能:由于解决空间的庞大,Agent难以实现一致结果,且成本高昂。市场倾向于使用受限Agent以限制解决空间。

可能的应对策略

1、缩小解决空间:通过预先定义可能的行动和结果范围来减少不确定性。2、引入业务逻辑:将领域和业务启发式融入Agent的决策系统中,提升决策质量。

3、明确行动意图和标准化流程:清晰定义每个行动的目的,标准化执行步骤,增强可靠性和可纠错性。

4、代码化编排:使用代码替代LLM进行编排,提高过程的确定性和可控性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

26考研——线性表_ 线性表的链式表示_双循环链表(2)

408答疑 文章目录 三、 线性表的链式表示双循环链表单链表与双链表的比较单链表的特点双链表的特点 双链表上基本操作的实现双链表的插入操作双链表的删除操作 双链表的代码实操定义结点创建一个结点带头结点的双链表初始化创建双链表打印双链表查找结点插入结点在指定节点后插…

【备忘】在Docker中安装宝塔面板,实现环境隔离,又能快速迁移服务器环境

我的环境是阿里云服务器(新环境) 【待继续】 【新方法】 我已经安装了docker,所以这里我先卸载。 卸载命令: sudo yum remove docker* containerd.io -y Docker默认保存位置是/var/lib/docker/,卸载Docker时&#x…

池化技术的深度解析与实践指南【大模型总结】

池化技术的深度解析与实践指南 池化技术作为计算机系统中的核心优化手段,通过资源复用和预分配机制显著提升系统性能。本文将从原理、实现到最佳实践,全方位剖析池化技术的核心要点,并结合实际案例说明其应用场景与调优策略。 一、池化技术的…

HCIP【BGP协议(详解)】

目录 1 BGP协议产生背景 2 BGP协议特性 2.1 自治系统间路由传播 2.2 路由矢量协议 2.3 防环机制 2.4 基于TCP传输 2.5 路由更新机制 2.6 丰富的路由属性 2.7 支持CIDR和路由聚合 2.8 路由过滤和策略控制 2.9 动态对等体功能 3 BGP基本术语 4 BGP规划问题 4.1 路…

VirtualBox 配置双网卡(NAT + 桥接)详细步骤

在 VirtualBox 中为 CentOS 虚拟机配置双网卡(NAT 桥接),使其既能访问外网(NAT),又能与宿主机(Windows 10)或局域网通信(桥接)。 步骤 1:关闭虚…

Upload-labs靶场通关

之前搭好了靶场,Upload-labs 靶场搭建 及一句话木马的原理与运用-CSDN博客 今天开始通关并写详细流程 Pass-1 来到靶场的第一关 先随便上传php 代码 点击上传 发现文件类型被限制了 方法1: 改文件后缀为合法文件(.jpg .png .gif&#xf…

[GN] Python3基本数据类型 -- 与C的差异

Python3 面向对象 文章目录 Python3的基本数据类型6个标准的数据类型NumbersStringListtupleSetsDictionaries Python运算符逻辑 运算符成员运算符身份运算符 Python3 数字Python3 序列序列切片序列相加序列相乘序列相关内置函数 Python3 列表访问列表的值更新列表删除列表元素…

MCP over MQTT:EMQX 开启物联网 Agentic 时代

前言 随着 DeepSeek 等大语言模型(LLM)的广泛应用,如何找到合适的场景,并基于这些大模型构建服务于各行各业的智能体成为关键课题。在社区中,支持智能体开发的基础设施和工具层出不穷,其中,Ant…

AI助力高效PPT制作:从内容生成到设计优化

随着人工智能技术的不断发展,AI在各个领域的应用日益普及,尤其是在文档和演示文稿的创建过程中。PowerPoint(PPT)作为最常用的演示工具之一,借助AI的技术手段,可以极大地提高制作效率并提升最终呈现效果。在…

学透Spring Boot — 009. Spring Boot的四种 Http 客户端

目录 常见的HttpClient Spring 提供的HttpClient RestTemplate Spring 提供的模板类 XXXTemplate RestTemplate的使用 RestTemplate的使用技巧 RestTemplate的问题 RestClient RestClinet的基本使用 RestClient的自动配置 RestClient 序列化对象 异常处理 onStatus …

leetcode117 填充每个节点的下一个右侧节点指针2

LeetCode 116 和 117 都是关于填充二叉树节点的 next 指针的问题,但它们的区别在于 树的类型 不同,117与 116 题类似,但给定的树是 普通二叉树(不一定完全填充),即某些节点可能缺少左或右子节点。 树的结构…

软考系统架构师 — 4 嵌入式软件

目录 4.1 考点分析 4.2 嵌入式微处理器 4.2.1嵌入式微处理器体系结构 5.2.2 嵌入式微处理器分类 4.2.3 多核处理器 4.3 嵌入式软件 4.4 嵌入式系统 4.4.1 嵌入式系统的组成 4.4.2 嵌入式系统分类 4.4.3 嵌入式数据库系统DBMS 4.4.4 嵌入式操作系统OS 4.4.5 嵌入式实…

RocketMQ 中的 ProducerManager 组件剖析

一、引言 在分布式系统的消息传递领域,RocketMQ 以其高性能、高可用性和强大的扩展性脱颖而出。ProducerManager 作为 RocketMQ 中的一个关键组件,在消息生产环节发挥着至关重要的作用。它负责管理消息生产者(Producer)的生命周期…

k8s进阶之路:本地集群环境搭建

概述 文章将带领大家搭建一个 master 节点,两个 node 节点的 k8s 集群,容器基于 docker,k8s 版本 v1.32。 一、系统安装 安装之前请大家使用虚拟机将 ubuntu24.04 系统安装完毕,我是基于 mac m1 的系统进行安装的,所…

深度学习数据集划分比例多少合适

在机器学习和深度学习中,测试集的划分比例需要根据数据量、任务类型和领域需求灵活调整。 1. 常规划分比例 通用场景 训练集 : 验证集 : 测试集 60% : 20% : 20% 适用于大多数中等规模数据集(如数万到数十万样本),平衡了训练数…

【TS学习】(15)分布式条件特性

在 TypeScript 中,分布式条件类型(Distributive Conditional Types) 是一种特殊的行为,发生在条件类型作用于裸类型参数(Naked Type Parameter) 时。这种特性使得条件类型可以“分布”到联合类型的每个成员…

NSSCTF [HGAME 2023 week1]simple_shellcode

3488.[HGAME 2023 week1]simple_shellcode 手写read函数shellcode和orw [HGAME 2023 week1]simple_shellcode (1) motalymotaly-VMware-Virtual-Platform:~/桌面$ file vuln vuln: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpret…

PostgreSQL的扩展(extensions)-常用的扩展-pg_dirtyread

PostgreSQL的扩展(extensions)-常用的扩展-pg_dirtyread pg_dirtyread 是 PostgreSQL 的一个特殊扩展,它允许读取已被删除但尚未被 VACUUM 清理的数据行,是数据恢复的重要工具。 原理: pg_dirtyread 通过直接访问表的…

linux3 mkdir rmdir rm cp touch ls -d /*/

Linux 系统的初始目录结构遵循 FHS(Filesystem Hierarchy Standard,文件系统层次标准),定义了每个目录的核心功能和存储内容。以下是 Linux 系统初始安装后的主要目录及其作用: 1. 核心系统目录 目录用途典型内容示例…