前言
源自脉脉上面刷到的大模型业务工程落地可以做的方向。其实如果不是接触相关工作,有的人可能不会想了解这方面,自己实习做的方向与之相关,因此想调研总结一下行业热点方向与基础入门知识,还有一些的专业词汇的解释。包括但不限于Prompt工程、模型微调finetune(如multi lora)、Code Interpreter、LangChain、VectorDB、SFT、RAG、MultiAgent、Embedding Search、RLHF、DPO、PPO、数据飞轮、推理加速、LLMOps等,感兴趣就都可以了解一下。
一、Prompt工程
之前理解是给大模型加魔法的入口,提示工程(Prompt Engineering,简称 PE),是通过一些技巧和手段,让模型可以输出更准确、更相关并且更容易被下游代码处理的内容这样一个过程。GPT 是 Generative Pre-trained Transformer 的缩写,是 OpenAI 开发的大语言模型。它将文本视为一个 token 序列,预测序列下一个可能出现的token 。因为模型不能理解知识,只是在尝试输出序列,所以一个好的引导词,能够在不需要调节模型参数的基础上,产生更接近理想的输出,并且可以节省token占用(更省钱)。常见的一些技巧:如CoT(Chain of Thought)/ Few or Zero-Shot CoT / In-Context Learning(ICL)/ PAL(Program-aided Language models)/ Self-Consistency等, 此外还要注意模型幻觉、数学运算差和注入安全问题以及对应的解决方案。 一套适用于工程场景的框架be like:背景、角色、指令、输出。 另外openAi关于prompt的有专门的介绍,参考官方的cooking book以及问答实践专区
二、模型微调finetune(如multi lora)
可以思考一下大模型和传统机器学习或者深度学习解决nlp问题的区别,为什么有的场景就推荐用LLM来解决。个人觉得openAi家的数据与资源是强大的,普适性强,涉及范围广,有些场景不需要我们从头训练,用人家的预训练模型,在我们的工程业务场景上面进行finetune(微调),能够降低成本更快速并且输出更接近理想的结果。 并且传统的nlp也存在一些问题:(1)这些任务都需要大量的标注数据进行训练才有不错的模型效果,但针对特定任务的高质量标注数据难以获取,通常都需要花费大量的人力物力才能得到数量不多的有效数据;(2)而且某一个任务训练的模型很难泛化到其它任务中;(3)更重要的是在目前的互联网上有海量的文本,只是这些文本是没有针对特定任务做标注的,被称为无标注文本,很难将这些文本应用到特定任务的训练,这未免有些遗憾和浪费。 大模型的出现弥补了传统nlp的这些不足,它可以通过生成方式进行零样本自监督学习。 大模型微调有一些相关的策略,比如有名的低秩自适应(LoRA)方法、量化(Quantization)QLoRA、Adapter、prompt-tuning等。
三、代码执行Code Interpreter
代码解释器(Code interpreter),模型内置一个代码解释器,赋予其执行代码的能力。代码解释器(Code Interpreter)可以让普通用户(非程序员)用自然语言完成以前需要写代码来完成的复杂工作。比如使用 Python 进行编程,chatGPT模型内置一个沙箱解释器,可以运行Python代码。我们也可以给自研模型平台定制化开发Code Interpreter,方便业务侧使用来执行代码并分析。这就意味着不需要程序员对象,你也能随时随地拥有自动化编程助手。通过代码解释器,用户可以解决定量和定性的数学问题、进行数据分析和可视化,在不同文件格式之间进行转换。它功能强大有便捷之处,但是同时也有一些限制需要注意。
四、函数支持Function Call
这个功能是在23年6月份推出的,Chat Completions API新增了函数调用功能,让 GPT 模型拥有调用外部接口的能力。从人机交互上来说, Function Call 本质上实现了准确识别用户的语义,将其转为结构化的指令输出,以便与工程代码更好衔接。其他意义理解: OpenAI的function call功能,相当于开放了自定义插件的接口。 通过接入外部工具极大的改善了模型幻觉(一本正经的胡说八道)问题。 一定程度上缓解了数据安全问题,私有数据可以尽量自行处理。
补充介绍: LLM支持多种模型接口,比如 OpenAI、Hugging Face、AzureOpenAI等,FunctionCall在不同API里面的格式可能也不一样。之前在研究接入GPT-4V模型的时候,其API接口也有openAi官方和微软Azure的不同实现,之前它们传输请求body格式是有差别的,不过目前看来是对齐了。个人理解微软自从收购OpenAi以后两者产品侧应该都会趋于统一吧:
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4-vision-preview",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "What’s in this image?"},
{
"type": "image_url",
"image_url": {
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
},
},
],
}
],
max_tokens=300,
)
print(response.choices[0])
五、外部集成LangChain
LangChain是一个基于大语言模型(LLM)用于构建端到端语言模型应用的框架,它可以让开发者使用语言模型来实现各种复杂的任务,例如文本到图像的生成、文档问答、聊天机器人等。 相当于java里面的Spring框架, LangChain能够极大方便LLM相关的开发,结合了对接多种场景的工具,并且可以外部数据源进行连接,实现了开箱即用。 LangChain是一个让你的LLM变得更强大的开源框架。LangChain 就是一个 LLM 编程框架,你想开发一个基于 LLM 应用,需要什么组件它都有,直接使用就行;甚至针对常规的应用流程,它利用链(LangChain中Chain的由来)这个概念已经内置标准化方案了。 一个鹦鹉🦜的图标,很贴合其大语言模型层面上的强大能力支持,gitHub上很火,star很多。 LangChain+LLM实战—LangChain中的6大核心模块 目前围绕 LangChain 框架核心模块主要有六个,包括模型输入输出(Model I/O)、数据连接(Data Connection)、链(Chains)、记忆(Memory)、代理(Agents)和回调(Callbacks)。下面是它们各自的作用: (1)模型输入输出模块提供了语言模型和大语言模型的接口,可以将文本格式化为模型输入。 (2)数据连接模块提供了文档加载器和文档转换器等工具,用于将非结构化文本转换为可处理的数据。(3)链模块提供了各种类型的链,如基础链、路由链和顺序链等,用于组合和连接不同的功能。(4)记忆模块用于在链之间存储和传递信息,实现对话的上下文感知能力。(5)代理模块通过使用 LLM 来自动决策和执行动作,完成任务。(6)回调模块提供了连接到 LLM 申请的各个阶段的功能,用于日志记录、监控和流传输等任务。 这些模块的组合可以构建复杂的链式模型,实现各种自然语言处理任务。扩展参考下面链接: LangChain六大主要领域: (1)管理和优化prompt。不同的任务使用不同prompt,如何去管理和优化这些prompt是langchain的主要功能之一。 (2)链,初步理解为一个具体任务中不同子任务之间的一个调用。 (3)数据增强的生成,数据增强生成涉及特定类型的链,它首先与外部数据源交互以获取数据用于生成步骤。这方面的例子包括对长篇文字的总结和对特定数据源的提问/回答。 (4)代理,根据不同的指令采取不同的行动,直到整个流程完成为止。 (5)评估,生成式模型是出了名的难以用传统的指标来评估。评估它们的一个新方法是使用语言模型本身来进行评估。LangChain提供了一些提示/链来协助这个工作。 (6)内存:在整个流程中帮我们管理一些中间状态。 总的来说LongChain可以理解为:在一个流程的整个生命周期中,管理和优化prompt,根据prompt使用不同的代理进行不同的动作,在这期间使用内存管理中间的一些状态,然后使用链将不同代理之间进行连接起来,最终形成一个闭环。
六、Embedding与向量数据库VectorDB
Embedding Search
注意它不同于ElasticSerach构建倒排全文索引的方式,Embedding搜索也不能代替文本搜索,很多时候可以构建二者结合的混合检索,提升召回率。 嵌入(Embedding)是一种将离散的符号(如词语、字符或文档)映射到连续向量空间的表示方法。它将离散的符号转换为实数向量,从而使得计算机可以更好地处理和理解文本数据。 OPENAI提供内置的Embedding api,可以直接使用。 回顾一下Vector,其实它也就是我们在高中数学或者大学数学里学到的向量,只不过维度比当时的直角坐标系里的二维多一点而已(或许多到了 512 维)。在许多学术论文中,你可能更熟悉它的另一个名字 —— 嵌入(Embedding)。为了实现我们前面提到的超级大脑,我们首先需要让这个大脑理解各种信息,而这就是嵌入的作用。 比如你正在看一部电影,你的大脑会自动将电影中的人物、情节、对话等信息转化为你可以理解的形式。这就是一种嵌入的过程。同样,我们也可以让计算机做类似的事情,将各种类型的数据转化为它可以理解的形式,而计算机接受的也就是数字,也就是向量。回顾一下高中数学就好了,二维向量可以表征一个直角坐标系里的每个点,也就表征了这个直角坐标系里的所有信息了。那如果我们把维度无限拉大,他就可以表征无限多的信息。你可能在一些科幻电影中看到过,说高等生物可能不会像我们一样以三维的肉体存在,他们可能存在于更高的维度。比如时间就是第四维,跳脱之后就变成了四维生物。这其实就说明了为什么嵌入可以更好的理解这个世界,一串数字可以帮助计算机理解世界之后。那么如何将数据转换为向量呢?这就要靠我们在 AI 界做出的进步了,我们研究出了很多模型,可以将任意类型的数据映射到一个高维空间中,也就是变成01编码表示,生成一个向量,这个向量就是数据的嵌入表示。 嵌入方法有很多种,例如文本嵌入(text embedding),可以将文字转换为向量;图像嵌入(image embedding),可以将图片转换为向量;音频嵌入(audio embedding),可以将声音转换为向量;视频嵌入(video embedding),可以将视频转换为向量;甚至还有多模态嵌入(multimodal embedding),可以将不同类型的数据转换为同一个空间中的向量,比如一个电影包含声音和画面,那如果要更全面的表征这个电影,我们就需要结合音频嵌入和视频嵌入,也就是多模态嵌入了。
向量数据库VectorDB
它是一种新型的数据库,它新在它存的是 Embeddings(嵌入)。这个新并不是为了新而新,从传统的直接存储内容转到存储向量,让它变得更聪明,更强大。LLM 有的一些挑战,例如缺乏领域知识,缺乏长期记忆,缺乏事实一致性等。Vector DB 就像是给 LLM 提供了一本百科全书,让 LLM 可以根据用户的查询,在 Vector DB 中检索相关的数据,并根据数据的内容和语义来更新上下文,从而生成更相关和准确的文本。这样,LLM 就可以拥有一个长期记忆,可以随时获取最新和最全面的信息,也可以保持事实一致性和逻辑连贯性。 向量数据库是一种专门用于存储和处理向量的数据库。向量数据库使用专门的算法和数据结构来支持相似性搜索,通常用于机器学习或数据挖掘,侧重于性能、可扩展性和灵活性。向量数据库可以帮助 AI 模型理解和储存长期记忆等问题,以完成复杂的任务,加速应用场景落地。 传统的Mysql或者Redis存储结构化数据,当下非结构化数据呈爆炸式增长,而我们可以通过机器学习模型,将非结构化数据转化为 embedding 向量,随后处理分析这些数据。在此过程中,向量数据库应运而生。向量数据库是一种为了高效存储和索引 AI 模型产生的向量嵌入(embedding)数据而专门设计的数据库。 之前接触到有些关联的数据构建社交网络与知识图谱等,可以利用图数据库进行存储更详细的信息,查询的时候也是通过构建高维(比如1048维)向量去查询的。 VectorDB也是一个比较火的研究方向,有些业务场景也需要定制化构建自己的向量数据库,向量数据库可以为模型提供依赖的基础知识(knowledge)库,有些向量数据库是开源的,方便我们进行直接接入,足够丰富的知识数据库也可以减少模型幻觉的产生。 之前接入业务的搜索召回场景的时候,排查时先查Embdedding是否存在于Embdedding数据库里面,这样查询的速度会很快,如果存在则继续查询图数据库以获取更详细的关系网络数据。
八、SFT、RLHF、RAG、MultiAgent
SFT与RLHF
监督微调(SFT)& 强化学习(RLHF)它们都属于大模型的微调部分的概念,可以了解一下Pre-trained,Post-training,finetune的区别 [zhuanlan.zhihu.com/p/596556459…]从参数规模的角度,大模型的微调分成两条技术路线: 一条是对全量的参数,进行全量的训练,这条路径叫全量微调FFT(Full Fine Tuning)。 一条是只对部分的参数进行训练,这条路径叫PEFT(Parameter-Efficient Fine Tuning)。 FFT的原理,就是用特定的数据,对大模型进行训练,将W变成W,W
相比W ,最大的优点就是上述特定数据领域的表现会好很多。 但FFT也会带来一些问题,影响比较大的问题,主要有以下两个: 一个是训练的成本会比较高,因为微调的参数量跟预训练的是一样的多的; 一个是叫灾难性遗忘(Catastrophic Forgetting),用特定训练数据去微调可能会把这个领域的表现变好,但也可能会把原来表现好的别的领域的能力变差。 PEFT主要想解决的问题,就是FFT存在的上述两个问题,PEFT也是目前比较主流的微调方案。 从训练数据的来源、以及训练的方法的角度,大模型的微调有以下几条技术路线: 一个是监督式微调SFT(Supervised Fine Tuning),这个方案主要是用人工标注的数据,用传统机器学习中监督学习的方法,对大模型进行微调; 一个是基于人类反馈的强化学习微调RLHF(Reinforcement Learning with Human Feedback),这个方案的主要特点是把人类的反馈,通过强化学习的方式,引入到对大模型的微调中去,让大模型生成的结果,更加符合人类的一些期望; 还有一个是基于AI反馈的强化学习微调RLAIF(Reinforcement Learning with AI Feedback),这个原理大致跟RLHF类似,但是反馈的来源是AI。这里是想解决反馈系统的效率问题,因为收集人类反馈,相对来说成本会比较高、效率比较低。 不同的分类角度,只是侧重点不一样,对同一个大模型的微调,也不局限于某一个方案,可以多个方案一起。微调的最终目的,是能够在可控成本的前提下,尽可能地提升大模型在特定领域的能力。大模型训练需要 “广”、“齐”、“专”的数据。大模型所需要的数据根据训练的阶段有所不同。以ChatGPT为代表的自然语言大模型为例,其训练过程分为预训练、监督微调(SFT)、基于人类反馈的强化学习(RLHF)三个阶段。 第一阶段预训练所需的语料是各种类型的世界知识,包括网页、书籍、新闻、论文期刊、对话文本、代码等形式,通过大量学习世界知识,构建模型的基础能力,使得模型能够“漂亮地说话”。该阶段的语料特征可以概括为“广“。 第二阶段SFT,通过标注人员设计问答,编写正确答案,将例题投喂给模型,并希望模型在没有见过的任务中"举一反三",提升泛化能力。 第三阶段RLHF,训练目标是让模型的价值观与人类对齐,需要人类对模型的回答进行打分、排序,让模型知道"怎么说更好"。第二和第三阶段的数据质量要求较高,需要来自人类的高质量反馈,语料特征可以概括为“齐“。 如果将模型微调后部署应用于特定的场景形成行业大模型(如工业、金融、医疗等),则需要满足该场景专业需求的特定领域知识做预训练和SFT,需要具备一定专业深度,如行业数据库、专业文档、专业网站等,这部分的语料特征是“专”。
RAG
检索增强生成(RAG)算是大模型时代的hello world项目了,开源方案基本都是文章切块+向量召回+llm生成,是近期几个大模型应用方向上最难下笔的一个,一方面是因为技术方案仍在快速迭代;另一方面是市场对它的认知还存在一定偏差。目前市场认为:chatBI(让大模型做数据查询和分析)很有用但是有难度;Agent(让大模型自助规划任务实现用户复杂的需求)虽然很酷炫,但是落地的应用少,不够成熟。而对于RAG,企业都很明确它的价值,并且技术实现上,一顿组合拳疯狂输出(文本切割+向量数据库+大模型)就能解决问题,是企业落地的不二之选。并且博主说RAG到最后也会是走向Agent。 RAG最直接的优势就是能够让大模型利用自身的逻辑推导能力,去理解企业私有数据,实现问答能力的拓展。但是如果给大模型喂企业私有数据,做模型微调,也能实现同样的效果,为什么还要用RAG呢,还要看场景:第一:私有数据存在一定频率的动态更新的;第二:需要给出引用原文的;第三:硬件资源(GPU)不是太充足的(即使用RAG也需要微调,但一次微调处处可用,远比每个企业私有库微调一个模型成本低的多);这些场景下,用RAG更合适一些。 大模型存在知识的局限性、幻觉、安全性的问题,RAG是一个很好的解决方案。简单来讲,RAG就是通过检索获取相关的知识并将其融入Prompt,让大模型能够参考相应的知识从而给出合理回答。因此,可以将RAG的核心理解为“检索+生成”,前者主要是利用向量数据库的高效存储和检索能力,召回目标知识;后者则是利用大模型和Prompt工程,将召回的知识合理利用,生成目标答案。所以完整的RAG应用流程主要包含两个阶段: 数据准备阶段:数据提取——>文本分割——>向量化(embedding)——>数据入库 应用阶段:用户提问——>数据检索(召回)——>注入Prompt——>LLM生成答案 大模型优化选择RAG还是微调。RAG训练成本低于微调,但是对特定需求可能不是很准确。 如果我们需要倾向于获取外部知识并重视透明度,RAG 是我们的首选。另一方面,如果我们使用稳定的标记数据并旨在使模型更接近特定需求,那么微调是更好的选择。
九、插件(plugin)模式/代理(agent)模式
记得之前在面试通义大模型团队的时候,达摩院的三面面试官老哥问了一个问题,你觉得工程上插件(plugin)模式/代理(agent)模式有什么区别以及它们各自的适用场景是什么。我当时其实是不理解这两个概念的。现在想着顺带着反思学习一下。有时候确实会在面试的时候了解到很多新东西 ,当然真正的大佬是感受不到春招和秋招难度的,也不需要很多面试,只有水平不上不下的那种躺不平+不甘心的菜鸡才会发小作文回味一下(很嫌弃)。 软件架构的10个常见模式:zhuanlan.zhihu.com/p/62602256 架构模式是针对特定软件架构场景常见问题的通用、可重用解决方案。架构模式类似于软件设计模式,但范围更广。 GPT对于工程上的插件(plugin)模式/代理(agent)模式解释是这样的: ![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/0e08728d5fdb1cfff3ec3d3449d9215b.webp?x-oss-process=image/format,png)
十、其他
2023年北京时间11月7日,OpenAI首届开发者大会(春晚)上奥特曼提出的GPT-4 Turbo模型里面包括了Assistant,顺便分析一下Function Call和Assistant的区别,Assistant像一个机器人做代理,FunctionCall更偏向通用函数工具调用接口。
如何学习AI大模型?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业
?”“谁的饭碗又将不保了?
”等问题热议不断。
不如成为「掌握AI工具的技术人
」,毕竟AI时代,谁先尝试,谁就能占得先机!
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈
学习路线
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