第 06 次课:本地模型部署与调用验证 ​

一、上节课回顾 ​

上节知识要点:

  1. Stable Diffusion 用逐步加噪和去噪生成图像,噪声图是起点,逐步去噪是核心过程。
  2. 潜在扩散先在 latent 空间压缩和去噪,再由 VAE 解码为像素图,用部分细节损失换算力效率。
  3. CFG、负面提示词、采样步数等条件机制,会改变生成方向、结构和可控性。

前几课你已经在 LiblibAI 上做过生图参数对照实验,能区分模型本体、条件输入和界面操作。要接上的问题是:那些生成服务都在云端。如果数据不能出教室、机房网络不稳定,模型怎么放到自己电脑上跑起来,并被命令行和程序稳定调用?

二、本节课任务与安排 ​

本课交付

把课前下载的 Qwen3-8B 权重装成 Ollama 本地模型,用命令行和 OpenAI 兼容接口两条通道验收它真的能用,再按三张故障工单把典型故障亲手修一遍。

下课时你会拿到四样当场可验收的成果:注册成功的 qwen3:8b、两轮对话验收记录、一份接口 JSON 回复,和一份自己写的 排错记录.txt。

顺序环节学生产出时间
回顾回顾上节课想起云端生成服务的边界5分钟
交付看老师完整演示一遍知道本课交四样成果3分钟
理论理论基础:本地部署的三个关键词说清服务、说明书、通用插座8分钟
案例1🔧 案例1:把 GGUF 装成本地模型注册成功的 qwen3:8b13分钟
案例2🔧 案例2:命令行对话验收两轮对话验收记录13分钟
案例3🔧 案例3:OpenAI 接口调用验收一份接口 JSON 回复13分钟
案例4🔧 案例4:三类故障排查演练排错记录.txt13分钟
收尾回扣流程与成果能复述四步流程5分钟
机动等待与排错补齐必做成果7分钟
扩展扩展任务:用自己的问题清单考本地模型(选做)个人问答记录.txt10分钟

上课前完成课前准备: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。

实操步骤

  1. 从课程资料下载 Modelfile 模板(Modelfile.lesson06),把它放进 D:\AIGC\lesson-6;按 F2 把文件名改成 Modelfile(去掉 .lesson06 后缀)。执行后你会看到:目录里有一个无扩展名的 Modelfile 文件。

    注意:资源管理器先在「查看 → 显示」里勾选文件扩展名,确认改完的名字不带任何后缀。带 .txt 后缀是本课第一大故障源,案例4 会专门演练。

  2. 用记事本打开 Modelfile(右键它 → 打开方式 → 记事本),核对 FROM 行与目录里的权重文件名一致,确认无误后关闭。执行后你会看到:FROM 写的是 ./models/Qwen3-8B-Q4_K_M.gguf,与课前准备放置的文件对应。

    text
    FROM ./models/Qwen3-8B-Q4_K_M.gguf
    
    PARAMETER temperature 0.7
    PARAMETER num_ctx 4096
    
    SYSTEM """你是一个简洁、准确、安全的中文教学助手。"""

    为什么这么做:FROM 是装配说明书的第一个词条——Ollama 按它去找权重。名字差一个字母,导入就报「找不到文件」。SYSTEM 定义的「教学助手」人设,案例2 会专门验证它生效。

  3. 就绪检查:打开命令提示符(Win + R → 输入 cmd → 回车),确认 Ollama 命令可用、服务在运行。执行后你会看到:第一条命令输出版本号,第二条返回 Ollama is running。

    bat
    ollama -v
    curl.exe http://localhost:11434

    终端里 curl.exe 返回 Ollama is running

    图注:看最后一行是不是 Ollama is running——是,说明 11434 窗口有人值班,可以往下走;不是,先打开 Ollama 桌面应用,等托盘出现羊驼图标再试。

  4. 让命令提示符直接落在课程目录里:在资源管理器打开 D:\AIGC\lesson-6,点一下窗口顶部的地址栏,把路径删掉、输入 cmd 回车。执行导入命令(ollama create 没有图形界面,这一步必须用命令行)。执行后你会看到:导入进度提示,最终回到命令提示符。

    bat
    ollama create qwen3:8b -f .\Modelfile
  5. 核验注册结果。执行后你会看到:列表里出现 qwen3:8b 和它的大小。

    bat
    ollama 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 里做):

  1. 在 D:\AIGC\lesson-6 里右键 → 新建 → 文本文档,按 F2 改名为 Modelfile-low(不带 .txt),用记事本写入下面内容并以 UTF-8 保存:

    text
    FROM ./models/Qwen3-8B-Q4_K_M.gguf
    
    PARAMETER temperature 0.2
    PARAMETER num_ctx 4096
    
    SYSTEM """你是一个简洁、准确、安全的中文教学助手。"""
  2. 在课程目录的命令提示符里导入:

    bat
    ollama create qwen3:8b-low -f .\Modelfile-low
    ollama list
  3. 执行后你会得到:列表里多出一个 qwen3:8b-low。它和 qwen3:8b 用的是同一份权重,只是运行参数不同——这正是 Modelfile「装配说明书」的意义。

