当前位置: 首页 > news >正文

Agent 应用于提示工程

如果Agent模仿了人类在现实世界中的操作方式,那么,能否应用于提示工程即Prompt Engingeering 呢?

从LLM到Prompt Engineering

大型语言模型(LLM)是一种基于Transformer的模型,已经在一个巨大的语料库或文本数据集上进行了训练,包括了互联网上的大多数网页。在训练期间,需要花费大量的时间(和/或图形处理器)、能量和水(用于冷却) ,梯度下降法被用来优化模型的参数,以便它能够很好地预测训练数据。

e89dad7a121164d75f394368f24d2717.png

本质上,LLM 学习根据前面的词序预测最可能的下一个词。这可以用来执行推理即查找模型生成某些文本的可能性,或者用来生成文本,像 ChatGPT 这样的 LLM 使用这些文本与人进行对话。一旦 LLM 完成了训练,意味着它的参数被保存,不会向训练数据或重新训练的数据中添加输入。值得注意的是,LLM 仍然会从训练数据中学到偏见,而 ChatGPT 背后的 OpenAI 公司不得不增加安全措施,使用来自人类反馈的强化学习(RLHF)以防止该模型产生有问题的内容。此外,由于 LLM 默认情况下只是根据他们所看到的内容生成最有可能的下一个单词,而没有进行任何事实核查或推理,因此它们容易产生幻觉,或者编造事实,以及推理错误。

自从 ChatGPT 公开发布以来,LLM 风靡全球。这些模型的新兴智能以及它们在我们生活中的各个方面的应用,使它们成为一种非常受欢迎的工具,每家公司都想从中分一杯羹。除了聊天机器人以及编码和写作助手,LLM 还被用来创建与包括互联网在内的模拟环境交互的Agent。

如果尝试过 ChatGPT,有时会发现它的回答很糟糕,但是如果重新措辞这个问题,可能会得到更好的结果。这就是提示工程的艺术,通过修改输入使 LLM 以您希望的方式作出响应。提示语的背后只是尝试通过提出一些事实来“唤醒LLM的记忆”,或者告诉它一个新的领域,然后从一个训练好的 LLM 那里得到适当的响应。这就是所谓的上下文学习,一般主要有两种类型: zero-shot和few-shot。zero-shot为 LLM 提供了一个提示,可以在问题/命令之前包含一些背景信息,以帮助 LLM 找到一个好的响应。few-shot给 LLM 提供了一些示例提示和可取的响应,然后提出一个新的提示,LLM 将以示例的格式响应这些提示。

提示工程可能是自然语言处理(NLP)的未来趋势之一。这个领域正在从定制模型转向定制提示,因为 LLM 比任何人在没有大量时间和精力的情况下自己制作的语言模型要好得多。当 LLM 与正确的提示工程技术配对时,通常情况下,它可以完成专用模型所能完成的任何工作。

6d2281c21e271209970cadf237f2ce63.jpeg

从CoT到Agent

思维链推理(CoT)是一种流行的提示工程技术,旨在对抗推理错误。它包括给 LLM 提供一个或多个例子,说明如何通过语言推理解决问题,然后给它一个不同的问题,以这种方式解决。这可以帮助克服推理的错误,但它仍然受到幻觉的影响以及幻觉的“事实”可以通过推理传播,导致模型得出错误的结论。

只提出一个问题的标准提示语被比作思维链(CoT)提示的输入 ,需要多步推理才能解决问题。由于幻觉的问题,使用 CoT 提示的 LLM 有更令人信服的响应,但它仍然有可能是错误的。如果 LLM 要成为一个有用的工具,如果不能左右它胡编乱造,我们就永远不能相信它们,最好还是自己做研究。而Agent似乎可以解决这个问题,允许 LLM 采取行动,比如搜索维基百科,以便从中找到事实和理由。

Agent 应用于提示工程示例——ReAct

