前言
源自脉脉上面刷到的大模型业务工程落地可以做的方向。其实如果不是接触相关工作,有的人可能不会想了解这方面,自己实习做的方向与之相关,因此想调研总结一下行业热点方向与基础入门知识,还有一些的专业词汇的解释。包括但不限于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)模式解释是这样的:
十、其他
2023年北京时间11月7日,OpenAI首届开发者大会(春晚)上奥特曼提出的GPT-4 Turbo模型里面包括了Assistant,顺便分析一下Function Call和Assistant的区别,Assistant像一个机器人做代理,FunctionCall更偏向通用函数工具调用接口。
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从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%免费】?
本文转自 https://blog.csdn.net/m0_65555479/article/details/140517355?spm=1001.2014.3001.5501,如有侵权,请联系删除。
总结
前言
源自脉脉上面刷到的大模型业务工程落地可以做的方向。其实如果不是接触相关工作,有的人可能不会想了解这方面,自己实习做的方向与之相关,因此想调研总结一下行业热点方向与基础入门知识,还有一些的专业词汇的解释。包括但不限于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)模式解释是这样的:
十、其他
2023年北京时间11月7日,OpenAI首届开发者大会(春晚)上奥特曼提出的GPT-4 Turbo模型里面包括了Assistant,顺便分析一下Function Call和Assistant的区别,Assistant像一个机器人做代理,FunctionCall更偏向通用函数工具调用接口。
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从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%免费】?
本文转自 https://blog.csdn.net/m0_65555479/article/details/140517355?spm=1001.2014.3001.5501,如有侵权,请联系删除。