Learn Prompt-Prompt 高级技巧:Agents 组件详解

news2025/2/27 20:50:36

在以LLM驱动的Agent系统中,LLM扮演着Agent的大脑角色,并辅以几个关键组件:

  1. 规划:LLM能够进行全面的规划,不仅仅是简单的任务拆分。它可以评估不同的路径和策略,制定最佳的行动计划,以实现用户给出的目标。
  2. 记忆:LLM具有记忆功能,它可以存储和检索过去的信息和经验。这使得它能够在处理用户查询时,利用之前学到的知识和经验,提供更准确和个性化的答案。
  3. 工具使用:LLM熟练掌握各种工具和资源,能够灵活运用它们来支持任务的完成。它可以利用搜索引擎、数据库、API等工具,获取和整理相关信息,以满足用户的需求。

agent

🎉开始阅读前,如果你对其他文章感兴趣,可以到欢迎页关注我们!「卡尔的AI沃茨」开源中文社区实时获得后续的更新和最新的教程🎉

组件一:规划​

  • 子目标和分解:Agent将大型任务分解为可管理的子目标,从而有效地处理复杂的任务。
  • 反思和改进:Agent对过去的行动进行自我批评和反思,从错误中学习并改进未来的步骤,从而提高最终结果的质量

处理复杂任务时,往往需要进行多个步骤。为了更好地组织和计划,Agent 需要明确任务的具体内容并开始提前计划。

任务分解​

  • 思维链(CoT,Chain of thought)已成为一种标准prompting技术,用于增强复杂任务上的模型性能。指示模型 think step by step 将困难任务分解为更小,更简单的步骤。CoT将关注点放在了模型思考过程的可解释性上,使得处理困难任务变得更加可管理。
  • 思维树(Tree of Thoughts)通过探索每个步骤的多种推理可能性来扩展CoT。它首先将任务分解为多个思考步骤,并为每个步骤生成多个想法,从而可以创建一个树形结构。形成了一个树形结构。您可以使用广度优先搜索或深度优先搜索来搜索思维树,并根据分类器或多数投票确定每个状态。

TOT

通过以上方法,您可以以三种方式拆解任务:

  1. 使用简单的提示,引导 LLM 进行拆解,例如:“实现A的步骤”,“实现A的子目标是什么?”。
  2. 使用特定任务的指令,例如“写一个故事大纲。”用于撰写小说。
  3. 您可以自己进行任务拆解和规划。如编写脚本要先进行信息提取,再进行内容生成。

反思​

在实际任务中,试错是不可避免的,而自我反思在这个过程中起着至关重要的作用。它允许 Agent 通过改进过去的行动决策和纠正以前的错误来进行迭代改进。

反思是 Agent 对事情进行更高层次、更抽象思考的结果。反思是周期性生成的,当Agent感知到的最新事件的重要性评分之和超过一定阈值时,就会生成反思。这可以类比为我们常用的成语“三思而后行”,做重大决策的时候,我们会反思自己先前的决策。

ReAct​

ReAct是一种将推理和行动融合在一起的技术,通过将行动空间扩展为特定任务的离散行动语言空间的组合,将其整合到LLM中。简单来说,特定任务的离散行动使 LLM 能够与环境交互(例如使用维基百科搜索API),语言空间能够促使LLM 生成自然语言的推理轨迹。

ReAct提示模板包括LLM思考的明确步骤,大致格式为:

Thought: ...
Action: ...
Observation: ...
... (Repeated many times)

react

ReAct与CoT的不同之处:CoT 只是在prompt加入了静态的 “Let’s think step by step”;ReAct 的prompt是动态变化

Reflexion​

Reflexion是一个框架,为Agent提供动态记忆和自我反思的能力以提高推理技能。Reflexion采用标准的强化学习设置,奖励模型提供简单的二元奖励(即判断行动正确与否),而行动空间遵循 ReAct 中的设置,通过语言加强特定任务的行动空间,增加了复杂的推理步骤。在每个行动之后,Agent会计算一个启发式值,并根据自我反思的结果决定是否重置环境以开始新的试验。

reflexion

启发式函数用于判断 LLM 的行动轨迹什么时候开始低效或者包含幻觉,并在这个时刻停止任务。低效是指花费了大量时间但没有没有成功的路径。幻觉定义为 LLM 遇到了一系列连续的相同动作,这些动作导致LM在环境中观察到了相同的结果。

