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 车道线检测 在无人驾驶领域每一个任务都是相当复杂,看上去无从下手。那么面对这样极其…...
Phi-3-mini-128k-instruct部署教程:基于vLLM的GPU显存优化方案(A10/A100实测)
Phi-3-mini-128k-instruct部署教程:基于vLLM的GPU显存优化方案(A10/A100实测) 1. 开篇:为什么选择Phi-3-mini-128k-instruct? 如果你正在寻找一个既轻量又强大的文本生成模型,那么Phi-3-mini-128k-instru…...
开箱即用体验:Z-Image-Turbo文生图镜像实战教程
开箱即用体验:Z-Image-Turbo文生图镜像实战教程 1. 为什么你需要这个镜像?一个真正“零等待”的AI绘图方案 如果你曾经尝试过部署一个AI文生图模型,大概率经历过这样的痛苦:花几个小时配置环境,然后面对几十GB的模型…...
OpenClaw飞书机器人实战:GLM-4.7-Flash智能问答系统搭建
OpenClaw飞书机器人实战:GLM-4.7-Flash智能问答系统搭建 1. 为什么选择OpenClaw飞书GLM组合? 去年我负责团队的知识库建设时,每天要处理上百条技术咨询。传统FAQ文档的维护成本高,而商业客服系统又超出预算。直到发现OpenClaw这…...
cv_unet_image-colorization效果展示:看AI如何为历史照片智能上色
cv_unet_image-colorization效果展示:看AI如何为历史照片智能上色 1. 引言:让历史重现色彩的魅力 黑白照片承载着珍贵的记忆,但缺乏色彩总让人感觉少了些什么。想象一下,如果能将祖辈的老照片恢复成彩色,看到他们当年…...
Vite 8 架构革新:从双引擎到 Rolldown 统一打包的演进之路
1. Vite 8 架构革新的背景与痛点 如果你用过 Vite 7 或更早版本,一定对它的闪电般开发体验印象深刻。这主要得益于 Vite 独特的双引擎架构:开发时用 esbuild 实现毫秒级启动,生产环境则用 Rollup 保证打包质量。但我在实际项目中发现…...
MatLab实战:用移动最小二乘法(MLS)实现图像变形(附源码改进版)
MatLab实战:用移动最小二乘法(MLS)实现高精度图像变形 在数字图像处理领域,图像变形技术一直是个既基础又关键的课题。无论是影视特效中的角色变形,还是医学图像分析中的器官配准,甚至是工业检测中的零件对…...
别再手动写DSP了!Vivado里用Multiply Adder IP核实现MAC运算的保姆级教程
高效实现MAC运算:Vivado中Multiply Adder IP核的工程实践指南 在FPGA开发中,乘累加(MAC)运算作为数字信号处理的核心操作,其实现效率直接影响系统性能。传统手写RTL代码不仅耗时,还容易引入时序问题和资源浪…...
5分钟教程:让90年代经典游戏在Windows 11上完美运行的终极方案
5分钟教程:让90年代经典游戏在Windows 11上完美运行的终极方案 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/d…...
CatBoost实战指南:从算法原理到工业级应用优化
1. CatBoost为什么成为工业界的宠儿? 第一次接触CatBoost是在处理一个电商用户行为预测项目时。当时数据集里充斥着用户ID、商品类别、地域信息这类类别型特征,用XGBoost和LightGBM处理总感觉差点意思。直到尝试了CatBoost,预测效果直接提升了…...
探索前沿技术:如何利用AI优化现代软件开发流程
1. AI如何改变现代软件开发的面貌 十年前我刚入行时,软件开发还停留在"人肉编程"阶段。每个功能都要手动敲代码,调试全靠print大法,项目管理用Excel表格记录进度。现在回想起来,当时的开发方式就像用手工织布机做衣服—…...
