在科技飞速发展的今天,人工智能(AI)早已不再是遥不可及的科幻概念,而是融入了我们生活的方方面面。其中,大模型作为AI领域的重要分支,以其卓越的表现力和广泛的应用前景,吸引了无数人的目光。但你是否也曾经好奇,这些看似无所不能的大模型,究竟是如何工作的呢?
今天,我们就来用一张图,带你轻松读懂大模型应用的工作原理。不需要复杂的代码和艰深的理论,只需要一张图,就能让你对大模型有一个全新的认识。
我先把图放到最上面 让大家有个直观的感受,然后会分为几个步骤去解释图中提到的一些概念,最后总结大模型的工作流程以及两个重要概念的原理。
01. 什么是大模型
我们看看大模型自己是怎么回答的
02. 大模型应用架构相关概念
同学们可以把上面的图截下来,对照着看便于更好的理解
应用程序:
这个不多说,就是我们自己的业务程序,我们自己写的代码
基础大模型:
比如 GPT、ERNIE(百度开发的一个基于知识增强的语义表示模型)等等
Prompt:
提示词,prompt 的概念是指您向模型提供的输入文本或指令,以引导模型生成特定类型的响应。这个prompt可以是一个问题、一段描述、一个任务说明,甚至是一部分对话历史记录等。通过设计和优化prompt,您可以引导模型生成符合预期的回复或完成特定的任务。
APIs:
三方或者是我们自己提供的api接口
RAG:
RAG( Retrieval-Augmented Generation )即检索增强生成。RAG模型结合了检索和生成两种技术,以提高文本生成任务的效果。这部分也可以理解为检索知识库。
- 知识:由我们来提供的知识文档 可以是pdf、word等
- 向量数据库:向量数据库是一种专门用于存储和管理向量数据的数据库系统,这些向量数据通常是由机器学习模型生成的,用于表示特定对象或概念的特征。
- Embeddings:它通常指的是将数据(如文字、图片、音频等)映射到一个低维度的向量空间的过程。具体来说,Embeddings可以看作是一种特征表示学习技术,它能够将原始数据(如文本中的单词、句子或图像中的像素等)转换为低维、连续的向量表示,这些向量能够捕捉到原始数据的语义或结构信息。
Fine-tuning:
微调的意思,把知识库知识通过微调进行机器训练和大模型进行融合,这种方式就是提前学习,后面就不用通过prompt的方式把向量数据库的内容给到大模型了,比向量数据库更深刻,但是这种方式比较烧钱,而且没有向量数据库的方式实时
Function Calling:
大模型通过 Function Calling 的方式向应用程序提要求。比如,应用程序向大模型提出一个prompt:帮我把空调温度提高2度, 首先大模型不能直接调用三方api,因为大模型会产生幻觉(产生破坏效应),所以大模型拿到问题后需要靠应用程序去中转,怎么中转呢,就是靠Function Calling去反向告诉应用程序你应该去调用什么函数,然后我们调用函数拿到结果之后,把结果再通过prompt的方式给到大模型,然后大模型会为结果产生后续语言的返回等。
03. 大模型应用工作流程
还是把这张图放着比较合适~
下面通过3个简单的例子来说明上图是怎么运转的
例子1(简单问答):
小明:请一句话来形容项羽
大模型: 项羽,一代豪杰,勇猛无双,却终因刚愎自用,悲壮落幕,成为历史长河中璀璨的流星。
例子1的工作流程:首先小明通过应用程序输入一个问题,然后通过prompt也就是提示词的方式传递给基础大模型,然后大模型通过分析等直接将答案response响应给应用程序。
例子2(知识库):
小明:公司的报销制度
大模型: 吧啦吧啦一堆。。。
例子2的工作流程:首先要明确的是你们公司的报销制度是不公开到互联网的,所以大模型并不知道你们公司的报销制度,那就需要通过知识库的方式来解决,其中有两种方案:
- 提前准备好企业知识库,然后把知识文档通过Embeddings的方式存到向量数据库,然后应用程序先去向量数据库检索,拿到内容之后再将内容通过prompt的方式传给大模型,大模型分析之后将响应结果给到应用程序。(后面的章节会讲解这部分具体怎么操作的)
- 将企业知识库通过Fine-tuning 微调的方式提前训练到大模型中,这种方式上面也提到了,比向量数据库更深刻,但是这种方式比较烧钱,而且没有向量数据库的方式实时,更新就需要重新训练而且还存在一定风险。提前将知识训练到大模型之后,应用程序提出企业问题后大模型就能直接给出答案了。
例子3(调用api):
小明:请帮我预约一场今天2点的会议
大模型: 好的,请问您都需要邀请谁来参会呢?
小明:小虎
大模型:已为您预约了今天的会议,请您准时参加哦~
例子3的工作流程:先说明下这个场景可能会用到两个基础模型(一个用来做意图识别,一个用来做执行)当然都需要通过提示词的方式来调优,这里先不展开讲了。小明通过应用程序预约了一场会议,然后应用程序通过prompt将问题给到了大模型1,大模型1分析发现用户要预约会议,但是又没有说明参会人,那他就会告诉应用程序这个用户想要预约会议但是没有参会人(这一部是通过prompt调出来的),然后应用程序就会告诉用户你要告诉我都有谁来参会,然后小明输入参会人之后,大模型1判断小明要预约会议并且参数完整,然后告诉应用程序,应用程序就将小明的输入携带Function Calling需要的参数通过prompt的方式传递给大模型2,大模型2分析后将输出通过Function Calling的方式(也就是告诉应用程序你要掉什么函数等等)给到应用程序,应用程序发起会议预约调用接口,完成会议预约。
04. Function Calling原理
使用Function Call功能时,你需要定义(并不是真的写程序去定义一个函数,而仅仅是用文字来描述一个函数)一些function(需要指定函数名,函数用途的描述,参数名,参数描述),传给LLM,当用户输入一个问题时,LLM通过文本分析是否需要调用某一个function,如果需要调用,那么LLM返回一个json,json包括需要调用的function名,需要输入到function的参数名,以及参数值。总而言之,function call帮我们做了两件事情:1.判断是否要调用某个预定义的函数。2.如果要调用,从用户输入的文本里提取出函数所需要的函数值。
一个简单例子:
将以下内容作为prompt的参数传递给大模型(不同的模型接收function call的参数是不一样的)
{
"name": "get_current_weather",
"description": "获取今天的天气",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "获取天气情况的城市或者国家,比如北京、东京、新加坡"
},
"time": {
"type": "string",
"description": "时间信息"
},
},
"required": ["location", "time"]
}
}
本篇文章到这里就结束了,最后送大家一句话 白驹过隙,沧海桑田