提示工程 vs 微调 vs RAG

2024-09-02 12:28
文章标签 vs 工程 提示 微调 rag

本文主要是介绍提示工程 vs 微调 vs RAG,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:https://medium.com/@myscale/prompt-engineering-vs-finetuning-vs-rag-cfae761c6d06

本文由我的文章翻译智能体 、文章润色智能体、文章概括智能体和我合作整理完成

摘要

提示工程、微调和检索增强生成(RAG)是三种主要优化大型语言模型输出的方法。提示工程简单易用,适合一般性话题,但定制性有限。微调则提供高度定制和精确响应,但成本和复杂性较高。RAG 通过结合外部数据源,提供最新、相关的信息,是一种在提示工程与微调之间的折中方案,特别适合需要动态信息和上下文相关性的场景。选择哪种方法取决于项目需求、资源和预期结果。

译文

自大型语言模型(LLM)和高级聊天模型问世以来,各种技术被用来优化从这些 AI 系统中提取所需输出的方式。这些技术中,有些侧重于调整模型的行为以更好地满足用户需求,而另一些则专注于改进查询方式,以获取更精确和相关的信息。

其中,检索增强生成(RAG)、提示工程和微调是最广泛使用的几种方法。在 MyScale 上,我们已经深入探讨了RAG和微调,特别是OpenAI 微调与Hugging Face 微调的应用。

注意:如尚未阅读我们关于 RAG 和微调的博客,建议先行查阅,以便更好地理解本文内容。

今天,我们将从探索转向比较。本文将分析每种技术的优缺点,帮助你理解何时以及如何有效地使用这些方法。让我们深入探讨每种技术的独特之处。

提示工程

提示工程是与大型语言模型交互的基础方式,它类似于给模型下达指令。当你使用提示时,实际上是在告诉模型你希望它提供什么样的信息。这种方法有些像学习如何提出正确的问题,以获取最佳答案。然而,提示工程的局限性在于,模型只能基于其训练中学到的内容做出回应。

img

提示工程的主要优点在于其简单易用,适合非技术人员。然而,由于依赖模型的原始学习内容,它可能无法始终提供最新或高度具体的信息。因此,提示工程更适用于一般性话题或需要快速答案而不涉及过多细节的情况。

优点
  1. 易用性:提示工程对用户友好,不需高级技术技能,对广泛用户群体极具吸引力。
  2. 成本效益:利用预训练模型,与微调相比计算成本较低。
  3. 灵活性:提示可以快速调整,以探索不同的输出,而无需重新训练模型。
缺点
  1. 一致性差:模型响应的质量和相关性可能因提示措辞的不同而显著变化。
  2. 定制性有限:定制模型响应的能力取决于编写有效提示的创造力和技巧。
  3. 依赖模型知识:输出受限于模型在初始训练期间所学内容,因此对高度专业化或最新信息效果不佳。

微调

微调是指在现有语言模型的基础上,为其新增或特定内容的学习。可以将其类比为更新手机应用程序以获得更好功能,但在这种情况下,模型需要大量新信息和时间来完成学习。这就像让模型回到学校继续学习。

img

由于微调需要大量计算能力和时间,因此可能费用高昂。但如果你需要模型在特定领域表现优异,微调是值得的选择。微调后的模型能够更准确地提供符合你需求的答案。

优点
  • 定制性强:允许广泛定制,使模型能够生成特定领域或风格的响应。
  • 准确性提升:通过在专门数据集上训练,模型生成的响应更加准确和相关。
  • 适应性强:微调后的模型能够更好地处理原始训练中未覆盖的细分主题或最新信息。
缺点
  • 成本高昂:微调需要大量计算资源,比提示工程更昂贵。
  • 技术要求高:需要深入理解机器学习和语言模型架构。
  • 数据需求高:有效微调需大量且精心策划的数据集,数据收集可能面临挑战。

检索增强生成(RAG)

检索增强生成(RAG)将传统语言模型与类似知识库的外部数据源结合。当模型需要回答问题时,它首先查找并收集来自知识库的相关信息,然后基于这些信息作答。就像模型在回答问题前快速查阅了一个信息库,以确保提供最佳答案。

img

RAG 特别适用于需要最新信息或涵盖比模型初始训练内容更广泛话题的场景。它在设置难度和成本方面处于中间位置,能够帮助模型提供更新、更详细的答案。然而,像微调一样,它需要额外的工具和信息才能发挥最佳效果。

RAG 系统的成本、速度和响应质量很大程度上依赖于向量数据库。MyScale 就是这样一个向量数据库,它不仅比其他向量数据库的收费几乎减半,而且性能提升了三倍。你可以在这里查看基准测试。最重要的是,使用 MyScale,你无需学习外部工具或语言即可访问它,这使其成为开发者的理想选择。