与思维链推理一样,ReAct 也是一种提示工程方法,它使用少量学习来教模型如何解决问题。CoT 被认为是模仿人类如何思考问题,ReAct 也包括了这个推理元素,但它更进一步,允许Agent操作文本,让它与环境互动。人类使用语言推理来帮助我们制定策略并记住事情,但也可以采取行动来获得更多的信息并实现目标。这就是 ReAct 的基础。ReAct 提示包括行动的例子、通过行动获得的观察结果,以及人类在过程中各个步骤中转录的思想(推理策略)。LLM 学习模仿这种交叉思考和行动的方法,使其成为其环境中的Agent。

一定要记住,观察结果不是由 LLM 生成的,而是由环境生成的,环境是一个单独的模块,LLM 只能通过特定的文本操作与之交互。因此,为了实现 ReAct,需要:

  1. 一种环境,它采取一个文本操作, 从一组可以根据环境的内部状态改变的潜在操作中返回一个文本观察。

  2. 一个输出解析器框架,一旦Agent编写了一个有效的操作,它就停止生成文本,在环境中执行该操作,并返回观察结果, 一般是将其追加到目前生成的文本中,并用该结果提示 LLM。

  3. 人工产生的示例,混合了思想,行动和观察,在环境中可以使用few-shot,例子的数量和细节取决于目标和开发者的设计,例如:

ba74f198e655f67d93adedb82142ee80.png

这里,思想、动作和观察都被清楚地标记如上,而且动作使用了一种特殊的格式,查询放在括号中,这样Agent就可以学习以这种方式编写任务,然后输出解析器就可以轻松地提取查询。

Yao 等人(2023)使用了 PalM-540B,用这个 LLM 在两个知识密集型推理任务和两个决策任务上测试了 基于ReAct 的提示工程效果。

知识密集型推理任务

在这个任务领域中使用的两个域是 HotPotQA 和 FEVER,前者是使用 Wikipedia 段落进行多跳问答,后者是事实验证。Agent可以使用以下操作与Wikipedia API 进行交互:

  • Search: 根据名称或大多数相似结果列表查找页面。

  • 查找: 在页中查找字符串。

  • 以答案结束任务。

在 HotPotQA 和 FEVER 这两个评估领域中, ReAct 与如下提示工程 技术进行了比较,结果是通过 FEVER 的准确性和 HotPotQA 中 EM 来评估的。

5ef93d472d5963d797bb64f0807a5139.png

其中:

  • 标准Prompt: 没有思想,行动,或观察。

  • CoT: 没有及时的行动或观察。

  • CoT-SC (自我一致性) : 从 LLM 中抽取一定数量的回答,并选择大多数作为回答。

  • 动作: 没有思维的prompt。

  • ReAct ->CoT-SC: 开始时是ReAct,然后转换为 CoT-SC。

  • CoT-SC-> ReAct: 开始时是 CoT-SC,然后切换到 ReAct。

ReAct 在 HotPotQA 中表现不佳,但在 FEVER 中表现优于 CoT。ReAct 比 CoT 更不容易产生幻觉,但是有更高的推理错误率。尽管 ReAct 确实有这个缺点,但是 ReAct-> CoT-SC 和 CoT-SC-> ReAct 方法是其中最成功的。

决策任务

测试ReAct 的两个决策任务是 ALFWorld 和 WebShop。

ALFWorld 是一个基于文本的游戏,具有真实的环境。它具有用于在模拟世界中移动和交互的文本操作,例如“打开抽屉1”给代理人的一个目标可能是在房子里找到一个特定的物体,因此常识推理有助于知道这样一个物体通常在哪里被发现。衡量成功的标准是达到目标的试验的百分比。

WebShop 是一个模拟在线购物网站,数据来自亚马逊。这是一个具有挑战性的领域,因为它有大量的行动导航网站和搜索产品。目标是找到一个符合用户规范的项目。衡量成功的标准是所选项目与用户心目中的隐藏项目有多接近。

