【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

提示工程、微调和 RAG,你应该选择哪一种?

MyScale

  • 2024-04-22
    北京
  • 本文字数:2470 字

    阅读完需:约 8 分钟

大小:1.21M时长:07:02
提示工程、微调和 RAG,你应该选择哪一种?

自众多大型语言模型(LLM)和高级对话模型发布以来,人们已经运用了各种技术来从这些 AI 系统中提取所需的输出。其中一些方法会改变模型的行为来更好地贴近我们的期望,而另一些方法则侧重于增强我们查询 LLM 的方式,以提取更精确和更有关联的信息。

 

检索增强生成(RAG)、提示和微调等技术是应用最广泛的。在这篇文章中,我们将研究对比这些技术的优缺点。这很重要,因为本文将帮助你了解何时该使用这些技术,以及如何有效地使用它们。

提示工程

提示是与任何大型语言模型交互的最基本方式。你可以把提示看作是给模型提供的指令。当你使用提示时,你会告诉模型你希望它给你反馈什么样的信息。这种方法也被称为提示工程,有点像是学习如何提出正确的问题以获得最佳答案的方法。但你能从中获得的东西是有限的,这是因为模型只能反馈它从训练中获知的内容。



提示工程的特点是它非常简单。你不需要成为技术专家也能写好提示,这对大多数人来说都是个好消息。但由于它的效果很大程度上取决于模型的原始学习水平,所以它可能并不总能提供你需要的最新或最具体的信息。当你处理的是一般性的主题,或当你只需要一个快速答案,而不需要太多细节时,提示工程最好用。

优点:

  • 易于使用:提示易于使用,不需要高级技术技能,因此可供广大受众使用。

  • 成本效益:由于它使用预先训练好的模型,因此与微调相比,其所涉及的计算成本极低。

  • 灵活性:用户可以快速调整提示以探索各种输出,而无需重新训练模型。

缺点

  • 不一致:模型响应的质量和相关性可能因提示的措辞而有很大差异。

  • 有限的定制能力:定制模型响应的能力受限于用户制作有效提示的创造力和技巧。

  • 对模型知识的依赖:输出局限在模型在初始训练期间学到的内容上,这使得它对于高度专业化或最新的信息需求来说效果不佳。

微调

微调是指你找来一个语言模型并让它学习一些新的或特殊的东西。可以把它想象成更新手机上的应用程序以获得更好功能的方法。但在微调的情况下,应用程序(模型)需要大量新信息和时间来正确学习各种内容。对于模型来说,这有点像是重返校园。



由于微调需要大量的算力和时间,因此成本可能很高。但如果你需要语言模型很好地理解某些特定主题,那么微调就会很划算。这就像是教模型成为你所感兴趣的领域的专家一样。经过微调后,模型可以为你提供更准确、更接近你所需内容的答案。

优点:

  • 自定义:微调允许广泛的自定义,使模型能够生成针对特定领域或风格的响应。

  • 提高准确性:通过在专门的数据集上进行训练,模型可以产生更准确、更相关的响应。

  • 适应性:经过微调的模型可以更好地处理原始训练过程中未涵盖的小众主题或最新信息

缺点:

  • 成本:微调需要大量计算资源,因此比提示工程更昂贵。

  • 技术技能:这种方法需要更深入地了解机器学习和语言模型架构。

  • 数据要求:有效的微调工作需要大量且精心策划的数据集,这类数据集可能很难编译。

检索增强生成(RAG)

检索增强生成(RAG)将常见的语言模型与知识库之类的东西混合在一起。当模型需要回答问题时,它首先从知识库中查找并收集相关信息,然后根据该信息回答问题。模型会快速检查信息库,以确保它能给你最好的答案。



RAG 在你需要最新信息,或需要比模型最初学习到的内容更广泛的主题答案的情况下特别有用。在设置难度和成本方面它不算高也不算低。它很有用,因为它可以帮助语言模型给出新鲜且更详细的答案。但就像微调一样,它需要额外的工具和信息才能正常工作。

 