优点
  • 动态信息:通过利用外部数据源,RAG 可提供最新且高度相关的信息。
  • 平衡性:在提示的易用性与微调的定制性之间提供折中方案。
  • 上下文相关性:通过附加上下文信息增强模型的响应,生成更为详尽和丰富的输出。
缺点
  • 复杂性:实施 RAG 可能较复杂,需将语言模型与检索系统集成。
  • 资源密集:虽然比全面微调资源消耗少,但 RAG 仍然需要相当多的计算能力。
  • 数据依赖性:输出质量取决于检索信息的相关性和准确性。

提示工程 vs 微调 vs RAG

以下表格对提示工程、微调和检索增强生成(RAG)进行了对比,帮助你识别它们的差异,并决定哪种方法最适合你的需求。

特性提示工程微调检索增强生成(RAG)
使用难度简单复杂中等
成本效益中等
定制性中等
适用场景一般性主题专业性、细分领域最新信息,广泛领域
计算资源要求中等
响应质量不一致依赖数据

RAG — 增强 AI 应用的最佳选择

RAG 将传统语言模型的强大功能与外部知识库的精确性相结合,使其在某些特定场景下相比单独使用提示工程或微调更具优势。

首先,RAG 通过实时检索外部数据,确保提供的信息既最新又相关。这对于涉及新闻相关查询或快速发展的领域至关重要。

其次,RAG 在定制性和资源需求方面提供了平衡。与全面微调不同,RAG 允许更灵活且资源节省的操作,对更广泛的用户和开发者极具吸引力。

img

最后,RAG 的混合特性弥合了 LLM 广泛生成能力与知识库中可获得的具体、详细信息之间的差距。这使得输出不仅相关且详细,还能在上下文中更具丰富性。

一个优化的、可扩展的、成本效益高的向量数据库解决方案可以极大地提高 RAG 应用程序的性能和功能。这就是你需要 MyScale 的原因。MyScale 是一款基于 SQL 的向量数据库,能与 OpenAI、Langchain、Langchain JS/TS 和 LlamaIndex 等主要 AI 框架和语言模型平台无缝集成。使用 MyScale,RAG 的速度更快、准确性更高,适合追求最佳结果的用户。

结论

总之,选择提示工程、微调还是检索增强生成(RAG),取决于你的项目需求、可用资源和期望结果。每种方法都有其独特的优势和局限性。提示工程易于使用且成本效益高,但定制性较差。微调提供了详细定制,但成本和复杂性较高。RAG 则提供了一种平衡方案,通过中等复杂度提供最新的领域特定信息。

在这里插入图片描述

这篇关于提示工程 vs 微调 vs RAG的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129953

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

可选择的反思指令微调

论文:https://arxiv.org/pdf/2402.10110代码:GitHub - tianyi-lab/Reflection_Tuning: [ACL'24] Selective Reflection-Tuning: Student-Selected Data Recycling for LLM Instruction-Tuning机构:马里兰大学, Adobe Research领

VS Code 调试go程序的相关配置说明

用 VS code 调试Go程序需要在.vscode/launch.json文件中增加如下配置:  // launch.json{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information,

二、Maven工程的创建--JavaSEJavaEE

1、idea创建Maven JavaSE工程:  2、idea创建Maven JavaEE工程:   (1)手动创建 (2)插件方式创建 在idea里安装插件JBLJavaToWeb; 选择需要生成的项目文件后,右击: 项目的webapp文件夹出现小蓝点,代表成功。

三、Maven工程的构建

首先,创建和构建是两个概念。 构建是指将源代码、依赖库和资源文件等转换为可执行或可部署的应用程序的过程。 在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。 项目构建是软件开发过程中至关重要的一部分,它能够大大提高软件开发效率,使得开发人员更加专注于应用程序的开发和维护,而不必关心应用程序的构建细节。 同时,项目构建还能将多人写的代码聚合,并能够自动化项目的构建和部署,

我在高职教STM32——准备HAL库工程模板(1)

新学期开学在即,又要给学生上 STM32 嵌入式课程了。这课上了多年了,一直用的都是标准库来开发,已经驾轻就熟了。人就是这样,有了自己熟悉的舒适圈,就很难做出改变,老师上课也是如此,排斥新课和不熟悉的内容。显然,STM32 的开发,HAL 库已是主流,自己其实也在使用,只不过更换库就意味着教学内容有很大变化,自己也就迟迟没有迈出调整这一步。现在,是时候做出变化了,笔者计划保持教学项