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

小周带你正确理解Prompt-engineering,RAG,fine-tuning工程化的地位和意义

有人会说:"小周,几天不见这么拉了,现在别说算法了,连code都不讲了,整上方法论了。" 

      我并没有拉!而且方法论很重要,尤其工程化的时候,你总得知道每种技术到底适合干啥,其实主要是现实中,我在项目里发现大家对这块其实并不是分的很清楚。

      所以我来给大家捋一捋,因为这毕竟直接取决于你设计的解决方案是否能真正解决问题

图片

       如上图所示,OpenAI把对于优化LLM返回结果分为两个方向,一个方向是横坐标系的对LLM 模型本身的优化,另一个是对你提供的Context的优化

  •       在对LLM本身的优化上没啥可弄的,最后就只能走到Fine-tuning这一条路

  •      在对本身的Context进行优化的方式,我们一般起手式是先prompt-engineering

  •     prompt-engineering不好使了,我们会借助RAG来实现额外的能力和知识

      我们先来把几个概念再捋一下

prompt-engineering

图片

      上图就是一个不清晰的prompt的典型,没有清晰的system message定义,得到的回应也是特别的随机,并且没有清晰的format

图片

      优化上面的prompt,从几个维度入手:

  • 首先肯定是要指令变得更清晰

  • 其次用COT的方式提问让它拆解复杂的任务

  • 顺便告诉LLM你要什么样输出的回答格式

图片

      再进阶就要上few_shot了,告诉LLM,你想要的答案是长啥样的,甚至风格

      我上面说的看起来好像都很日常,但是你真的了解prompt-engineering吗?

      Prompt-engineering的一个最重要的隐藏功能就是超级测试工具,当你的项目涉及到非常复杂的推理场景,尤其是多步推理能力的时候,COT就是你最好的测试工具

      Tips: 在我们给project挑选模型底座的时候,除了去看一些所谓的测试结果以外,很大一部分工作时要做COT+fewshot的测试例,尤其是COT,比如写50到100个COT的问题,观察list里的LLMs,究竟谁的回答更靠谱,更有逻辑,尤其是复杂推理场景,相信我,这一步都过不去的LLM,你就没有必要再考虑后面的RAG和FT了(这篇文章看到这,其实读者就你大赚特赚了,省了你多少精力!)

      继续说,prompt-engineer它调用毕竟还是基座模型的能力,你要想让模型输出一些训练数据中没有的知识,甚至都不在互联网上可查询的知识,或者这个模型的所有说话方式都不适合你的应用场景,那你怎么办?

      一般这个时候大家都会说我们可以fine-tuning也可以RAG,这两个方法都能解决这些问题,如果你也是相同的想法,坦白说看这篇文章你又赚到了,这俩不但不是同一个东西,解决的问题也不一样

图片

      诚然,我们在很多时候都会认为像上图一样,RAG也好,FT也好都能让LLM产生新的记忆,我们可以把RAG认为是短期记忆,FT产生的是长期记忆,某种程度看起来没错。

      这里需要纠正的是FT产生的,我们不能认为它是长期记忆,微调无法让LLM学习知识,而是学习了行为模式,或者叫学习了结构,这块如果要讲理论,比较复杂,拆开讲要讲3篇, 后面看看有时间可以开个新坑,大家目前简单理解这几句话即可

       我们来逐一解决上文提到的问题,无非是两个:

  • 新知识

  • 表达方式

     

       RAG

       新知识你就用RAG来做就可以了(当然也可以拿agent来做,我这里不讲agent)

        评估一个RAG系统的好坏,我们一般分为4大维度

  • 第一个 真实性

  • 第二个 精确性

  • 第三个 回答的关联性

  • 第四个 召回率

图片

      有读者说,你这几个指标看着都还行,像那么回事,那我们怎么来做量化呢?下面链接,拿走不谢

图片

explodinggradients/ragas: Evaluation framework for your Retrieval Augmented Generation (RAG) pipelines (github.com)

图片

       通过regas这个项目调用openai就能自动为你的RAG系统这几个参数来打分,根据分数高低来调整你的RAG系统

       另外可能有读者说以前做过RAG,不就是拿向量数据库来做匹配吗!但是这个其实已经很落伍了,比较先进的架构是同时拿多个RAG方式来提取多个RAG答案,一起汇总,然后经过re-ranking系统来排出top_k, 最后跟着prompt一起给到LLM

      可选的RAG方式除了向量库做余弦匹配以外,也流行直接拿text-to-sql,或者直接拿标量搜索去取企业里的准确数据

      你加的越多,就越准确,但是你整体LLM流程就越慢

