初识大模型应用开发

本文简单介绍了大模型应用开发的基本原理,为另一篇SpringAI入门铺垫了一些基础知识

本文内容基于黑马SpringAI课程:https://www.bilibili.com/video/BV1MtZnYtEB3

认识AI

AI发展

AI,人工智能(Artificial Intelligence),使机器能够像人类一样思考、学习和解决问题的技术。

AI发展至今大概可以分为三个阶段:

img

其中,深度学习领域的自然语言处理(Natural Language Processing, NLP)有一个关键技术叫做Transformer,这是一种由多层感知机组成的神经网络模型,是现如今AI高速发展的最主要原因。

我们所熟知的大模型Large Language Models, LLM),例如GPT、DeepSeek底层都是采用Transformer神经网络模型。

以GPT模型为例,其三个字母的缩写分别是Generative、Pre-trained、Transformer:

img

那么问题来, Transformer神经网络有什么神奇的地方,可以实现如此强大的能力呢?

大模型原理

其实,最早Transformer是由Google在2017年提出的一种神经网络模型,一开始的作用是把它作为机器翻译的核心:

img

Transformer中提出的注意力机制使得神经网络在处理信息时可以根据上下内容调整对数据的理解,变得更加智能化。这不仅仅是说人类的文字,包括图片、音频数据都可以交给Transformer来处理。于是,越来越多的模型开始基于Transformer实现了各种神奇的功能。

例如,有的模型可以根据音频生成文本,或者根据文本生成音频:

img

还有的模型则可以根据文字生成图片,比如Dall-E、MidJourney:

img

不过,今天要聊的大语言模型Large Language Models, 以下简称LLM)是对Transformer的另一种用法:推理预测。

LLM在训练Transformer时会尝试输入一些文本、音频、图片等信息,然后让Transformer推理接下来跟着的应该是什么内容。推理的结果会以概率分布的形式出现:

img

问题来了,仅仅是推测接下来的内容,怎么能让ChatGPT在对话中生成大段的有关联的文字内容呢?

其实LLM采用的就是笨办法,答案就是:持续生成

根据前文推测出接下来的一个词语后,把这个词语加入前文,再次交给大模型处理,推测下一个字,然后不断重复前面的过程,就可以生成大段的内容了:

img

这就是为什么我们跟AI聊天的时候,它生成的内容总是一个字一个字的输出。

以上就是LLM的核心技术,Transformer的原理了~

如果想要进一步搞清楚Transformer机制,可以参考以下两个视频:

https://www.bilibili.com/video/BV1atCRYsE7x

https://www.youtube.com/watch?v=wjZofJX0v4M&t=1169s

大模型应用开发

云部署模型

通常发布大模型的官方、大多数的云平台都会提供开放的、公共的大模型服务。以下是国内常见的提供大模型服务的云平台:

云平台 公司 地址
阿里百炼 阿里巴巴 https://bailian.console.aliyun.com
腾讯TI平台 腾讯 https://cloud.tencent.com/product/ti
千帆平台 百度 https://console.bce.baidu.com/qianfan/overview
SiliconCloud 硅基流动 https://siliconflow.cn/zh-cn/siliconcloud
火山方舟-火山引擎 字节跳动 https://www.volcengine.com/product/ark

这些开放平台并不是免费,而是按照调用时消耗的token来付费,每百万token通常在几毛~几元钱,而且平台通常都会赠送新用户百万token的免费使用权。(token可以简单理解成你与大模型交互时发送和响应的文字,通常一个汉字2个token左右)

接下来以阿里百炼为例,首先登录不多说了

申请API_KEY

注册账号以后还需要申请一个API_KEY才能访问百炼平台的大模型。

在阿里云百炼平台的右上角,鼠标悬停在用户图标上,可以看到下拉菜单:

img

选择API-KEY,进入API-KEY管理页面:

img

选择创建我的API-KEY,会弹出表单:

img

填写完毕,点击确定,即可生成一个新的API-KEY

img

后续开发中就需要用到这个API-KEY了,一定要记牢。而且要保密,不能告诉别人。

体验模型

访问百炼平台,可以看到如下内容:

img

点击模型调用 ->立即调用 就能进入模型广场:

img

选择一个自己喜欢的模型,然后点击API调用示例,即可进入API文档页:

img

点击立即体验,就可以进入API调用大模型的试验台:

img

在这里就可以模拟调用大模型接口了。

本地部署模型

安装Ollama

手动部署最简单的方式就是使用Ollama,这是一个帮助你部署和运行大模型的工具。

官网:https://ollama.com/

注意:Ollama默认安装目录是C盘的用户目录,如果不希望安装在C盘的话(其实C盘如果足够大放C盘也没事),就不能直接双击安装了。需要通过命令行安装

命令行安装方式如下:

在OllamaSetup.exe所在目录打开cmd命令行,然后命令如下:

1
OllamaSetup.exe /DIR=你要安装的目录位置

执行该命令后会弹出安装窗口,点击右下角install即可

安装完成后,还需要配置一个环境变量,更改Ollama下载和部署模型的位置:

1
OLLAMA_MODELS=你想要保存模型的目录

环境变量配置,如图:

img

配置完可以打开一个命令行窗口,输入:ollama --help看看是否能成功识别

运行模型

可以在其官网上搜索自己需要的模型:

image-20260305212138497

以目前最热门的lfm2为例,点击后:

image-20260305213328218

模型名字里的b,表示billion,数字越小说明模型阉割越严重(越大对配置要求越高,谨慎选择),运行结果类似:

img

Ollama是一个模型管理工具,有点像Docker,而且命令也很像,比如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
ollama serve      # Start ollama
ollama create     # Create a model from a Modelfile
ollama show       # Show information for a model
ollama run        # Run a model
ollama stop       # Stop a running model
ollama pull       # Pull a model from a registry
ollama push       # Push a model to a registry
ollama list       # List models
ollama ps         # List running models
ollama cp         # Copy a model
ollama rm         # Remove a model
ollama help       # Help about any command

调用模型

大模型开发并不是在浏览器中跟AI聊天。而是通过访问模型对外暴露的API接口,实现与大模型的交互

所以要学习大模型应用开发,就必须掌握模型的API接口规范。

目前大多数大模型都遵循OpenAI的接口规范,是基于Http协议的接口。因此请求路径、参数、返回值信息都是类似的,可能会有一些小的差别。具体需要查看大模型的官方API文档。

接口说明

以DeepSeek官方给出的文档为例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# Please install OpenAI SDK first: `pip3 install openai`
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get('DEEPSEEK_API_KEY'),
    base_url="https://api.deepseek.com")

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "You are a helpful assistant"},
        {"role": "user", "content": "Hello"},
    ],
    stream=False
)

print(response.choices[0].message.content)
  • 请求方式:通常是POST,因为要传递JSON风格的参数
  • 请求路径:与平台有关
    • DeepSeek官方平台:https://api.deepseek.com
    • 本地ollama部署的模型:http://localhost:11434
  • 安全校验:开放平台都需要提供API_KEY来校验权限,本地ollama则不需要
  • 请求参数:参数很多,比较常见的有:
    • model:要访问的模型名称
    • messages:发送给大模型的消息,是一个数组
    • stream:true,代表响应结果流式返回;false,代表响应结果一次性返回,但需要等待
    • temperature:取值范围[0:2),代表大模型生成结果的随机性,越小随机性越低。DeepSeek-R1不支持

注意,这里请求参数中的messages是一个消息数组,而且其中的消息要包含两个属性:

  • role:消息对应的角色
  • content:消息内容

其中消息的内容,也被称为提示词Prompt),也就是发送给大模型的指令

提示词角色

首先了解常见的三种提示词角色

角色 描述 示例
system 优先于user指令之前的指令,也就是给大模型设定角色和任务背景的系统指令 你是一个乐于助人的编程助手,你以小哈基的身份来回答用户的问题。
user 终端用户输入的指令(类似于你在ChatGPT聊天框输入的内容) 写一首关于Java编程的诗
assistant 由大模型生成的消息,可能是上一轮对话生成的结果 注意,用户可能与模型产生多轮对话,每轮对话模型都会生成不同结果。

其中System类型的消息非常重要!影响了后续AI会话的行为模式。

比如,当我们询问这些AI对话产品“你是谁”这个问题的时候,每一个AI的回答都不一样,这是怎么回事呢?

这其实是因为AI对话产品并不是直接把用户的提问发送给LLM,通常都会在user提问的前面通过System消息给模型设定好背景

会话记忆

为什么要把历史消息都放入Messages中,形成一个数组呢?

这是因为大模型是没有记忆的,因此调用API接口与大模型对话时,每一次对话信息都不会保留,多次对话之间都是独立的,没有关联的。

但是平时使用的AI对话产品却能够记住每一轮对话信息,根据这些信息进一步回答,这是怎么回事呢?

答案就是Messages数组。

只需要每一次发送请求时,都把历史对话中每一轮的User消息、Assistant消息都封装到Messages数组中,一起发送给大模型,这样大模型就会根据这些历史对话信息进一步回答,就像是拥有了记忆一样。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
System: 你是一家名为《黑马程序员》的职业教育培训公司的智能客服,你的名字叫小黑。请以友好、热情的方式回答用户问题。

User: 你好,我是小明
Assisant: 你好小明,我是小黑,很高兴认识你!😊 你是想了解我们的课程信息,还是有其他关于职业培训的问题需要咨询呢?无论什么问题,我都会尽力帮你解答哦!

User: 帮我写一个跟我名字有关的诗
Assisant: 好的,下面是以你的名字写的诗:
小明啊小明,名字真明亮,
如晨曦初现,驱散了黑暗。
心中有火焰,智慧放光芒,
在求知路上,你是那最亮的星。

像清澈溪流,绕过知识山岗,
带着勇气和希望,不断向前方。
你的每一步,都闪耀着坚强,
未来的大门,正为你而敞开。

无论走到哪,世界因你更晴朗,
小明啊小明,愿你永远这样,
保持那份纯真,还有对梦想的向往,
人生的旅途上,成为自己的太阳。

调用模型

部分平台提供了图形化的试验台,可以方便测试模型接口。比如阿里云百炼平台:

image-20260307161107296

也可以用普通的http客户端来发起请求大模型,以Ollama为例:

Ollama在本地部署时,会自动提供模型对应的Http接口,访问地址是:http://localhost:11434/api/chat

img

大模型应用

大模型应用是基于大模型的推理、分析、生成能力,结合传统编程能力,开发出的各种应用。

为什么要把传统应用与大模型结合呢?

传统应用开发和大模型有着各自擅长的领域:

  • 传统编程:确定性、规则化、高性能,适合数学计算、流程控制等场景。
  • AI大模型:概率性、非结构化、泛化性,适合语言、图像、创造性任务。

两者之间恰好是互补的关系,两者结合则能解决以前难以实现的一些问题:

  • 混合系统(Hybrid AI)
    • 用传统程序处理结构化逻辑(如支付校验),AI处理非结构化任务(如用户意图识别)。
    • 示例:智能客服中,AI理解用户问题,传统代码调用数据库返回结果。
  • 增强可解释性
    • 结合规则引擎约束AI输出(如法律文档生成时强制符合条款格式)。
  • 低代码/无代码平台
    • 通过AI自动生成部分代码(如GitHub Copilot),降低传统开发门槛。

在传统应用开发中介入AI大模型,充分利用两者的优势,既能利用AI实现更加便捷的人机交互,更好的理解用户意图,又能利用传统编程保证安全性和准确性,强强联合,这就是大模型应用开发的真谛!

综上所述,大模型应用就是整合传统程序和大模型的能力和优势来开发的一种应用。

大模型与大模型应用

我们熟知的大模型比如GPT、DeepSeek都是生成式模型,顾名思义,根据前文不断生成后文。

不过,模型本身只具备生成后文的能力、基本推理能力。我们平常使用的AI对话产品除了生成和推理,还有会话记忆功能、联网功能等等。这些都是大模型不具备的。

要想让大模型产生记忆,联网等功能,是需要通过额外的程序来实现的,也就是基于大模型开发应用

所以,我们现在接触的AI对话产品其实都是基于大模型开发的应用,并不是大模型本身,这一点要区分清楚。

下面是一些大模型对话产品及其模型的关系:

大模型 对话产品 公司 地址
GPT-3.5、GPT-4o ChatGPT OpenAI https://chatgpt.com/
Claude 3.5 Claude AI Anthropic https://claude.ai/chats
DeepSeek-R1 DeepSeek 深度求索 https://www.deepseek.com/
文心大模型3.5 文心一言 百度 https://yiyan.baidu.com/
星火3.5 讯飞星火 科大讯飞 https://xinghuo.xfyun.cn/desk
Qwen-Max 通义千问 阿里巴巴 https://tongyi.aliyun.com/qianwen/
Moonshoot Kimi 月之暗面 https://kimi.moonshot.cn/
Yi-Large 零一万物 零一万物 https://platform.lingyiwanwu.com/

当然,除了AI对话应用之外,大模型还可以开发很多其它的AI应用,常见的领域包括:

img

那么问题来了,如何进行大模型应用开发呢?

大模型应用开发技术架构

技术架构

目前,大模型应用开发的技术架构主要有四种:

img

1)纯Prompt模式

不同的提示词能够让大模型给出差异巨大的答案。

不断雕琢提示词,使大模型能给出最理想的答案,这个过程就叫做提示词工程Prompt Engineering)。

很多简单的AI应用,仅仅靠一段足够好的提示词就能实现了,这就是纯Prompt模式

其流程如图:

image-20260307163211958

2)Function Calling