案例2:命令行对话验收 ​

任务目标:

老师带练用命令行对话窗口,按一份验收问题清单考核 qwen3:8b:第一轮验证它听得懂指令,第二轮验证 Modelfile 里的「教学助手」人设真的生效。两条都过,才算一个能用的本地模型。

命令行人设探针:两个问题各查一件事

图:问题 1 是功能探针——模型能不能干活;问题 2 是人设探针——SYSTEM 提示词有没有被装上。

实操步骤

  1. 就绪检查:命令提示符里执行 ollama list,确认 qwen3:8b 在列。执行后你会看到:列表里有 qwen3:8b。如果列表是空的,先回案例1 完成导入。

  2. 从课程资料下载 教学助手验收问题清单(教学助手验收问题清单.txt)到 D:\AIGC\lesson-6,用记事本打开通读一遍。执行后你会看到:清单里有 2 道必答问题和 2 道选答问题。

  3. 启动对话窗口。执行后你会看到:出现 >>> 提示符。

    bat
    ollama run qwen3:8b
  4. 发送问题 1(功能探针):在记事本里选中「用一句话说明 Ollama 的作用。」复制,回到命令提示符窗口右键即粘贴,回车发送。执行后你会看到:一句简洁的中文回答,说明 Ollama 是本地模型服务。

    text
    用一句话说明 Ollama 的作用。
  5. 发送问题 2(人设探针)。执行后你会看到:它自称「教学助手」,而不是「通用大模型」。

    text
    你的名字是什么?你的角色是什么?

    为什么这么做:问题 2 专门验证 SYSTEM 提示词有没有生效。如果它自称通用模型,说明 Modelfile 没有被正确应用——回到案例1 第 2 步核对内容后重新 ollama create。

  6. 测完输入 /bye 退出对话,回到命令提示符。执行后你会看到:>>> 消失,回到普通提示符。

    对着验收表核一遍,三行都过关再进案例3:

    查什么合格的样子
    模型在列ollama list 里有 qwen3:8b
    听得懂指令问题 1 得到一句简洁、切题的中文回答
    人设生效问题 2 里它自称「教学助手」

问题与注意事项

  • 回答明显答非所问、或自称 base 模型:课前下载的可能不是 instruct/chat 版权重,找老师核对文件。
  • 粘贴进命令行出现乱码或换行错乱:先执行 chcp 65001 切到 UTF-8 代码页,再重新粘贴发送。
  • 加载模型明显卡顿:关闭浏览器等大型应用再试;仍卡顿按课前准备的「低配补救」换小模型,模型名跟着改即可。

扩展练习(选做)

完成清单里的选答题 3 和 4,观察小模型的表达边界:

  1. 重新执行 ollama run qwen3:8b,把两道选答题逐条粘贴发送。执行后你会看到:解释题答案尚可,翻译题偶有生硬——这就是 8B 小模型的真实水平。

    text
    用两句以内的话,向完全没接触过大模型的同学解释什么是本地部署。
    把下面这句话翻译成中文:Local models keep data on your machine.
  2. 把四道题的回答抄进实验记录;如果案例1 做了 qwen3:8b-low,换模型名再问一遍问题 1,对比两次回答的措辞差异——temperature 越低,回答越保守稳定。

案例3:OpenAI 接口调用验收 ​

任务目标:

老师带练用 curl.exe 调用 Ollama 的 OpenAI 兼容接口,拿到 JSON 格式的回复;再故意把模型名写错一次,记住报错的样子。这条通道是所有上层应用接入本地模型的方式,也是企业系统集成的标准做法。

接口调用链路:请求体先落盘,再由 curl.exe 发到本机 11434 端口

图:请求体先存成文件,再由 curl.exe 读文件发送;返回 JSON 里的 content 就是模型回答。