图片

图片

,需要balance

      另外在向量库的选择和document切分这块能玩的花活儿也很多,某种程度上决定了你RAG系统的上限(留个坑,以后讲)

图片

图片

如上图所示,RAG答案丰富度,对模型的test 效果有一定的正相关关系

图片

      RAG上加的feature越多,也和你RAG系统的准确度成正相关

      Fine-tuning

      下图把Fine-tuning能干啥,不擅长干啥写的已经很清楚了,所以读者们今后别再假设通过FT能给你模型增加新知识了,这条路是走不通的(当然可能也有人是把追加预训练和FT给搞混了,这俩可不是一个东西)

图片

      相反

  • 如果你要强化你预训练里面的知识的能力,比如专门针对代码的FT

  • 如果你要做情感陪伴的时候,想让模型以某种不好描述的态度对你说话的时候

  • 如果你想让你模型能读懂特别复杂的指令,你又不想写很复杂的prompt的时候

    那么选Fine-tuning,没错的

      下面这两幅图很好的举例了FT前后的output对比

图片

     

图片

     从某种意义上说,对特定任务的Fine-tuning会给小参数模型以超过大参数模型的能力,如下图所举的例子

     Canva(做设计的公司)通过对GPT-3.5进行 FT,能得到超过GPT-4的能力

    

图片

      prompt-engineering,RAG,fine-tuning,这几个东西各自有各自的用途和场景,也能混用,但是不能平行着用,读完了我这篇文章,相信读者们应该很好的理解了他们的各司其职,最好的方法肯定还是混着用

      比如Scale AI他们就给出过几种能力叠加以后的准确率相关性

图片

本文完

图片

相关文章:

小周带你正确理解Prompt-engineering,RAG,fine-tuning工程化的地位和意义

有人会说:"小周,几天不见这么拉了,现在别说算法了,连code都不讲了,整上方法论了。" 我并没有拉!而且方法论很重要,尤其工程化的时候,你总得知道每种技术到底适合干啥&…...

【精选】java多态进阶——多态练习测试

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…...

Git详细讲解

文章目录 一、Git相关概念二、本地分支中文件的添加 、提交2.1 文件状态2.2 创建Git仓库2.2.1 git init2.2.2 git clone 2.3 添加操作(git add)2.4 提交操作(git commit)2.5 撤销操作2.5.1 撤销 add操作2.5.2 撤销 commit操作2.5.3 覆盖上一次的commit操…...

k8s弃用docker后使用ctr导入镜像

很多公司的k8s安装比较早,在生产环境一般很少升级,因此还是老版本,在使用新版本的时候,容易陷入老版本的思维中,从而掉坑,这里记录一下整个排查过程,希望对遇到类似的同学起到一定的帮助。 k8s 抛弃弃用docker 学习容器技术的过程中,我看到有不少同学留言问 Kubernet…...

mxxWechatBot开发中..

大家伙,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 免责声明:该工具仅供学习使用,禁止使用该工具从事违法活动,否则永久拉黑封禁账号!!!本人不对任何工具的使用负责&am…...

C#系列-C#log4net日志保存到文件(15)

在C#中使用log4net将日志保存到文件是一个常见的做法。log4net是一个功能强大的日志记录框架,它允许你配置日志的输出格式、级别、目标(例如文件、控制台、数据库等)等。 下面是如何配置log4net以将日志保存到文件的基本步骤: 安…...

linux 08 文件查找

02. 第一. alias:起别名(可以输入别名就可以执行对应的命令),语法:alias 别名‘ls -l’ 第二. locate: locate 找不到最近的文件 更新locate 后 find命令: find: find 路径 选项 文件名&#x…...

【Java面试】数据类型常见面试题

什么是包装类型 将基本类型包装进了对象中得到的类型 基本类型和包装类型有什么区别 用途不同:基本类型一般用于局部变量,包装类型用于其他地方存储方式不同:用于局部变量的基本类型存在虚拟机栈中的局部变量表中,用于成员变量…...

unity学习案例总结

动态标签 GitHub - SarahMit/DynamicLabel3D: Simple dynamic labels for a 3D Unity scene...

Halcon 频域缺陷检测