RAG 系统的成本、速度和响应质量严重依赖于矢量数据库,所以这种数据库成为了 RAG 系统中非常重要的一部分。

优点:

  • 动态信息:通过利用外部数据源,RAG 可以提供最新且高度相关的信息。

  • 平衡:在提示的简易性和微调的定制能力之间提供了中庸之道。

  • 上下文相关性:通过附加的上下文来增强模型的响应,从而产生更明智和更细致的输出。

缺点:

  • 复杂性:RAG 实现起来可能很复杂,需要语言模型和检索系统之间做好集成。

  • 资源密集型:虽然 RAG 的资源密集程度低于完全微调的方法,但它仍然需要相当大的计算能力。

  • 数据依赖性:输出的质量在很大程度上取决于检索到的信息的相关性和准确性

提示、微调和 RAG 对比

下面的表格完整对比了提示、微调和检索增强生成方法。此表将帮助你了解不同方法之间的差异,并决定哪种方法最适合你的需求。

特性

提示工程

微调

RAG

所需技能等级

低:需要对如何构建提示有基本的了解。

中等到高等:需要了解机器学习原理和模型架构。

中等:需要了解机器学习和信息检索系统。

成本与资源

低:使用现有模型,计算成本最低。

高:训练需要大量计算资源。

中等:需要检索系统和模型交互的资源,但需求少于微调。

可定制性

低:受到模型预训练知识和用户编写有效提示的能力的限制。

高:允许对特定域或样式进行广泛的定制。

中等:可通过外部数据源进行定制,但定制自由度取决于其质量和相关性。

数据需求

无:只利用预先训练好的模型,不需要额外的数据。

高:需要大量相关的数据集才能进行有效的微调。

中等:需要访问相关的外部数据库或信息源。

升级频率

低:跟随底层模型一起升级。

变量:取决于何时使用新数据重新训练模型。

高:可以纳入最新的信息。

质量

可变:高度依赖于用户编写提示的技巧。

高:针对特定数据集进行定制,从而获得更相关、更准确的响应。

高:利用上下文相关的外部信息增强响应。

用例

一般问答、常用主题、教育目的。

专业应用、特定行业需求、定制任务。

需要最新信息的情况以及涉及上下文的复杂查询。

实现难度

低:利用现有工具和界面直接实现。

高:需要深入的设置和训练过程。

中等:需要将语言模型与检索系统相结合。

上表分解了提示、微调和 RAG 三种方法的要点。它应该可以帮助你了解每种方法最适合哪种情况。希望这张表可以帮助你为下一个任务选择正确的工具。

RAG:增强 AI 应用程序的最佳选择

RAG 是一种独特的方法,它将传统语言模型的强大功能与外部知识库的精确度结合在了一起。这种方法有很多优势,因而脱颖而出。在特定情况下,相比单独使用提示或微调方法,RAG 的优势特别突出。

 

首先,RAG 通过实时检索外部数据来确保其所提供的信息是最新并且高度相关的。这对于需要最新信息的应用程序来说非常重要,与新闻相关的查询或快速发展的领域就是典型例子。

 

其次,RAG 在可定制性和资源需求方面提供了一种平衡的方法。与需要大量计算能力的完全微调方法不同,RAG 允许更灵活、更节省资源的操作,让更多用户和开发人员可以轻松使用它。



最后,RAG 的混合特性弥补了 LLM 的广泛生成能力与知识库中可用的特定详细信息之间的差距。在它的帮助下,模型不仅会产生相关且详细的输出,而且还具有丰富的上下文。

 

优化、可扩展且经济高效的矢量数据库解决方案可以极大地增强 RAG 应用程序的性能和功能。这就是为什么你需要 MyScale,这是一个基于 SQL 的矢量数据库,它可以与主要的 AI 框架和语言模型平台(如 OpenAI、Langchain、Langchain JS/TS 和 LlamaIndex)顺利集成。使用 MyScale 后,RAG 可以变得更快、更准确,这对于寻求最佳结果的用户来说非常有用。

