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

在以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.rhkb.cn/news/137410.html

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

相关文章

MongoDB【部署 02】mongodb使用配置文件启动、添加为系统服务及自启动(一个报错:[13436][NotMasterOrSecondary])

MongoDB使用配置文件启动、添加为系统服务及设置自启动 1.是什么2.下载安装启动配置2.1 下载2.2 安装2.3 配置2.4 使用配置文件启动 3.设置系统服务及自启动3.1 设置为系统服务3.2 自启动 1.是什么 【以下内容来自ChatGPT3.5】 MongoDB是一个流行的开源文档型数据库管理系统&a…

41. Linux系统配置FTP服务器并在QT中使用QFtp实现文件上传

1. 说明 这篇博客主要记录一些在Linux系统中搭建FTP服务器时踩过的一些坑,以及在使用QFtp上传文件时需要注意的问题。 2. FTP环境搭建 在linux系统中,需要安装vsftpd,可以在终端中输入下面的命令进行安装: sudo apt-get install vsftpd使用上述命令安装后,系统中会有一…

ChunJun(OldNameIsFlinkX)

序言 ChunJun主要是基于Flink实时计算框架,封装了不同数据源之间的数据导入与导出功能.我们只需要按照ChunJun的要求提供原始与目标数据源的相关信息给Chunjun,然后它会帮我们生成能运行与Flink上的算子任务执行,这样就避免了我们自己去根据不同的数据源重新编辑读入与读出的方…

学习笔记|模数转换器|ADC原理|STC32G单片机视频开发教程(冲哥)|第十七集:ADC采集

文章目录 1.模数转换器(ADC)是什么?手册说明: 2.STC32G单片机ADC使用原理19.1.1 ADC控制寄存器(ADC_CONTR)19.1.2 ADC配置寄存器(ADCCFG)19.1.4ADC时序控制寄存器(ADCTIM)19.3 ADC相…

CSS盒子模型、列表样式

盒子模型 常用的html标签都可以看作一个盒子,称为盒子模型 盒子由四部分组成: content、padding、border、margin 边框 border:border-width(粗细) | border-style(样式) | border-color(颜色) #one{bor…

云原生的简单理解

一、何谓云原生? 一种构建和运行应用软件的方法 应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性分布式优势。 二、包括以下四个要素 采用容器化部署:实现云平…

蓝牙核心规范(V5.4)10.6-BLE 入门笔记之L2CAP

蓝牙篇之蓝牙核心规范(V5.4)深入详解汇总 1.概述 L2CAP负责协议复用、流量控制、服务数据单元(SDU)的分段和重组。它使用通道的概念来分隔在堆栈层之间传递的数据包序列。固定通道不需要设置,立即可用,并与特定的上层协议相关联。通道也可以通过指定的协议服务多路复用器…

湖南衡阳3D扫描在生物仿真研究的应用高精度三维扫描螃蟹-CASAIM中科广电

生物仿真研究与应用一直是科研及工艺品的热门方向,很多设计脱胎于生物本身,传统方式又大多只能以画师手绘为主,做到“纤毫毕现”极其困难,故而才有了“齐白石的虾”、“徐悲鸿的马”等出圈的艺术家的画作,对于某种生物…

深度学习论文: ISTDU-Net:Infrared Small-Target Detection U-Net及其PyTorch实现

深度学习论文: ISTDU-Net:Infrared Small-Target Detection U-Net及其PyTorch实现 ISTDU-Net:Infrared Small-Target Detection U-Net PDF: https://doi.org/10.1109/LGRS.2022.3141584 PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTo…

jvm-sandbox-repeater源码解析-配置管理

一、配置初见 源码里提供的控制台截图如下:(怎么搭建自己去百度) 从中取出对应的配置如下: { "degrade": false, //阻断能力 "exceptionThreshold": 1000, //异常采样率 "httpEntrancePatterns&qu…

SunTorque亮相GAF2023数字化智能装配工程与装备技术大会

智能扭矩系统-智能拧紧系统-智能扭矩控制-SunTorque GAF2023数字化智能装配工程与装备技术大会在中国上海汽车会展中心盛大开幕,青创智通与装配领域、智能制造、数字化应用等相关先进智造技术的知名企业一齐亮相。 本次展会,我们带来了扭矩相关解决方案…

Vivado IP中Generate Output Products的设置说明

文章目录 Vivado IP中Generate Output Products的设置说明Synthesis OptionsRun Settings 官方文档中的介绍Generate Output ProductsSynthesis Options for IP 参考文献 Vivado IP中Generate Output Products的设置说明 在创建IP核时,将IP核的信息配置完成之后会弹…

数据预处理方式合集

删除空行 #del all None value data_all.dropna(axis1, howall, inplaceTrue) 删除空列 #del all None value data_all.dropna(axis0, howall, inplaceTrue) 缺失值处理 观测缺失值 观测数据缺失值有一个比较好用的工具包——missingno,直接传入DataFrame&…

面向面试知识-Redis

面向面试知识-Redis 什么是Redis 运行于内存的基于key-value的非关系型数据库。 一款开源的内存数据结构存储,用作数据库、缓存、消息代理等。(可以基于Redis实现分布式锁、以及消息队列) 发布订阅?? 对数据类型的操…

【操作系统笔记】内存分配

内存对齐 问题:为什么需要内存对齐呢? 主要原因是为了兼容,为了让程序可以运行在不同的处理器中,有很多处理器在访问内存的时候,只能从特定的内存地址读取数据。换个说法就是处理器每次只能从内存取出特定个数字节的数…

Spring Boot实现对超大文件进行异步压缩下载

在Web应用中,文件下载功能是一个常见的需求,特别是当你需要提供用户下载各种类型的文件时。本文将演示如何使用Spring Boot框架来实现一个简单而强大的文件下载功能。我们将创建一个RESTful API,通过该API,用户可以下载问价为ZIP压…

Python计算机二级知识点整理

1.当一个进程在运行过程中释放了系统资源后要调用 唤醒进程原语 唤醒进程原语是把进程从等待队列里移出到就绪队列并设置进程为就绪状态,当一个进程在运行过程中释放了系统资源后进入就绪状态,调用唤醒进程原语。 2. 3. 4.在希尔排序法中&#x…

免费开源 | 基于SSM的校园订餐系统

源码下载地址获取 关注并私信回复“订餐”,获取源码下载方式 一定要关注后发消息,否则系统限制无法回复消息 感谢开源!侵删! 一、功能实现 1. 前台模块 前台主要功能有:用户注册、用户登录、我的购物车、我的订单、…

人类认知的贝叶斯与机器的贝叶斯

贝叶斯原理是一种基于概率的分析方法,可以用来估计一个事件发生的概率。在人类认知和机器学习领域中,都有对应的贝叶斯原理。 人类认知的贝叶斯原理: 在人类认知研究中,贝叶斯原理被认为是一种重要的思维方式。人类的认知过程通常…

大数据与云计算实验一

检查是否开启 sudo service docker status 开启服务 sudo service docker start 运行服务 sudo docker run -itd -p 8080:80 nginx 查询ID docker ps -all 进入容器shell sudo docker exec -it <容器ID或容器名称> /bin/bash 找到/usr/share/nginx/html/index.…