文章目录 傅里叶变换频谱矩形圆菱形黑白相间的亮带去除图纹(反傅里叶变换)去除图纹滤波器处理 Halcon 频域空间域检测缺陷Halcon 频域差分空间域 缺陷检测(lines_gauss 提取线)Halcon 频域差分空间域(blob特征&#xf…...

架构整洁之道-软件架构-测试边界、整洁的嵌入式架构、实现细节

6 软件架构 6.14 测试边界 和程序代码一样,测试代码也是系统的一部分。甚至,测试代码有时在系统架构中的地位还要比其他部分更独特一些。 测试也是一种系统组件。 从架构的角度来讲,所有的测试都是一样的。不论它们是小型的TDD测试&#xff…...

nodejs学习计划--(十)会话控制及https补充

一、会话控制 1.介绍 所谓会话控制就是 对会话进行控制 HTTP 是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端, 无法区分用户 而产品中又大量存在的这样的需求,所以我们需要通过 会话控制 来解决该问题 常见的会话控制…...

fast.ai 机器学习笔记(四)

机器学习 1:第 11 课 原文:medium.com/hiromi_suenaga/machine-learning-1-lesson-11-7564c3c18bbb 译者:飞龙 协议:CC BY-NC-SA 4.0 来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它,这些笔记将继续…...

LLM大模型常见问题解答(2)

对大模型基本原理和架构的理解 大型语言模型如GPT(Generative Pre-trained Transformer)系列是基于自注意力机制的深度学习模型,主要用于处理和生成人类语言。 基本原理 自然语言理解:模型通过对大量文本数据的预训练&#xff…...

这种学习单片机的顺序是否合理?

这种学习单片机的顺序是否合理? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!&#xff01…...

13 年后,我如何用 Go 编写 HTTP 服务(译)

原文:Mat Ryer - 2024.02.09 大约六年前,我写了一篇博客文章,概述了我是如何用 Go 编写 HTTP 服务的,现在我再次告诉你,我是如何写 HTTP 服务的。 那篇原始的文章引发了一些热烈的讨论,这些讨论影响了我今…...

flask+python高校学生综合测评管理系统 phl8b

系统包括管理员、教师和学生三个角色; 。通过研究,以MySQL为后端数据库,以python为前端技术,以pycharm为开发平台,采用vue架构,建立一个提供个人中心、学生管理、教师管理、课程类型管理、课程信息管理、学…...

【GameFramework框架内置模块】1、全局配置(Config)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录: https://blog.csdn.net/q7…...

PySpark(四)PySpark SQL、Catalyst优化器、Spark SQL的执行流程、Spark新特性

目录 PySpark SQL 基础 SparkSession对象 DataFrame入门 DataFrame构建 DataFrame代码风格 DSL SQL SparkSQL Shuffle 分区数目 DataFrame数据写出 Spark UDF Catalyst优化器 Spark SQL的执行流程 Spark新特性 自适应查询(SparkSQL) 动态合并 动态调整Join策略 …...

2024第六届中国济南国际福祉及残疾人用品展览会/失能护理展

龘龘龙年-第六届山东福祉展会-将于5月27-29日在济南黄河国际会展中心举办; 一、引言 2024年,中国龙年,龙象征着力量、繁荣与希望。在这个特殊的年份,一场备受瞩目的盛会即将拉开帷幕。2024年第六届中国(济南&#xf…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目

应用场景&#xff1a; 1、常规某个机器被钓鱼后门攻击后&#xff0c;我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后&#xff0c;我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...

深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”

深入浅出JavaScript中的ArrayBuffer&#xff1a;二进制数据的“瑞士军刀” 在JavaScript中&#xff0c;我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时&#xff0c;单纯依赖字符串或数组就显得力不从心了。这时&#xff…...

学习 Hooks【Plan - June - Week 2】

一、React API React 提供了丰富的核心 API&#xff0c;用于创建组件、管理状态、处理副作用、优化性能等。本文档总结 React 常用的 API 方法和组件。 1. React 核心 API React.createElement(type, props, …children) 用于创建 React 元素&#xff0c;JSX 会被编译成该函数…...

后端下载限速(redis记录实时并发,bucket4j动态限速)

✅ 使用 Redis 记录 所有用户的实时并发下载数✅ 使用 Bucket4j 实现 全局下载速率限制&#xff08;动态&#xff09;✅ 支持 动态调整限速策略✅ 下载接口安全、稳定、可监控 &#x1f9e9; 整体架构概览 模块功能Redis存储全局并发数和带宽令牌桶状态Bucket4j Redis分布式限…...

第21节 Node.js 多进程

Node.js本身是以单线程的模式运行的&#xff0c;但它使用的是事件驱动来处理并发&#xff0c;这样有助于我们在多核 cpu 的系统上创建多个子进程&#xff0c;从而提高性能。 每个子进程总是带有三个流对象&#xff1a;child.stdin, child.stdout和child.stderr。他们可能会共享…...