使用 Python Guardrails 提高 LLM 输出的可靠性

news2024/11/13 10:00:06

利用验证函数防止您的 LLM 输出崩溃

图片

合理使用IF可以使您的LLM输出更可靠

虽然在创造力和解决复杂任务方面表现出色,但LLM往往难以遵循严格的规则,并且经常提供略微超出设定边界的答案。在构建应用程序时,这一缺陷可能导致失败和荒谬的答案,从而使用户放弃。

好消息是,编写严格规则是任何程序员的基本技能,而仅仅因为我们现在使用LLM并不意味着我们忘记了如何使用if语句。

如果某些逻辑可以通过几行代码强制执行,您可能不需要将其输入到一个万亿参数模型中。

LLM 最后一公里交付问题

控制输出在将 LLM 与应用的其他组件(如 API)集成时尤其重要。在开发一个 text_to_params 工具,将用户的平面需求描述转换为搜索参数时,我意识到尽管生成的参数通常是正确的,但它们与 API 函数的不兼容性却过于频繁。

尽管可以访问完整的 API 文档,并且超过 90% 的参数是正确的,但其中一个参数会完全破坏答案。这些例子有些微不足道,例如将 price_per_metertotal_price 混淆,为数值过滤器添加单位如 m2,或者在价格标签表明为月租时寻找出售的优惠。

经过一番长时间的斗争,试图在提示中处理所有这些情况并将其扩展超过 1000 个标记后,我意识到可以通过几个 Python 验证函数更高效地处理它们。

正如道路护栏可以防止汽车在蜿蜒的山路上掉下悬崖,Python 护栏可以拯救您的 LLM 免于发生严重故障。

这个故事是关于构建生产就绪的 LLM 驱动应用程序系列中的第二篇;我鼓励您阅读介绍文章,以获取优化提示

使用 Python guardrails 验证 LLM 输出的优势

  • 处理边缘情况而不增加提示大小
  • 确保与应用程序其余部分的最后一公里兼容性
  • 使 LLM 应用程序对意外用户行为更具抵抗力
  • 提高性能并支持使用更小的模型

继续使用 text-to-params 工具示例,我进行了一个实验,比较了在一组特别棘手的问题上添加和不添加 guardrails 的工具准确性。

按模型的搜索参数准确性

图片

增加约 300 行 Python 防护功能使得 GPT 3.5 的表现超过了 GPT 4.0,后者的成本高出 20 倍且速度慢 2-3 倍。

如何在LangChain中混合使用Python和LLM调用

LangChain允许您方便地将LLM调用、输出解析和普通Python函数结合在一起,通过将所有这些组件组合成一个RunnableSequence,这几乎是每个链的基础。

在下面的示例代码中,我们专注于一个简化的text-to-params工具,将用户需求转换为带有过滤器的字典。当处理结构化的JSON输出时,使用Python转换LLM输出是最有效的。然而,相同的方法也可以用于文本答案,例如,使用较小的NLP模型,如分类器。
在这里插入图片描述
在这里插入图片描述

在示例代码的第一部分中,我们准备我们的链组件——OpenAI模型、提示模板、JsonOutputParser(与提示指令一起确保我们获得有效的JSON)以及一个基本的api_params_guardrail函数,该函数根据LLM设置的其他过滤器添加offer\_type字段。

chain_text_to_params = prompt | llm | JsonOutputParser() | search_params_guardrails

然后我们配置我们的链,定义准备好的组件的执行顺序。每个组件都获取上一步的输出并继续处理,最终在链的末尾提供结果。

图片

一旦我们的链准备好,我们可以使用invoke调用它,描述我们需要的属性类型作为输入。这个简单的提示不仅正确地从文本中提取了信息,还将其解析为有效的字典,并基于函数而不是提示指令添加了offer_type参数。

三个通过 Python 函数提高 LLM 结果的实用示例

继续使用我准备的 text-to-params 工具,我准备了一些技巧,这些技巧有助于生成更可靠和兼容的 LLM 输出,并配有一些验证函数。

1. LLMs倾向于过于字面化,因此为它们的回答添加一些智能

一旦您开始测试初始的LLM应用程序,您会迅速意识到初始提示没有解决所有不寻常的用户查询和边缘情况,或者LLM缺少一些领域知识。

在处理Mieszko时,我面临的一个问题是将用户需求转换为搜索过滤器JSON的工具过于字面化。