实操步骤

  1. 就绪检查:再开一个命令提示符窗口(地址栏进 D:\AIGC\lesson-6 的办法同案例1),确认服务和模型都在。执行后你会看到:第一条返回 Ollama is running,第二条列表里有 qwen3:8b。

    bat
    curl.exe http://localhost:11434
    ollama list
  2. 从课程资料下载 接口请求体(request.json)到 D:\AIGC\lesson-6,用记事本打开核对 model 字段。执行后你会看到:model 的值与 ollama list 里显示的名称一字不差。

    json
    {
      "model": "qwen3:8b",
      "messages": [
        {
          "role": "user",
          "content": "用一句话说明Ollama的作用"
        }
      ]
    }

    为什么这么做:接口调用最常见的故障就是模型名对不上。model 必须复制 ollama list 里的原名,不要手写近似名——案例4 的工单 03 练的就是这个。

  3. 发送请求(^ 是 cmd 的换行符,它后面不能再跟任何字符)。执行后你会看到:一段 JSON,content 字段是模型的中文回答。

    bat
    curl.exe http://localhost:11434/v1/chat/completions ^
      -H "Content-Type: application/json" ^
      -d "@request.json"

    为什么这么做:不在命令行里手写整段 JSON——先把请求体存成文件、再让 curl 读文件发送,避免引号写错把请求毁掉。这是 Windows 课堂的固定做法。

  4. 主动制造一次「模型名不匹配」:选中 request.json 按 Ctrl+C 复制、Ctrl+V 粘贴出副本,按 F2 把副本改名为 request-bad.json,用记事本打开它,把 "model" 的值从 qwen3:8b 改成 qwen3:8(少写一个字母 b)并保存。执行后你会看到:目录里多出 request-bad.json,内容只有一处不同。

  5. 用坏副本再发一次。执行后你会看到:返回的是一条 model not found 报错,而不是回答。执行后把 "qwen3:8" 改回 "qwen3:8b" 保存,重发一次确认恢复正常,然后选中 request-bad.json 按 Delete 删除副本。

    bat
    curl.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,复制原名粘贴,不要手打。

扩展练习(选做)

把接口通道接到自己的专业问题上:

  1. 用记事本打开 request.json,把 content 的值换成你专业里的一个真实问题(保持引号和逗号不动),以 UTF-8 保存。执行后你会看到:问题变了,其余结构不变。

  2. 重新执行第 3 步的 curl.exe 命令。执行后你会得到:同一个本地模型对你专业问题的回答,把 content 的内容抄进实验记录。

案例4:三类故障排查演练 ​

任务目标:

老师带练处理三张真实的课堂故障工单:先在本机复现现象,再按「服务 → 文件 → 模型名」的顺序定位原因,修复后把每条工单的现象、原因、修复动作写进一份 排错记录.txt。以后遇到本地部署故障,照这份记录的思路查。

排错三步:服务、文件、模型名

图:三张工单正好对应三个检查位——连接被拒绝查服务、找不到文件查说明、模型不存在查名字。顺序别乱,从左往右查最快。

实操步骤

  1. 从课程资料下载 故障工单(故障工单_3条.txt)到 D:\AIGC\lesson-6,用记事本打开通读。执行后你会看到:三张工单分别报「连接被拒绝」「找不到文件」「模型不存在」。

  2. 在 D:\AIGC\lesson-6 空白处右键 → 新建 → 文本文档,按 F2 改名为 排错记录.txt,用记事本打开备用。执行后你会看到:一个空的记录文件,等下每修完一张工单就写一条。

  3. 工单 01(服务没起)复现与修复:右键任务栏托盘里的羊驼图标选退出(找不到图标说明确实没在运行),执行检查命令,会得到和工单一样的 Connection refused;再从开始菜单打开 Ollama,等托盘图标出现后重新检查。执行后你会看到:报错消失,恢复 Ollama is running。

    bat
    curl.exe http://localhost:11434

    把工单 01 的现象、原因(服务没启动)、修复动作写进 排错记录.txt。执行后你会得到:记录里的第一条。

  4. 工单 02(说明书写错名)复现与修复:把目录里的 Modelfile 按 F2 临时改名为 Modelfile.txt,在课程目录的命令提示符里重新执行导入命令,会得到和工单一样的「找不到文件」报错;再把文件按 F2 改回 Modelfile,重新执行导入确认恢复。执行后你会看到:报错随改名出现、随改回消失。

    bat
    ollama create qwen3:8b -f .\Modelfile

    把工单 02 的现象、原因(文件被保存成了 Modelfile.txt,资源管理器默认不显示扩展名)、修复动作写进记录。诊断技巧:资源管理器「查看 → 显示 → 文件扩展名」勾上,后缀真假一眼便知。执行后你会得到:记录里的第二条。

    为什么这么做:工单里李思远「核对过文件名一致」却依然报错,因为不显示扩展名时看到的 Modelfile 其实是 Modelfile.txt。肉眼会被系统设置骗,勾选「文件扩展名」才是可靠核对。

  5. 工单 03(模型名写错)复现与修复:按案例3 第 4 步的方法复制出 request-bad.json,把 model 的值改成工单里的 qwen3:8,发送请求,会得到和工单一样的 model not found 报错;把字母 b 补回去保存,重发确认恢复,之后删除副本。执行后你会看到:报错信息里的模型名与 ollama list 对不上——这就是定位依据。

    bat
    curl.exe http://localhost:11434/v1/chat/completions ^
      -H "Content-Type: application/json" ^
      -d "@request-bad.json"

    把工单 03 的现象、原因(请求里的模型名少写一个字母)、修复动作写进记录。执行后你会得到:记录里的第三条。

  6. 收尾自查:双击打开 排错记录.txt,对照验收表。执行后你会看到:三条记录格式统一——每条都有现象、原因、修复动作三段。

    查什么合格的样子
    三张工单都复现过每条记录的「现象」都写了自己屏幕上看到的报错原文
    原因落在检查位上三条原因分别对应服务、文件、模型名,与排错顺序一致
    修复后恢复正常服务在运行、ollama create 能成功、接口返回 content
    记录可复用同学拿你的 排错记录.txt 能看懂每一步为什么这么做

