落地大模型应知必会(3): 如何构建多任务的LLM应用

news2024/11/23 6:39:24

编者按:今年以来,大语言模型(LLM)已被广泛应用于各种自然语言处理任务,也越来越多地被用于构建复杂的语言应用。但是构建多任务的 LLM 应用仍面临一定的挑战,需要解决任务组合和调控等问题。

本文内容介绍了构建多任务 LLM 应用可能涉及的方方面面,包括如何设计并使用控制流程,如何测试代理等,对于那些希望设计出好用、功能强大的 LLM 应用的读者而言,本文将是非常有价值的学习资料,读者可以通过本文对该领域有一个初步的了解。

以下是译文,Enjoy!

作者 | Chip Huyen

编译 | 岳扬

本文重点讨论如何使用控制流程(例如if语句、for循环)来组合多个任务,并结合工具(例如SQL执行器、bash、Web浏览器、第三方API)来创建更复杂和强大的LLM 应用程序。

01 多任务组成的应用程序

大多数LLM应用程序都比较复杂,例如在“与数据对话”的应用场景下,我们会需要通过自然语言连接并查询数据库。如果需要操作一张信用卡交易表,您可以会问:“凤凰城 (Phoenix) 有多少家不同的商户,他们的名字是什么?” 数据库就会返回:“凤凰城 (Phoenix) 有9 家不同的商户,它们是…”。

实现这个“与数据对话”场景的应用程序一般通过执行以下任务序列进行:

Task 1:将来自用户输入的自然语言转换为 SQL 查询语句 [LLM]

Task 2:在数据库中执行 SQL 查询语句 [SQL 执行器]

Task 3:将 SQL 语句查询结果转换为自然语言展示给用户 [LLM]

02 Agents, tools, and control flows 代理、工具和控制流程

我在网上进行了一项小调查,目前似乎对这几个专业术语的定义还没有达成共识。

Agent 这个词已经被广泛使用,指的是可以根据给定的控制流程执行多个任务(参见2.2 控制流程部分)的应用程序。每一个任务可以利用一种或多种工具。在上述例子中,SQL 执行器就是一种工具。

注:有人抵制在本文所描述的内容中使用代理(agent)这个术语,因为它在其他领域内已经被过度使用(例如,用代理(agent)来指代强化学习[1]中的策略(policy))。

2.1 工具与插件

除了SQL执行器(SQL executor)之外,还有很多用于完成任务的工具,比如:

  • 搜索工具(例如使用Google Search API或Bing API进行搜索)
  • 互联网浏览器(例如,给定一个URL,能够获取其内容)
  • bash executor(译者注:用于执行Bash命令或脚本的工具,可以执行各种任务,例如文件操作、进程管理、系统配置等。)
  • 计算器

工具和插件基本上是相同东西的两种说法。我们可以将插件视为贡献到OpenAI插件商店中的工具。截至目前(译者注:文章发表时间为2023 年 4 月 11 日),OpenAI插件尚未向公众开放,但任何人都可以创建和使用工具。

2.2 控制流程:顺序、并行、条件语句、循环(sequential, parallel, if, for loop)

在上述示例中,使用的控制流程是顺序(sequential),在该流程之中,一个任务接着另一个任务之后执行。还有其他类型的控制流程,例如并行、条件语句、循环。

  • 顺序:在任务A完成后执行任务B,可能是因为任务B依赖于任务A。例如,只有在从用户输入翻译成SQL查询语句之后,才能执行该SQL查询语句。
  • 并行:同时执行任务A和任务B。
  • 条件语句:根据用户的输入选择执行任务A或任务B。
  • 循环:重复执行任务A,直到满足特定条件。例如,使用浏览器获取某一个网页内容,并继续使用浏览器获取该网页中其他链接的内容,直到代理认为已经获得足够的信息来回答用户的问题为止。

注意:虽然并行确实用处很大,但我还没有看到很多使用这种控制流程的应用程序。

图片

图片

2.3 使用LLM agents的控制流程

在传统的软件工程中,控制流程(control flows)的条件是精确的。而在LLM应用程序(也称为agent)中,条件也可能可以通过 prompt 来确定。(译者注:该句的“条件”原文是conditions,此处指确定在执行控制流程中的哪个分支或操作时所需满足的特定情况或规则。)

例如,如果你想要LLM agents在搜索工具(search)、SQL执行器(SQL executor)和聊天工具(Chat) 三个操作之间进行选择,可以像如下的输入内容那样进行解释,告诉它如何选择其中一个操作,如下所示(非常粗略)。换句话说,您可以使用LLM来决定控制流程的条件!