大模型虽然可以理解自然语言,更清晰弄懂用户意图,但是确无法直接操作数据库、执行严格的业务规则。这个时候我们就可以整合传统应用于大模型的能力了。

简单来说,可以分为以下步骤:

  1. 我们可以把传统应用中的部分功能封装成一个个函数(Function)。
  2. 然后在提示词中描述用户的需求,并且描述清楚每个函数的作用,要求AI理解用户意图,判断什么时候需要调用哪个函数,并且将任务拆解为多个步骤(Agent)。
  3. 当AI执行到某一步,需要调用某个函数时,会返回要调用的函数名称、函数需要的参数信息。
  4. 传统应用接收到这些数据以后,就可以调用本地函数。再把函数执行结果封装为提示词,再次发送给AI。
  5. 以此类推,逐步执行,直到达成最终结果。

流程如图:

image-20260307163221172

注意:并不是所有大模型都支持Function Calling,比如DeepSeek-R1模型就不支持。

3)RAG

RAG(Retrieval**-Augmented Generation)叫做检索增强生成。简单来说就是把信息检索技术大模型**结合的方案。

大模型从知识角度存在很多限制:

  • 时效性差:大模型训练比较耗时,其训练数据都是旧数据,无法实时更新
  • 缺少专业领域知识:大模型训练数据都是采集的通用数据,缺少专业数据

可能有人会说, 我把最新的数据或者专业文档都拼接到提示词,一起发给大模型,不就可以了?

现在的大模型都是基于Transformer神经网络,Transformer的强项就是所谓的注意力机制。它可以根据上下文来分析文本含义,所以理解人类意图更加准确。

但是,这里上下文的大小是有限制的,GPT3刚刚出来的时候,仅支持2000个token的上下文。现在领先一点的模型支持的上下文数量也不超过 200K token,所以海量知识库数据是无法直接写入提示词的。

怎么办呢?

RAG技术正是来解决这一问题的。

RAG就是利用信息检索技术来拓展大模型的知识库,解决大模型的知识限制。整体来说RAG分为两个模块:

  • 检索模块(Retrieval):负责存储和检索拓展的知识库
    • 文本拆分:将文本按照某种规则拆分为很多片段
    • 文本嵌入(Embedding):根据文本片段内容,将文本片段归类存储
    • 文本检索:根据用户提问的问题,找出最相关的文本片段
  • 生成模块(Generation)
    • 组合提示词:将检索到的片段与用户提问组织成提示词,形成更丰富的上下文信息
    • 生成结果:调用生成式模型(例如DeepSeek)根据提示词,生成更准确的回答

由于每次都是从向量库中找出与用户问题相关的数据,而不是整个知识库,所以上下文就不会超过大模型的限制,同时又保证了大模型回答问题是基于知识库中的内容。

流程如图:

image-20260307164023643

4)Fine-tuning

Fine-tuning就是模型微调,就是在预训练大模型(比如DeepSeek、Qwen)的基础上,通过企业自己的数据做进一步的训练,使大模型的回答更符合自己企业的业务需求。这个过程通常需要在模型的参数上进行细微的修改,以达到最佳的性能表现。

在进行微调时,通常会保留模型的大部分结构和参数,只对其中的一小部分进行调整。这样做的好处是可以利用预训练模型已经学习到的知识,同时减少了训练时间和计算资源的消耗。微调的过程包括以下几个关键步骤:

  • 选择合适的预训练模型:根据任务的需求,选择一个已经在大量数据上进行过预训练的模型,如Qwen-2.5。
  • 准备特定领域的数据集:收集和准备与任务相关的数据集,这些数据将用于微调模型。
  • 设置超参数:调整学习率、批次大小、训练轮次等超参数,以确保模型能够有效学习新任务的特征。
  • 训练和优化:使用特定任务的数据对模型进行训练,通过前向传播、损失计算、反向传播和权重更新等步骤,不断优化模型的性能。

模型微调虽然更加灵活、强大,但是也存在一些问题:

  • 需要大量的计算资源
  • 调参复杂性高
  • 过拟合风险

总之,Fine-tuning成本较高,难度较大,并不适合大多数企业。而且前面三种技术方案已经能够解决常见问题了。

那么,问题来了,该如何选择技术架构呢?

技术选型

从开发成本由低到高来看,四种方案排序如下:

Prompt < Function Calling < RAG < Fine-tuning

所以在选择技术时通常也应该遵循"在达成目标效果的前提下,尽量降低开发成本"这一首要原则。然后可以参考以下流程来思考:

image-20260307164618976

本站于2025年3月26日建立
使用 Hugo 构建
主题 StackJimmy 设计