问题与注意事项

  • 退出 Ollama 后托盘图标找不到了:从开始菜单重新打开 Ollama 应用即可,模型注册不会因为服务重启而丢失。
  • 改名 Modelfile.txt 后忘记改回:案例2、案例3 还要用它,做完工单 02 立即改回并核对 ollama list。
  • 排错记录.txt 写成了乱码:记事本保存时「编码」选 UTF-8,不要选 ANSI。

扩展练习(选做)

和同桌互换故障题,练「出题」和「排错」两个视角:

  1. 自己制造一个新故障:把 request.json 复制一份,用记事本把 model 改成 QWEN3:8B(全大写)保存,不告诉同桌改了什么,只把文件给他。执行后你会看到:同桌需要靠报错信息和 ollama list 自己定位。

  2. 互换:排查同桌给你的故障文件,修好后双方互相在对方的 排错记录.txt 里补一条「第 4 号工单」。执行后你会得到:一份四人互相验证过的排错手册。

扩展任务:用自己的问题清单考本地模型(选做) ​

任务目标:

把本课装好的本地模型变成自己的「断网答疑机」:准备三个自己专业或生活里的真实问题,逐条通过接口问它,把回答汇总成一份问答记录。扩展不计入必做时间,时间不够直接跳过。

实操步骤

  1. 按下面的完整流程做一遍;第三段提示词里的「输入素材」已经是写好的三个问题,直接可用,想换成自己的问题,只替换「输入素材」到「输入素材结束」之间的三行即可。

    先在 D:\AIGC\lesson-6 里右键 → 新建 → 文本文档,按 F2 改名为 my-questions.txt,用记事本写入下面内容并以 UTF-8 保存:

    text
    输入素材:
    1. 电子商务专业网上开店,前期最该控制好的三个成本是什么?
    2. 每天用手机超过 6 小时,如何安排休息才能不伤眼睛?
    3. 帮我把「本周五下午 3 点班级 meeting 改到线上」改写成正式通知。
    输入素材结束。

    再把 my-questions.txt 里的问题逐条替换进 request.json 的 content 字段(每次一条,保存后重新发送),发送命令不变:

    bat
    curl.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 里的三个问题和回答,检查我的问答记录:
    一、每个问题都有对应的回答,没有遗漏。
    二、每条回答后面有靠谱程度的标注和一句理由。
    三、发现回答与问题对不上的,指出是第几条。
  2. 执行后你会得到:一份 我的本地模型问答.txt,三个问题、三段回答、三条靠谱度标注。它会告诉你:本机这个 8B 小模型,哪些问题能放心交给它,哪些还得靠云端。

五、总结与巩固 ​

本节小结:

  • 可复用流程:起服务 → 写 Modelfile → ollama create 导入 → 命令行与接口两条通道验收。以后本地部署任何开源模型,都套这四步。
  • 排错口诀:连接被拒绝查服务,找不到文件查说明,模型不存在查名字——按「服务 → 文件 → 模型名」从左往右查。
  • 核心一句话:本地部署不是让模型更聪明,是让你的数据不出本机、断网也能跑。
  • 下节预告:第 7 课第一次正式用 WorkBuddy 干活——写一份实习周报。

课后巩固:

  • 完成学习通课后巩固题【M1-01】~【M1-05】、【M2-01】~【M2-05】,题目考查本地部署链路(服务、GGUF、Modelfile、兼容接口)背后的原理与排错判断。

六、资料与下载 ​

延伸视频

推荐观看:显存、量化与 7B/8B 一次讲透——回答这台电脑到底能不能跑大模型的问题。