例如,如果用户将他的需求描述为 一个面积约为50m2,预算在3500–3600之间的公寓,LLM生成的过滤器如下:

在这里插入图片描述

尽管它们在逻辑上并不错误,但用户也会很高兴看到一个每月3200 zł的55m2公寓,过滤器应该更像这样:

在这里插入图片描述

我尝试在提示中添加更多指令,但由于有十几个搜索参数以及大多数参数的一些自定义验证规则,这将增加几百个标记。添加一个简单的保护函数来修改工具输出则以更可靠的方式产生了相同的结果。

以下是一个仅限于上述两个问题的代码示例:
在这里插入图片描述

2. 验证模糊匹配是否可以替代对 LLM 进行数十个类别选择的指导

在构建搜索参数工具时,处理分类字段是另一个看似微不足道的问题。如果一个字段只有几个可能的值,例如 ‘offer_type’,其中唯一的可能标签是 ‘sale’ 或 ‘rent’,你可以很容易地将其纳入提示说明中。

随着字段的细分,这变得更加复杂。在我的案例中,它是华沙的区(18 个实例)和社区(143 个实例)。将所有这些标签添加到提示中将增加 1,058 个标记,在使用 GPT 4-turbo 时,每次调用的费用将为 1 美分。

即使是 GPT 3.5 也对华沙的地形有基本的理解,因此我们不需要在提示中提供所有这些信息。关键挑战在于,它有时会变更拼写或直接复制用户输入中的错误或缩写。

为了确保区和社区与搜索 API 中可用的值兼容,我使用了模糊匹配来限制 LLM 设置的参数到一个经过筛选的列表,而不需要通过提示实际传递所有允许的标签。

这是一个简化的模糊匹配代码,用于验证分类标签是否与已知的有效标签集匹配。

在这里插入图片描述

同样的方法不限于地理区域,也可以在其他领域实施,例如用于电子商务中的品牌或型号的策划。它可以通过类似的方式实施更广泛的保护措施。
在这里插入图片描述

3. 通过放宽过于严格的过滤条件重试失败的API调用

最后一公里交付问题的另一个方面是,LLM在尝试尽可能多地满足用户请求的过滤条件时可能会过于严格。例如,当用户要求一个**低预算下的舒适公寓**时,LLM决定添加所有可能的设施,如淋浴、浴缸、洗碗机和阳台。结合低价要求,最终传递给API调用的过滤条件可能导致结果为零。

我们可以给模型一个重试设置参数的机会,但这意味着又一次LLM调用,这会增加成本和延迟。因此,我决定重试API调用,同时依次放宽一组最限制的过滤条件,希望最终能获得有效的答案。

在这里插入图片描述

你可以意识到这个函数返回的所有输出都是完整的句子。由于整个text-to-params工具是由LLM代理使用的,因此以对话式解释的形式返回工具输出使其更容易集成到代理推理中。清晰描述放宽的过滤条件以使搜索成为可能,使代理能够向最终用户解释。

摘要

总结一下——请记住,在使用 LLM 时,您仍然可以编写简单、高效的代码,以更可预测的方式处理不那么复杂的任务。

尽管 LLM 发展迅速,但在可预见的未来,它们仍将是庞然大物,处理每个答案需要大量的能量成本和时间。在需要的地方利用这种力量,但也不要害怕在可能的情况下回归更简单、经过验证的解决方案。这样做将会让地球和您的钱包都感激不已。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

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

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

相关文章

智能巡检机器人助力新型信息基础设施建设与发展

为深入贯彻落实党的二十大和二十届二中、三中全会精神,推动新型信息基础设施协调发展,近日,工业和信息化部等十一部门关于推动新型信息基础设施协调发展有关事项。 新型信息基础设施是以信息网络为基础,以新一代信息通信技术创新为…

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨…

大数据-126 - Flink State 03篇 状态原理和原理剖析:状态存储 Part1

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知…

海外盲盒系统开发搭建,助力盲盒出海!

随着盲盒全球化发展,盲盒出口海外已经成为了大多数盲盒企业的选择。在互联网时代中,盲盒出口主要通过跨境电商和独立海外盲盒系统。而在目前市场发展趋势中,对于企业来说,一个独立的盲盒系统至关重要。海外盲盒APP可以帮助盲盒企业…

【ACM出版-高录用EI稳检索!九大高校联合举办】2024年人工智能、数字媒体技术与交互设计国际学术会议(ICADI2024)

