Prompt工程

概念:这是一种通过输入文本指令让AI大模型按照要求输出期望结果的技术。

快速构建应用和性能基准

提示词是调用AI大模型能力的接口,通过结构化精心设计的提示词可以大大提高大模型的准确性和相关性。相比其他技术,通过提示词工程优化LLM性能的门槛更低、成本也会更低。

在优化LLM性能的过程中,提示词工程要做的第一件事就是:基于提示词工程快速建立应用原型,并且以此为性能参考基准,用于后续优化性能对比。

在使用提示词工程构建好应用之后,要进一步提高模型的性能可以考虑添加外部辅助工具、添加参考内容等手段,这就涉及到RAG、Agents等相关技术。

鉴于提示词工程对LLM的核心作用,在实际应用过程中,使用RAG、微调或其他高级技术之后也应该再次优化提示词,就像我前面的文章说过的,提示词工程贯穿LLM性能优化的过程始终。

在使用提示词工程的时候,需要遵循这四项核心原则:编写清晰的指令、将复杂任务分解为简单任务、给LLM一定的时间空间思考、系统的测试性能变化。

虽然这些原则看着简单,但是实践起来却不容易,要提高提示词技巧应该多学多练。关于如何写好Prompt网上的资料有很多,这里我推荐阅读几家大模型厂商的提示词工程指南。LangGPT结构化提示词也不错,里面有很多高质量的资料和提示词。在聊天页面私信:“LangGPT”,给你发LangGPT结构化提示词知识库。

在提示工程进行过程中和后续进一步的性能优化过程中,如何知道模型的性能是否变好呢?如何系统的测试性能变化?下面讲如何做好模型的性能评估。

做好模型的性能评估

只有清晰地了解了模型性能,才能判断各项改进操作是否有效,以下是评估模型性能的一些方法。

  • 外包人工注释:也就是花钱请人来告诉你某样东西是好是坏,这种方法通常成本高、速度慢,而且难以确保质量的一致性。

  • 内部人工审核:让您的团队在内部对模型结果进行审核,可确保质量,但速度较慢,且需要大量资源。

  • 基于模型的评估:使用另一个 LLM(通常是更好的模型,如 GPT-4)来评估系统的性能,有了强大的通用模型,这种方法变得越来越有效。

  • 基于代码的评估:编写一套评估自定义的规则,以评估模型输出的特定方面

  • 准确度指标:如果目标明确,F1、精确度、召回率等数据集指标可以客观地衡量模型的准确性。

  • 终端用户反馈和A/B测试:终端用户反馈通常是最重要的反馈!一般包括用户的直接反应以及表明用户偏好的隐式操作,比如用户对结果不满意则会要求重新生成,或者重复提问。

这些评估方法各有优缺点,通常最好的方法是将几种方法相结合,全面了解模型的性能和需要改进的地方,从而构建适合自身业务的模型性能评估框架。

提示词工程的局限性

使用提示词工程的优点和局限性都很明显。优点是门槛低、能够快速试错和迭代;成本也低,实施快,能快速构建早期的应用,同时结合评估系统,能够为性能优化建立基准。

局限性也同样明显,如:引入新知识困难、遇到复杂任务的时候大模型很难保持稳定的风格和结构输出、难以降低的token消耗。

若你没有遇到这类问题,恭喜你!可以不用继续折腾了,如果不幸遇到了,要可靠的解决这些问题,提示工程无能为力,只能依赖其他技术,要实现稳定可靠的引入新知识,我们可以使用 RAG (知识检索增强) 技术。要实现更稳定的风格和结构,降低token 消耗,则可以对模型进行微调,如下图所示。

RAG

这里我们先来谈谈RAG,在前文对RAG建立了一个印象,这里我来谈谈RAG是如何做的。

RAG过程

一个典型的知识问答的RAG的流程为:

  • 第一步:建立一个领域知识库,例如将人口数据文档Embedding后得到知识库;

  • 第二步:用户可以输入问题,如:加拿大人口多少?(Question);

  • 第三步:基于用户问题检索人口数据知识库(Knowledge Base);

  • 第四步:从知识库中检索得到答案,然后将答案与提示词组装起来:“基于提供的知识回答用户问题:[用户问题:加拿大人口多少?],[知识:xxxx]”;

  • 第五步:将组装好的提示词输入大模型,大模型再做出相应的回答。

总结一下,依据用户输入检索知识,然后构造Prompt,Prompt 输入模型得到结果。当然,更进阶的RAG不仅仅调整输入Prompt,甚至也能用模型输出信息。

高性能的RAG系统类似传统的信息检索系统,可以结合大模型特性使用 reranking、classification and finetuning your embeddings等多种技巧。不过,无论使用的RAG 技术有多复杂,RAG的核心都是如何将知识检索得又快又准。

还记得我们开卷考试那个例子吗?时间有限,如何在多本书之间(知识库间检索),如何在一本书里(知识库内部检索)把目标知识检索得又快又准确,是RAG效果好坏的关键。引入RAG为大模型应用带来了新的可能性,但其作为一个独立系统也增加了独立出错的可能性,因此需对RAG进行评估。

RAG评估

如果检索到的知识是无效的,会严重影响LLM应用的表现,因此将检索过程的精确度和召回率与整个 LLM 应用进行研究研究尤为重要。

如下图所示,需要建立一个评估框架,将检索性能与整个LLM应用程序隔离开来。所以这里既需要从模型角度出发评估生成结果的质量,也需要从检索的角度出发,用精确度和召回率评估检索并评估整个系统。

