springAI一 大模型基础知识以及Ollama部署本地模型

springAI一 大模型基础知识以及Ollama部署本地模型 一 人工智能发展AI人工智能Artificial Intelligence使机器能够像人类一样思考、学习和解决问题的技术。AI发展至今大概可以分为三个阶段其中深度学习领域的自然语言处理(Natural Language Processing, NLP)有一个关键技术叫做Transformer这是一种由多层感知机组成的神经网络模型是现如今AI高速发展的最主要原因。我们所熟知的大模型Large Language Models, LLM例如GPT、DeepSeek底层都是采用Transformer神经网络模型。以GPT模型为例其三个字母的缩写分别是Generative、Pre-trained、Transformer那么问题来 Transformer神经网络有什么神奇的地方可以实现如此强大的能力呢二 大模型原理其实最早Transformer是由Google在2017年提出的一种神经网络模型一开始的作用是把它作为机器翻译的核心Transformer中提出的注意力机制使得神经网络在处理信息时可以根据上下内容调整对数据的理解变得更加智能化。这不仅仅是说人类的文字包括图片、音频数据都可以交给Transformer来处理。于是越来越多的模型开始基于Transformer实现了各种神奇的功能。例如有的模型可以根据音频生成文本或者根据文本生成音频还有的模型则可以根据文字生成图片。不过我们今天要聊的大语言模型Large Language Models, 以下简称LLM是对Transformer的另一种用法推理预测。LLM在训练Transformer时会尝试输入一些文本、音频、图片等信息然后让Transformer推理接下来跟着的应该是什么内容。推理的结果会以概率分布的形式出现。可能大家会有疑问仅仅是推测接下来的内容怎么能让ChatGPT在对话中生成大段的有关联的文字内容呢其实LLM采用的就是笨办法答案就是持续生成根据前文推测出接下来的一个词语后把这个词语加入前文再次交给大模型处理推测下一个字然后不断重复前面的过程就可以生成大段的内容了这就是为什么我们跟AI聊天的时候它生成的内容总是一个字一个字的输出的原因了。以上就是LLM的核心技术Transformer的原理了~三 大模型应用开发相信大家肯定会有疑问什么是大模型应用开发呢跟传统的Java应用开发又有什么区别呢我们该如何去开发大模型应用呢别着急本章我们就一起来分析一下。3.1 模型部署首先要明确一点大模型应用开发并不是在浏览器中跟AI聊天。而是通过访问模型对外暴露的API接口实现与大模型的交互。因此企业首先需要有一个可访问的大模型通常有三种选择使用开放的大模型API在云平台部署私有大模型在本地服务器部署私有大模型使用开放大模型API的优缺点如下优点没有部署和维护成本按调用收费缺点依赖平台方稳定性差长期使用成本较高数据存储在第三方有隐私和安全问题云平台部署私有模型优点前期投入成本低部署和维护方便网络延迟较低缺点数据存储在第三方有隐私和安全问题长期使用成本高本地部署私有模型优点数据完全自主掌控安全性高不依赖外部环境虽然短期投入大但长期来看成本会更低缺点初期部署成本高维护困难注意 这里说的本地部署并不是说在你自己电脑上部署而是公司自己的服务器部署。由于大模型所需要的算力非常多自己电脑部署的模型往往都是阉割蒸馏版本性能和推理能力都比较差。再加上现在各种模型都有很多免费的服务可以访问性能还是满血版本推理能力拉满。所以完全不建议大家在自己电脑上部署除非你想自己做模型微调或测试。接下来我们给大家演示下两种部署方式开放大模型服务本地部署在本机演示将来在服务器也是类似的3.1.1 开放大模型服务通常发布大模型的官方、大多数的云平台都会提供开放的、公共的大模型服务。大模型官方前面讲过我们不再赘述这里我们看一些国内提供大模型服务的云平台云平台公司地址阿里百炼阿里巴巴https://bailian.console.aliyun.com腾讯TI平台腾讯https://cloud.tencent.com/product/ti千帆平台百度https://console.bce.baidu.com/qianfan/overviewSiliconCloud硅基流动https://siliconflow.cn/zh-cn/siliconcloud火山方舟-火山引擎字节跳动https://www.volcengine.com/product/ark这些开放平台并不是免费而是按照调用时消耗的token来付费每百万token通常在几毛~几元钱而且平台通常都会赠送新用户百万token的免费使用权。token可以简单理解成你与大模型交互时发送和响应的文字通常一个汉字2个token左右我们以阿里云百炼平台为例。注册账号 https://account.aliyun.com/访问百炼平台开通服务https://www.aliyun.com/product/bailian?spm5176.29677750.nav-v2-dropdown-menu-1.d_main_0_6.6b44154amuN66ascm20140722.M_sfm.P_197.ID_sfm-OR_rec-V_1-MO_3480-ST_12892首次开通应该会赠送百万token的使用权包括DeepSeek-R1模型、qwen模型。申请API_KEY选择API-KEY进入API-KEY管理页面选择创建我的API-KEY会弹出表单填写完毕点击确定即可生成一个新的API-KEY后续开发中就需要用到这个API-KEY了一定要记牢。而且要保密不能告诉别人。体验模型访问百炼平台可以看到如下内容点击模型调用 -立即调用 就能进入模型广场选择一个自己喜欢的模型然后点击API调用示例即可进入API文档页点击立即体验就可以进入API调用大模型的试验台在这里就可以模拟调用大模型接口了。3.1.2 本地部署Ollama很多云平台都提供了一键部署大模型的功能这里不再赘述。我们重点讲讲如何手动部署大模型。手动部署最简单的方式就是使用Ollama这是一个帮助你部署和运行大模型的工具。官网如下https://ollama.com/下载安装ollama首先我们需要下载一个Ollama的客户端在官网提供了各种不同版本的Ollama大家可以根据自己的需要下载(这里以window为例)。下载后双击即可安装这里不再赘述。默认安装的位置C:\Users\用户名\AppData\Local\Programs\Ollama注意Ollama默认安装目录是C盘的用户目录如果不希望安装在C盘的话其实C盘如果足够大放C盘也没事就不能直接双击安装了。需要通过命令行安装。命令行安装方式如下在OllamaSetup.exe所在目录打开cmd命令行然后命令如下OllamaSetup.exe /DIR你要安装的目录位置# 如下OllamaSetup.exe /DIRD:\program\ollamaOK安装完成后还需要配置一个环境变量更改Ollama下载和部署模型的位置。环境变量如下OLLAMA_MODELS你想要保存模型的目录模型默认下载的目录C:\Users你的用户名.ollama\models环境变量配置方式相信学过Java的都知道这里不再赘述配置完成如图安装好后自动打开客户端界面注意需要在客户端设置一下模型目录否则模型所在目录不生效打开“设置”下边这里把目录设置为和环境变量里的模型所在目录一样即可如果关闭了这个界面在安装目录里找快捷方式即可关闭ollma启动Ollama服务端ollama serve搜索模型ollama是一个模型管理工具和平台它提供了很多国内外常见的模型我们可以在其官网上搜索自己需要的模型https://ollama.com/search如图目前热度排第一的就是deepseek-r1点击进入deepseek-r1页面会发现deepseek-r1也有很多版本这些就是模型的参数大小越大推理能力就越强需要的算力也越高。671b版本就是最强的满血版deepseek-r1了。需要注意的是Ollama提供的DeepSeek是量化压缩版本对比官网的蒸馏版会更小对显卡要求更低。对比如下比如我的电脑内存32G显存是6G我选择部署的是7b的模型当然8b也是可以的差别不大都是可以流畅运行的。运行模型选择自己合适的模型后ollama会给出运行模型的命令复制这个命令然后打开一个cmd命令行运行命令即可然后你就可以跟本地模型聊天了再客户端窗口选择已下载的大模型后也能开始与大模型聊天交互注意首次运行命令需要下载模型根据模型大小不同下载时长在5分钟~1小时不等请耐心等待下载完成。ollama控制台是一个封装好的AI对话产品与ChatGPT类似具备会话记忆功能。Ollama是一个模型管理工具有点像Docker而且命令也很像比如ollama serve# Start ollamaollama create# Create a model from a Modelfileollama show# Show information for a modelollama run# Run a modelollama stop# Stop a running modelollama pull# Pull a model from a registryollama push# Push a model to a registryollama list# List modelsollamaps# List running modelsollamacp# Copy a modelollamarm# Remove a modelollamahelp# Help about any command查看已下载的模型ollama list3.2 调用大模型前面说过大模型开发并不是在浏览器中跟AI聊天。而是通过访问模型对外暴露的API接口实现与大模型的交互。所以要学习大模型应用开发就必须掌握模型的API接口规范。目前大多数大模型都遵循OpenAI的接口规范是基于Http协议的接口。因此请求路径、参数、返回值信息都是类似的可能会有一些小的差别。具体需要查看大模型的官方API文档。3.2.1 大模型接口规范我们以DeepSeek官方给出的文档为例# Please install OpenAI SDK first: pip3 install openaifromopenaiimportOpenAI# 1.初始化OpenAI客户端要指定两个参数api_key、base_urlclientOpenAI(api_keyDeepSeek API Key,base_urlhttps://api.deepseek.com)# 2.发送http请求到大模型参数比较多responseclient.chat.completions.create(modeldeepseek-chat,# 2.1.选择要访问的模型messages[# 2.2.发送给大模型的消息{role:system,content:You are a helpful assistant},{role:user,content:Hello},],streamFalse# 2.3.是否以流式返回结果)print(response.choices[0].message.content)接口说明请求方式通常是POST因为要传递JSON风格的参数请求路径与平台有关DeepSeek官方平台https://api.deepseek.com阿里云百炼平台https://dashscope.aliyuncs.com/compatible-mode/v1本地ollama部署的模型http://localhost:11434安全校验开放平台都需要提供API_KEY来校验权限本地ollama则不需要请求参数参数很多比较常见的有model要访问的模型名称messages发送给大模型的消息是一个数组streamtrue代表响应结果流式返回一个字一个字返回false代表响应结果一次性返回但需要等待temperature取值范围[0:2)代表大模型生成结果的随机性越小随机性越低。DeepSeek-R1不支持注意这里请求参数中的messages是一个消息数组而且其中的消息要包含两个属性role消息对应的角色content消息内容消息的内容也被称为提示词Prompt也就是发送给大模型的指令提示词角色通常消息的角色有三种角色描述示例system优先于user指令之前的指令也就是给大模型设定角色和任务背景的系统指令你是一个乐于助人的编程助手你以小团团的风格来回答用户的问题。user终端用户输入的指令类似于你在ChatGPT聊天框输入的内容写一首关于Java编程的诗assistant由大模型生成的消息可能是上一轮对话生成的结果注意用户可能与模型产生多轮对话每轮对话模型都会生成不同结果。其中System类型的消息非常重要影响了后续AI会话的行为模式。比如我们会发现当我们询问这些AI对话产品“你是谁”这个问题的时候每一个AI的回答都不一样这是怎么回事呢这其实是因为AI对话产品并不是直接把用户的提问发送给LLM通常都会在user提问的前面通过System消息给模型设定好背景所以当你问问题时AI就会遵循System的设定来回答了。因此不同的大模型由于System设定不同回答的答案也不一样。示例## RoleSystem: 你是一家名为《麦芽糖程序员》的职业教育培训公司的智能客服你的名字叫小黑。请以友好、热情的方式回答用户问题。## ExampleUser: 你好 Assisant: 你好我是小黑很高兴认识你 你是想了解我们的课程信息还是有其他关于职业培训的问题需要咨询呢无论什么问题我都会尽力帮你解答哦会话记忆问题这里还有一个问题我们为什么要把历史消息都放入Messages中形成一个数组呢这是因为大模型是没有记忆的因此我们调用API接口与大模型对话时每一次对话信息都不会保留多次对话之间都是独立的没有关联的。但是大家可能发现了我们使用的AI对话产品却能够记住每一轮对话信息根据这些信息进一步回答这是怎么回事呢答案就是Messages数组。我们只需要每一次发送请求时都把历史对话中每一轮的User消息、Assistant消息都封装到Messages数组中一起发送给大模型这样大模型就会根据这些历史对话信息进一步回答就像是拥有了记忆一样。示例System: 你是一家名为《麦芽糖程序员》的职业教育培训公司的智能客服你的名字叫小黑。请以友好、热情的方式回答用户问题。 User: 你好我是小明 Assisant: 你好小明我是小黑很高兴认识你 你是想了解我们的课程信息还是有其他关于职业培训的问题需要咨询呢无论什么问题我都会尽力帮你解答哦 User: 帮我写一个跟我名字有关的诗 Assisant: 好的下面是以你的名字写的诗 小明啊小明名字真明亮 如晨曦初现驱散了黑暗。 心中有火焰智慧放光芒 在求知路上你是那最亮的星。 像清澈溪流绕过知识山岗 带着勇气和希望不断向前方。 你的每一步都闪耀着坚强 未来的大门正为你而敞开。 无论走到哪世界因你更晴朗 小明啊小明愿你永远这样 保持那份纯真还有对梦想的向往 人生的旅途上成为自己的太阳。3.2.2 调用大模型部分平台提供了图形化的试验台可以方便测试模型接口。比如阿里云百炼平台当然我们也可以用普通的http客户端来发起请求大模型我们以Ollama为例Ollama在本地部署时会自动提供模型对应的Http接口访问地址是http://localhost:11434/api/chat3.3 大模型应用大模型应用是基于大模型的推理、分析、生成能力结合传统编程能力开发出的各种应用。为什么要把传统应用与大模型结合呢别着急我们先来看看传统应用、大模型各自擅长什么不擅长什么3.3.1 传统应用作为Java程序员大家应该对传统Java程序的能力边界很清楚。核心特点基于明确规则的逻辑设计确定性执行可预测结果。擅长领域结构化计算例银行转账系统精确的数值计算、账户余额增减。例Excel公式按固定规则处理表格数据。确定性任务例排序算法快速排序、冒泡排序输入与输出关系完全可预测。高性能低延迟场景例操作系统内核调度、数据库索引查询需要毫秒级响应。规则明确的流程控制例红绿灯信号切换系统基于时间规则和传感器输入。不擅长领域非结构化数据处理例无法直接理解用户自然语言提问如帮我写一首关于秋天的诗。模糊推理与模式识别例判断一张图片是猫还是狗传统代码需手动编写特征提取规则效果差。动态适应性例若用户需求频繁变化如电商促销规则每天调整需不断修改代码。3.3.2 AI大模型传统程序的弱项恰恰就是AI大模型的强项核心特点基于数据驱动的概率推理擅长处理模糊性和不确定性。擅长领域自然语言处理例ChatGPT生成文章、翻译语言或客服机器人理解用户意图。非结构化数据分析例医学影像识别X光片中的肿瘤检测或语音转文本。创造性内容生成例Stable Diffusion生成符合描述的图像或AI作曲工具创作音乐。复杂模式预测例股票市场趋势预测基于历史数据关联性但需注意可靠性限制。不擅长领域精确计算例AI可能错误计算12345 × 6789的结果需依赖计算器类传统程序。确定性逻辑验证例验证身份证号码是否符合规则AI可能生成看似合理但非法的号码。低资源消耗场景例嵌入式设备如微波炉控制程序无法承受大模型的算力需求。因果推理例AI可能误判公鸡打鸣导致日出的因果关系。3.3.3 强强联合传统应用开发和大模型有着各自擅长的领域传统编程确定性、规则化、高性能适合数学计算、流程控制等场景。AI大模型概率性、非结构化、泛化性适合语言、图像、创造性任务。两者之间恰好是互补的关系两者结合则能解决以前难以实现的一些问题混合系统Hybrid AI用传统程序处理结构化逻辑如支付校验AI处理非结构化任务如用户意图识别。示例智能客服中AI理解用户问题传统代码调用数据库返回结果。增强可解释性结合规则引擎约束AI输出如法律文档生成时强制符合条款格式。低代码/无代码平台通过AI自动生成部分代码如GitHub Copilot降低传统开发门槛。在传统应用开发中介入AI大模型充分利用两者的优势既能利用AI实现更加便捷的人机交互更好的理解用户意图又能利用传统编程保证安全性和准确性强强联合这就是大模型应用开发的真谛综上所述大模型应用就是整合传统程序和大模型的能力和优势来开发的一种应用。3.3.4 大模型与大模型应用我们熟知的大模型比如GPT、DeepSeek都是生成式模型顾名思义根据前文不断生成后文。不过模型本身只具备生成后文的能力、基本推理能力。我们平常使用的AI对话产品除了生成和推理还有会话记忆功能、联网功能等等。这些都是大模型不具备的。要想让大模型产生记忆联网等功能是需要通过额外的程序来实现的也就是基于大模型开发应用。所以我们现在接触的AI对话产品其实都是基于大模型开发的应用并不是大模型本身这一点大家千万要区分清楚。下面我把常见的一些大模型对话产品及其模型的关系给大家罗列一下当然除了AI对话应用之外大模型还可以开发很多其它的AI应用常见的领域包括那么问题来了如何进行大模型应用开发呢3.4 大模型应用开发技术架构基于大模型开发应用有多种方式接下来我们就来了解下常见的大模型开发技术架构。3.4.1 技术架构目前大模型应用开发的技术架构主要有四种纯Prompt模式不同的提示词能够让大模型给出差异巨大的答案。不断雕琢提示词使大模型能给出最理想的答案这个过程就叫做提示词工程Prompt Engineering。很多简单的AI应用仅仅靠一段足够好的提示词就能实现了这就是纯Prompt模式。其流程如图FunctionCalling大模型虽然可以理解自然语言更清晰弄懂用户意图但是确无法直接操作数据库、执行严格的业务规则。这个时候我们就可以整合传统应用于大模型的能力了。简单来说可以分为以下步骤我们可以把传统应用中的部分功能封装成一个个函数Function。然后在提示词中描述用户的需求并且描述清楚每个函数的作用要求AI理解用户意图判断什么时候需要调用哪个函数并且将任务拆解为多个步骤Agent。当AI执行到某一步需要调用某个函数时会返回要调用的函数名称、函数需要的参数信息。传统应用接收到这些数据以后就可以调用本地函数。再把函数执行结果封装为提示词再次发送给AI。以此类推逐步执行直到达成最终结果。流程如图注意并不是所有大模型都支持Function Calling比如DeepSeek-R1模型就不支持。RAGRAGRetrieval-Augmented Generation叫做检索增强生成。简单来说就是把信息检索技术和大模型结合的方案。大模型从知识角度存在很多限制时效性差大模型训练比较耗时其训练数据都是旧数据无法实时更新缺少专业领域知识大模型训练数据都是采集的通用数据缺少专业数据可能有同学会说 简单啊我把最新的数据或者专业文档都拼接到提示词一起发给大模型不就可以了。同学你想的太简单了现在的大模型都是基于Transformer神经网络Transformer的强项就是所谓的注意力机制。它可以根据上下文来分析文本含义所以理解人类意图更加准确。但是这里上下文的大小是有限制的GPT3刚刚出来的时候仅支持2000个token的上下文。现在领先一点的模型支持的上下文数量也不超过 200K token所以海量知识库数据是无法直接写入提示词的。怎么办呢RAG技术正是来解决这一问题的。RAG就是利用信息检索技术来拓展大模型的知识库解决大模型的知识限制。整体来说RAG分为两个模块检索模块Retrieval负责存储和检索拓展的知识库文本拆分将文本按照某种规则拆分为很多片段文本嵌入Embedding)根据文本片段内容将文本片段归类存储文本检索根据用户提问的问题找出最相关的文本片段生成模块Generation组合提示词将检索到的片段与用户提问组织成提示词形成更丰富的上下文信息生成结果调用生成式模型例如DeepSeek根据提示词生成更准确的回答由于每次都是从向量库中找出与用户问题相关的数据而不是整个知识库所以上下文就不会超过大模型的限制同时又保证了大模型回答问题是基于知识库中的内容完美流程如图Fine-tuningFine-tuning就是模型微调就是在预训练大模型比如DeepSeek、Qwen的基础上通过企业自己的数据做进一步的训练使大模型的回答更符合自己企业的业务需求。这个过程通常需要在模型的参数上进行细微的修改以达到最佳的性能表现。在进行微调时通常会保留模型的大部分结构和参数只对其中的一小部分进行调整。这样做的好处是可以利用预训练模型已经学习到的知识同时减少了训练时间和计算资源的消耗。微调的过程包括以下几个关键步骤选择合适的预训练模型根据任务的需求选择一个已经在大量数据上进行过预训练的模型如Qwen-2.5。准备特定领域的数据集收集和准备与任务相关的数据集这些数据将用于微调模型。设置超参数调整学习率、批次大小、训练轮次等超参数以确保模型能够有效学习新任务的特征。训练和优化使用特定任务的数据对模型进行训练通过前向传播、损失计算、反向传播和权重更新等步骤不断优化模型的性能。模型微调虽然更加灵活、强大但是也存在一些问题需要大量的计算资源调参复杂性高过拟合风险总之Fine-tuning成本较高难度较大并不适合大多数企业。而且前面三种技术方案已经能够解决常见问题了。那么问题来了我们该如何选择技术架构呢3.4.2 技术选型从开发成本由低到高来看四种方案排序如下 Prompt Function Calling RAG Fine-tuning所以我们在选择技术时通常也应该遵循在达成目标效果的前提下尽量降低开发成本这一首要原则。然后可以参考以下流程来思考