# 第30课：让模型在自己电脑上运行

这一课接着上一课的接口调用往下走。学生已经知道请求有地址、模型名与消息，也知道返回文字还要核对。本课把“模型服务在哪里”落到自己的电脑上，最后留下可检查的运行记录。核心问题是：看到模型参数量和量化标签后，怎样判断准备条件，并证明一次本地回答确实发生？

## 教师备课：先把环境问题放在课堂之前

安排60分钟，不把下载等待算作学生练习。课前在实际教室的一台Windows电脑或macOS电脑上，按当前[Windows安装说明](https://docs.ollama.com/windows)或[macOS安装说明](https://docs.ollama.com/macos)核对条件，安装对应官方软件并打开。学生操作单保留完整安装入口、模型准备命令和Python脚本，教师不必在课上口述一长串网址。Linux设备按官方对应说明提前准备。

本稿核对日期为2026-09-10，操作示例采用 `qwen2.5:0.5b`，它是为了把文件、服务、客户端三者接起来的小模型材料；不是质量最好的模型，也不是统一硬件推荐。备课时先运行 `ollama --version`、`ollama ls`，没有该模型才在课前运行 `ollama pull qwen2.5:0.5b`。第一次下载需要网络。不要临时换成名称带 `:cloud` 的模型再说完成了本地练习。

软件安装好，只表示电脑多了运行软件。模型列出来，只表示找到了对应文件。真正发出一次问题、取得返回并核对内容，才是这节课要继续完成的事情。教师提前用短材料试一遍，记录可用设备与无法运行的设备；当日还没准备好的学生从一开始就选择本地计算后备，不让他们一边听课一边等待大文件。软件安装、模型下载和本稿编写是不同阶段；本轮制作材料没有替用户安装、下载或启动服务。

打开本页实验、学生操作单和独立答案页。答案先不要投影。准备白板三张卡：“参数文件”“运行服务”“调用程序”，以及写有12、18的两张时间卡。让学生在自己的文件夹保存记录，而不是把所有人的结果混到教师电脑。无需账户密钥，不需要为本地练习购买API额度。本机已有重要服务的设备由教师课前安排，不在课堂改端口、重启共享服务或迁移文件。

## 0—6分钟：先认清谁在做计算

教师开场可以直接说：“上一课，我们把问题送到一个模型接口。现在把镜头拉近：假如服务就在这台电脑里，我们需要多准备什么？先别回答安装一个聊天软件。看这三个框：文件、服务、调用程序。请把今天出现的三个名字放进去。”给学生一分钟将模型标签、Ollama和脚本连起来，再请一人解释箭头。

指着模型文件说：“里面主要保存模型需要的数字和相关信息，就像你以前练习过的权重。不过现在数字很多，不能靠手算一条条处理。”再指服务：“运行软件知道怎样读取文件，接收问题并完成计算。”最后指脚本：“这个小程序负责把问题打包送过去，再把返回保存下来。它本身没有学会复述材料。”三个角色解释完，才补充服务可能使用CPU或GPU，不要求学生先背硬件缩写。

有人说“网页能打开就证明模型在本机”，追问：“网页能不能把请求转给另一台机器？”让他把箭头画完整。有人把Ollama说成一个固定模型，指着 `ollama ls` 问：“软件可管理不止一份模型文件，那么软件名和参数名能否当同一个东西？”这一追问接到第28课的运行条件，不在这里展开新的模型排行。

发出Q0的第二个预测：“一个假想模型叫4B，它是不是4GB？我这台假想电脑当前还剩3GB内存，4位版本是否一定能跑？”学生先写猜测与依据。明确预测只用于比较理解怎样变化，不因猜错扣分。不要此时公布可运行结论，让后面的算式和实际观察提供依据。

## 6—13分钟：把4B换成一笔可复算的账

白板写4B，先读成“四十亿个参数”。教师说：“这里的B在数参数个数。你有四十亿张数字卡，每张卡占几位，要另外说清楚。”补上“每参数4位”，先拿八个小格组成一个字节。每个参数占半个字节，是这份理想账本的算法；真实文件还会有别的东西，暂时放到旁边的未计清单。

让全班先算4×10⁹×4÷8。巡视时只追问单位，不直接帮学生写最后数字。有人算出16GB，问：“你这一步得到的是位数还是字节数？我们刚才说几位组成一字节？”有人把4B中的4再当字节，回到两行标题“个数”“每个占用”。随后一起核对：理想权重为2×10⁹字节，即十进制2GB。

点击“计算存储与取整过程”。指给学生看结果中的GB和GiB：“这是同一个字节数用了不同单位。这里GB按十亿字节计算，GiB按2的30次方字节计算；页面约1.862645GiB没有表示文件忽然变小。”本课不让学生记住全部换算常数，只要求报告时不把两种单位混写。假想可用内存字段明确采用十进制GB。

第一次只把位宽改成16，保持参数量4、可用内存3和额外占用unknown。先请学生预测倍率，再运行。理想权重变成8GB，超过给定3GB。指出数轴取整表没有变化：“位宽估算和下面的数轴练习是两个独立小计算。程序没有偷偷用16位生成一组新模型权重。”若学生发现这点，说明他正在读过程，而不只是抄最后一行。

本段收尾让学生写两列：已经算到的是理想权重；还没有算到的是实际运行总需求。不要把“有可能准备这个模型”写成“已经证明任何机器都能运行”。

## 13—20分钟：从三个数看到量化在丢掉什么

把位宽恢复4。教师说：“数字保存得更粗，会发生什么？我们先不用真实文件格式，只在数轴上试。这里每隔0.1画一个格点，拿一个原来的数，放到离它最近的格点上。”写出-0.26，不先给答案，请学生指出左右相邻格点。分别到-0.3和-0.2的距离是0.04和0.06，所以选前者。再处理0.14和0.49，让学生解释选择依据。

运行默认材料后，表中出现-0.3、0.1、0.5。教师用手遮住平均误差，先让学生把0.04、0.04、0.01相加再除以3，得到0.03。“绝对误差只数距离，不让一个偏大和一个偏小互相抵消。它能说明这三个数字被改动了多少，不能直接翻译成作文扣了多少分。”这个例子接上第4课损失的意义，但不把平均绝对误差说成模型本来就在优化的训练损失。

现在仅把格距换为0.25，参数量、位宽和内存字段都不动。让学生分别在纸上找相邻格点，再看页面。结果为-0.25、0.25、0.5，误差为0.01、0.11、0.01；平均约0.043333。指出-0.26这一项反而更接近，并问：“格子整体变粗，是否表示每一个原数的误差都必然变大？”学生应看具体位置，而不是背“压缩一定更差”四个字。

对于恰好居中的数，本页规定向离0更远的一侧取。真实量化方案还要规定可表示的范围、编码方式和缩放等；这里没有模拟这些内容。因此格距0.25不是“四位量化”的定义，格距0.1也不是“八位量化”的定义。不要把课堂数轴当成真实格式的测评结论。留给学生一句完整解释：“我看到了数值近似，但还没测过量化后模型在具体任务上的表现。”

## 20—26分钟：让未知保持未知

恢复格距0.1和默认材料。指着 `unknown` 说：“刚才2GB只给参数数字记了账。服务还要工作空间，对话还要留中间信息，系统也有占用。现在我们没有这几个实际数字，所以这里填未知。”让学生观察页面显示剩余1GB，但没有宣布可运行。追问：“如果你把未知写成0，算式会更漂亮，证据会变多吗？”这句话要让学生自己回答。

为了看到条件怎样影响结论，教师把额外占用改成1.2。明确写在白板上的是“教学假设”，不是本机测量。页面相加得到3.2GB，相对可用3GB缺0.2GB。这个操作让学生理解额外占用为什么能改变准备判断。随后请学生恢复unknown，再解释为何不能沿用刚才的总数。不要借这个假想数据建议学生购买硬件。

用很短的语言区分磁盘、内存、显存：“磁盘用来留下文件，运行时还要把需要处理的东西安排进工作空间。不同机器可能用系统内存、显卡内存或统一内存，不能把它们随手相加成一个保证值。”课堂不推导所有缓存公式，只举一个可观察条件：同一个模型处理一小段文字与同时处理许多人很长的对话，额外需求可能不同。公式算得正确只是准备工作，运行兼容和速度仍靠实际短任务检查。

这一段结束时检查Q2：每人至少列出两类额外需求，并标明1.2来自谁。学生写“模型大小2GB，所以还可以随便粘长文”时，让他指回未计清单；别只在作业上写一个错号。

## 26—34分钟：在终端看见文件、进程和一次回答

教师先说出路径分工：“已经完成课前准备的同学进入真实模型操作；其余同学保留后备标记，今天照样完成资源计算。别人电脑上有文字，不表示你的机器已经运行。”请已准备学生执行 `ollama ls`，逐字找到 `qwen2.5:0.5b`。不要让输入错名称的学生直接执行新模型下载，先比较冒号和数字。

执行 `ollama run qwen2.5:0.5b`。提示符出现后再输入学生单Q3的完整原创材料：资料比较12分钟、核对引用18分钟，只复述，不推测能力。教师强调：“终端此时在等模型。今天不规定它必须输出某一句完全相同的话，我们只规定需要保持哪些事实。”将自己的实际结果保存，逐项圈出两个活动与对应数字。若模型增加了建议或把18写成81，就真实记内容未通过，不删掉失败记录再找一张好截图替换。

回答结束输入 `/bye` 退出对话，然后立刻 `ollama ps`。对照两条命令：“ls是能找到的模型列表，ps是当前运行状态。文件还在磁盘上，不表示它每一刻都驻留内存。”如果模型已卸载、列表为空，写当前未观察到，不让学生根据教材虚构处理器比例。CPU或GPU的具体显示用来记录这一次条件，不作为本课快慢排名。

如果提示命令找不到，定位到软件或终端环境；如果模型不在列表，定位到模型准备；如果已加载但生成耗时过长，记录实际等待与阶段后转后备，不不断打开新对话。教师可以让有问题的学生在同伴旁观察一次，但作业必须写“观察同伴设备”，不能写“本机完成”。这保留了不同条件下可比较的学习证据。

## 34—43分钟：把本地回答保存成可核对文件

把 [local_chat.py](../../materials/local_chat.py) 的副本放入学生的 `classroom30` 文件夹。先执行 `python3 --version`，再执行 `python3 local_chat.py --model qwen2.5:0.5b`。教师逐项读输出：“mode写的是dry_run_no_network，地址是本机的11434接口，messages里是准备交给模型的文字。我们现在只展示请求。”请学生用手指找到模型名与消息，口述这个结果还缺少什么。

接下来打开学生单Q4的 `record_local.py` 完整代码。不要要求初学者从空白默写；让他们复制后找三个关键位置：`live=True` 才请求服务，`except` 把失败留下，最后一行写文件前已将结果编码为UTF-8文字。解释 `time.perf_counter()` 是程序记录经过时间的计时方法，不是模型内部的全部性能指标。这些代码让同学能复查自己的操作，而不是只看终端闪过的一段文字。

运行一次 `python3 record_local.py`，等待结束。服务和模型没有准备好的学生不要按运行键碰运气，继续阅读同一脚本的请求路径与后备任务。准备好的学生打开 `local-result.json`，先观察 `mode`，再观察 `model`、`done` 和 `answer`。如果文件中的模式是not_completed，就从错误类型定位到本次停在哪一步；存在文件不代表成功。记录的是脚本解析后的内容和耗时，并非完整的网络抓包。

有人认为“只要用了127.0.0.1，就绝不可能外发”，教师画一个中转箭头说明：本机地址只能告诉你请求的第一站。本课要结合自己准备的本地模型、当时运行信息和未添加云工具的这条调用路径说明条件。不要扩大成这台电脑上所有软件都离线。下载模型需要网络和推理时模型在哪里，是两个可分别检查的问题。

## 43—48分钟：把接口成功与任务成功拆开验收

投影一个空白核查表，四列分别为“请求了谁、有没有最终内容、内容是否忠于材料、还有什么没证实”。让学生使用自己的文件填入，而不是抄教师结果。`done`表示接口报告本次响应结束；它不会替你判断数字有没有抄错。非空answer也可能包含额外建议，仍需逐项核对12、18及两个活动的对应关系。

教师可以追问：“模型把两个时间都写对了，却判断你是研究型人才，哪一项没通过？”学生应指向无依据能力推断。本系列以后会整理个人学习证据，但一条计时记录不足以给能力定级，本课只复述材料。这样让具体任务的边界进入验收，而不是在最后写一句空泛的注意幻觉。

让学生读自己的耗时。第一轮可能包含模型加载，后续轮可能状态不同；输入、输出长度和设备也不相同。所以本课只记录本次经历，不比较一排秒数给同学排名。完成后备的学生在同一张表上写没有模型响应、没有模型内容核验，但资源计算与请求阅读已完成。这个记录能准确告诉教师下一次需要补哪一步。

## 48—55分钟：独立完成新材料

现在关闭答案页投影，只读学生单Q5。新的资源材料是2B、8位、可用2.5GB、额外占用未知；数轴材料是0.12、0.39、-0.62，格距0.25。学生先独立写算式和三个取整结果，再允许点击页面核对。教师巡视只问“你现在算的是位还是字节”“这个原数相邻格点是什么”，不替他们报最终数字。

随后让学生检查只有dry_run_no_network的作业声明，写出缺失证据；再画出“本地聊天，外部嵌入”的流程中哪一步传出了文字。不要在独立阶段提前讲答案。较早完成的学生用不同颜色修正最初预测，说明是哪一项观察改变了判断；不要求额外下载模型或再发调用。

## 55—60分钟：讲评、提交和向知识库过渡

到独立时间结束后再打开答案。一起核对2GB的理想权重，以及0、0.5、-0.5的取整结果；用相邻格点解释负数方向，不只报三个答案。指出剩余0.5GB与未知开销之间的关系。让一名完成真实调用的学生展示模型字段和事实核验，再让一名后备学生展示准确的未完成记录，两类成果分别评价。

板书留下四行：参数个数×位宽÷8只算理想权重；量化是数值近似，任务质量要另测；文件、服务、客户端各有职责；运行证据与内容证据分别保留。学生提交实验前后记录、独立题以及本地结果或未完成记录。最后请他们用自己的话完成“我能检查……；我还没有验证……”两句话。

下一课会把检索出的材料送到模型。这里学会的检查不会消失：本地聊天不代表嵌入也本地，取得回答不代表引用正确。延伸练习可在已准备环境里固定同一输入，比较首轮与后续轮条件，但不是本课必交项目。不要把继续折腾安装当作学习原理的唯一方式。

## 来源与使用边界

安装与命令以[Ollama CLI](https://docs.ollama.com/cli)、[聊天接口](https://docs.ollama.com/api/chat)、[FAQ](https://docs.ollama.com/faq)及[模型条目](https://ollama.com/library/qwen2.5:0.5b)核对。命令和接口可能更新，教师课前按实际版本复核。数轴数据、课堂问题、核查表和教学话术为原创。页面实验完成的是可复算的数值过程；没有把它描述为真实大模型推理。材料尚未经真实班级试教，设备适配和学生操作耗时须由教师备课记录确认。


## 逐分钟安排

| 时间 | 教师讲解与操作 | 学生活动 | 检查结果 |
|---|---|---|---|
| 00:00—01:00 | 承接上一课的接口，提出今天要确定模型计算是否发生在自己的电脑。 | 写下Q0的核心问题，标出本机与远端的区别。 | 记录包含运行位置，而非只写软件名称。 |
| 01:00—02:00 | 摆出参数文件、运行服务、调用程序三张卡，暂不代为放置名称。 | 把模型标签、Ollama和local_chat.py分别放入三个框。 | 三框图保留学生初次连线。 |
| 02:00—03:00 | 用一份问题从脚本送到服务的过程解释三者职责。 | 给两条箭头补写发送问题、读取参数与返回文字。 | 脚本没有被标为训练好的模型。 |
| 03:00—04:00 | 追问网页能否把请求转给其他电脑，要求画出完整路径。 | 给本机界面到远端服务画一种可能箭头。 | 学生能区分界面位置与计算位置。 |
| 04:00—05:00 | 出示假想4B模型和3GB可用内存，请学生只作预测。 | 预测4B是否就是4GB，以及4位是否保证可运行。 | Q0有判断和理由，未提前改成参考结论。 |
| 05:00—06:00 | 说明预测用于比较理解，确认真实操作与后备两条路径。 | 勾选课前环境已准备或尚未准备，并写具体阶段。 | 每人有准确的环境状态。 |
| 06:00—07:00 | 把4B展开成4×10⁹个参数，另写每参数4位。 | 在纸上分别标出参数个数与每个参数占用。 | 两个量各自带单位。 |
| 07:00—08:00 | 用八个小格组成一个字节，要求学生补上除以8。 | 写4×10⁹×4÷8的完整式子。 | 算式从位数换成字节数。 |
| 08:00—09:00 | 巡视Q1，只追问位与字节的单位转换，再全班核对。 | 完成手算并保留原来的计算痕迹。 | 纸笔结果可与页面比较。 |
| 09:00—10:00 | 用默认字段点击计算存储与取整过程，指出理想权重结果。 | 记录默认GB数、GiB数和页面的未知提示。 | Q1记录同一字节数的两种单位。 |
| 10:00—11:00 | 解释GB与GiB计数单位不同，不表示权重忽然变小。 | 给自己的结果写十进制GB，并圈出不能混写的单位。 | 单位旁有口头解释或一句注释。 |
| 11:00—12:00 | 只将位宽改为16，要求先猜倍率再运行。 | 比较两次理想大小，其余字段保持不动。 | 前后记录能看到单一条件变化。 |
| 12:00—13:00 | 让学生解释为什么下方数轴表没有随位宽改变。 | 写存储估算与数轴实验是独立计算，并列未计项。 | 未把位宽直接对应为数轴格距。 |
| 13:00—14:00 | 恢复4位，画0.1格距数轴，在-0.26左右标相邻点。 | 找出-0.26两侧候选格点，暂不点运行。 | 纸上有原数与相邻格点。 |
| 14:00—15:00 | 比较两个距离，引导学生说明最近格点的选择依据。 | 计算-0.26到两侧格点的距离。 | 选择由距离比较支持。 |
| 15:00—16:00 | 交给学生处理0.14和0.49，再运行默认数轴材料。 | 手算后核对三个取整值和绝对误差。 | Q2表包含原数、取整后和误差。 |
| 16:00—17:00 | 遮住平均误差结果，要求先加三个距离再除以3。 | 复算平均误差，并解释为什么不用正负抵消。 | 平均值有求和与除数。 |
| 17:00—18:00 | 只把格距改成0.25，让学生重新定位三个原数。 | 预测新格点后运行，保存前后取整表。 | 参数量与位宽未跟着修改。 |
| 18:00—19:00 | 指向-0.26这一项，追问粗格距是否使每个误差都变大。 | 比较单项误差与平均误差，并写出区别。 | 解释引用具体一项的变化。 |
| 19:00—20:00 | 说明等距离远离0的教学规则，以及本实验未实现真实Q4格式。 | 写一条数轴观察能说明什么、不能说明什么。 | 未把数值误差当成模型正确率。 |
| 20:00—21:00 | 恢复默认格距，指着unknown问未知能否为了算账改成0。 | 解释两种填写方式在证据上的差异。 | Q2保留未知项。 |
| 21:00—22:00 | 读出扣权重后的差额，引导学生列运行时还需要的东西。 | 列出缓存、缓冲或其他至少两类额外需求。 | 未计项清单具体到资源用途。 |
| 22:00—23:00 | 把额外占用填写1.2，并明确标为教学假设。 | 运行并记录合计与缺口，注明数字来自输入。 | 结果没有写成设备测量值。 |
| 23:00—24:00 | 恢复unknown，询问刚才的总需求是否还能继续沿用。 | 修订判断，说明当前缺少哪个量。 | 新判断与当前表单一致。 |
| 24:00—25:00 | 用留下文件与运行工作空间区分磁盘、内存和显存。 | 把文件存放与计算工作空间标到三框图旁。 | 没有随意相加不同设备资源。 |
| 25:00—26:00 | 用短输入和长对话举例，收束公式只能辅助准备。 | 完成Q2条件说明，检查1.2的来源标注。 | 资源结论包含未验证条件。 |
| 26:00—27:00 | 真实路径执行ollama ls，后备路径阅读请求示意。 | 找到精确模型标签或记录未准备的阶段。 | 名称来自实际列表或明确未观察到。 |
| 27:00—28:00 | 核对冒号与数字，再给出ollama run qwen2.5:0.5b。 | 已准备者进入模型对话，其余标注后备。 | 未因拼错名称临时下载其他模型。 |
| 28:00—29:00 | 等待提示符出现，指向Q3的两项活动与时间。 | 输入资料比较12分钟、核对引用18分钟的完整材料。 | 保存准确输入文本。 |
| 29:00—30:00 | 要求等待一次回答结束，不规定唯一措辞。 | 保留实际输出，后备者分析应该核对哪些字段。 | 真实输出和预计检查项有明确标签。 |
| 30:00—31:00 | 让学生逐项圈出活动与数字，附加评价也要留在记录中。 | 核对12、18及活动对应，标记是否添了能力判断。 | 内容结果没有被改写成理想答案。 |
| 31:00—32:00 | 示范输入/bye，再立刻执行ollama ps。 | 退出对话并保存实际运行信息，空列表如实记录。 | 有当前状态而非虚构CPU/GPU比例。 |
| 32:00—33:00 | 并排写ls与ps，请学生解释文件列表和运行状态的差别。 | 用自己的两个观察说明模型是否当前运行。 | Q3包含命令职责区分。 |
| 33:00—34:00 | 按软件、模型、生成阶段定位未完成情况，转入接口练习。 | 给Q3写完成、观察同伴或后备的准确模式。 | 不会把同伴的成功写成自己设备成功。 |
| 34:00—35:00 | 请学生把local_chat.py副本放入classroom30并检查Python版本。 | 确认脚本所在文件夹，执行python3 --version。 | 脚本路径与可用Python命令明确。 |
| 35:00—36:00 | 给出不带live的脚本命令，并提醒先观察mode。 | 执行默认命令，找到dry_run_no_network。 | 请求展示没有被写成模型回答。 |
| 36:00—37:00 | 逐项指向模型名、127.0.0.1地址与messages。 | 在默认输出里找到请求对象与完整消息。 | Q4记录包含待发送结构。 |
| 37:00—38:00 | 打开Q4完整记录代码，说明复制后需找关键位置。 | 保存record_local.py，圈出live=True和except。 | 代码能对应真实调用与失败记录。 |
| 38:00—39:00 | 解释UTF-8写文件与经过时间的作用，确认环境后再执行。 | 找到local-result.json写入语句和计时位置。 | 知道保存的内容与耗时来源。 |
| 39:00—40:00 | 让就绪者运行一次record_local.py，其他人继续后备读解。 | 执行一次并等待，或画脚本到已下载权重的路径。 | 实际调用与后备活动分别标记。 |
| 40:00—41:00 | 要求打开实际JSON文件，先读mode再判断后续状态。 | 记录模式及错误类型或返回模型、done、answer。 | 有文件不被直接当成成功。 |
| 41:00—42:00 | 用本机中转箭头解释localhost只说明请求第一站。 | 结合模型准备和运行状态填写本次执行条件。 | 本地结论包含依据与范围。 |
| 42:00—43:00 | 核对各组已经取得的记录，不重复启动失败请求。 | 为Q4写真实服务响应或准确未完成状态。 | 后续检查能追到这一份记录。 |
| 43:00—44:00 | 投影请求对象、最终内容、事实、未验证四列空表。 | 用自己的JSON或后备标记填入对应列。 | 接口和内容的判断分栏。 |
| 44:00—45:00 | 说明done与非空answer不能替代原材料核对。 | 逐项核验两项活动与12、18的对应。 | 每个事实有原文依据。 |
| 45:00—46:00 | 追问模型额外判断研究型人才时应在哪一列记未通过。 | 指出材料不支持能力标签并保留该输出。 | 验收边界包含禁止无依据推断。 |
| 46:00—47:00 | 解释首轮加载、长度和设备差异，拒绝按秒数给模型排名。 | 记录本次elapsed_seconds，并注明条件未统一。 | 耗时只作为这一轮观察。 |
| 47:00—48:00 | 让后备者说明已完成资源计算但缺少哪些模型证据。 | 检查Q4记录是否准确包含未完成部分。 | 完成范围具体，没有泛写全部成功。 |
| 48:00—49:00 | 关闭答案投影，读Q5的2B、8位与2.5GB新条件。 | 独立写理想大小算式与未知条件判断。 | Q5资源题有独立初稿。 |
| 49:00—50:00 | 巡视时只问当前算的是位还是字节，不宣布结果。 | 自行检查单位与换算，保留更正痕迹。 | 单位修正来自学生自己的解释。 |
| 50:00—51:00 | 读出三个新数值与0.25格距，要求先找邻近格点。 | 独立算取整值与三个绝对误差。 | 新数值表在运行之前写出。 |
| 51:00—52:00 | 允许学生用页面核对，但不替他们填写新材料。 | 输入Q5条件，比较手算与页面结果。 | 独立预测与观察可以对照。 |
| 52:00—53:00 | 要求检查只有dry_run记录的成功声明，暂不讲评。 | 写出缺少的运行与内容证据。 | Q5第三题独立说明依据。 |
| 53:00—54:00 | 给出本地聊天加外部嵌入的流程，请标出数据经过哪里。 | 画完整箭头，判断是否可以称整个应用离线。 | 图上能找到外部步骤。 |
| 54:00—55:00 | 提醒独立阶段结束前用另一颜色修订最初预测。 | 保存Q5并注明改变判断的具体观察。 | 预测修订不是简单抄结论。 |
| 55:00—56:00 | 独立时间结束后打开答案，核对存储式和资源条件。 | 对照Q5第一题补写遗漏的未知占用说明。 | 改正有具体理由。 |
| 56:00—57:00 | 用负数两侧距离解释独立数轴答案。 | 解释自己的负数格点选择及平均误差算法。 | 不是只抄三个最终值。 |
| 57:00—58:00 | 分别展示真实调用和准确后备记录，按对应目标评价。 | 核查自己的记录标签与实际操作是否一致。 | 未完成情况没有被隐藏。 |
| 58:00—59:00 | 留下四行板书，收取前后实验、独立题及运行记录。 | 提交Q1、Q2、Q5和Q4结果或未完成说明。 | 作业具备可追查的材料与条件。 |
| 59:00—60:00 | 用下一课知识库的嵌入与生成衔接，提醒逐步核对数据路径。 | 写我能检查什么及我还未验证什么两句离堂话。 | 学习成果与验证边界都对应实际操作。 |

---

# 第30课独立答案与检查依据

请在独立阶段结束后再打开。页面的数值结果可以复算；真实模型回答没有唯一措辞，要保留学生自己的原始输出并逐项核验。

## Q0：角色与预测

模型标签指向参数文件及相关信息；Ollama是管理和运行模型的软件，提供接收请求的服务；`local_chat.py` 是打包问题、调用接口和解析返回的程序。三者有分工，不能把脚本本身当作训练好的模型。4B表示约四十亿个参数，不是4GB文件。预测时答案错误不扣分，只检查是否留下依据，并能在实验后解释修正原因。

## Q1：理想权重的账本

4×10⁹×4÷8＝2×10⁹字节＝2GB，约1.862645GiB。改为16位，理想权重为8GB，是原来的4倍。这个倍率来自每个参数占用变为4倍，参数个数没有变。注意这里都是假想模型的理想账本，不是所选Ollama小模型的实际文件大小。

4位默认条件下，可用3GB减理想权重2GB还剩1GB，但额外占用未知，不能保证运行。改为16位后，仅理想权重已经超过给定可用内存5GB，不能据此安排全部驻留内存运行。若学生只回答“电脑一定完全不能做任何计算”，结论又过大：本题判断的是给定内存条件，未研究其他设备或卸载策略。

取整表不会随位宽字段改变，因为那是独立的数轴计算。不能据此说量化在真实模型里没有影响，也不能把格距0.25解释成4位真实格式。

## Q2：量化误差与额外占用

|原数|格距0.1的取整|绝对误差|格距0.25的取整|绝对误差|
|---|---:|---:|---:|---:|
|-0.26|-0.3|0.04|-0.25|0.01|
|0.14|0.1|0.04|0.25|0.11|
|0.49|0.5|0.01|0.5|0.01|

第一组平均误差为(0.04+0.04+0.01)÷3＝0.03；第二组为0.13÷3，约0.043333。整体平均变大，但-0.26这一项反而更接近格点。不要把“平均误差更大”错误扩展为“每一个数都更差”。这些数值误差并未测量某个模型的回答正确率。

额外占用填1.2时，理想权重2GB＋给定假设1.2GB＝3.2GB，较可用3GB缺0.2GB。这是输入的教学假设，不是程序测出的电脑状态。可列运行缓冲、上下文的中间缓存、量化元数据等；操作系统和其他软件也影响实际可用资源。未知写unknown，不能为了算出结果填0。恢复未知后，总需求再次无法据现有数值确定。

## Q3：终端观察应留下什么

`ollama ls` 用来查看可用模型条目，`ollama ps` 用来查看当前运行状态。模型文件在列表里，不表示此刻一定装入工作内存。运行记录应有实际模型名称、输入材料和真实输出；运行状态没有显示时如实填写，不要求每台电脑出现固定CPU/GPU比例。

短材料必须保持“资料比较—12分钟”“核对引用—18分钟”的对应，不添加能力判断或建议。措辞变化但事实准确可通过。只出现一句“模型已启动”而没有保存实际回答，不能计为内容核验完成。观察同伴运行可以作为观察成果，但不能改写为自己设备成功。

## Q4：一份JSON文件不等于一次合格回答

默认脚本模式是 `dry_run_no_network`，只展示请求，没有发出真实模型调用。加上真实调用操作后，应检查解析结果的模式、返回模型名称、`done` 和非空 `answer`，再对照原材料检查数字与活动。`done=true` 说明接口报告响应结束，不证明回答忠实；有非空文字也可能附加没有根据的评价。

`not_completed` 是有效的错误记录，写明停在软件、模型、连接或响应哪一层即可。后备学生提交资源计算、请求路径解释及“模型实际调用未完成”，不要把没有发生的操作判通过。`elapsed_seconds` 只表示脚本测得的这一轮经过时间，不是跨设备公平排行榜，也不能独立拆出加载、输入处理与生成时间。

关于本地性，客户端第一站是127.0.0.1只是其中一项证据，还要结合已准备的本地模型和实际运行配置检查。本课未测试整台电脑其他功能是否联网，也没有证明所有AI应用都可离线。

## Q5：独立新题

1. 2×10⁹×8÷8＝2×10⁹字节＝2GB。可用2.5GB扣除权重剩0.5GB，但额外占用未知，所以不能保证能够运行。不能把“剩余”为正直接等同“资源够用”。
2. 0.12最近的0.25格点为0，误差0.12；0.39最近为0.5，误差0.11；-0.62最近为-0.5，误差0.12。平均绝对误差为0.35÷3，约0.116667，最大误差0.12。学生若将-0.62放到-0.75，请让他比较到两个相邻格点的距离0.12与0.13。
3. dry_run记录没有实际服务返回的证据，也没有真实返回文字与原材料比较的证据。请求结构正确与取得可用回答是两个阶段，不能只凭脚本打印请求就完成后面的验收。
4. 文字进入外部嵌入服务这一箭头发生了外发，整个应用不能称作完全离线。聊天生成在本机并不会取消检索编码那一步的网络依赖。

## Q6：10分评分及离堂判定

- Q0的角色区分与预测修正1分：三个角色能用自己的话解释；预测猜错不扣。
- Q1理想存储2分：单位与倍率各1分，过程可追查。
- Q2数轴取整2分：取整与误差1分，区分数轴实验和真实格式1分。
- Q2资源条件1分：未知与人为1.2假设分清，列出额外需求。
- Q3、Q4操作证据2分：真实结果或准确的未完成记录1分，能解释接口与内容分开核验1分。后备路径不冒充真实调用即可据对应目标得分。
- Q5独立迁移2分：新数值与未知条件1分，本地/外部路径和dry-run证据边界1分。

离堂句子可写：“我能根据参数数与位宽估算理想权重，并检查一次本地调用的实际返回；我没有验证长输入性能、所有插件的数据路径和模型在其他任务上的质量。”不要求照抄，但必须对应自己的实际完成范围。