需要进行RAG评估的时候,可以从模型角度及检索角度这两个进行评估。

模型角度(generation)

  • 回答真实性:模型结果真实性多高(少一些模型幻觉)。

  • 回答相关度:结果和问题有多相关,不能南辕北辙。

检索角度(retrieval)

  • 召回率(recall):相关信息有多少包含在返回的检索内容里,越全越好

  • 准确率(precision):返回的检索内容中有用信息占比多少,越多越好

RAG也有局限性

如果LLM应用面临的问题与上下文有关,那么RAG就是一个强大的工具,它使模型能够访问外部数据源,提供模型训练数据中不存在的必要上下文。这种方法可以显著提高模型的性能,尤其是在最新信息或特定领域信息至关重要的情况下,可以为模型提供参考文本,能大大降低模型幻觉。

需要注意的是RAG的局限性:这门技术适合打造专才,不适合打造通才。虽然能够为模型提供新的信息、专有领域知识,但并不适合为模型提供通用领域的知识。

对于如何让LLM模型保持稳定的风格或结构输出,降低token消耗等。也就是我们在Prompt工程局限性的后两点,则需要使用微调技术解决。

Fine-tuning(微调)

从参数规模的角度,大模型的微调可以分成两条技术路线:全量微调FFT及PEFT。

  • 全量微调FFT(Full Fine Tuning):对全量的模型参数,进行全量的训练。

  • PEFT(Parameter-Efficient Fine Tuning):只对部分模型参数进行训练从成本和效果的角度综合考虑,PEFT是目前业界比较流行的微调方案。

微调是在较小的、特定领域的数据集撒谎给你继续LLM的训练流程,这可以通过调整模型本身的参数,而不是像提示词工程和RAG那样仅仅更改提示词来大幅提高模型在特定任务中的性能,可以把微调的这个过程想象成:把通用工具打磨成精密仪器的过程。

微调的两大好处是什么?

提高模型在特定任务中的性能:微调意味着你可以输入更多的示例,可以在数以百万计的数据上进行微调。虽然经过微调的模型可能会失去一些通用性,但对于其特定任务而言,它会有更好的表现。

提高模型效率:提升LLM应用程序的效率意味着更低的延迟和更低的成本。实现这一优势有两种方法。通过专门化模型,您可以使用更小的模型。此外,由于只对输入输出对进行训练,而不是对完整的提示及其任何提示工程技巧和提示进行训练,因此你可以舍弃示例或指令,这可以进一步改善延迟和成本。

微调该如何做

为了使微调达到最佳效果,应该从明确的目标和相关的高质量数据集开始,使用能体现所需输出类型的数据进行微调。此外,迭代测试也至关重要,需要从小的、渐进的变化开始,并在下一步进行前对结果评估。

对于OpenAI模型:微调包括使用其提供的API工具在我们的数据集上进一步训练模型。在进行微调训练时需要调整各种超参数并监控模型的性能,以找到适合特定用例的最佳设置。

对于开源的LLM:微调可能需要更多的实践工作,包括设置训练环境、管理数据流,还可能需要直接调整模型架构。

微调也有局限性

对于需要快速迭代新用例的场景,微调所起的作用较小。

要实现微调功能,需要创建一个大型训练数据集,其中需包含数百个优质示例。然后,按照格式要求将数据集整理成适当的格式,并启动微调自定义LLM的训练任务,评估微调性能。

为了实现良好的微调,还需要建立一个模型改进工作流程,在流程中不断监控模型性能变化,获得反馈,并依据反馈不断改进模型。

通过记录所有生成的模型,以及评分指标(隐性和显性用户的反馈,以及人类和人工智能的评估),从而为下一版本创建的训练数据集进行调整。

另外,许多LLMOps平台也能自动收集和显示最佳数据,让我们只需点击几下就能对模型进行微调。

最后总结下:我在上面提到的提示词工程、RAG 和微调等方式,在优化LLM的性能时,都是可以叠加使用的。

提示词工程始终是优化过程的第一步,从精心设计的提示词开始,我们就能了解模型对于任务的固有能力,有时候许多任务通过提示工程可能就能达到理想效果!微调可以完善模型对任务的理解,使其提供正确的输出。微调与 RAG 搭配使用的情况下,模型不仅知道该说什么,而且还能从知识库中获取正确适当的信息。

“RAG+微调”的这种双重方法充分利用了微调(针对特定任务的性能)和 RAG(动态、上下文丰富的信息检索)的优势,使LLM应用程序的性能更强。

根据微调的数据情况或模型的性能变化,在RAG和微调后需要重新进行提示工程,优化提示词以获得真正的最佳性能。

了解并有效应用提示词工程、RAG和微调是将LLM应用从原型阶段过渡到生产就绪模型阶段的关键。

- End -

AI大模型学习路线

如果你对AI大模型入门感兴趣,那么你需要的话可以点击这里大模型重磅福利:入门进阶全套104G学习资源包免费分享!

扫描下方csdn官方合作二维码获取哦!

在这里插入图片描述

这是一份大模型从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!

请添加图片描述
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

100套AI大模型商业化落地方案

请添加图片描述

大模型全套视频教程

请添加图片描述

200本大模型PDF书籍

请添加图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

LLM面试题合集

请添加图片描述

大模型产品经理资源合集

请添加图片描述

大模型项目实战合集

请添加图片描述

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