从论文中的评估结果来看,ReAct 的表现明显优于基线。

ReAct 虽然由于其推理错误而并不完善,但仍然是一个强有力的提示工程方法,它克服了思维链推理的事实幻觉问题,并且允许 LLM 成为一个可以与其环境相互作用的Agent。此外,它具有可解释性,因为Agent在行动时输出其思维过程。

260095659565ca3adf679a00050c150c.jpeg

小结

作为Agent 应用于提示工程的一种具体实现,ReAct 迈出通往通用人工智能和具象语言模型的一步。如果一个机器人有一种基于熟悉的特征对外部环境进行建模并使用该模型创建提示的方法,那么它至少可以尝试在各种领域独立行动,而不需要人工制作的示例。它还需要某种记忆,或者从它的经历中学习的能力,具有常识性知识的机器人,只要能够解决诸如推理错误和幻觉之类的问题,就可能对我们有很大的帮助。

BTW,拥有了大模型就可以拥有好的产品么? 产品经理的贡献往往仍然是不可或缺的,以智能语音产品为例, 你可能需要这样的一本案头手册(笔者的最新译作),帮助自己更好的完成产品设计。

【参考资料】

相关文章:

Agent 应用于提示工程

如果Agent模仿了人类在现实世界中的操作方式,那么,能否应用于提示工程即Prompt Engingeering 呢? 从LLM到Prompt Engineering 大型语言模型(LLM)是一种基于Transformer的模型,已经在一个巨大的语料库或文本数据集上进行了训练&…...

云原生安全日志审计

记得添加,把配置文件挂载进去 - mountPath: /etc/kubernetes/auditname: audit-policyreadOnly: true.....- hostPath:path: /etc/kubernetes/audit/type: DirectoryOrCreatename: audit-policy/etc/kubernetes/manifests/kube-apiserver.yaml 具体配置文件如下 a…...

2023 辽宁省大学数学建模 B 题 数据驱动的水下导航适配区分类预测

“海洋强国”战略部署已成为推动中国现代化建设的重要组成部分,国家对 此提出“发展海洋经济,保护海洋生态环境,加快建设海洋强国”的明确要求。 《辽宁省“十四五”海洋经济发展规划》明确未来全省海洋经济的发展战略、 发展目标、重大任…...

ES 8.x新特性一览(完整版)

一、看点 在 2022 年 2 月 11 日,Elasticsearch(ES)正式发布了 8.0 版本,而截止到 2023 年 10 月,历经一年半时间,ES官方已经连续发布了多个版本,最新版本为 8.10.4。这一系列的更新引入了众多引…...

生产实战shell,给安全部门提供日志

生产实战shell,给安全部门提供日志 #!/bin/bashbackup_dir"/data/rw_copy" log_dir"/data/weblogic_log/test/yingyong" nginx_log_dir"/data/nginx_log" apache_log_dir"/data/apache_log" weblogic_log_dir"/data/weblogic_lo…...

HarmonyOS数据管理与应用数据持久化(一)

一. 数据管理概述 功能介绍 数据管理为开发者提供数据存储、数据管理能力,比如联系人应用数据可以保存到数据库中,提供数据库的安全、可靠等管理机制。 数据存储:提供通用数据持久化能力,根据数据特点,分为用户首选项、…...

小型气象站在智慧农业高标准农田建设中的作用

了解“小型气象站在智慧农业高标准农田建设中的作用”,我们需要了解什么是小型气象站?什么是高标准农田? 所谓小型气象站是一种气象观测设备,根据应用领域不同可分为农业气象站,校园气象站,森林气象站&…...

kruskal求最小生成树

算法思路: 将所有边按照权值的大小进行升序排序,然后从小到大一一判断。 如果这个边与之前选择的所有边不会组成回路,就选择这条边分;反之,舍去。 直到具有 n 个顶点的连通网筛选出来 n-1 条边为止。 筛选出来的边…...

876. 链表的中间结点

876. 链表的中间结点 算法 快慢指针 & 题目特征 需要对链表中的节点进行遍历,并且需要根据节点之间的相对位置或者距离进行操作 题目链接:https://leetcode.cn/problems/middle-of-the-linked-list/ 算法 快慢指针 & 题目特征 需要对链表中…...

【机器学习】二、决策树

目录 一、决策树定义: 二、决策树特征选择 2.1 特征选择问题 2.2 信息增益 2.2.1 熵 2.2.2 信息增益 三、决策树的生成 3.1 ID3算法 3.1.1理论推导 3.1.2代码实现 3.2 C4.5 算法 3.2.1理论推导 ​ 3.2.2代码实现 四、决策树的剪枝 4.1 原理 4.2 算法思路&#xff1a…...

低代码PAAS加速推进企业数字化转型

无论是“十四五”规划从国家层面提出的“加快数字化发展 建设数字中国”,还是后疫情时代企业自身的感受,数字化转型已成为必答题。当前 企业 业务场景化、线上趋势愈加明显,越来越多并发的数字化应用场景,而原有集中式架构扩展能力…...

时间复杂度为 O(nlogn) 的排序算法

归并排序 归并排序遵循 分治 的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后合并这些子问题的解来建立原问题的解,归并排序的步骤如下: 划分:分解待排序的 n 个元素…...

掌控你的Mac性能:System Dashboard Pro,一款专业的系统监视器

作为Mac用户,你是否曾经想要更好地了解你的电脑性能,以便优化其运行?是否想要实时监控系统状态,以便及时发现并解决问题?如果你有这样的需求,那么System Dashboard Pro就是你的不二之选。 System Dashboar…...

C++ Qt如何往Windows AppData目录写数据

在使用Qt开发客户端软件时,我们可以把程序相关信息保存到AppData目录, 下次启动时读取,就可以保存程序的状态,便于用户使用。 Windows AppData目录是Windows操作系统中的一个重要目录,主要用于存储应用程序的自定义设置、文件和数据。这个目录包含了许多与应用程序相关的配…...

xargs命令

xargs命令 xargs 命令是一个非常好用的 Linux 命令,它可以将管道或标准输入转换成命令行参数,并用这些参数来执行指定 的命令。默认情况下, xargs 命令会将输入按照空格、制表符、换行符等符号进行分隔,并将它们作为一组参数 传…...

【原创】java+swing+mysql无偿献血管理系统设计与实现

摘要: 无偿献血管理系统是为了实现无偿献血规范化、有序化、高效化的管理而设计的。本文主要介绍使用java语言开发一个基于C/S架构的无偿献血管理系统,提高无偿献血管理的工作效率。 功能分析: 系统主要提供给管理员、无偿献血人员&#x…...

C语言 Number 1 基本数据类型

数据类型的定义 c语言的数据分类基本类型整型浮点型float和double的精度和范围范围精度 枚举类型空类型派生类型派生的一般表达形式 注 c语言的数据分类 首先是针对C语言的数据类型做个整理 大致分为四个大类型 基本类型枚举类型空类型派生类型 那么根据以上四个大类型 我们…...

mac录屏快捷键指南,轻松录制屏幕内容!

“大家知道mac电脑有录屏快捷键吗,现在录屏不太方便,每次都花很多时间,要是有录屏快捷键,应该会快速很多,可是哪里都找不到,有人知道吗?帮帮我!” 苹果的mac电脑以其精美的设计和卓…...

精准测试是个错误

如果你已经了解了精准测试在行业的主流做法,你可以跳过相关内容。 行业里对于精准测试的定义 在网上流传着一些精准测试的定义(如果你对这些定义不感冒,可直接跳到我个人的定义): 自网易陈逸青(2020&#x…...

算法通关村第四关|黄金挑战|表达式问题

1.计算器问题 给定一个内容为表达式的字符串&#xff0c;计算结果。 class Solution {public int calculate(String s) {Deque<Integer> stack new ArrayDeque<Integer>();char preSign ;int num 0;int n s.length();for (int i 0; i < n; i) {if (Chara…...

Mac安装DBeaver

目录 一、DBeaver Mac版软件简介 二、下载地址 三、DBeaver连接失败报错 3.1 问题描述 3.2 连接失败问题解决 一、DBeaver Mac版软件简介 DBeaver Mac版是一款专门为开发人员和数据库管理员设计的免费开源通用数据库工具。软件的易用性是它的宗旨&#xff0c;是经过精心设计…...

C++ 类 根据成员变量的指针获取类对象的指针

一.宏定义 实现方式有多种&#xff0c;原理是相同的 方式1&#xff1a; #define get_class_ptr(memberPtr,classType,memberName) \ ((classType*)((char*)(memberPtr)-(unsigned long)((ULONG_PTR)&((classType*)0)->member))) 方式2&#xff1a; #define get_cl…...

图论08-图的建模-状态的表达与理解 - 倒水问题为例

文章目录 状态的表达例题1题解1 终止条件&#xff1a;有一个数位为42 状态的改变&#xff1a;a表示十位数&#xff0c;b表示个位数3 其他设置 例题2 力扣773 滑动谜题JavaC 状态的表达 例题1 从初始的(x&#xff0c;y)状态&#xff0c;到最后变成&#xff08;4&#xff0c;&am…...

sqlserver字符串拼接

本文主要介绍了sqlserver字符串拼接的实现&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值。 1. 概 在SQL语句中经常需要进行字符串拼接&#xff0c;以sqlserver&#xff0c;oracle&#xff0c;mysql三种数据库为例&#…...

MySQL-----事务

事务的概念 事务是一种机制&#xff0c;一个操作序列。包含了一组数据库的操作命令&#xff0c;所有的命令都是一个整体&#xff0c;向系统提交或者撤销的操作&#xff0c;要么都执行&#xff0c;要么都不执行。 是一个不可分割的单位 事务的ACID特点 ACID&#xff0c;是指在可…...

hive的安装配置笔记

1.上传hive安装包 2.解压 3.配置Hive(在一台机器上即可) mv hive-env.sh.template hive-env.sh 4.运行hive 发现内置默认的metastore存在问题&#xff08;1.换执行路径后&#xff0c;原来的表不存在了。2.只能有一个用户访问同一个表&#xff09; 5.配置mysql的meta…...

lamba stream处理集合

lamba stream处理集合 带拼接多字段分组List< Object> 转 Map<String,List< Object>> Map<String, List<ProfitAndLossMapping>> collect plMappingList.stream() .collect(Collectors.groupingBy(m -> m.getLosType() ":" m.…...

操作系统 day04(系统调用)

什么是系统调用 库函数和系统调用的区别 应用程序可以通过汇编语言直接进行系统调用&#xff0c;也可以使用高级语言的库函数来进行系统调用。而有的库函数涉及系统调用&#xff0c;如“创建一个新文件”函数&#xff0c;有的不涉及&#xff0c;如“取绝对值”函数 什么功能要…...

【深度学习】pytorch——线性回归

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 深度学习专栏链接&#xff1a; http://t.csdnimg.cn/dscW7 pytorch——线性回归 线性回归简介公式说明完整代码代码解释 线性回归简介 线性回归是一种用于建立特征和目标变量之间线性关系的统计学习方法。它假设…...

golang工程——中间件redis,单节点集群部署

单节点redis集群部署 部署redis 6.2.7版本 没资源&#xff0c;就用一台机子部 解压安装包 tar zxf redis-6.2.7.tar.gzcd redis-6.2.7编译安装 mkdir -p /var/local/redis-6.2.7/{data,conf,logs,pid}data&#xff1a;数据目录 conf&#xff1a;配置文件目录 logs&#xf…...