​【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】 2024年人工智能、数字媒体技术与交互设计国际学术会议(ICADI2024) 2024 International Conference on artificial intelligence, digital media technology and …

期权开户攻略:期权开户主要的流程是什么?

今天期权懂带你了解期权开户攻略:期权开户主要的流程是什么?交易期权可以为投资者提供多种灵活性和机会,但同时也伴随风险。因此,了解期权的基本概念和策略,结合自身的风险承受能力,才能更好地进行投资决策…

解决el-date-picker切换类型type时错位

vue代码如下 样式效果如下 切换日期类型时,立马点日期会出现错位,检查发现是日期的展开面板并没有插入到body中导致的错位 解决方法 给el-date-picker加上唯一key值就可以

智慧园区,为园区多场景提供智能化赋能

智慧园区解决方案旨在通过现代信息技术手段,为园区空间多场景提供智能化赋能,以提升园区的运营效率、管理水平和服务质量。以下是对智慧园区解决方案的详细阐述: 一、智慧园区解决方案的核心目标 智慧园区解决方案的核心目标是实现园区的“…

ruoyi若伊项目(vue前后端分离)下载搭建

介绍 💡 RuoYi-Vue ​ RuoYi-Vue 是一款开源的后台管理系统,是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring Security、MyBatis、Jwt、Vue),内置模块如:部门管理、…

Gemma 2大模型的训练范式解析

咱们聊聊大型语言模型(LLMs)的训练范式吧,这可是个大话题。从最早的GPT模型到现在的复杂开放权重LLMs,这一路走来,变化可真不少。记得最开始,LLMs的训练就只关注预训练,但现在,这事儿…

C++设计模式——Strategy策略模式

一,策略模式简介 策略模式是一种行为型设计模式,策略模式在软件开发场景中定义了一系列的算法,并将每个算法单独封装在可替换的对象中,使应用程序在运行时可以根据具体的上下文来动态地选择和切换算法,同时保持原有的…

【运维监控】influxdb 2.0+grafana 监控java 虚拟机以及方法耗时情况(2)

关于java应用的监控本系列有文章如下: 【运维监控】influxdb 2.0telegraf 监控tomcat 8.5运行情况 【运维监控】influxdb 2.0grafana 监控java 虚拟机以及方法耗时情况 【运维监控】Prometheusgrafana监控tomcat运行情况 【运维监控】Prometheusgrafana监控spring b…

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要…

【java入门】八大基本数据类型与变量的声明与使用,超详细讲解!

🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~ 💟 作 者:码喽的自我修养&#x1f9…

【PyCharm使用教程】PyCharm的基本使用教程,适合完全零基础,小白快速上手!(Python+PyCharm安装包)

如果你正在学习Python,但是找不到方向的话可以试试我这一份学习方法和籽料呀!点击 [领取籽料](不要米米) Pycharm的基本使用教程 【一】PIP换源 ①问题描述 在使用Python时需要经常用到pip安装第三方包。在某些情况下由于网络速…

基于C++实现(控制台)学生成绩管理系统

学生成绩管理系统 一、系统需求分析 一个巨大的学校有数以万计的教工、学生和相应的资料需要管理。一个好的学生成绩管理系统可以协助管理员管理巨大的数据库,允许管理员、教师跟学生这三种用户登录进行相应的操作。 管理员具有管理数据库的一切权限。管理员负责…

兔英语语法体系——观后笔记

目录 一、视频链接 二、视频前言 三、简单句(Simple Sentences) 1. 可独立完成的动作 2. 有1个动作的承受者 3. 有两个动作承受者 4. 只有一个动作承受者(但需补充) 5. 非 “动作” 6. 总结 四、五大基本句型 五、句子成分 6. 定语 7. 状语 8. 同位语 9. 总结 …

[SWPUCTF 2022 新生赛]

目录 [SWPUCTF 2022 新生赛]ez_rce 什么是poc? [SWPUCTF 2022 新生赛]where_am_i [SWPUCTF 2022 新生赛]js_sign [SWPUCTF 2022 新生赛]xff ​[SWPUCTF 2022 新生赛]numgame call_user_func()函数 ::双冒号运算符 [SWPUCTF 2022 新生赛]ez_sql [SWPUCTF 2…

Anylogic比较运行实验

比较运行实验案例: 设置好参数后,点击左下角的开始,即可运算出结果 设置图例参数,在界面上图例显示为改变的变量值: