第 06 次课:本地模型部署与调用验证
一、上节课回顾
上节知识要点:
- Stable Diffusion 用逐步加噪和去噪生成图像,噪声图是起点,逐步去噪是核心过程。
- 潜在扩散先在 latent 空间压缩和去噪,再由 VAE 解码为像素图,用部分细节损失换算力效率。
- CFG、负面提示词、采样步数等条件机制,会改变生成方向、结构和可控性。
前几课你已经在 LiblibAI 上做过生图参数对照实验,能区分模型本体、条件输入和界面操作。要接上的问题是:那些生成服务都在云端。如果数据不能出教室、机房网络不稳定,模型怎么放到自己电脑上跑起来,并被命令行和程序稳定调用?
二、本节课任务与安排
本课交付
把课前下载的 Qwen3-8B 权重装成 Ollama 本地模型,用命令行和 OpenAI 兼容接口两条通道验收它真的能用,再按三张故障工单把典型故障亲手修一遍。
下课时你会拿到四样当场可验收的成果:注册成功的 qwen3:8b、两轮对话验收记录、一份接口 JSON 回复,和一份自己写的 排错记录.txt。
| 顺序 | 环节 | 学生产出 | 时间 |
|---|---|---|---|
| 回顾 | 回顾上节课 | 想起云端生成服务的边界 | 5分钟 |
| 交付 | 看老师完整演示一遍 | 知道本课交四样成果 | 3分钟 |
| 理论 | 理论基础:本地部署的三个关键词 | 说清服务、说明书、通用插座 | 8分钟 |
| 案例1 | 🔧 案例1:把 GGUF 装成本地模型 | 注册成功的 qwen3:8b | 13分钟 |
| 案例2 | 🔧 案例2:命令行对话验收 | 两轮对话验收记录 | 13分钟 |
| 案例3 | 🔧 案例3:OpenAI 接口调用验收 | 一份接口 JSON 回复 | 13分钟 |
| 案例4 | 🔧 案例4:三类故障排查演练 | 排错记录.txt | 13分钟 |
| 收尾 | 回扣流程与成果 | 能复述四步流程 | 5分钟 |
| 机动 | 等待与排错 | 补齐必做成果 | 7分钟 |
| 扩展 | 扩展任务:用自己的问题清单考本地模型(选做) | 个人问答记录.txt | 10分钟 |
上课前完成课前准备:Ollama 已安装、模型权重已放进 D:\AIGC\lesson-6\models。
环境与准备:能用鼠标点的操作全部在资源管理器里完成,只有 ollama、curl 这类命令行工具才打开 Windows 命令提示符(cmd);本机课程目录固定为
D:\AIGC\lesson-6(课次号不补零)。[课前演练补充]
三、理论基础:本地部署的三个关键词
今天四个案例里最容易翻车的时刻,不是你敲错命令,而是命令敲对了、屏幕上一行结果都没有。九成的故障不在命令本身,在三样东西对不对——先把这三样认清楚,再动手。
概念一:Ollama 服务与 11434 端口。 Ollama 是「后台服务 + 命令行客户端」的结构:服务常驻后台监听 11434 端口,客户端命令都发给它。像奶茶店——模型是后厨,11434 是取餐窗口;窗口没人值班(服务没起),后面所有命令都白敲。
概念二:Modelfile 装配说明书。 下载到的 .gguf 文件只是「零件」,Ollama 靠一份 Modelfile 把零件装成可调用的模型:FROM 指向权重文件,PARAMETER 定运行参数,SYSTEM 定人设。像组装家具:纸箱里的板材加上说明书,才变成能用的柜子。
概念三:OpenAI 兼容接口是通用插座。 OpenAI 的接口格式是行业事实标准——Ollama 兼容它,意味着所有按 OpenAI 协议写的应用都能把「云端模型」换成「本机模型」,只需改地址和模型名。像国标插座:不管家电什么牌子,插头合标就能用。
代价也说清楚:本机一般只跑得动小模型(本课用 8B),能力上限低于云端大模型;换来的两样东西是数据不出本机和断网也能跑——这正是企业处理敏感数据、机房弱网环境选择本地部署的原因。
图:三件东西任一件对不上都会调用失败,但报错长得不一样——所以本课排错固定按「服务 → 文件 → 模型名」的顺序查,案例4 会专门练。
四、实操环节
案例1:把 GGUF 装成本地模型
任务目标:
老师带练把课前放进 D:\AIGC\lesson-6\models 的 Qwen3-8B 权重,经 Modelfile 导入为名为 qwen3:8b 的本地模型,并在模型列表里核验注册成功。本案例只做「装配」:对话验收在案例2,接口验收在案例3。
实操步骤
从课程资料下载 Modelfile 模板(
Modelfile.lesson06),把它放进D:\AIGC\lesson-6;按F2把文件名改成Modelfile(去掉.lesson06后缀)。执行后你会看到:目录里有一个无扩展名的Modelfile文件。注意:资源管理器先在「查看 → 显示」里勾选文件扩展名,确认改完的名字不带任何后缀。带
.txt后缀是本课第一大故障源,案例4 会专门演练。用记事本打开
Modelfile(右键它 → 打开方式 → 记事本),核对FROM行与目录里的权重文件名一致,确认无误后关闭。执行后你会看到:FROM写的是./models/Qwen3-8B-Q4_K_M.gguf,与课前准备放置的文件对应。textFROM ./models/Qwen3-8B-Q4_K_M.gguf PARAMETER temperature 0.7 PARAMETER num_ctx 4096 SYSTEM """你是一个简洁、准确、安全的中文教学助手。"""为什么这么做:
FROM是装配说明书的第一个词条——Ollama 按它去找权重。名字差一个字母,导入就报「找不到文件」。SYSTEM定义的「教学助手」人设,案例2 会专门验证它生效。就绪检查:打开命令提示符(
Win + R→ 输入cmd→ 回车),确认 Ollama 命令可用、服务在运行。执行后你会看到:第一条命令输出版本号,第二条返回Ollama is running。batollama -v curl.exe http://localhost:11434
图注:看最后一行是不是
Ollama is running——是,说明 11434 窗口有人值班,可以往下走;不是,先打开 Ollama 桌面应用,等托盘出现羊驼图标再试。让命令提示符直接落在课程目录里:在资源管理器打开
D:\AIGC\lesson-6,点一下窗口顶部的地址栏,把路径删掉、输入cmd回车。执行导入命令(ollama create没有图形界面,这一步必须用命令行)。执行后你会看到:导入进度提示,最终回到命令提示符。batollama create qwen3:8b -f .\Modelfile核验注册结果。执行后你会看到:列表里出现
qwen3:8b和它的大小。batollama list对着验收表核一遍,四行都过关再进案例2:
查什么 合格的样子 服务在监听 curl.exe http://localhost:11434返回Ollama is running说明就位 目录里是 Modelfile,没有多余后缀,FROM与权重文件名一致导入成功 ollama create结束后没有报错,回到提示符注册在列 ollama list里出现qwen3:8b及大小
问题与注意事项
ollama -v提示「不是内部或外部命令」:关闭并重新打开命令提示符刷新 PATH,仍失败按课前准备重装 Ollama。ollama create报找不到文件:核对三点——命令是否在D:\AIGC\lesson-6里执行、Modelfile是否带多余后缀、FROM与models里的权重文件名是否一字不差。ollama list里没有qwen3:8b:说明第 4 步导入没有成功,回到上一步看报错,不要带着空列表进案例2。
扩展练习(选做)
做一个「低温版」模型,感受 temperature 参数的用途(对比实验放到案例2 里做):
在
D:\AIGC\lesson-6里右键 → 新建 → 文本文档,按F2改名为Modelfile-low(不带.txt),用记事本写入下面内容并以 UTF-8 保存:textFROM ./models/Qwen3-8B-Q4_K_M.gguf PARAMETER temperature 0.2 PARAMETER num_ctx 4096 SYSTEM """你是一个简洁、准确、安全的中文教学助手。"""在课程目录的命令提示符里导入:
batollama create qwen3:8b-low -f .\Modelfile-low ollama list执行后你会得到:列表里多出一个
qwen3:8b-low。它和qwen3:8b用的是同一份权重,只是运行参数不同——这正是 Modelfile「装配说明书」的意义。
案例2:命令行对话验收
任务目标:
老师带练用命令行对话窗口,按一份验收问题清单考核 qwen3:8b:第一轮验证它听得懂指令,第二轮验证 Modelfile 里的「教学助手」人设真的生效。两条都过,才算一个能用的本地模型。
图:问题 1 是功能探针——模型能不能干活;问题 2 是人设探针——SYSTEM 提示词有没有被装上。
实操步骤
就绪检查:命令提示符里执行
ollama list,确认qwen3:8b在列。执行后你会看到:列表里有qwen3:8b。如果列表是空的,先回案例1 完成导入。从课程资料下载 教学助手验收问题清单(
教学助手验收问题清单.txt)到D:\AIGC\lesson-6,用记事本打开通读一遍。执行后你会看到:清单里有 2 道必答问题和 2 道选答问题。启动对话窗口。执行后你会看到:出现
>>>提示符。batollama run qwen3:8b发送问题 1(功能探针):在记事本里选中「用一句话说明 Ollama 的作用。」复制,回到命令提示符窗口右键即粘贴,回车发送。执行后你会看到:一句简洁的中文回答,说明 Ollama 是本地模型服务。
text用一句话说明 Ollama 的作用。发送问题 2(人设探针)。执行后你会看到:它自称「教学助手」,而不是「通用大模型」。
text你的名字是什么?你的角色是什么?为什么这么做:问题 2 专门验证
SYSTEM提示词有没有生效。如果它自称通用模型,说明 Modelfile 没有被正确应用——回到案例1 第 2 步核对内容后重新ollama create。测完输入
/bye退出对话,回到命令提示符。执行后你会看到:>>>消失,回到普通提示符。对着验收表核一遍,三行都过关再进案例3:
查什么 合格的样子 模型在列 ollama list里有qwen3:8b听得懂指令 问题 1 得到一句简洁、切题的中文回答 人设生效 问题 2 里它自称「教学助手」
问题与注意事项
- 回答明显答非所问、或自称 base 模型:课前下载的可能不是 instruct/chat 版权重,找老师核对文件。
- 粘贴进命令行出现乱码或换行错乱:先执行
chcp 65001切到 UTF-8 代码页,再重新粘贴发送。 - 加载模型明显卡顿:关闭浏览器等大型应用再试;仍卡顿按课前准备的「低配补救」换小模型,模型名跟着改即可。
扩展练习(选做)
完成清单里的选答题 3 和 4,观察小模型的表达边界:
重新执行
ollama run qwen3:8b,把两道选答题逐条粘贴发送。执行后你会看到:解释题答案尚可,翻译题偶有生硬——这就是 8B 小模型的真实水平。text用两句以内的话,向完全没接触过大模型的同学解释什么是本地部署。 把下面这句话翻译成中文:Local models keep data on your machine.把四道题的回答抄进实验记录;如果案例1 做了
qwen3:8b-low,换模型名再问一遍问题 1,对比两次回答的措辞差异——temperature 越低,回答越保守稳定。
案例3:OpenAI 接口调用验收
任务目标:
老师带练用 curl.exe 调用 Ollama 的 OpenAI 兼容接口,拿到 JSON 格式的回复;再故意把模型名写错一次,记住报错的样子。这条通道是所有上层应用接入本地模型的方式,也是企业系统集成的标准做法。
图:请求体先存成文件,再由 curl.exe 读文件发送;返回 JSON 里的 content 就是模型回答。
实操步骤
就绪检查:再开一个命令提示符窗口(地址栏进
D:\AIGC\lesson-6的办法同案例1),确认服务和模型都在。执行后你会看到:第一条返回Ollama is running,第二条列表里有qwen3:8b。batcurl.exe http://localhost:11434 ollama list从课程资料下载 接口请求体(
request.json)到D:\AIGC\lesson-6,用记事本打开核对model字段。执行后你会看到:model的值与ollama list里显示的名称一字不差。json{ "model": "qwen3:8b", "messages": [ { "role": "user", "content": "用一句话说明Ollama的作用" } ] }为什么这么做:接口调用最常见的故障就是模型名对不上。
model必须复制ollama list里的原名,不要手写近似名——案例4 的工单 03 练的就是这个。发送请求(
^是 cmd 的换行符,它后面不能再跟任何字符)。执行后你会看到:一段 JSON,content字段是模型的中文回答。batcurl.exe http://localhost:11434/v1/chat/completions ^ -H "Content-Type: application/json" ^ -d "@request.json"为什么这么做:不在命令行里手写整段 JSON——先把请求体存成文件、再让 curl 读文件发送,避免引号写错把请求毁掉。这是 Windows 课堂的固定做法。
主动制造一次「模型名不匹配」:选中
request.json按Ctrl+C复制、Ctrl+V粘贴出副本,按F2把副本改名为request-bad.json,用记事本打开它,把"model"的值从qwen3:8b改成qwen3:8(少写一个字母 b)并保存。执行后你会看到:目录里多出request-bad.json,内容只有一处不同。用坏副本再发一次。执行后你会看到:返回的是一条
model not found报错,而不是回答。执行后把"qwen3:8"改回"qwen3:8b"保存,重发一次确认恢复正常,然后选中request-bad.json按Delete删除副本。batcurl.exe http://localhost:11434/v1/chat/completions ^ -H "Content-Type: application/json" ^ -d "@request-bad.json"对着验收表核一遍,四行都过关再进案例4:
查什么 合格的样子 请求没有报错 正常请求返回 JSON,没有 error字段回复取到了 JSON 里能找到 content字段,内容是中文回答模型名对得上 返回里的 model与ollama list完全一致错名会被拦下 qwen3:8返回model not found,改回后恢复
问题与注意事项
- 返回一堆对象属性而不是 JSON:命令里写成了
curl,一律改用带后缀的curl.exe。 - 中文回答显示成
\uXXXX或问号:先执行chcp 65001,记事本保存请求体时编码选 UTF-8 不选 ANSI。 - 报错说模型不存在:对照
ollama list的输出逐字核对request.json里的model,复制原名粘贴,不要手打。
扩展练习(选做)
把接口通道接到自己的专业问题上:
用记事本打开
request.json,把content的值换成你专业里的一个真实问题(保持引号和逗号不动),以 UTF-8 保存。执行后你会看到:问题变了,其余结构不变。重新执行第 3 步的
curl.exe命令。执行后你会得到:同一个本地模型对你专业问题的回答,把content的内容抄进实验记录。
案例4:三类故障排查演练
任务目标:
老师带练处理三张真实的课堂故障工单:先在本机复现现象,再按「服务 → 文件 → 模型名」的顺序定位原因,修复后把每条工单的现象、原因、修复动作写进一份 排错记录.txt。以后遇到本地部署故障,照这份记录的思路查。
图:三张工单正好对应三个检查位——连接被拒绝查服务、找不到文件查说明、模型不存在查名字。顺序别乱,从左往右查最快。
实操步骤
从课程资料下载 故障工单(
故障工单_3条.txt)到D:\AIGC\lesson-6,用记事本打开通读。执行后你会看到:三张工单分别报「连接被拒绝」「找不到文件」「模型不存在」。在
D:\AIGC\lesson-6空白处右键 → 新建 → 文本文档,按F2改名为排错记录.txt,用记事本打开备用。执行后你会看到:一个空的记录文件,等下每修完一张工单就写一条。工单 01(服务没起)复现与修复:右键任务栏托盘里的羊驼图标选退出(找不到图标说明确实没在运行),执行检查命令,会得到和工单一样的
Connection refused;再从开始菜单打开 Ollama,等托盘图标出现后重新检查。执行后你会看到:报错消失,恢复Ollama is running。batcurl.exe http://localhost:11434把工单 01 的现象、原因(服务没启动)、修复动作写进
排错记录.txt。执行后你会得到:记录里的第一条。工单 02(说明书写错名)复现与修复:把目录里的
Modelfile按F2临时改名为Modelfile.txt,在课程目录的命令提示符里重新执行导入命令,会得到和工单一样的「找不到文件」报错;再把文件按F2改回Modelfile,重新执行导入确认恢复。执行后你会看到:报错随改名出现、随改回消失。batollama create qwen3:8b -f .\Modelfile把工单 02 的现象、原因(文件被保存成了
Modelfile.txt,资源管理器默认不显示扩展名)、修复动作写进记录。诊断技巧:资源管理器「查看 → 显示 → 文件扩展名」勾上,后缀真假一眼便知。执行后你会得到:记录里的第二条。为什么这么做:工单里李思远「核对过文件名一致」却依然报错,因为不显示扩展名时看到的
Modelfile其实是Modelfile.txt。肉眼会被系统设置骗,勾选「文件扩展名」才是可靠核对。工单 03(模型名写错)复现与修复:按案例3 第 4 步的方法复制出
request-bad.json,把model的值改成工单里的qwen3:8,发送请求,会得到和工单一样的model not found报错;把字母b补回去保存,重发确认恢复,之后删除副本。执行后你会看到:报错信息里的模型名与ollama list对不上——这就是定位依据。batcurl.exe http://localhost:11434/v1/chat/completions ^ -H "Content-Type: application/json" ^ -d "@request-bad.json"把工单 03 的现象、原因(请求里的模型名少写一个字母)、修复动作写进记录。执行后你会得到:记录里的第三条。
收尾自查:双击打开
排错记录.txt,对照验收表。执行后你会看到:三条记录格式统一——每条都有现象、原因、修复动作三段。查什么 合格的样子 三张工单都复现过 每条记录的「现象」都写了自己屏幕上看到的报错原文 原因落在检查位上 三条原因分别对应服务、文件、模型名,与排错顺序一致 修复后恢复正常 服务在运行、 ollama create能成功、接口返回content记录可复用 同学拿你的 排错记录.txt能看懂每一步为什么这么做
问题与注意事项
- 退出 Ollama 后托盘图标找不到了:从开始菜单重新打开 Ollama 应用即可,模型注册不会因为服务重启而丢失。
- 改名
Modelfile.txt后忘记改回:案例2、案例3 还要用它,做完工单 02 立即改回并核对ollama list。 排错记录.txt写成了乱码:记事本保存时「编码」选 UTF-8,不要选 ANSI。
扩展练习(选做)
和同桌互换故障题,练「出题」和「排错」两个视角:
自己制造一个新故障:把
request.json复制一份,用记事本把model改成QWEN3:8B(全大写)保存,不告诉同桌改了什么,只把文件给他。执行后你会看到:同桌需要靠报错信息和ollama list自己定位。互换:排查同桌给你的故障文件,修好后双方互相在对方的
排错记录.txt里补一条「第 4 号工单」。执行后你会得到:一份四人互相验证过的排错手册。
扩展任务:用自己的问题清单考本地模型(选做)
任务目标:
把本课装好的本地模型变成自己的「断网答疑机」:准备三个自己专业或生活里的真实问题,逐条通过接口问它,把回答汇总成一份问答记录。扩展不计入必做时间,时间不够直接跳过。
实操步骤
按下面的完整流程做一遍;第三段提示词里的「输入素材」已经是写好的三个问题,直接可用,想换成自己的问题,只替换「输入素材」到「输入素材结束」之间的三行即可。
先在
D:\AIGC\lesson-6里右键 → 新建 → 文本文档,按F2改名为my-questions.txt,用记事本写入下面内容并以 UTF-8 保存:text输入素材: 1. 电子商务专业网上开店,前期最该控制好的三个成本是什么? 2. 每天用手机超过 6 小时,如何安排休息才能不伤眼睛? 3. 帮我把「本周五下午 3 点班级 meeting 改到线上」改写成正式通知。 输入素材结束。再把
my-questions.txt里的问题逐条替换进request.json的content字段(每次一条,保存后重新发送),发送命令不变:batcurl.exe http://localhost:11434/v1/chat/completions ^ -H "Content-Type: application/json" ^ -d "@request.json"最后在
D:\AIGC\lesson-6新建我的本地模型问答.txt,把三个问题和你从返回 JSON 的content里抄出的回答按顺序记进去,每条回答后面用一句话标注「靠谱 / 部分靠谱 / 不靠谱」。text请对照 my-questions.txt 里的三个问题和回答,检查我的问答记录: 一、每个问题都有对应的回答,没有遗漏。 二、每条回答后面有靠谱程度的标注和一句理由。 三、发现回答与问题对不上的,指出是第几条。执行后你会得到:一份
我的本地模型问答.txt,三个问题、三段回答、三条靠谱度标注。它会告诉你:本机这个 8B 小模型,哪些问题能放心交给它,哪些还得靠云端。
五、总结与巩固
本节小结:
- 可复用流程:起服务 → 写 Modelfile →
ollama create导入 → 命令行与接口两条通道验收。以后本地部署任何开源模型,都套这四步。 - 排错口诀:连接被拒绝查服务,找不到文件查说明,模型不存在查名字——按「服务 → 文件 → 模型名」从左往右查。
- 核心一句话:本地部署不是让模型更聪明,是让你的数据不出本机、断网也能跑。
- 下节预告:第 7 课第一次正式用 WorkBuddy 干活——写一份实习周报。
课后巩固:
- 完成学习通课后巩固题【M1-01】~【M1-05】、【M2-01】~【M2-05】,题目考查本地部署链路(服务、GGUF、Modelfile、兼容接口)背后的原理与排错判断。
六、资料与下载
- 课前准备:Ollama 安装与模型权重放置:含机型方案、下载入口和课前自查表。
- 课程素材清单:本课四个案例的输入素材逐个下载,模型权重走学习通或镜像直链。
- Ollama 官方文档:下载页、Quickstart、Modelfile 说明、OpenAI 兼容接口。
- 课堂与课后习题:请在学习通对应单元完成,入口待老师课前发布。
延伸视频
推荐观看:显存、量化与 7B/8B 一次讲透——回答这台电脑到底能不能跑大模型的问题。