You have access to three tools: Search, SQL executor, and Chat.

Search is useful when users want information about current events or products.

SQL executor is useful when users want information that can be queried from a database.

Chat is useful when users want general information.

Provide your response in the following format:

Input: { input }

Thought: { thought }

Action: { action }

Action Input: { action_input }

Observation: { action_output }

Thought: { thought }

您可以使用三个工具:搜索工具(search)、SQL执行器(SQL executor)和聊天工具(Chat)。

当用户想要获取有关当前事件或产品的信息时,搜索工具在这个场景下非常有用。

当用户想要从数据库中查询信息时,应当使用SQL执行器。

当用户想要获取基本信息时,建议使用聊天工具。

请用以下格式进行回答:

Input: { input }

Thought: { thought }

Action: { action }

Action Input: { action_input }

Observation: { action_output }

Thought: { thought }

2.4 Testing an agent 测试代理

要使代理(agent)可靠,我们就需要在组合所有任务之前分别单独构建和测试它们。存在两种主要的故障模式:

1) 一个或多个任务测试失败。 可能的原因包括:

  • 控制流程错误:选择了非可选的操作
  • 一个或多个任务产生了错误的结果

2) 所有任务产生了正确的结果,但整体解决方案是不正确的。 Press等人(2022年)将这种情况称为“composability gap[2]”:在模型正确回答所有子问题的前提下,从中错误回答了组合性问题的比例。

与软件工程一样,我们可以并且应该对每个组件以及控制流程进行单元测试。可以为每个组件定义成对的评估示例(pairs of as evaluation examples),每次更新prompt或控制流程时都可以用它们来评估应用程序。还可以对整个应用程序进行集成测试。成对的评估示例格式如下:(input, expected output)。

END

参考资料

1.https://en.wikipedia.org/wiki/Reinforcement_learning

2.https://ofir.io/self-ask.pdf

本文经原作者授权,由Baihai IDP编译。如需转载译文,请联系获取授权。

原文链接

https://huyenchip.com/2023/04/11/llm-engineering.html

推荐阅读:

LLM | 从技术原理到落地实践  (IDP 大语言模型相关干货合集-202308)

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

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

相关文章

win10中Docker安装、构建镜像、创建容器、Vscode连接实例

Docker方便一键构建项目所需的运行环境:首先构建镜像(Image)。然后镜像实例化成为容器(Container),构成项目的运行环境。最后Vscode连接容器,方便我们在本地进行开发。下面以一个简单的例子介绍在win10中实现:Docker安装、构建镜像…

STM32--TIM定时器(2)

文章目录 输出比较PWM输出比较通道参数计算舵机简介直流电机简介TB6612 PWM基本结构PWM驱动呼吸灯PWM驱动舵机PWM控制电机 输出比较 输出比较,简称OC(Output Compare)。 输出比较的原理是,当定时器计数值与比较值相等或者满足某种…

【计算机视觉|生成对抗】改进的生成对抗网络(GANs)训练技术

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Improved Techniques for Training GANs 链接:[1606.03498v1] Improved Techniques for Training GANs (arxiv.org) 摘要 本文介绍了一系列应用于生成对抗网络(G…

2023国自然预计本周公布!如何第一时间知道是否中标?

国自然公布时间越来越近了,大家普遍关心今年国自然的具体公布时间。 基金委官网上明确:国家自然科学基金项目从接收至审批完成一般需要5个月左右时间。 集中接收的大部分项目类型,资助结果一般在当年8月中下旬公布,其余项目根据…

时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 1.Matlab实现GRU门控循环单元时间序列预测未…

vue下载模板

<div class"el-upload__tip"><el-buttonstyle"margin-top: 2px"size"small"type"primary"click"downloadTemplate()">下载模板</el-button></div>/***todo 下载模板*/downloadTemplate() {getDownl…

WebStorm修改默认打开的浏览器

有两种方式第一种修改系统默认浏览器 我采用的是下面这种&#xff0c;在webstorm中修改 将浏览器设置为默认的浏览器即可

关于Java中synchronized的实现原理

并发编程的三个理念 原子性&#xff1a;一个操作要么全部完成&#xff0c;要么全部失败。可见性&#xff1a;当一个线程对共享变量进行修改后&#xff0c;其他线程也应立刻看到。有序性&#xff1a;程序按照顺序执行 synchronized基本使用 修饰静态方法&#xff0c;锁的是类…

mysql 笔记(二)-mysql存储引擎

存储引擎在mysql体系架构中位于第三层, 负责mysql中的数据存储和提取,根据mysql提供的文件访问层抽象接口定制的一种文件访问机制. 使用show engines命令可以查看当前数据库支持的引擎信息. 从截图可看到, mysql 默认的存储引擎是InnoDB,支持事务,行锁,外键,支持分布式事务(…

SSD是否可以提升游戏性能或帧数?

​在购买这种新型硬盘之前&#xff0c;你可能会有些疑问。在这篇文章中&#xff0c;我将解释什么是固态硬盘&#xff08;SSD&#xff09;&#xff0c;它是否能提升游戏性能&#xff0c;以及如何将你的旧硬盘替换为新的固态硬盘。​ 更换SSD可以让我的游戏运行更流畅吗&#xff…

TB/TM-商品详情

一、接口参数说明&#xff1a; item_get-获得商品详情&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_get 名称类型必须描述keyString是调用key&#xff08;点击获取测试key…

ssm+vue医院住院管理系统源码和论文PPT

ssmvue医院住院管理系统源码和论文PPT012 开发工具&#xff1a;idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具&#xff1a;navcat,小海豚等 开发技术&#xff1a;java ssm tomcat8.5 摘 要 随着时代的发展&#xff0c;医疗设备愈来愈完善&#xff0c;医院也变成人们生…

解密Flink的状态管理:探索流处理框架的数据保留之道,释放流处理的无限潜能!

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 文章目录 一、什么是状态二、应用场景三、Flink中状态的分类四、算子状态1. 列表状态&#xff08;List State&#xff09;2. 广播状态&#xff08;Broadcast State&#xff09; 五、键控状态1. Val…

基于Springboot+vue+elementUI+MySQL的学生信息管理系统(一)前端部分

源码在本人博客资源当中&#xff0c;本文为项目代码的详细介绍解释&#xff0c;供于大家学习使用 Vue项目的入口文件&#xff1a;mian.js //vue项目入口文件 //导入vue import Vue from vue //导入根组件app import App from ./App //导入路由文件 import router from ./rout…

Jsoup爬取简单信息

1. 豆瓣图书最受关注 1.1 创建SpringBoot项目或者Maven项目 1.2 引入jsoup <dependency><!-- jsoup HTML parser library https://jsoup.org/ --><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.15.3<…

全国区划代码数据筛选重组

你知道的越多&#xff0c;你不知道的越多 点赞再看&#xff0c;养成习惯 如果您有疑问或者见解&#xff0c;欢迎指教&#xff1a; 企鹅&#xff1a;869192208 文章目录 前言引入jar包实现思路代码实现验证 Guava工具类找出两个 Map 集合的差异数据筛选残联区划和全国区划差异组…

宇凡微电热毯方案开发,多档调节带定时

电热毯在1912年发明&#xff0c;到现在已有百年历史。现在的电热毯更有了许多智能化产品&#xff0c;这么多年来拯救了许多怕冷的小伙伴们&#xff0c;在寒冷的冬季靠它续命。宇凡微推出的电热毯方案&#xff0c;电热毯单片机使用54E&#xff0c;实现的功能有档位调节&#xff…

扬起的沙尘如何形成卷云

被气旋吹到空中的沙尘为冰云的形成提供了成核粒子。 卷云是由空气中的冰粒形成的。 卷云是由纯冰粒子组成的高云&#xff0c;主要在8-17 公里高空出现。 这些云通过散射入射的阳光和吸收地球发出的红外辐射&#xff0c;对地球的气候产生重要影响。 在一项最新的研究中&#xf…

保姆级SPSS图文安装教程

1.SPSS安装包下载 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;rb0n 2.SPSS安装 1.上面压缩包解压后双击解压文件中的setup.exe 2.点击下图绿色框中内容进行安装 3.下一步 4.接受协议&#xff0c;下一步 5.是&#xff0c;下一步 6.接受协议&#xff0c;下一步…

python菱形问题

Python类分为两种&#xff0c;一种叫经典类&#xff0c;一种叫新式类。都支持多继承&#xff0c;但继承顺序不同。 新式类&#xff1a;从object继承来的类。&#xff08;如:class A(object)&#xff09;&#xff0c;采用广度优先搜索的方式继承&#xff08;即先水平搜索&#…