LLMs Python解释器程序辅助语言模型(PAL)Program-aided language models (PAL)
正如您在本课程早期看到的,LLM执行算术和其他数学运算的能力是有限的。虽然您可以尝试使用链式思维提示来克服这一问题,但它只能帮助您走得更远。即使模型正确地通过了问题的推理,对于较大的数字或复杂的运算,它仍可能在个别数学操作上出错。这是您早些时候看到的一个示例,其中LLM试图像计算器一样工作,但得到了错误的答案。

请记住,这个模型实际上没有进行任何真正的数学运算。它只是尝试预测完成提示的最有可能的标记。模型在数学上出错可能会对您的用例产生许多负面影响,具体取决于您的用例,例如向客户收取错误的总额或获取食谱中的测量值不正确。
您可以通过允许您的模型与擅长数学的外部应用程序(例如Python解释器)进行交互来克服这一限制。一种有趣的增强LLM的框架是称为“辅助编程语言模型Program-aided language models ”(PAL)的程序。这项工作首次由卡内基梅隆大学的Luyu Gao和合作者于2022年提出,将LLM与外部代码解释器配对以执行计算。该方法利用链式思维提示来生成可执行的Python脚本。模型生成的脚本将传递给解释器以执行。右侧的图像来自论文,显示了一些示例提示和完成。

您稍后将在示例中了解这些示例,所以现在不必担心阅读所有细节。
PAL背后的策略是使LLM生成包含计算机代码的推理步骤的完成。然后将此代码传递给解释器以执行解决问题所需的计算。您可以通过在提示中包含一些单个或少量推理的示例来指定模型的输出格式。
让我们更详细地看一下这些示例提示的结构。
您将继续使用Roger购买网球的故事作为单次示例。此设置现在应该看起来很熟悉。这是一个链式思维示例。
您可以在突出显示为蓝色的行上以文字形式看到推理步骤。

与您之前看到的提示不同之处在于,粉红色显示的Python代码行包含了将涉及计算的推理步骤转化为代码的行。

基于每个推理步骤中的文本声明变量。它们的值可以直接分配,就像这里的第一行代码一样,

或者使用推理文本中的数字进行计算,正如您在第二行Python代码中看到的那样。

模型还可以使用它在其他步骤中创建的变量,就像您在第三行中看到的那样。