请注意这里跟我们一般说的大模型的幻觉不同。大模型的幻觉是指模型会输出一系列看似符合逻辑,但实际错误或并不存在的虚假事实。

组件二:记忆​

  • 我们可以将上下文学习(context)看成是利用模型的短期记忆(也就是模型能接受输入的最大长度)来学习
  • 长期记忆为 Agent 提供了长期存储和召回信息的能力,通常利用外部向量储存和快速检索来实现。

记忆是指获取、储存、保留和后续检索信息的过程。人脑中有多种记忆类型:

  • 感觉记忆(Sensory Memory):这是记忆的最早阶段,提供在原始刺激结束后保留感官信息(视觉、听觉等)的印象的能力。感觉记忆通常只持续几秒钟。
  • 短期记忆(Short-Term Memory, STM)或工作记忆(Working Memory):它储存我们当前意识到的信息,用于进行复杂的认知任务,比如学习和推理。短期记忆容量通常为7个项目左右,持续时间为20-30秒。
  • 长期记忆(Long-Term Memory, LTM):长期记忆可以储存信息很长一段时间,从几天到几十年,其储存容量基本上是无限的。长期记忆有两个子类型:
    • 显性 / 陈述记忆(Explicit / declarative memory):指可被有意识回忆的事实和事件的记忆,包括情景记忆(经历和经验)和语义记忆(事实和概念)。
    • 隐性 / 程序记忆(Implicit / procedural memory):这种记忆是无意识的,涉及自动执行的技能和例行程序,比如骑自行车或打字。

memory

对于 Agent 来说:

  • 感觉记忆作为原始输入,可以是文本、图像或者其他模态的输入。
  • 短期记忆则用于上下文学习。它是短暂和有限的,因为它受到Transformer有限上下文窗口长度的限制。
  • 长期记忆则是 Agent 可以在查询和关注的外部向量存储,通过快速检索来访问。

记忆流与检索​

记忆流(Memory Stream)记录了Agent的全部经历。它是一个内存对象列表,每个对象包含自然语言描述、创建时间戳和最近访问时间戳。记忆流的基本元素是观察(Observation),这是Agent直接感知的事件。观察可以是Agent自身执行的行为,也可以是Agent感知到其他Agent或非Agent对象执行的行为。每个Agent都有自己独立的记忆流。

检索功能根据Agent的当前情况,从记忆流中检索一部分记忆,供语言模型使用。排序打分包括三个方面:

  • 近期性(Recency):最近访问的记忆对象得到更高的分数,因此刚刚发生的事件或今天早上的事件可能会更受Agent关注。近期性使用指数衰减函数来衡量,衰减因子为0.99,衰减的基准是上次检索记忆以来的时间。
  • 重要性(Importance):根据Agent认为的重要程度,为记忆对象分配不同的分数,区分普通记忆和核心记忆。例如,平凡的事件(比如吃早餐)得到低重要性分数,而与重要的人开会这事件得到高分。重要性分数可以使用不同的实现方式,类似的解决方案就是使用了这个具体的评分模型来输出一个整数分数。
  • 相关性(Relevance)为与当前情况相关的记忆对象分配更高的分数。使用常见的向量检索引擎来实现相关性评估。

组件三:使用工具​

Agent可以通过学习调用外部API来获取模型权重中所缺少的额外信息,这些信息包括当前信息、代码执行能力和访问专有信息源等。这对于预训练后难以修改的模型权重来说是非常重要的。

掌握使用工具是人类最独特和重要的特质之一。我们通过创造、修改和利用外部工具来突破我们身体和认知的限制。同样地,我们也可以为语言模型(LLM)提供外部工具来显著提升其能力。

MRKL(模块化推理、知识和语言)是一种为自主Agent设计的神经符号架构。MRKL系统包含一组“专家”模块,而LLM 将查询发送到它认为最适合的专家模块。这些模块可以是神经模块(如深度学习模型)或符号模块(如数学计算器、货币转换器、天气API)。

TALM(工具增强语言模型)和Toolformer通过微调语言模型来学习使用外部工具的API。这些数据集是根据增加外部API调用注释是否能够提高模型输出质量而创建的。工具API的集合可以由其他开发人员提供(如插件案例),也可以自定义(如函数调用案例)。

tool

ChatGPT 插件和 OpenAI API 函数调用也是具有工具使用能力的 LLM 在实践中的最好的例子。

实例👏​

假设有一个协助研究的 Agent,我们希望获取关于 Twitter 的最新新闻摘要:

flow

  1. 我们告诉 Agent “你的目标是找出关于Twitter的最新消息,然后给我发一份摘要”。
  2. Agent查看目标并使用像OpenAI的GPT-4这样的AI进行阅读理解,它提出了第一个任务:“在谷歌上搜索与Twitter相关的新闻。”
  3. 然后,Agent 在谷歌上搜索 Twitter 新闻,找到热门文章,并返回链接列表。第一个任务已完成。
  4. 现在,Agent 回顾主要目标(获取关于Twitter的最新新闻,并发送摘要)以及它刚刚完成的内容(获得一系列关于Twitter的新闻链接),并决定其下一个任务需要是什么。
  5. 它提出了两个新任务。1)写新闻摘要。2)阅读通过谷歌找到的新闻链接的内容。
  6. 在继续之前,智能助理会稍作停顿,以确保正确安排这些任务。它反思是否应该先写摘要。然而,它决定首要任务是阅读通过谷歌找到的新闻链接的内容。
  7. Agent 阅读文章内容,然后再次查看待办事项列表。它考虑添加一个新任务来总结所阅读的内容,但是发现这个任务已经在待办事项列表中,因此不会重复添加它。
  8. Agent 检查待办事项列表,只剩下一项任务:撰写所阅读内容的摘要。于是,它执行了这个任务,按照您的要求向您发送了摘要。

相信你已经了解到了Agent的工作原理!欢迎关注「卡尔的AI沃茨」

接下来,我们会陆续介绍8个一流的 Agent 项目,它们在不同领域发挥着重要作用!

Reference​

  • CoT
  • ReAc
  • MRKL
  • TALM
  • Toolformer
  • LLM Powered Autonomous Agents
  • 基于大语言模型的AI Agents—Part 1

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

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

相关文章

qml Combobox用法介绍与代码演示