小结

总之,你应该选择提示工程、微调还是检索增强生成方法将取决于你项目的具体要求、可用资源和期望的结果。每种方法都有其独特的优势和局限性。提示是易用且经济高效的,但提供的定制能力较少。微调以更高的成本和复杂性提供充分的可定制性。RAG 实现了某种平衡,提供最新且与特定领域相关的信息,复杂度适中。

 

原文链接:https://myscale.com/blog/prompt-engineering-vs-finetuning-vs-rag/

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2024-04-22 16:552375

评论

发布
暂无评论

ESP32-C3 学习测试 蓝牙 篇(七、GATT 数据通信 — 发送自定义数据)

矜辰所致

蓝牙 ESP32-C3 10月月更

【C语言难点突破】指针和数组名的爱恨情仇

Geek_65222d

10月月更

第九期 - 模块二

wuli洋

一天梳理完React所有面试考察知识点

beifeng1996

React

Python应用之丑数的判断

智趣匠

Python 10月月更 丑数

Python应用之寻求两个数对之间的最大乘积

智趣匠

Python语法 10月月更 split函数

【愚公系列】2022年10月 Go教学课程 019-循环结构之for

愚公搬代码

10月月更

一文了解 CPython 中的垃圾收集器

宇宙之一粟

Python 垃圾回收算法 垃圾收集器 10月月更

Docker下,两分钟极速体验Nacos配置中心

程序员欣宸

Docker nacos 10月月更

React组件之间的通信方式总结(上)

beifeng1996

React

Docker可视化工具Portainer的安装和使用

琦彦

Docker Portainer 10月月更 可视化管理工具

Docker层和虚悬镜像(dangling image)介绍

琦彦

Docker 10月月更

聊聊前端面试中的js同步与异步问题

loveX001

JavaScript

从这两道题重新理解,JS的this、作用域、闭包、对象

loveX001

JavaScript

React-hooks面试考察知识点汇总

beifeng1996

React

陈宗绵|关于研发效能的理想与现实

laofo

DevOps cicd 研发效能 持续集成 持续交付

Python应用之拉力赛求最短时间

智趣匠

10月月更 Python语法应用 函数构建

开发者有话说|以码为梦,心向远方,路在脚下

乌龟哥哥

个人成长 10月月更

《Rust for Rustaceans》读书笔记2

袁世超

rust

什么是光网络,几张图就可以很好的解释!

wljslmz

光纤 10月月更 光网络 通信网络

C++学习---cstdio的源码学习分析06-关闭文件函数fclose

桑榆

c++ 源码分析 10月月更

改造微服务的时机

穿过生命散发芬芳

微服务 10月月更

2022-10-05:在一个 n x n 的整数矩阵 grid 中, 每一个方格的值 grid[i][j] 表示位置 (i, j) 的平台高度。 当开始下雨时,在时间为 t 时,水池中的水位为 t 。

福大大架构师每日一题

算法 rust 福大大

架构师的十八般武艺:领域建模

agnostic

领域建模

爬虫练习题(一)

张立梵

Python. 10月月更 爬虫案例

面试官:说说JS作用域和作用域链,我是这样回答的

loveX001

JavaScript

如何以非root用户运行Docker容器

琦彦

Docker 10月月更 root用户

JVM——垃圾回收算法

琦彦

Java JVM 垃圾回收 10月月更

作为Android Coder,你了解注解吗?

子不语Any

后端 java; 10月月更

架构实战营模块 2 作业

陌生流云

架构实战营

深入理解JS作用域链与执行上下文

loveX001

JavaScript

提示工程、微调和 RAG,你应该选择哪一种?_生成式 AI_InfoQ精选文章