请注意,每个推理步骤的文本以井号(#)开始,以便Python解释器可以将其跳过作为注释。

这个提示以要解决的新问题结束。在这种情况下,目标是确定一个面包店在一天的销售后和从一家杂货店合作伙伴那里退回一些面包后剩下多少面包。

在右侧,您可以看到LLM生成的完成。再次,链式思维的推理步骤显示为蓝色,Python代码显示为粉红色。正如您所看到的,模型创建了多个变量来跟踪烘焙的面包、一天中各个时间段销售的面包

以及杂货店退回的面包。

然后通过在这些变量上执行算术运算来计算答案。

模型正确地确定了应该添加或减去哪些术语以获得正确的总数。
现在您知道如何构建示例,以告诉LLM根据其推理步骤编写Python脚本,让我们来看看PAL框架如何使LLM能够与外部解释器进行交互。

- 为了准备使用PAL进行推理,您将格式化提示以包含一个或多个示例。
- 每个示例应包含一个问题,后面是解决问题的Python代码行的推理步骤。
- 接下来,您将附加您希望回答的新问题到提示模板中。
- 您生成的PAL格式提示现在包含示例和要解决的问题。
- 接下来,您将传递此组合提示给您的LLM,
- 然后LLM将生成一个以示例中的提示为基础的Python脚本形式的完成。
现在,您可以将脚本交给Python解释器,用于运行代码并生成答案。

对于前一幻灯片上看到的面包店示例脚本,答案是74。您现在将附加包含答案的文本,因为您知道答案是正确的,因为计算是在PAL格式的提示中进行的。到此为止,您的提示包含了上下文中的正确答案。

现在,当您将更新后的提示传递给LLM时,它将生成包含正确答案的完成。鉴于面包店面包问题中的数学相对简单,模型可能已经使用链式思维提示正确地得出了答案。
但是对于更复杂的数学问题,包括大数的算术、三角学或微积分,PAL是一种强大的技术,允许您确保您的应用程序执行的任何计算都是准确可靠的。
您可能想知道如何自动化此过程,以便不必手动在LLM和解释器之间传递信息。这就是您之前看到的编排器的用处。

所示的编排器作为黄色框是一个技术组件,可以管理信息流和对外部数据源或应用程序的调用的启动。它还可以根据LLM输出中包含的信息来决定采取什么行动。

请记住,LLM是您的应用程序的推理引擎。最终,它会创建编排器将解释和执行的计划。
在PAL中,只有一个要执行的操作,即执行Python代码。LLM实际上不必决定运行代码,它只需要编写脚本,然后编排器将其传递给外部解释器以运行。

但是,大多数现实世界的应用程序可能会比简单的PAL架构复杂得多。

您的用例可能需要与多个外部数据源进行交互。正如您在商店示例中看到的,您可能需要处理多个决策点、验证操作和对外部应用程序的调用。您如何使用LLM来支持更复杂的应用程序?让我们在下一个视频中探讨一种策略。
Reference
https://www.coursera.org/learn/generative-ai-with-llms/lecture/6jh5Z/program-aided-language-models-pal
相关文章:
LLMs Python解释器程序辅助语言模型(PAL)Program-aided language models (PAL)
正如您在本课程早期看到的,LLM执行算术和其他数学运算的能力是有限的。虽然您可以尝试使用链式思维提示来克服这一问题,但它只能帮助您走得更远。即使模型正确地通过了问题的推理,对于较大的数字或复杂的运算,它仍可能在个别数学操…...
【12】c++设计模式——>单例模式练习(任务队列)
属性: (1)存储任务的容器,这个容器可以选择使用STL中的队列(queue) (2)互斥锁,多线程访问的时候用于保护任务队列中的数据 方法:主要是对任务队列中的任务进行操作 &…...
Python之函数、模块、包库
函数、模块、包库基础概念和作用 A、函数 减少代码重复 将复杂问题代码分解成简单模块 提高代码可读性 复用老代码 """ 函数 """# 定义一个函数 def my_fuvtion():# 函数执行部分print(这是一个函数)# 定义带有参数的函数 def say_hello(n…...
SQL创建与删除索引
索引创建、删除与使用: 1.1 create方式创建索引:CREATE [UNIQUE – 唯一索引 | FULLTEXT – 全文索引 ] INDEX index_name ON table_name – 不指定唯一或全文时默认普通索引 (column1[(length) [DESC|ASC]] [,column2,…]) – 可以对多列建立组合索引 …...
网络协议--链路层
2.1 引言 从图1-4中可以看出,在TCP/IP协议族中,链路层主要有三个目的: (1)为IP模块发送和接收IP数据报; (2)为ARP模块发送ARP请求和接收ARP应答; (3…...
HDLbits: Count clock
目前写过最长的verilog代码,用了将近三个小时,编写12h显示的时钟,改来改去,估计只有我自己看得懂(吐血) module top_module(input clk,input reset,input ena,output pm,output [7:0] hh,output [7:0] mm,…...
【1day】用友移动管理系统任意文件上传漏洞学习
注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现...
【c++】向webrtc学习容器操作
std::map的key为std::pair 时的查找 std::map<RemoteAndLocalNetworkId, size_t> in_flight_bytes_RTC_GUARDED_BY(&lock_);private:using RemoteAndLocalNetworkId = std::pair<uint16_t, uint16_t...
SpringBoot+Vue3外卖项目构思
SpringBoot的学习: SpringBoot的学习_明里灰的博客-CSDN博客 实现功能 前台 用户注册,邮箱登录,地址管理,历史订单,菜品规格,购物车,下单,菜品浏览,评价,…...
【AI视野·今日NLP 自然语言处理论文速览 第四十七期】Wed, 4 Oct 2023
AI视野今日CS.NLP 自然语言处理论文速览 Wed, 4 Oct 2023 Totally 73 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Contrastive Post-training Large Language Models on Data Curriculum Authors Canwen Xu, Corby Rosset, Luc…...
c++的lambda表达式
文章目录 1 lambda表达式2 捕捉列表 vs 参数列表3 lambda表达式的传递3.1 函数作为形参3.2 场景1:条件表达式3.3 场景2:线程的运行表达式 1 lambda表达式 lambda表达式可以理解为匿名函数,也就是没有名字的函数,既然是函数&#…...
电梯安全监测丨S271W无线水浸传感器用于电梯机房/电梯基坑水浸监测
城市化进程中,电梯与我们的生活息息相关。高层住宅、医院、商场、学校、车站等各种商业体建筑、公共建筑中电梯为我们生活工作提供了诸多便利。 保障电梯系统的安全至关重要!特别是电梯机房和电梯基坑可通过智能化改造提高其安全性和稳定性。例如在暴风…...
Java异常:基本概念、分类和处理
Java异常:基本概念、分类和处理 在Java编程中,异常处理是一个非常重要的部分。了解如何识别、处理和避免异常对于编写健壮、可维护的代码至关重要。本文将介绍Java异常的基本概念、分类和处理方法,并通过简单的代码示例进行说明。 一、什么…...
小谈设计模式(19)—备忘录模式
小谈设计模式(19)—备忘录模式 专栏介绍专栏地址专栏介绍 备忘录模式主要角色发起人(Originator)备忘录(Memento)管理者(Caretaker) 应用场景结构实现步骤Java程序实现首先ÿ…...
《数据库系统概论》王珊版课后习题
第一章 绪论 1.数据、数据库、数据库管理系统、数据库系统的概念 (1)数据(Data):数据是数据库中存储的基本对象,是描述事物的符号记录。数据有多种表现形式,它们都可以经过数字化后存入计算机…...
MariaDB 修改用户远程登录
今天修改MariaDB数据库用户的Host时出现错误: ERROR 1356 (HY000): View ‘mysql.user’ references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them 我的步骤如下: 1.登陆 2.use mysql; 3.执行…...
Elasticsearch使用mapping映射定义以及基本的数据类型
1、说明 Elasticsearch的映射相当于数据库的数据字典,它定义了每个字段的名称和能够保存的数据类型,并且内置了20多种字段类型用于支持多种多样的结构化数据,这里仅介绍几种常用的字段类型,如需要了解全部的类型,请参…...
【unity】制作一个角色的初始状态(左右跳二段跳)【2D横板动作游戏】
前言 hi~ 大家好!欢迎大家来到我的全新unity学习记录系列。现在我想在2d横板游戏中,实现一个角色的初始状态-闲置状态、移动状态、空中状态。并且是利用状态机进行实现的。 本系列是跟着视频教程走的,所写也是作者个人的学习记录笔记。如有错…...
不死马的利用与克制(基于条件竞争)及变种不死马
不死马即内存马,它会写进进程里,并且无限地在指定目录中生成木马文件 这里以PHP不死马为例 测试代码: <?phpignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file .test.php;$code <?php if(md5($_GET["pass…...
计算机竞赛 车道线检测(自动驾驶 机器视觉)
0 前言 无人驾驶技术是机器学习为主的一门前沿领域,在无人驾驶领域中机器学习的各种算法随处可见,今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂,看上去无从下手。那么面对这样极其…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
DeepSeek越强,Kimi越慌?
被DeepSeek吊打的Kimi,还有多少人在用? 去年,月之暗面创始人杨植麟别提有多风光了。90后清华学霸,国产大模型六小虎之一,手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水,单月光是投流就花费2个亿。 疯…...
「Java基本语法」变量的使用
变量定义 变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例:声明与初始化 public class VariableDemo {publi…...
aurora与pcie的数据高速传输
设备:zynq7100; 开发环境:window; vivado版本:2021.1; 引言 之前在前面两章已经介绍了aurora读写DDR,xdma读写ddr实验。这次我们做一个大工程,pc通过pcie传输给fpga,fpga再通过aur…...