ComboBox 是 QML 中的一个组件,用于在下拉列表中显示一组项供用户选择。它是 Qt Quick Controls 2 模块中的一个组件,经常用于创建用户界面。 下面是 ComboBox 的一些基本用法: 1. 基本使用: import QtQuick 2.15 import QtQuick.Controls 2.15ApplicationWindow {visib…

解决qml编译时出现错误ninja: build stopped: subcommand failed.

qml编译时出现错误ninja: build stopped: subcommand failed. 如下图: 解决这个编译错误其实很简单,我把Window写错了,写成了window, 如果有类似的报错,可以检查一下qml代码是否有问题。当然在Qt Creator里也没有错误提示&#x…

二叉树的操作大全

文章目录 1.通过前序遍历数组"ABD##E#H##CF##G##"构建二叉树2.前序遍历3.中序遍历4.后序遍历5.层序遍历6.二叉树结点个数及第k层结点个数7.查找为x的结点8.叶子结点个数9.销毁二叉树(二级指针)10.判断是否为完全二叉树测试代码及运行结果 1.通过前序遍历数组"AB…

LeetCode【37.解数独】

世间多少痴儿女,情到深处无怨尤 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#…

Python办公自动化之Word

Python操作Word 1、Python操作Word概述2、写入Word2.1、标题2.2、章节与段落2.3、字体与引用2.4、项目列表2.5、分页2.6、表格2.7、图片3、读取Word3.1、读取文档3.2、读取表格4、将Word表格保存到Excel5、格式转换5.1、Doc转Docx5.2、Word转PDF1、Python操作Word概述 python-d…

aspose-words导出word方法

一、引用依赖 <dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>19.5</version><classifier>jdk17</classifier></dependency>二、导出类 public class WordTable {//定…

Airtext连接chrome谷歌浏览器报错

Airtext连接chrome报错 近期在使用AirtestIDE连接chrome的时候&#xff0c;发现可以正常打开浏览器进行录制&#xff0c;在识别控件的时候也可以正常识别&#xff0c;但是运行录制好的脚本的时候会报错如下&#xff1a; [Start running..] do not connect device save log in…

【网络协议】Http-上

Http请求结构&#xff1a; 结构图1&#xff1a; 实验解析请求报文&#xff1a; 1.在Edge浏览器上输入ip地址端口号文件资源&#xff0c;也就是下图中的120.XX.139.29:8888/A/B/c.html 2.我的程序接收到了一个没有有效载荷的http请求(呼应上面的结构图1)&#xff0c;如下 GET …

Pytest系列-失败重跑插件pytest-rerunfailures的使用(9)

前提条件 以下先决条件才能使用pytest-rerunfailures Python 3.5, 最高 3.8, or PyPy3pytest 5.0或更高版本 安装 pip3 install pytest-rerunfailures -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.comDOC https://github.com/pytest-dev/pytest-rerunf…

Apache Hive安装部署详细图文教程

目录 一、Apache Hive 元数据 1.1 Hive Metadata 1.2 Hive Metastore 二、Metastore 三种配置方式 ​2.1 内嵌模式 ​2.2 本地模式 ​2.3 远程模式 ​三、Hive 部署实战 3.1 安装前准备 3.2 Hadoop 与 Hive 整合 3.3 远程模式安装 3.3.1 安装 MySQL 3.3.2 …

【数据结构】二叉树的链式实现及遍历

文章目录 一、二叉树的遍历1、前序遍历2、中序遍历3、后序遍历4、层序遍历 二、二叉树结点个数及高度1、二叉树节点个数2、二叉树叶子节点个数3、二叉树第k层节点个数4、二叉树查找值为x的节点 三、二叉树创建及销毁1、通过前序遍历数组创建二叉树2、二叉树的销毁3、判断是否为…

基于SSM+Vue的乐购游戏商城系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

PaddleOCR ‘could not create a primitive descriptor for a reorder primitive‘异常处理

环境 paddlepaddle2.4.0 paddlehub2.3.1 问题描述 PaddleOCR 使用自己训练的模型时&#xff0c;抛出异常 could not create a primitive descriptor for a reorder primitive&#xff0c;且仅在开启MKL加速时报错&#xff0c;不开启MKL加速则不报错。 解决方案 通过查询pa…

笔记1-2:

一、磁荷与磁流的引入 麦克斯韦方程组&#xff1a; 引入磁荷和磁流的概念&#xff0c;上述方程可以写成对称形式&#xff1a; 磁荷和磁流实际上不存在&#xff0c;只具有某种等效意义&#xff0c;可以把某个区域中的电磁场看成是由一组等效磁型源所产生。 对于均匀和各向同性…

MACOS Ventura 本地安装HDFS 3.1.4

1、终端&#xff0c;输入第一条命令一直回车即可&#xff0c;然后将生成的将公钥内容写入到~/.ssh/authorized_keys中 ssh-keygen -t rsacat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 2、系统登录-共享-远程登录&#xff0c;打开。如下&#xff1a; 3、官网下载安…

Learn Prompt-Prompt 高级技巧:AutoGPT

AutoGPT 是一个由Toran Richards创建的流行开源项目。它利用GPT4作为大脑&#xff0c;结合langchain的链接思想&#xff0c;连接各种工具和互联网资源&#xff0c;来完成人类给予的任务。您只需要设定一个目标&#xff0c;AutoGPT就会自主规划并逐步执行任务。如果遇到问题&…

IEEE PDF eXpress系统报错:TimesNewRoman PS-BoldMT, ItalicMT, PSM

问题&#xff1a; IEEE PDF eXpress系统报错&#xff1a;Errors: Font TimesNewRomanPS-BoldMT, TimesNewRomanPS-ItalicMT, TimesNewRomanPSMT is not embedded (137x on pages 2-6) 答案&#xff1a; 主要原因是PDF的字体嵌入问题&#xff0c;可以看到下图中没有报错中的字体…

JS Ajax 封装

ajax 封装 一、 什么是Ajax&#xff1f;二、 Ajax的优缺点&#xff1f;2.1 优点2.2 缺点 三、 Ajax的使用3.1 状态码3.2 xhr的基本使用3.3 ajax原生封装&#xff1a;3.3.1 触发GET请求&#xff1a;3.3.2 调用POST请求&#xff1a; 四、Ajax的约束 一、 什么是Ajax&#xff1f; …

zabbix实现钉钉报警

首先钉钉创建一个团队 自定义关键词 查看zabbix-server脚本存放的位置&#xff1a; [rootcontrolnode ~]# grep ^AlertScriptsPath /etc/zabbix/zabbix_server.conf AlertScriptsPath/usr/lib/zabbix/alertscripts zabbix server设置 在配置文件书写脚本目录vim /etc/za…

将 Ordinals 与比特币智能合约集成:第 2 部分

在上一篇文章中&#xff0c;我们展示了一种将 Ordinal 与智能合约集成的方法&#xff0c;即将Ordinal和合约放在同一个 UTXO 中。 今天&#xff0c;我们介绍了一种集成它们的替代方案&#xff0c;即它们位于单独的 UTXO 中。 作为展示&#xff0c;我们开发了一个智能合约&…