SONUB 首页 ZH English 한국어 日本語 中文 हिन्दी বাংলা اردو Español Português Français Deutsch Русский العربية Bahasa Indonesia Tiếng Việt ไทย Türkçe

如何开启通知

此浏览器或网址无法使用通知。请使用支持通知的浏览器,通过安全连接访问SONUB。

如果通知被屏蔽,请在浏览器设置中允许通知。

  1. 打开地址栏旁的站点设置或浏览器的站点设置,将此网站的通知设为允许。
  2. 在设备设置中允许浏览器发送通知,并检查勿扰模式或专注模式。
  3. 返回SONUB,刷新页面,然后通过铃铛开启通知。

在iPhone或iPad上,将SONUB添加到主屏幕,从主屏幕打开后允许通知。

教材

AI 课程

从用好 工具,到亲手做一个小型——一页内容,按章节一步步学。每一章都附有教学指南,老师只用这一页就能上课。

选择要讲授的章节,先查看目标和练习。各章的授课指南可以帮助你准备讲解和实操。

我的学习
第 1 章 · 初级 · 入门

开始之前:你的 AI 工具箱

目标

了解本课程用到哪些 工具、各自用来做什么、需要哪些账号,以及怎样保护密钥和个人信息。

这门课先理解 AI,再使用 AI 工具,最后亲手做一个小小的。你会接触三类工具:

  • 聊天助手 — 比如 ChatGPT,在对话中回答问题。
  • 编程 — 比如 Codex 和 Claude Code,读取并修改你电脑上的文件。
  • 智能体工具 — 比如 Claude Cowork,替你完成多步骤的任务。

、 和 是这些工具的共同基础,所以课程也会教。有些章节只需要免费账号,有些需要付费方案。教学指南里会写明是哪一种。你也随时可以改用 SONUB 上的内练习来跟着学。

轻松理解

可以这样想
把这门课想成往工具箱里装工具。聊天助手是用来提问和写东西的工具,编程智能体是修改你电脑上文件的工具,任务智能体是完成多个步骤工作的工具。Shell、Git 和 Python 是放工具的工作台。每个工具箱还需要一个小保险箱:用来放密码和密钥,绝不把它们粘贴到聊天里。
例子

你想给自己的社团做一个主页。你请聊天助手出主意、写文字,请编程智能体在项目文件夹里做出页面,每做好一个能用的版本就用 Git 保存,然后发布。后面的章节会一次讲一个工具,再走一遍这些步骤。

常见错误
为了让东西能用,“就这一次”把 或密码粘贴到聊天里。密钥应该放在环境变量里,或放在永远不的 里。密钥一旦泄露,要马上换新的。
一个打开的工具箱有三个格子:一个聊天气泡,一台带小机械臂的笔记本电脑,一块写字板上有个搬文件夹的机器人。工具箱放在三块积木上:一个终端窗口、一棵分叉的树和一条友好的蛇。旁边有一个小保险箱,里面放着一把钥匙和一把挂锁。
三类 AI 工具站在三个基础(Shell、Git、Python)上。密钥和密码锁好,绝不放进聊天里。
深入一点

有两个习惯比任何工具都重要。第一,核实结果:AI 给出的回答、图片或修改,在你阅读、测试或与资料对照之前,都只是草稿。第二,保护机密:绝不要把密码、API 密钥或他人的个人信息粘贴到聊天、或要分享的文件里。API 密钥(使用 AI 服务时出示的秘密钥匙)应该放在环境变量里,或放在 .env 文件(只保存在你自己电脑上的设置文件)中,绝不能保存(提交)到 Git。Git 会在第 13 章学到。

用自己的话解释

用自己的话说明本课程中的三类 AI 工具,并各举一个例子。

对照解释

聊天助手在对话中回答问题(ChatGPT)。编程智能体在项目中读取、修改文件并运行命令(Codex、Claude Code)。智能体工具跨文件和应用完成多步骤任务(Claude Cowork)。这三类工具产出的都是草稿,我必须自己核实。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

介绍课程地图(5 分钟)→ 每类工具各演示一个例子(10 分钟)→ 学生注册账号并建好课程文件夹(15 分钟)→ 安全规则与提问(10 分钟)。可以按你的课时长短调整每个部分。

屏幕演示

  1. 打开本课程,带大家看一遍章节目录:入门 → AI 是怎样工作的 → 使用 AI 工具 → 开发基础 → 制作并发布 → AI 智能体 → 持续工作的智能体 → 亲手做一个 LLM → 让你的模型随处运行 → 结课项目。
  2. 先向聊天助手问一个简短的问题,再展示编程智能体修改文件中的一行,让学生看到“对话”和“动手”的区别。
  3. 展示 API 密钥应该放在哪里(环境变量或 .env 文件),以及 .gitignore 中的一行如何让它不进入 Git。

学生任务

  1. 列出你已经能用的工具(ChatGPT、Codex、Claude、GitHub),以及还需要注册的工具。
  2. 在电脑上建一个名为 ai-course 的空文件夹,后面的章节会用到它。

完成标准

学生能说出三类 AI 工具并各举一个例子,还能说出两个安全习惯。

学生卡住时

  • 没有付费方案:跟着演示看,并使用 SONUB 上的浏览器内练习;所有概念章节都不需要账号。
  • 学校或办公室的电脑不允许安装软件:使用这些工具的网页版,以及 SONUB 的 Shell 和 Python 练习。

课堂提问

  • 向聊天助手提问,和让编程智能体修改你的文件,有什么不同?
  • API 密钥应该存放在哪里?又绝对不能出现在哪里?

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 2 章 · 初级 · AI 是怎样工作的

AI 术语:每天都会听到的 10 个词

目标

用一句简单的话分别解释日常 术语——、、、、、、、、、。

模型是从数据中学到规律的。(LLM)从海量文字中学到这些规律,并预测下一段文字。本章的词语:

  • 提示词——你输入的内容
  • 词元——模型读取的单位,也就是词语的小片段
  • 上下文窗口——模型一次能看到多少词元,包括到目前为止的对话
  • 参数(也叫)——模型内部的数字,训练会调整它们
  • 训练——漫长又昂贵的学习阶段
  • 推理——用训练好的模型来回答你

轻松理解

可以这样想
想象一家餐厅。模型是厨师,提示词是你的点菜单,词元是把食材切成的小块。上下文窗口是厨师工作台的大小,参数是厨师练出来的手艺。训练是去烹饪学校学习,推理是现在正在为你做菜。幻觉是一道看起来不错、却不是你点的菜,API 是取餐窗口,智能体是一位还会自己去买食材的厨师。
例子

你输入“明天首尔的天气怎么样?”。模型会把这句话当作词元来读。没有搜索工具的无法知道明天的天气,所以可能会编出一个听起来很像真的预报(幻觉)。有搜索工具的智能体会先查天气网站,再回答你。

常见错误
“参数越多,答案就一定越正确。”大小只是模型能力的一部分。和检查过程同样决定结果的好坏。
深入一点

还有几个词:

  • 幻觉——说得很肯定、却是错的或编出来的回答,所以你一定要核实。
  • API——一扇门,让你自己的程序发送提示词并拿回回答,通常需要一个秘密的 。
  • 聊天机器人和智能体——聊天机器人只会回答,而智能体还能行动:读取文件、运行命令、使用工具,一步步朝着目标前进。
  • 开放模型和闭源模型——模型,或公开了权重的模型(开放权重),都可以下载到你自己的电脑上运行。闭源模型只能通过公司的应用或 API 使用。

用自己的话解释

向朋友解释什么是上下文窗口,以及它为什么重要。

对照解释

上下文窗口是模型一次能看的文字有多少(按词元算)——包括你的提示词、文件和到目前为止的对话。超出窗口的内容,模型就再也看不到了,所以长对话可能会丢掉开头的细节。把重要的事实再放进提示词一次,就能解决这个问题。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

问学生听说过哪些 AI 术语(5 分钟)→ 成对讲解术语:提示词/词元、训练/推理、聊天机器人/智能体(15 分钟)→ 术语配对游戏(10 分钟)→ 自我检测(10 分钟)。

屏幕演示

  1. 把一句话输入分词器页面或 SONUB 的词元章节,一起数一数有多少个词元。
  2. 问聊天机器人一个它不可能知道的问题(一个编出来的人),展示幻觉;再演示怎样核实。
  3. 比较两种情况:聊天机器人回答“我怎样给这个文件改名?”,以及智能体真的去把它改名。

学生任务

  1. 做一张自己的术语卡:十个词,每个词配一句话的意思和一个例子。
  2. 问聊天机器人一件很本地或很新的事,找到一个幻觉,并写下你是怎样核实的。

完成标准

学生能用自己的话解释这十个词,并说出训练和推理的区别、聊天机器人和智能体的区别。

学生卡住时

  • 学生把训练和推理弄混:训练 = 备考,推理 = 考试答题。
  • 词元让人糊涂:展示一个长词或少见的词会变成好几个词元,而常用词只是一个词元。

课堂提问

  • 为什么在很长的对话里,模型会“忘记”你一开始说的话?
  • 问聊天机器人一个问题,和交给智能体一个任务,有什么不同?
来源与延伸阅读
第 3 章 · 初级 · AI 是怎样工作的

AI、机器学习与语言模型

目标

区分广泛的研究领域与具体的类型。

是构建预测、识别、规划和生成等系统的领域。有些系统使用人工编写的规则。从数据中拟合规律,则使用多层。

轻松理解

可以这样想
想一想“交通工具”。交通工具是最大的一组(人工智能)。汽车是交通工具的一种(机器学习),电动汽车是汽车的一种(深度学习),而某一款电动汽车就像一个。名字越往后,范围越小。
例子

按人写好的规则做判断的(例如把含有“免费”“中奖”的邮件标为垃圾邮件的规则),是不学习的人工智能。从示例邮件中学习的垃圾邮件过滤器是机器学习。在照片里找出猫,通常用的是深度学习。回答你问题的,是建立在 LLM 之上的。

常见错误
“人工智能就是 ChatGPT。”ChatGPT 只是用做成的一个产品。推荐系统、图像识别和路线规划也都是人工智能。
四个一层套一层的圆:最外面的圆里有机器人图标,第二层是带点的图表,第三层是由多层节点组成的网络,最里面是两个对话气泡。
人工智能是最大的圆。机器学习、深度学习和语言模型依次装在前一个圆里面。
深入一点

大语言模型(LLM)只是 AI 的一种。许多文本生成 LLM 根据可用。图像生成器、和规则系统可以采用不同机制。语言流畅不证明系统有生命,也不证明内容正确。

用自己的话解释

所有 AI 都生成下一个词吗?请举一个反例。

对照解释

不是。垃圾邮件过滤器只选“垃圾邮件”或“非垃圾邮件”,规则程序只按照既定条件运行;两者都不生成下一个词。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

问问学生心目中的 AI 是什么(5 分钟)→ 把例子分成规则、机器学习和语言模型三类(10 分钟)→ 阅读并讨论本章(15 分钟)→ 自我检测(10 分钟)。

屏幕演示

  1. 并排展示三个例子:用规则写成的垃圾邮件过滤器、学会识别人脸的相册应用,以及能生成文字的聊天助手。
  2. 画三个套在一起的圆:最外面是人工智能,里面是机器学习,再里面是深度学习,把语言模型放在最里层的圆中。

学生任务

  1. 列出你常用的五个应用,分别标注它属于规则、机器学习还是语言模型,并写出理由。

完成标准

学生能正确举出一个不生成文字的 AI 系统作为反例。

学生卡住时

  • 学生以为所有 AI 都是 ChatGPT:展示按规则做的垃圾邮件过滤器和推荐系统,说明它们也是 AI。

课堂提问

  • 一个按“低于 20 °C 就加热”规则工作的恒温器,算不算人工智能?为什么?
来源与延伸阅读
第 4 章 · 初级 · AI 是怎样工作的

编写并检验提示词

目标

明确任务、必要背景、约束及验证方式。

是引导输出的输入。比较“解释分数”和“用披萨向初学者解释二分之一,再出一道题,先别给答案”。后者明确了对象、例子和学习活动。

轻松理解

可以这样想
提示词就像告诉出租车司机要去哪里。说“去市中心”,你会被送到附近某个地方。说“市政府站 3 号出口,10 点前到”,你就会被准确送到要去的地方。目的地越清楚,司机就越不用猜。
例子
  • 模糊的:“讲讲分数吧。”
  • 清楚的:“用比萨给 9 岁的孩子解释二分之一,用三个短句,然后出一道不带答案的练习题。”

第二个提示词说清了读者、例子、长度和要做的活动。

常见错误
“只要写上‘你是专家’,答案就会是专家水平。”角色可以改变语气,却不会增加知识。事实还是需要你自己核对。
深入一点

角色设定可以引导语气,但不赋予专业能力,也不保证遵从指令。必要时要求来源,并核对它是否支持结论。用相同案例比较两种提示词。只提供必要信息;清晰的提示词有帮助,但无法消除模型的全部局限。

用自己的话解释

写“你是专家”就能保证答案可靠吗?

对照解释

不能。它可以引导表达方式,仍然需要证据和测试。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

比较模糊的请求和明确的请求(10 分钟)→ 一起改进一条提示词(10 分钟)→ 学生自己写提示词并测试(20 分钟)→ 讨论怎样核实回答(10 分钟)。

屏幕演示

  1. 先问“讲讲分数”,再用本章里那条明确的提示词提问,比较两个回答中的对象、例子和练习活动。
  2. 在提示词里加上“你是一位专家”,让大家看到回答里仍然可能有错误。

学生任务

  1. 针对你正在学的主题写一条提示词,写清楚对象、一个例子,以及核实回答的方法。

完成标准

学生的提示词写明了任务、背景、一个约束和一种核实方法。

学生卡住时

  • 回答还是很模糊:加上一个你想要的输出示例,并限制长度。

课堂提问

  • 你的提示词里,哪一部分对回答的影响最大?
来源与延伸阅读
第 5 章 · 初级 · AI 是怎样工作的

提示词工程:好用的提示词有六个部分

目标

写出包含角色、目标、背景、示例、约束和输出格式的,并一步步改进它,而不是从头再来。

就是把指令写好,让给出你需要的结果。好的提示词通常有六个部分:

  • 角色 — 模型要扮演谁
  • 目标 — 你想要什么
  • 背景 — 它需要的事实、文件或读者
  • 示例 — 一两个好回答的样本
  • 约束 — 长度、难度、要避免什么
  • 输出格式 — 列表、表格、、文件

你给出的部分越多,模型需要猜的就越少。

轻松理解

可以这样想
好的提示词就像交给厨师的一张菜谱卡。上面写着谁来做(角色)、想要什么菜(目标)、冰箱里有什么(背景)、成品照片(示例)、要避开什么(限制)以及怎么装盘(输出格式)。六样都有,厨师几乎不用猜。
例子
  • 角色:“你是一位小学科学老师。”
  • 目标:“解释水循环。”
  • 背景:“读者是 8 岁的孩子。”
  • 示例:“像这样:‘太阳把海水晒暖……’”
  • 限制:“五句话,不用难词。”
  • 输出格式:“编号列表。”
常见错误
想一次就写出完美的提示词。先写第一版,读一读回答,再只补上缺少的部分。
六块拼图分别画着面具、靶子、文件夹、星形样品、带停止标志的尺子和表格图标,它们拼进一张菜谱卡。机器人厨师接过完成的卡片,端出一盘整齐的菜;旁边放着一张只画了问号的皱纸条。
角色、目标、背景、示例、限制和输出格式像菜谱卡一样拼在一起。只给一张模糊的纸条,厨师只能靠猜。
深入一点

把提示词当作草稿。读一读回答,找出缺了什么或错在哪里,然后把正好那一点加进提示词:“用更简单的词”“给出三个选项”“注明来源”。

  • 遇到难的任务,让模型先计划,再回答。
  • 或者把任务拆成几个小提示词。
  • 对于编程,把长期不变的部分(规则、命令、风格)放进 CLAUDE.md 或 AGENTS.md 这样的项目文件里。这样就不用每次都重复。

用自己的话解释

把“做一个主页”改写成一条六个部分齐全的提示词。

对照解释

例如:“你是一位网页设计师(角色)。为我的面包店做一个单页主页(目标)。店在首尔,卖面包和蛋糕,顾客是家庭(背景)。风格和这个样本一样:……(示例)。只用 和 ,手机优先,不超过四个部分(约束)。给我一个 index.html 文件(格式)。”任何六个部分齐全的提示词都算正确。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

展示一条弱提示词和它的回答(5 分钟)→ 用六个部分重新写它(15 分钟)→ 学生分三轮改进一条提示词(15 分钟)→ 比较结果(5 分钟)。

屏幕演示

  1. 先问“写写气候”,再加上角色、读者、长度和格式提出同样的请求;比较两个回答。
  2. 在提示词里加一个示例回答,展示结果的风格怎样跟着它走。
  3. 用同一条提示词,先要求表格形式的结果,再要求 JSON 形式。

学生任务

  1. 为你自己的一件真实任务(学习计划、总结、邮件)写一条六个部分齐全的提示词。
  2. 改进两次:每次根据回答里的问题加一处修改,三个版本都保留下来。

完成标准

最终的提示词六个部分齐全,学生能指出每个问题是靠哪处修改解决的。

学生卡住时

  • 回答太长或太笼统:加上读者、长度限制和格式。
  • 模型不理会某条规则:把这条规则移到最后,清楚地说一次,并让它在回答前先检查这条规则。

课堂提问

  • 回答的风格不对时,六个部分中哪一个最有帮助?
  • 为什么要把长期有效的规则放进 CLAUDE.md 或 AGENTS.md,而不是每条提示词里都写?
来源与延伸阅读
第 6 章 · 初级 · AI 是怎样工作的

文本、词元与 ID

目标

区分文本片段()和给这些片段编的号码(ID)。

把文本分为词元,并映射到词表中的 ID。词元可能是词、子词、字符或,空格和标点也有作用。同一段文本使用不同分词器时,词元数可能不同。

轻松理解

可以这样想
分词器就像一台机器,把一长条纸带一样的文字剪成大小不一的小块,再给每一块挂上号码牌。从来不看字母,它只看一排号码牌。
例子

英文单词 “unbelievable” 可能被切成 “un”、“believ” 和 “able”。一个空格或一个句号也可能单独成为一个词元。同一句话换一个分词器,词元数量就可能不同;而且表达同样的意思,很多语言需要的词元比英语多。

常见错误
“词元数等于单词数(或字数)。”两者都不是。所以同样的内容换一种语言,费用可能不同,也可能更快被填满。
一条纸带进入切割机,出来时变成长短不一的小块,每块都挂着一个彩色圆牌,排成一行。
文字被切成大小不一的词元,每个词元都有一个 ID 号码。模型处理的是这些号码。
深入一点

实验室使用简单的词级分割,不是生产级 分词器。ID 只是标签:ID 8 的含义不是 ID 4 的两倍。上下文窗口限制模型可处理的词元数,应用可能选择、摘要或舍弃材料。

用自己的话解释

两个词元的 ID 相邻,含义就一定相近吗?

对照解释

不一定。ID 只用于识别词表项目,数字距离不表示语义距离。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

什么是词元(10 分钟)→ 用不同方法数同一句话的词元(10 分钟)→ 学生给自己的句子切分词元(20 分钟)→ 自我检测(10 分钟)。

屏幕演示

  1. 把“unbelievable!”分别切成字符、单词,以及 un + believ + able + ! 这样的词片段,并数一数各有几个。
  2. 说明 ID 只是标签:两个 ID 相邻的词元,意思可能完全不同。

学生任务

  1. 写一句话,分别按字符和按词切分,并在每一块旁边写一个编出来的 ID。

完成标准

学生能解释为什么同一段文字的词元数量可能不同。

学生卡住时

  • 学生把词元和单词混为一谈:展示一个长单词被切成好几个词元,标点可以自己就是一个词元,而空格通常会和后面的单词合成一个词元。

课堂提问

  • 为什么 AI 服务常常按词元而不是按单词来计算用量?
来源与延伸阅读
第 7 章 · 初级 · AI 是怎样工作的

向量与嵌入

目标

区分 ID、和学习得到的嵌入。

ID 是标签,是一组数值。独热向量只有对应词表位置为 1,其余为 0,并不表达语义相似性。嵌入是学习得到的向量。相关用法是否接近,取决于数据和目标。

轻松理解

可以这样想
就是给每个词在一张巨大的地图上安排一个位置。用法相似的词会靠得很近,用法不同的词会离得很远。纸质地图只有两个坐标,却用几百到几千个数字。
例子

“猫”和“狗”离得很近,“猫”和“汽车”离得很远。所以搜索“狗粮”时,即使用词不同,也能找到一篇讲“小狗吃的食物”的文章。

常见错误
“两个词靠得近,就说明意思相同,或者句子是对的。”靠得近只说明它们在里用法相似。“热”和“冷”常出现在同类句子里,所以也可能靠得很近。
一张柔和的网格地图上有三组图钉:动物聚在一起,水果聚在一起,交通工具聚在一起。各组之间连着长长的虚线,动物那组上方有一个放大镜。
用法相似的东西在地图上放得很近。距离表示用法相似,不表示内容正确。
深入一点

现代()用把中其他的信息混合进来(第 33 章会学到),因此同一词元的表示可随句子变化。相似度不保证事实正确或意义相同。“国王 − 男人 + 女人”只是某些词嵌入的示例结果,不是通用等式。检索时应在兼容的嵌入空间中比较查询与文档向量。

用自己的话解释

嵌入接近,能证明两句话表达了同一事实吗?

对照解释

不能。它们可能话题相同、观点相反,仍需阅读并核实具体内容。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

从 ID 到向量(10 分钟)→ 独热向量与学习得到的嵌入(10 分钟)→ 学生把词语摆到二维地图上(20 分钟)→ 自我检测(10 分钟)。

屏幕演示

  1. 在只有五个词的词表里写出“cat”的独热向量,说明它完全不能表示相似程度。
  2. 画一张二维地图,让 cat 和 dog 靠得近、car 离得远,并说明是训练把它们放到了这些位置。

学生任务

  1. 自选八个词,按意思摆到二维地图上,并解释其中两个位置。

完成标准

学生能区分 ID、独热向量和嵌入。

学生卡住时

  • 学生以为嵌入挨得近就代表“正确”:展示关于同一话题、意思相反的两句话,它们的嵌入也靠得很近。

课堂提问

  • 如果两句话的嵌入很接近,我们能得出什么结论,又不能得出什么结论?
来源与延伸阅读
第 8 章 · 初级 · AI 是怎样工作的

训练、推理与检索

目标

说明改变什么,以及时使用什么。

统计前一个词后出现了什么。sky 后出现 red 三次、blue 一次,其就是 3/4 和 1/4。现代神经通过优化大量来降低预测(表示预测错得有多离谱的数字),推理时结合这些权重与当前计算下一个的分数。此实验展示条件预测,并非完整的 。

轻松理解

可以这样想
训练就像花好几个月准备考试:要花很多时间和精力,而且会改变你脑子里的东西(权重)。推理就像在考场上答题:很快,脑子里的东西不会改变。 是开卷考试:答题时可以翻书查资料。
例子

一家公司想要一个能回答本公司规定的。就是让模型重新学习,让规定改变权重。RAG 是把规定手册摊开,每次提问时把对应的那一页交给模型,所以规定更新时不用重新训练。

常见错误
“模型每聊一次就会马上学会。”普通的聊天是推理。除非公司以后用这些数据重新训练,否则你的聊天不会改变权重。
左边:一个机器人被一摞摞书包围,正在转动很多小旋钮,旁边有时钟和能量图标。右边:同一个机器人的旋钮已经锁住,它旁边有一道闪电,正飞快地回答一个孩子的问题。
训练是慢慢调整旋钮(权重)。推理是用锁住的旋钮快速作答。
深入一点

微调会改变模型权重;LoRA 可冻结基础权重,只训练较小的适配。RAG(检索增强生成)检索资料并作为上下文提供,不必更新权重。BM25 使用词项匹配、词频饱和与文档长度归一化;嵌入检索比较学习得到的。两者都可能漏掉证据或检索到误导文本。一次聊天不会自动等于一次训练更新。

用自己的话解释

检索新手册并加入,就一定是微调吗?

对照解释

不是。检索增加上下文;微调需要训练过程来更新权重。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

训练与推理(10 分钟)→ 二元组计数的例子(10 分钟)→ 检索与微调(10 分钟)→ 学生给情景分类(10 分钟)→ 自我检测(10 分钟)。

屏幕演示

  1. 在黑板上一步步演算本章中 sky → red/blue 的计数例子,并算出概率。
  2. 展示一个把说明书贴进提示词的应用(检索),说明模型的权重并没有改变。

学生任务

  1. 把五个情景分成训练、推理或检索三类,例如“聊天机器人回答前先读今天的菜单”。

完成标准

学生能说明训练时改变的是什么,以及推理时模型用的是什么。

学生卡住时

  • 学生以为聊天机器人每聊一次都在学习:说明除非重新训练,它的权重不会改变。

课堂提问

  • 为什么模型能回答关于它从未训练过的文档的问题?
来源与延伸阅读
第 9 章 · 初级 · AI 是怎样工作的

指令、采样与验证

目标

知道总给出相同答案(一致性)和给出正确答案(事实准确性)不是一回事,并改变生成设置进行比较。

系统指令引导回答,但不保证服从或工具访问安全,权限必须由应用强制执行。在 (把分数变成的步骤)前调整分数:较小正值使概率集中,较大值使分布平缓。 保留固定数量的候选,top-p 按累计概率筛选。两者都不核实事实。直接选择最高分词元而不。

轻松理解

可以这样想
温度就像一个冒险旋钮。调低时,几乎总是选最可能的词;调高时,它会更常尝试出人意料的词。top-k 只在罐子里留下最可能的 k 个候选词,top-p 则从概率最大的开始往下累加,留下总和至少达到 p 的最小一组候选词。
例子

数学答案,或者必须忠于原文的摘要,用低温度。想故事点子或给东西起名字时,把温度稍高,会有更多变化。不管哪一种,事实都要自己核对。

常见错误
“温度调低,答案就会是真的。”它只是让选择更容易预料。一句错误但很像真的话,仍然是错的。
左边:一只手总是指着最高的柱子,所以每次都出现同一块积木。右边:一只手从罐子里摸球,罐子里紫色球很多、淡紫色球较少、桃色球只有几个,所以摸出来的大多是紫色,偶尔有别的颜色。
贪心解码总是选最高的那根柱子。采样是从罐子里抽,所以每次的结果都会有一点不同。
深入一点

在构建器中多次比较贪心与采样。采样也可能重复同一结果。真实系统的模型版本、、工具及数值计算也有影响,因此温度为零不保证完全相同的输出。再比较模糊问题与包含目标、背景、检查方式的问题。用原始来源核实事实,并借助提示用自己的话解释结果。

用自己的话解释

低温度模型会自信地重复错误答案吗?

对照解释

会。概率集中不是真实性的证据,必须独立核实。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

指令与权限(10 分钟)→ 用数字讲温度、top-k 和 top-p(15 分钟)→ 学生预测输出(15 分钟)→ 自我检测(10 分钟)。

屏幕演示

  1. 取三个词元的分数,分别用低温度和高温度计算,展示概率怎样变得更集中或更平均。
  2. 用高温度把同一个问题问两次,展示两次回答不一样,再说明哪一个都没有经过事实核查。

学生任务

  1. 对于概率 0.6、0.3、0.1,说出 top-k = 2 和 top-p = 0.8 各会保留哪些词元。

完成标准

学生能说明低温度让回答更稳定,但不一定更正确。

学生卡住时

  • 学生以为系统提示词是一道安全墙:说明必须由应用程序而不是提示词来执行权限控制。

课堂提问

  • 什么时候你会想用更高的温度,什么时候用更低的温度?
来源与延伸阅读
第 10 章 · 初级 · 使用 AI 工具

ChatGPT:问得好,并核实回答

目标

写出包含目标、背景、约束和输出格式的请求,一步步改进它,并在使用前核实回答。

ChatGPT 是基于的聊天助手。它能写作、总结、翻译、讲解和做计划。它还能读取你附上的文件和图片,开启相应功能时还能上网搜索。

一个好的请求有四个部分:

  • 目标——你想要什么
  • 背景——写给谁、你手上已经有什么
  • 约束——长度、语气、要避免什么
  • 格式——列表、表格、邮件

第一次的回答不理想时,不要从头再来,而是准确说出要改哪里。一个对话只谈一个主题,这样前面的消息会帮上忙,而不是添乱。

轻松理解

可以这样想
把 ChatGPT 当作第一天上班、能力很强的新帮手。他做事很快,但如果你不说,他就不了解你的情况;有时候他明明错了,听起来却很有把握。把任务讲清楚,看看第一版草稿,再给出具体的修改意见。
例子
  • 第一次请求:“写一份聚会邀请。”
  • 更好的请求:“给我 10 岁孩子的同学写一份生日聚会邀请:星期六下午 2 点,在我们家,记得带泳衣,80 字以内,语气亲切。”
  • 接着说:“把第二句改短一点,再加一句请家长在星期四之前回复。”
常见错误
在一个聊天里混着聊很多话题。前面的消息会一直影响后面的回答,所以换新话题时,就开一个新聊天。
三块踏脚石上各有一个聊天窗口:一个乱糟糟的结果,一个带铅笔修改记号、整洁一些的结果,和一个带绿色对勾的整齐结果。一个孩子在每一步都贴上一张写着意见的便利贴,并用一本书和另一份资料核对最后的答案。
用具体的意见一步一步改进答案,用之前再拿别的资料核对。
深入一点

预测的是“可能出现的文字”,所以回答再流畅也可能是错的。请它给出来源并亲自打开看,把数字和原文对照,并让列出它做了哪些假设。重要的事实,要再找一个独立的来源核对。保存的指令和项目功能能让 ChatGPT 记住你的偏好,但那仍然只是指令,不是保证,所以要一直核实。

用自己的话解释

把“帮我弄一下我的演讲”这个请求改写成包含目标、背景、约束和格式的请求。

对照解释

例如:“目标:五页幻灯片的提纲。背景:给 13 岁同学做一个三分钟的课堂演讲,主题是垃圾回收。约束:用简单的词语,每页一个统计数字并注明来源。格式:每页一个标题和两个要点。”只要清楚写出这四个部分,就是正确答案。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

弱请求与强请求的对比(10 分钟)→ 现场分三轮改进(10 分钟)→ 学生写出并完善自己的请求(20 分钟)→ 比较并核实回答(10 分钟)。

屏幕演示

  1. 先问“介绍一下韩国。”再问:“目标:给一个 10 岁孩子写五行韩国简介。背景:他住在巴西。约束:不要写历史年份。格式:项目符号列表。”比较两个回答。
  2. 接着提出一个明确的修改,比如“把第 3 行写短一点,再加一个食物的例子”,而不是从头重新问。
  3. 问一个答案里含有数字的问题,请它给出来源,打开来源,检查数字是否一致。

学生任务

  1. 选一件真实的事(一封邮件、一份学习计划、一段总结),写一个包含目标、背景、约束和格式的请求。
  2. 至少用两条追问来改进回答,并写下你核实过的一个说法以及核实方法。

完成标准

最终的请求四个部分齐全,学生还能展示一个对照来源核实过的事实。

学生卡住时

  • 回答太长或太笼统:加上长度限制和对象,再给一个你想要的例子。
  • 回答编造了来源或数字:直接指出来,要求它给出链接,凡是无法核实的内容都当作未经证实。

课堂提问

  • 在你的例子里,四个部分中哪一部分最大程度地改变了回答?
  • 为什么一个自信又流畅的回答仍然可能是错的?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 11 章 · 初级 · 使用 AI 工具

图像生成:描述、修改、核查

目标

准确地描述一张图片,每次只改一处,并在使用前检查结果中的错误、版权和诚信问题。

图像能把文字描述变成图片。很多模型还能修改你给的图片。ChatGPT 和 Codex 都能生成和编辑图片。Google 则提供 Nano Banana 图像模型(Gemini 中较早的 Imagen 模型已经停用)。一个好的图像要写明:

  • 主体和场景
  • 风格
  • 构图 — 特写还是远景,东西放在哪里
  • 颜色
  • 尺寸或宽高比

修改时,要说清楚哪里必须改、哪里必须保持不变。例如“保留女孩和背景,只把雨伞改成黄色”。

轻松理解

可以这样想
请 画图,就像在电话里向画家描述一个场景。画家看不到你脑子里的画面,所以要说清楚画里有谁、在哪里、画风、从多近的地方看、颜色和画面的形状。要求修改时,也要说清楚哪些地方必须保持不变。
例子

“黄昏时,一个打着黄伞的女孩走在下雨的街上,温暖的水彩风格,从稍远的地方看,柔和的蓝色和橙色,横向 3:2 的画面。”接着说:“女孩和街道保持不变,只把伞改成红色。”

常见错误
不放大看就直接用图。要找找有没有多出来的手指、写错的字和不可能出现的影子,也不要把生成的图片当成真实照片拿出来。
一个孩子在平板电脑上看一张生成的图:一个打着黄伞的女孩。放大镜下可以看到女孩有六根手指,被红圈圈了出来。平板旁边有一张带复选框的检查清单和一个盾牌图标。
使用生成的图片之前先放大检查手、文字和影子,并诚实说明这是 AI 做的。
深入一点

生成的图片里常藏着小错误:写错的字母、多出来的手指、不可能出现的影子。一定要放大检查。不要用生成的图片假装某件事真的发生过;未经许可,不要模仿在世艺术家或真实人物;在需要说明的场合,要说明图片是用 AI 做的。商业使用前,请先阅读工具的使用条款。

用自己的话解释

写一条修改请求:只把一张人像照片的背景改成海滩,人物完全保持不变。

对照解释

例如:“人物、脸、衣服、姿势和光线都完全保持原样。只把背景改成阳光明媚的海滩,人物身后是大海。”必须写明哪里改、哪里不变。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

弱提示词与强提示词的对比(10 分钟)→ 只改一处、其余不变的修改(10 分钟)→ 学生生成并修改自己的图片(20 分钟)→ 回顾错误和版权问题(10 分钟)。

屏幕演示

  1. 先生成“一只猫”,再生成“一幅水彩画:一只橘猫睡在阳光充足的窗边的蓝色椅子上,远景,4:3”,然后比较。
  2. 修改第二张图片:“其他都保持不变,只把椅子改成绿色。”指出任何意外被改动的地方。
  3. 放大结果,在文字、手、影子或透视中找出一处错误。

学生任务

  1. 写一条包含主体、场景、风格、构图、颜色和尺寸的图像提示词,并生成图片。
  2. 做一次只改一处的修改,并记录其他地方有没有跟着变。

完成标准

学生能展示提示词、修改请求,以及在结果中发现的一处错误。

学生卡住时

  • 图片忽略了提示词的一部分:把最重要的细节放在最前面,删掉互相矛盾的词。
  • 图片里的文字拼错了:减少要写的字,或者之后用普通的编辑软件把文字加上去。

课堂提问

  • 为什么修改请求里要说明哪些必须保持不变?
  • 什么时候不可以使用生成的图片?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 12 章 · 初级 · 使用 AI 工具

Shell 和基本命令:AI 工具运行的地方

目标

会用十个基本的命令:pwd、ls、cd、mkdir、cat、cp、mv、rm、clear、exit。能在项目文件夹里启动和退出 工具,并知道哪些命令是危险的。

Codex、Claude Code、Antigravity 以及大多数都在终端里运行。终端是一个窗口,你在里面给一个叫 的输入命令。这些是最基本的词:

  • pwd — 我在哪里
  • ls — 这里有什么
  • cd — 去那里(cd .. 回到上一层)
  • mkdir — 建一个文件夹
  • cat — 显示一个文件
  • cp — 复制
  • mv — 移动或重命名
  • rm — 删除(没有回收站)
  • clear — 清空屏幕
  • exit — 关闭会话

启动 AI 工具的方法也一样,在项目文件夹里输入:claude(Claude Code)、codex(Codex)或 agy(Antigravity CLI)。SONUB 有一门完整的 Shell 课程,在里就有练习用的终端。本章会带你去它的前几个单元。

深入一点

在 AI 工具里面,以斜杠开头的命令用来控制工具本身:

  • /init——写一个项目指令文件。
  • /help——列出所有命令。
  • /clear——开始一段新的对话。
  • /exit——退出工具。

Shell 课程的第 11 单元讲怎样安装 AI 编程工具,并用 --version 检查它们。安装命令会变,所以要和官方页面对照。按 Ctrl+C 可以停止还在运行的命令。当 AI 提出要运行一条命令时,先读一遍再允许。rm 会立即删除,没有回收站;rm -rf 会不经询问就删除一个文件夹里的所有内容。

在 Shell 命令 课程中练习

这一章的学习进度记录在那门课程里。

在终端中输入的命令
pwd                 # where am I?
ls                  # what is here?
mkdir ai-course     # make a folder
cd ai-course        # go into it (cd .. goes back up)
cat notes.txt       # show a file
cp notes.txt copy.txt
mv copy.txt old.txt # move or rename
rm old.txt          # delete for good (no recycle bin)
clear               # clean the screen

claude              # start an AI agent in this folder (or: codex, agy)
/init               # inside the agent: write the project instruction file
/help               # list the agent's commands
/exit               # leave the agent

这些命令在你自己的电脑或服务器的终端里运行,而不是在这个页面上。运行前请逐行读一遍。

用自己的话解释

要进入一个叫 ai-course 的文件夹、查看里面有什么、并确认自己在哪里,你会用哪三条命令?

对照解释

用 cd ai-course 进入,用 ls 列出里面的内容,用 pwd 显示我所在的位置。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

为什么终端对 AI 工具很重要(5 分钟)→ 现场演示 pwd、ls、cd 和 mkdir(10 分钟)→ 学生在 SONUB Shell 中完成第 1、2 单元(25 分钟)→ 第 11 单元的安装检查(10 分钟)。

屏幕演示

  1. 打开 SONUB 的 Shell 课程,在练习终端中运行 pwd、ls、mkdir ai-course 和 cd ai-course。
  2. 故意输入一条错误的命令,大家一起把错误信息读出来。
  3. 展示第 11 单元:Claude Code 和 Codex 的安装命令,以及 --version 如何确认安装成功。

学生任务

  1. 完成 Shell 第 1 单元(认识终端)和第 2 单元(文件和文件夹)。
  2. 在自己的电脑上打开终端,用命令行创建 ai-course 文件夹。

完成标准

学生完成第 1、2 单元,并能独立进入 ai-course 文件夹。

学生卡住时

  • Windows 看起来不一样:按照 Shell 课程的说明使用 PowerShell 或 WSL,或者继续在 SONUB 终端里练习。
  • 刚安装完就出现“command not found”:关掉终端再重新打开,然后查看第 11 单元中关于 PATH 的部分。

课堂提问

  • pwd、ls 和 cd 分别告诉你什么或改变什么?
  • 为什么在让 AI 智能体运行命令之前要先读一遍?
来源与延伸阅读
第 13 章 · 中级 · 开发基础

Git 和 GitHub:保存版本,一起协作

目标

用 保存每一次修改,让 的改动可以被审查和撤销;并用 分享项目、发起拉取请求()并进行审查。

Git 会给项目拍下一个个快照,叫作(commit),这样你就能看到改了什么,也能退回去。所以它是 AI 编程的安全网:让智能体动手之前先提交,之后用 git 审查它的修改,再决定保留还是撤销。

GitHub 是一个在线保存 Git 项目的网站。你可以在上面:

  • 创建
  • 推送提交
  • 发起拉取请求——一份合并一组修改的提议,别人可以阅读、评论和批准

SONUB 的 Git 课程会一步步教你这些命令;本章补充 GitHub 这一部分。

轻松理解

可以这样想
Git 就像电子游戏里的存档点。每次提交都是一个存档点,里面有整个项目的快照。所以出了问题,你可以回到上一个好的存档点。GitHub 像上的书架,在网上保存你的存档点副本,朋友可以在那里看到它们,还能提出修改建议。
例子

在请智能体“加一个深色模式”之前,先提交一次。智能体做完后,运行 git diff 看看每一行改动。如果看起来没问题,就再提交一次;如果页面坏了,git restore 能带你回到存档点。

常见错误
让智能体工作很长时间却一次也不提交。这样就没有好的存档点可以回去,一个大错误会和所有好的改动混在一起。
一条弯弯曲曲的小路上插着发光的检查点旗子,每面旗子上方有一张小快照卡片,一个虚线箭头走回到前面的旗子。上方的云保存着卡片的副本,旁边岔路上的另一个角色伸出手,想握手合并回来。
每次提交都是一个可以回去的存档点。GitHub 在网上保存副本,Pull Request 则是请求把岔路合并回主路。
深入一点

在 GitHub 上,用 issue 描述任务,用在不影响主的情况下做事,用拉取请求进行审查。含有私人内容的仓库要设为私有,绝不要提交 或密钥;一旦推送上去,就要当作已经泄露,并立即更换密钥。Codex 和 Claude Code 也能发起拉取请求,但合并之前必须由人来读一遍 diff。

用自己的话解释

AI 智能体改了五个文件,结果出了问题。哪些 Git 命令能帮你查看修改并退回去?

对照解释

git status 和 git diff 显示改了什么;git restore <file> 撤销还没提交的修改;如果已经提交了,就用 git revert 撤销那次提交。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

为什么有了 AI 更需要版本控制(5 分钟)→ 屏幕演示提交、diff 和撤销(10 分钟)→ GitHub:创建仓库、推送、发起并审查拉取请求(15 分钟)→ 学生练习(20 分钟)。

屏幕演示

  1. 在项目文件夹中运行 git init、git add 和 git commit -m "start",修改一行,再运行 git diff,准确展示改了什么。
  2. 在 GitHub 上创建仓库,推送项目,并从一个分支发起拉取请求。
  3. 在一行修改上留下审查评论,然后批准,或要求修改。

学生任务

  1. 学完 Git 课程的第 1–5 步(或证明你已经会了),然后在 ai-course 文件夹里做三次提交。
  2. 把这个文件夹推送到一个新的 GitHub 仓库,并发起一个只修改一个文件的拉取请求。

完成标准

学生的 GitHub 仓库里至少有三次提交,以及一个附有说明的拉取请求。

学生卡住时

  • 推送因身份验证被拒绝:用 GitHub CLI(gh auth login)或个人访问令牌登录,绝不要把令牌输入到聊天里。
  • 不小心提交了机密信息:立刻作废并更换密钥,再把它从代码里删掉;只删除文件是不够的。

课堂提问

  • 为什么在让 AI 智能体修改项目之前要先提交?
  • 拉取请求让其他人可以做什么?
来源与延伸阅读
第 14 章 · 中级 · 开发基础

Python 和 NumPy:构建模型的工具

目标

编写并运行简短的 ,使用 NumPy 数组——本课程中每个的基本构件。

Python 是 领域最常用的语言,因为它写起来简短,而且有强大的。SONUB 的 Python 课程在中教你输出、变量、列表、条件、循环和函数,并自动检查答案。请先学完它,或者确认你已经掌握这些概念。

不过,模型要一次处理大量数字,为此我们要用 NumPy。NumPy 数组装着一个数字网格,像 a @ b 这样一行就能把整个相乘,而这正是在做的事。

轻松理解

可以这样想
普通的 Python 像计算器一样处理数字:一次一个。NumPy 一次处理一整张数字网格,就像一个电子表格,一步就能把两张表相乘。模型是由巨大的数字网格组成的,所以靠这个工具,模型才能算得够快。
例子

用 Python 循环给一百万个数各加 1,就是一百万个小步骤。如果有 NumPy 数组 a,写 a + 1 一行就全做完了,写 a @ b 就能把两个完整的矩阵相乘。

常见错误
跳过 Python 基础课,直接从 NumPy 开始。不懂列表、循环和函数,NumPy 的报错信息会非常难读懂。
左边:一个疲惫的角色在按计算器,一长队单个的方块在排队等着。右边:一台机器一步就把两张大大的彩色网格相乘,一张结果网格闪闪发光地出现了。
循环一次处理一个数。NumPy 一次处理整张网格——这就是模型使用它的原因。
深入一点

有三个 NumPy 概念贯穿整门课:

  • shape — 有几行几列
  • 广播(broadcasting)— 运算会自动扩展到整个数组
  • 化运算 — 直接对整个数组计算,而不是写 Python 循环

本章的示例都在浏览器里运行。如果要在自己的电脑上运行,请安装 Python 3,用 python3 -m venv .venv 创建虚拟环境,用 source .venv/bin/activate(Windows 上是 .venv\Scripts\activate)启用它,再用 pip install numpy 安装 NumPy。

示例代码 在浏览器中用 Python 和 NumPy 运行。改一改代码,再运行一次。

用自己的话解释

一个数组的形状是 (4, 3),另一个是 (3, 2)。它们的乘积是什么形状?为什么?

对照解释

(4, 2):矩阵乘法要求内侧的维度(3 和 3)相等,结果保留外侧的维度 4 和 2。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

检查 Python 基础(10 分钟)→ 屏幕演示 NumPy 数组、形状和 @(10 分钟)→ 学生运行并修改示例(20 分钟)→ 一起讲解 softmax(10 分钟)。

屏幕演示

  1. 运行示例,指出形状、广播的结果和矩阵乘积。
  2. 修改 softmax 那一行里的分数,展示概率加起来仍然等于 1。
  3. 把同一个加法分别写成 Python 循环和一行 NumPy 代码,进行比较。

学生任务

  1. 把 SONUB 的 Python 课程学到函数部分,或者向老师展示你能写一个小函数。
  2. 修改示例:建一个 3×3 数组,乘以一个 3×1 数组,运行之前先预测结果的形状。

完成标准

学生能正确预测矩阵乘积的形状,并说明 softmax 返回的是什么。

学生卡住时

  • 出现关于形状的 ValueError:把两个数组的 .shape 打印出来;做 a @ b 时,内侧的两个维度必须相等。
  • 在自己的电脑上出现“No module named numpy”:激活虚拟环境,然后运行 pip install numpy。

课堂提问

  • 为什么用 NumPy 而不用 Python 循环?
  • softmax 返回的数字加起来总是等于多少?
来源与延伸阅读
第 15 章 · 中级 · 开发基础

Python:运行、观察与修改

目标

在中使用变量、条件与函数。

拥有 NumPy、scikit-learn 等数值计算与工具,因此广泛用于 开发。SONUB 通过 Pyodide 在浏览器中运行 Python,加载和软件包需要时间。打印问候语只是验证运行,不是在 AI 。

轻松理解

可以这样想
运行代码就像做科学实验:先预测会发生什么,再运行,看结果,每次只改一处。出现的信息是实验的结果,不代表你做错了。
例子

按下运行之前,先猜猜 print(2 + 3 * 4) 会显示什么。然后运行并比较。如果你猜的是 20,就改成 (2 + 3) * 4 再运行一次,看看为什么第一次的答案是 14。

常见错误
出错时一次改很多行。只改一处,再运行一次,先读报错信息的最后一行——那里通常写着问题是什么。
深入一点

下面的例子执行人写的规则。修改分数或阈值,并在运行前预测结果。return 向调用者返回值,print 只显示值。测试分数恰好等于阈值等边界情况。这个规则没有学习步骤。

示例代码 在浏览器中用 Python 和 NumPy 运行。改一改代码,再运行一次。

用自己的话解释

程序员修改 if 条件,算是程序从数据中学习了吗?

对照解释

不是。编辑规则是编程;学习需要从数据中形成模型行为的过程。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

运行示例(10 分钟)→ 改一个条件并预测输出(10 分钟)→ 学生写一个小函数(20 分钟)→ 自我检测(10 分钟)。

屏幕演示

  1. 运行本章的示例代码,然后修改问题,让 else 分支被执行。
  2. 指出修改 if 条件是编程,而不是从数据中学习。

学生任务

  1. 用 if/elif/else 写一个能回答三个不同问题的函数,并逐一测试。

完成标准

学生在运行代码之前就能预测会执行哪个分支。

学生卡住时

  • IndentationError:把 if 和 else 里面的代码行用四个空格对齐。

课堂提问

  • 由人来修改的程序,和会学习的模型,有什么区别?
来源与延伸阅读
第 16 章 · 中级 · 制作并发布

氛围编程:和 AI 说说话,做出一个主页

目标

借助 编程做一个单页主页:描述你要什么,审查每一处修改,并用 保存项目。

(vibe coding)是指主要用平常的话描述你想要的东西,让 AI 来写。你负责掌方向、测试和做决定。

从小处开始:一个文件夹、一个 Git 和一份简短的说明。说明里写清楚:

  • 网站是给谁看的
  • 有哪些部分
  • 什么风格
  • 有哪些规则——纯 和 、能在手机上用、不用外部

让智能体做出第一版,在里打开 index.html,然后每次只改一处,逐步改进:“把页头做小一点”“加一个联系方式部分”“修好手机上的布局”。

轻松理解

可以这样想
氛围编程就像你当建筑师,和施工队一起盖房子。你用平常的话描述想要的房子,施工队(AI)把它盖起来,你走进去看,指出哪里不对,请他们修改。决定盖什么、检查是否安全的,仍然是你。
例子

“给我的读书会做一个单页网站:一个标题、一块放照片的地方、下次聚会的日期和一个加入按钮。用普通的 HTML 和 CSS,要能在手机上用。”然后打开 index.html,把窗口拉窄试一试,再提出:“把按钮放大,把日期放到照片上面。”

常见错误
不打开页面就接受所有改动。每提一次要求就在浏览器里看一看,有能用的版本就。
一个放松的人在对话气泡里描述一座房子、一个调色板和一部手机。一个机器人在笔记本电脑上用彩色方块搭出一个页面。那个人拿着放大镜在手机和笔记本电脑上检查,再递回一张便利贴。一个圆形箭头把这些步骤连在一起。
描述 → AI 制作 → 你在浏览器里检查 → 你给出反馈。小步重复,每个能用的版本都保存下来。
深入一点

你仍然是开发者。接受每处修改之前都要读一遍,每完成一个能用的步骤就提交到 Git,这样随时可以退回去,还要用真实的手机宽度测试。绝不要让智能体把密码或 放进页面——主页是公开的,里面的一切都能被人看到。页面能用了,就可以发布了:下一章会用 Cloudflare 把它放到互联网上。

在终端中输入的命令
mkdir homepage && cd homepage
git init                       # save points from the first minute
claude                         # or: codex, agy

# then, inside the agent:
# "Make a one-page homepage in index.html for <who it is for>.
#  Sections: <...>. Style: <...>. Plain HTML and CSS, works on a phone,
#  no outside libraries. Show me the plan before you write."

git add index.html
git commit -m "first working homepage"
git restore index.html         # throw away a change you do not like

这些命令在你自己的电脑或服务器的终端里运行,而不是在这个页面上。运行前请逐行读一遍。

用自己的话解释

列出在氛围编程中,每处修改都要重复的四个步骤。

对照解释

描述一处修改 → 让智能体去改 → 在浏览器里检查(也要看手机宽度)→ 能用就提交到 Git,不能用就退回去。任何包含提要求、检查和保存的回答都算正确。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

一起写说明(10 分钟)→ 智能体做出第一版(10 分钟)→ 三轮“看、提要求、检查、提交”(25 分钟)→ 展示页面(5 分钟)。

屏幕演示

  1. 在一个空的 homepage 文件夹里运行 git init,启动智能体,粘贴一条六个部分齐全、用来做单页网站的提示词。
  2. 打开 index.html,把浏览器缩到手机宽度,让智能体修好出问题的地方。
  3. 先提交,再故意要一处糟糕的修改,然后用 git restore 回到上一次提交。

学生任务

  1. 做一个你自己的单页主页(社团、爱好、作品集),至少有三个部分。
  2. 至少做三次提交,每次对应一处能用的修改,并写清楚提交信息。

完成标准

页面能在浏览器里打开,在手机宽度下也好读,里面没有任何机密,并且有一串小步骤组成的 Git 历史。

学生卡住时

  • 智能体每次都把一切重写:只要求一处小修改,并说明是哪个文件、哪个部分。
  • 页面在手机上显示错乱:要求手机优先的布局,并在 390 px 宽度下检查。

课堂提问

  • 代码是 AI 写的,为什么每完成一个能用的步骤还要提交?
  • 为什么公开的主页里绝不能有 API 密钥?
来源与延伸阅读
第 17 章 · 中级 · 制作并发布

发布到网上:把你的主页部署到 Cloudflare

目标

用 Wrangler 或通过 把静态主页发布到 Cloudflare Pages,学会更新它,并知道发布后哪些内容是公开的。

Cloudflare Pages 在 Cloudflare 遍布全球的网络上静态网站,也就是 、、 和图片。它有免费方案,地址类似 your-project.pages.dev。有两种方式:

  • Direct Upload — 安装 ,运行 npx wrangler login(Wrangler 是 Cloudflare 的工具,npx 不用安装就能运行它)。用 npx wrangler pages project create my-homepage 创建项目,然后在放着 index.html 的文件夹里运行 npx wrangler pages ./ --project-name=my-homepage。
  • 集成 — 把项目推送到 GitHub,在 Cloudflare 控制台里连接这个。之后每次推送都会自动发布新版本。

一开始就要选好其中一种。Direct Upload 的项目以后不能改成 Git 集成。

轻松理解

可以这样想
部署就像把你的小店从客厅搬到热闹的大街上。在你的笔记本电脑上,只有你能看到这个页面。部署之后,文件放在世界各地的上,任何知道地址的人都能打开。
例子

你的主页文件夹里有 index.html、style.css 和一张照片。你把文件夹上传,得到一个像 your-project.pages.dev 这样的地址,然后用手机打开它。下次你改了页面再部署一次,大家看到的就是新版本。

常见错误
把里面有 或密钥的整个项目文件夹都上传上去。部署到静态网站的所有东西,任何人都能下载,所以先检查一下文件夹。
一个装着页面文件的文件夹从笔记本电脑飞上云端。从一个发光的地球网络出发,同一个彩色页面传到世界各地的人手里的手机、平板和笔记本电脑上。
部署会把你的文件复制到世界各地的服务器上,所以大家用同一个地址都能打开同一个页面。
深入一点

你发布的一切都是公开的,所以要检查文件夹里没有密钥、私人笔记或 .env 文件。

每次部署都有自己的预览地址,正式地址显示的是最新的一次,所以你可以先测试再分享。像 myname.com 这样的自定义,以后可以在控制台里添加。

你可以让编程去运行部署命令,但要先读一遍,而且绝不要把你的 Cloudflare 令牌粘贴到聊天里。

在终端中输入的命令
# Direct Upload — run in the folder that has index.html
npx wrangler login
npx wrangler pages project create my-homepage
npx wrangler pages deploy ./ --project-name=my-homepage

# -> https://my-homepage.pages.dev
# Choose at the start: a Direct Upload project cannot switch to Git integration later.

这些命令在你自己的电脑或服务器的终端里运行,而不是在这个页面上。运行前请逐行读一遍。

用自己的话解释

用三个步骤说明你的主页是怎样从你的电脑到互联网上的。

对照解释

1. 用 Wrangler 登录 Cloudflare(或连接 GitHub)。2. 把放着 index.html 的文件夹作为一个 Pages 项目上传。3. Cloudflare 从它的网络上通过 pages.dev 地址提供这个网站,每次新上传都会替换线上版本。任何包含登录、上传和公开地址的回答都算正确。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

什么是托管,为什么静态网站简单(5 分钟)→ 一起用 Wrangler 部署(15 分钟)→ 修改页面后再次部署(10 分钟)→ 用第二种方式连接 GitHub(10 分钟)。

屏幕演示

  1. 运行 npx wrangler login 和 npx wrangler pages deploy ./ --project-name=demo-homepage,然后打开 pages.dev 地址。
  2. 改一行,再部署一次,在控制台里展示新的部署和它的预览地址。
  3. 展示一个把 .env 排除在外的 .gitignore,并解释为什么静态网站里不能放任何机密。

学生任务

  1. 发布你用氛围编程做的主页,并分享它的 pages.dev 地址。
  2. 做一处改进,再发布一次,并确认修改已经上线。

完成标准

主页能通过 pages.dev 地址访问,已经发布过一次更新,学生能说明哪些内容是公开的。

学生卡住时

  • “npx: command not found”:先安装 Node.js(LTS),然后打开一个新的终端。
  • 页面显示 404:部署的应该是包含 index.html 的那个文件夹,而不是它的上一级文件夹。

课堂提问

  • 直接上传和 Git 集成有什么区别?
  • 为什么静态网站可以安全地免费托管,却不适合放机密?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 18 章 · 中级 · 制作并发布

Google Play:让你的应用装进安卓手机

目标

了解在 Google Play 上发布安卓应用的步骤:开发者账号、应用包、商店信息、测试和审核。还要了解新个人账号的测试规则。

要在 Google Play 上发布,你需要三样东西:

  • Play Console 开发者账号 — 一次性注册费和身份验证
  • 构建为 Android App Bundle(.aab)的应用 — 用你的上传密钥签名
  • 商店信息 — 名称、介绍、截图、图标、隐私政策地址,以及关于内容和数据安全的问答

如果你用 来做应用(比如用 Flutter),就让它生成发布版本。签名密钥文件和它的密码不要放进 ,也不要出现在任何聊天里。

轻松理解

可以这样想
把应用上架到商店,就像把你的商品摆上大商场的货架。商场会检查三件事:商品是不是真的属于你(签名),包装盒上有没有写清里面是什么(截图、说明、图标),你对数据是否诚实(隐私政策)。最后还有审核员来看一看。
例子

请智能体用你的上传密钥做一个签名好的发布版本,然后进入 Play Console,填写商店信息,回答数据安全的问题,先把版本发到内部测试。新的个人账号要先用 12 名测试人员做满 14 天的封闭测试,才能申请正式版。

常见错误
弄丢签名密钥,或把它到 Git 里。把密钥文件和它的密码放在项目外面,并在安全的地方留一份备份。
一个应用盒子穿过四道友好的大门:一把钥匙和火漆印,一台相机和几个相框,一面带文件的盾牌,还有一位拿着放大镜、亮出绿色对勾的审核员。最后它来到明亮的商店货架和一部手机上。
签名、商店信息、隐私和审核:每个应用在到达人们的手机之前都要通过这四道门。
深入一点

发布要经过几条测试轨道:内部测试、封闭测试、开放测试和正式版。新的个人开发者账号必须先进行一次封闭测试,至少 12 名测试者连续 14 天保持参与,之后才能申请正式版发布权限,所以要早点安排测试者。每次发布都要经过 Google 审核,每次更新都需要更高的版本。规则和界面会变,所以请对照本章旁边的 Play Console 官方帮助操作。

在终端中输入的命令
# Flutter: build a signed Android App Bundle for Google Play
flutter build appbundle
# -> build/app/outputs/bundle/release/app-release.aab

# Keep the upload key and its passwords out of Git:
#   android/key.properties
#   *.jks

这些命令在你自己的电脑或服务器的终端里运行,而不是在这个页面上。运行前请逐行读一遍。

用自己的话解释

把这些按顺序排列:正式版、封闭测试、发布应用包、商店信息。

对照解释

发布应用包 → 商店信息 → 封闭测试(新个人账号需要 12 名测试者测试 14 天)→ 正式版。应用包和商店信息谁先准备都可以,但测试一定在正式版之前。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

从应用到商店:整体流程(10 分钟)→ 一起构建发布用的应用包(15 分钟)→ 浏览 Play Console 的商店信息(15 分钟)→ 规划 12 名测试者的封闭测试(10 分钟)。

屏幕演示

  1. 展示发布版本的构建命令(Flutter 是 flutter build appbundle),以及 .aab 文件出现在哪里。
  2. 走一遍 Play Console:创建应用、商店信息、数据安全表单和测试轨道。
  3. 展示上传密钥存放在哪里,以及为什么绝不能提交或分享它。

学生任务

  1. 为你的应用写商店信息:名称、简短介绍和完整介绍,以及要拍的截图清单。
  2. 做一份测试者计划:12 个人、怎样邀请他们、怎样让他们在测试里坚持 14 天。

完成标准

学生能列出从发布应用包到正式版的步骤,能解释测试轨道和封闭测试规则,并有一份商店信息草稿和测试者计划。

学生卡住时

  • 没有开发者账号或年龄不够:用商店信息和测试者计划来练习;账号可以由家长或学校持有。
  • 上传因为版本问题被拒绝:提高版本代码(Flutter:pubspec.yaml 里 + 后面的数字)。

课堂提问

  • 为什么新的个人账号必须先做封闭测试才能发布正式版?
  • 如果丢了上传密钥会怎样?你要怎样保护它?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 19 章 · 中级 · 制作并发布

App Store:让你的应用装进 iPhone

目标

了解发布 iPhone 应用的步骤:Apple Developer 、签名、App Store Connect、TestFlight 和 App 审核。还要了解最常见的被拒原因。

在 App Store 上发布需要三样东西:

  • 一台装有 Xcode 的 Mac
  • Apple Developer Program 会员资格(每年交费)
  • 在 App Store Connect 里为你的应用建一条记录 — bundle ID、名称、截图、隐私政策地址,以及它所收集数据的隐私详情

你在 Xcode 里(或用 flutter build ipa 这样的)归档应用并上传。打开自动签名后,Xcode 会替你处理签名证书和描述文件。

轻松理解

可以这样想
App Store 和 Google Play 的思路一样,只是有 Apple 自己的几道门:一台装了 Xcode 的 Mac、每年一次的开发者会员资格、给应用命名的 bundle ID,还有 App Store Connect 里的应用记录。把它想成第二家商店,有自己的检查清单。
例子

在 Xcode 里(或用构建工具)把应用归档并上传,再通过 TestFlight 邀请几个朋友试用。改好他们反馈的问题后,填写隐私信息和截图,把这个版本审核。

常见错误
用占位截图、无法登录或缺少隐私政策的版本提交。审核员会拒绝和说明不符的应用,所以要测试你真正提交的那个版本。
一个应用盒子穿过四道友好的大门:一把钥匙和火漆印,一台相机和几个相框,一面带文件的盾牌,还有一位拿着放大镜、亮出绿色对勾的审核员。最后它来到明亮的商店货架和一部手机上。
和 Google Play 一样的四道门,只是用 Apple 的工具:Xcode 签名、App Store Connect 商店信息、隐私信息和 App Review。
深入一点

每个上传的构建版本都可以先进入 TestFlight,让测试者在公众之前安装。当你提交发布时,Apple 的 App 审核会按照它的准则检查应用。常见的被拒原因:

  • 应用崩溃,或者有占位内容。
  • 缺少隐私详情。
  • 有登录,却没给审核人员测试账号。
  • 用了第三方登录,却没有同等的、保护隐私的选项,比如 Sign in with Apple。
  • 应用只是把网站包进一个 App 里,几乎没什么可做的(最低功能规则,准则 4.2)。

读一读被拒的消息,正好修好那一点,再重新提交。

在终端中输入的命令
# Flutter on a Mac with Xcode: build the iOS archive for App Store Connect
flutter build ipa
# -> build/ios/archive/Runner.xcarchive  (open it in Xcode)
# -> Xcode: Distribute App -> App Store Connect -> TestFlight first
# A website only wrapped in an app can be rejected (App Review Guidelines 4.2 — minimum functionality)

这些命令在你自己的电脑或服务器的终端里运行,而不是在这个页面上。运行前请逐行读一遍。

用自己的话解释

你的应用因为“应用启动时崩溃”被拒了。你该怎么做?

对照解释

顺序是这样的:

  • 在真实的 iPhone 上或在 TestFlight 里,用同样的 iOS 版本重现问题。
  • 修好崩溃,提高构建号。
  • 上传新的构建版本。
  • 在 App Store Connect 里回复,说明修了什么。

修复、重新上传和回复是关键步骤。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

Apple 的路线:账号 → 构建 → TestFlight → 审核(10 分钟)→ 一起归档并上传(15 分钟)→ App Store Connect 的商店信息(15 分钟)→ 被拒原因以及怎样回复(10 分钟)。

屏幕演示

  1. 在 Xcode 里选择 Product → Archive,然后选 Distribute App → App Store Connect。
  2. 在 App Store Connect 里展示 TestFlight 标签页,添加一名内部测试者,并把构建版本安装到手机上。
  3. 一起读一条看起来很真实的被拒消息,写出修复办法和回复。

学生任务

  1. 填写一份商店信息草稿:名称、副标题、介绍、关键词、隐私政策地址,以及给审核人员用的演示账号。
  2. 对照五个常见被拒原因检查你的应用,并记下要修的地方。

完成标准

学生能按顺序解释归档、上传、TestFlight 和审核,他们的检查清单涵盖了常见的被拒原因。

学生卡住时

  • 没有 Mac 或没有会员资格:练习商店信息和检查清单,并在安卓或网页上测试应用。
  • 上传时出现签名错误:在 Xcode 里打开自动签名,并选择你的团队。

课堂提问

  • 为什么在提交审核之前要先用 TestFlight 测试?
  • 为什么你的应用有登录功能时,Apple 会要一个演示账号?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 20 章 · 高级 · AI 智能体

智能体和子智能体:AI 是怎样一步步工作的

目标

解释循环:思考、行动、观察、重复。还要解释智能体有哪些工具和权限,以及主智能体什么时候把工作交给。

智能体是一个在循环中工作的,直到任务完成或需要你出手:

  • 它读取目标。
  • 它决定下一步。
  • 它使用一个工具(读文件、运行命令、搜索网络)。
  • 它查看结果,再做决定。

它的能力来自工具,它的限制来自权限——哪些东西它不用问就可以读、改和运行。Claude Code、Codex 和 Antigravity 都是这样的智能体。它们的区别在于、设置和命令,而不在于基本的循环。

轻松理解

可以这样想
智能体就像一个热心的实习生,一步步完成任务:读目标,决定下一步,用工具,看结果,再做决定。权限就是家里的规矩——实习生不用先问你就可以打开、修改或运行哪些东西。
例子

“找出测试为什么失败,并修好它。”智能体读测试文件,运行测试,看到错误,打开,做修改,再运行一次测试。每一步就是循环转一圈。子智能体就像在第一个实习生继续工作时,再派第二个实习生去查资料。

常见错误
第一天就给所有权限。先让智能体只读和提建议,命令一个一个地批准,只在你理解的工作上才放宽权限。
一个机器人站在圆形箭头的中间,箭头上有四个站点:一面目标旗、一朵写着计划的思考云、一条工具腰带,还有一只看结果的眼睛。循环外面围着一道带门的栅栏,门口有个人举着一块绿牌和一块红牌。
目标 → 计划下一步 → 使用工具 → 看结果 → 再来一次。智能体可以做什么,由你在门口决定。
深入一点

子智能体是主智能体为工作中的某一部分启动的帮手。它有自己全新的。所以它可以读很多文件或大范围搜索,只把结论报告回来,让主对话保持简短。子智能体也可以在互不相关的部分上同时运行。

  • 放在哪里 — 在 Claude Code 里,子智能体是 Markdown 文件,写有名称、说明、允许使用的工具和指令。放在 .claude/agents/(项目用)或 ~/.claude/agents/(你自己用)里。
  • 怎么用 — 给子智能体一个范围很窄的任务,只给它需要的工具。它的报告仍然是需要你核实的草稿。

用自己的话解释

你的项目有 300 个文件,你想知道登录代码在哪里。为什么用子智能体是个好主意?

对照解释

读很多文件会塞满上下文窗口。子智能体可以在自己全新的里搜索,只返回“登录代码在这三个文件里”,这样主对话就能保持简短、专注。只读的子智能体也很安全,因为它什么都改不了。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

让一名学生扮演“智能体”,把智能体循环演出来(10 分钟)→ 观察真实智能体的工具调用(10 分钟)→ 写一个子智能体文件(20 分钟)→ 讨论什么时候不该用子智能体(10 分钟)。

屏幕演示

  1. 给编程智能体一个小任务,指出每一步:计划、工具调用、结果和下一个决定。
  2. 让智能体在整个项目里搜索一样东西,展示它把搜索交给一个只读的子智能体。
  3. 打开 .claude/agents/ 里的一个子智能体文件,读一读它的名称、说明、工具和指令。

学生任务

  1. 为你自己的一个任务(例如“修好我主页上坏掉的链接”)画出智能体循环,写上它会用到的每一个工具。
  2. 写一个只读的审查子智能体:说明什么时候用它,工具只限于读取,再加一份三行的检查清单。

完成标准

学生能解释循环、工具和权限的作用,以及为什么子智能体有自己的上下文,并有一个能用的子智能体文件。

学生卡住时

  • 子智能体从来没被用上:在说明里用请求中的原话,准确写出什么时候该用它。
  • 智能体一次做太多事:先让它给出计划,再一步一步批准。

课堂提问

  • 聊天机器人的回答和智能体循环有什么区别?
  • 为什么给子智能体的工具要比主智能体少?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 21 章 · 高级 · AI 智能体

Codex:OpenAI 的编程智能体

目标

给 Codex 一个清楚的编程任务,写明文件、预期行为和核实方法,并在保留修改之前先审查。

Codex 是 OpenAI 的编程。它可以在(Codex )、和 ChatGPT 应用中工作。它会读取你的项目、编辑文件,并运行命令来测试自己的成果。

它会遵守项目根目录下 AGENTS.md 文件里的指令,所以你只要把规则写一次就行——比如用哪条命令运行测试。Codex 在执行有风险的操作之前会请求批准。你可以决定它能自主做多少事,从只读到可以编辑工作区。

轻松理解

可以这样想
Codex 是一个可以在好几个地方使用的编程智能体——终端、你的编辑器或 ChatGPT 应用。把 AGENTS.md 想成贴在冰箱上的便条,写给每一位新来的帮手:家里的规矩和要运行的命令,写一次,每次都会被读到。
例子

在 AGENTS.md 里写上:“用 test 运行测试。绝不修改 vendor/ 里的文件。”然后对 Codex 说:“给注册表单加上输入检查,并让测试通过。”它会读这张便条,做出修改,并在告诉你完成之前运行 npm test。

常见错误
为了跳过提问而切换到完全访问。这些提问正是你在错误命令运行之前发现它的机会。
深入一点

好的编程请求要具体:改什么、在哪些文件里改、改完之后应该怎样运行,以及怎样核实(一个测试、一条命令、一组示例)。任务比较大时,先让它给出计划。Codex 完成后,阅读 ,自己运行测试,只你看得懂的内容。codex exec 可以不打开交互界面直接执行任务,在脚本里很好用。

用自己的话解释

把“帮我把改好一点”改写成 Codex 能执行、也能核实的请求。

对照解释

例如:“在 word_count.py 中,让 count_words 忽略标点和大小写。保留函数名。添加一个测试,让 'Hello, hello!' 只算作一个不同的单词。运行 -m pytest 并展示结果。”它写明了文件、行为和核实方法。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

编程智能体能做什么(5 分钟)→ 用一个清楚的请求现场完成任务(15 分钟)→ 学生给 Codex 布置自己的小任务(20 分钟)→ 一起审查 diff(10 分钟)。

屏幕演示

  1. 在 ai-course 文件夹里写一个只有一条规则的 AGENTS.md,例如“每次修改后都运行 python -m pytest。”
  2. 让 Codex 写一个带测试的小脚本,批准它的每一步,并展示测试运行的过程。
  3. 打开 git diff,在提交之前把每一行修改都讲一遍。

学生任务

  1. 给 Codex 一个写明文件、行为和核实方法的任务——例如写一个统计文本中单词数的函数,并附上测试。
  2. 审查 diff,自己运行测试,然后用一条描述修改内容的信息提交。

完成标准

学生的提交包含能正常工作的代码和测试,并且学生能解释每一行修改。

学生卡住时

  • Codex 改的比你要求的多:让它停下,用 git restore 撤销,再重新提出请求,并写明具体是哪些文件。
  • 登录或方案有问题:用你的 ChatGPT 账号登录;如果你的方案不包含 Codex,就跟着演示看,并练习审查老师的 diff。

课堂提问

  • 一个好的编程请求总是应该包含什么?
  • 为什么测试通过了还要读 diff?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 22 章 · 高级 · AI 智能体

Claude Code 1:设置项目并写下长期指令

目标

在项目中启动 Claude Code,用 CLAUDE.md 给它长期有效的指令,并用权限控制它能做什么。

Claude Code 是 Anthropic 的编程。它可以在里运行,也可以在、Claude 桌面应用和网页上使用。在项目文件夹里输入 claude 就能启动。它会读、回答关于代码的问题、编辑文件并运行命令。

项目根目录下名为 CLAUDE.md 的文件会在每次会话开始时被读取。把这些写在里面:

  • 项目的目的
  • 构建和测试的命令
  • 你的规则

/init 命令会读取项目,帮你起草一份 CLAUDE.md。

轻松理解

可以这样想
Claude Code 每次开始会话时都会读 CLAUDE.md,就像新同事第一天早上读项目手册一样。一本简短清楚的手册——项目是什么、怎么构建和测试、你的规矩——能让你不必一遍遍重复。
例子

在你的项目里运行 /init。Claude Code 会四处看看,写出第一版 CLAUDE.md。读一读,删掉错的地方,再加上两行你自己的规矩,比如“消息用韩语写”和“说任务完成之前先运行测试”。

常见错误
把 CLAUDE.md 写得像一本书那么长。长长的说明会被草草略过。只留下每天都重要的规矩,其他的移到(见 Agent Skills 一章)或单独的文档里。
深入一点

Claude Code 在编辑文件或运行命令之前会先询问你,你可以决定某个操作只允许一次、在本次会话中允许,还是始终允许。权限规则保存在 .claude/settings.json 中;计划模式(plan mode)让 Claude Code 只读取并提出计划,不做任何修改。一开始设得严格一些,只放开你信任的操作,绝不允许你看不懂的命令。

用自己的话解释

为一个小型 作业项目写三行你会放进 CLAUDE.md 的内容。

对照解释

例如:“目的:Python 课的作业练习。测试:每次修改后运行 python -m pytest。规则:函数要简短,每个函数都用注释说明。”只要包含目的、测试命令和一条规则,就是正确答案。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

检查安装并首次启动(10 分钟)→ 用 /init 生成 CLAUDE.md(10 分钟)→ 权限和计划模式(10 分钟)→ 学生设置自己的项目(20 分钟)。

屏幕演示

  1. 在 ai-course 文件夹中启动 claude,问它“这个项目里有什么?”
  2. 运行 /init,然后编辑生成的 CLAUDE.md,加一条关于测试的规则。
  3. 按 Shift+Tab 切换到计划模式,提出一个修改要求,展示在你批准计划之前什么都不会被修改。

学生任务

  1. 在你的 ai-course 文件夹中启动 Claude Code,写一份包含目的、测试命令和两条规则的 CLAUDE.md。
  2. 在计划模式下让 Claude Code 做一个修改,阅读它的计划,但不要批准。

完成标准

学生的项目里有一份包含测试命令和规则的 CLAUDE.md,并且学生能说明计划模式的作用。

学生卡住时

  • 出现“claude: command not found”:重新做一遍 Shell 第 11 单元的安装检查,并重新打开终端。
  • 它请求权限太频繁:只对运行测试这类安全的命令选择“始终允许”,删除文件的命令绝不要这样做。

课堂提问

  • 什么内容应该写进 CLAUDE.md?为什么每次会话都会读取它?
  • 什么时候你会使用计划模式?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 23 章 · 高级 · AI 智能体

Claude Code 2:计划、修改、测试、审查

目标

用 Claude Code 走完一个完整的任务循环:说明目标,审查计划,让它修改并测试,然后审查结果,决定保留还是撤销。

和编程高效合作,要遵循一个循环。说明目标以及如何核实。在任何文件被修改之前,先阅读并修正计划。让智能体编辑代码并运行测试。自己阅读 。用一次保留修改,或者撤销它。多个小循环胜过一个巨大的请求,因为每个循环都很容易核实。

轻松理解

可以这样想
和编程智能体一起工作,就像照着菜谱做菜,一边做一边尝:先决定做什么菜,读一读计划,让它做一步,尝一尝(测试),然后才继续。小步来做,容易检查,也容易撤回。
例子

第 1 轮:“计划一下怎么加一个搜索框。先不要修改文件。”修改计划。第 2 轮:“做第 1 步,然后运行测试。”读 diff 并提交。第 3 轮:做下一步。三个短回合胜过一个巨大的请求。

常见错误
不读 diff 就说“看起来不错”。diff 会准确显示改了什么——包括你没想到会被动到的文件。
左边:一个担心的角色背着巨大的背包,想一下子跳过峡谷。右边:同一个角色踩着小小的垫脚石,平静地走过去,每块石头上都有一个计划、修改、测试、检查的小循环和一面小小的存档旗。
计划 → 修改 → 测试 → 检查 → 提交,小步进行。每一轮都容易检查,也容易撤回。
深入一点

给智能体自我核实的手段:测试、一条必须成功的命令,或一个正确输出的示例。如果会话走偏了,按 Esc 停下,说明哪里不对,或者用 撤销后重新提出请求;会话太长会积累让人混乱的,用 /clear 可以从头开始。对于经常重复的工作,把步骤保存成一个技能(见“智能体技能”一章)。

用自己的话解释

把下面这些按顺序排列:阅读 diff、说明目标和核实方法、提交、批准计划、运行测试。

对照解释

说明目标和核实方法 → 批准计划 →(智能体修改代码后)运行测试 → 阅读 diff → 提交。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

在黑板上讲五步循环(5 分钟)→ 在一个小功能上现场走一遍循环(15 分钟)→ 学生在自己的项目上走两遍循环(20 分钟)→ 分享一件智能体做错的事(10 分钟)。

屏幕演示

  1. 提问:“添加一个返回文本中最常见单词的函数,并写测试。先给我看计划。”修正计划中的一个细节。
  2. 让它编辑并运行测试;当测试失败时,展示它如何读取错误并修复代码。
  3. 审查 git diff 并提交;然后故意做一个错误的修改,再用 git restore 撤销。

学生任务

  1. 在你的项目上走完一个完整循环:带核实方法的目标、计划、修改、测试、diff、提交。
  2. 再走一个循环,改进第一次的成果,并用一句话写下你在计划中修正了什么。

完成标准

学生的 Git 历史中有两次通过循环完成的提交,每次的测试都通过了。

学生卡住时

  • 智能体说测试通过了,实际却失败了:自己运行测试命令,相信输出结果,而不是它的总结。
  • 对话变得混乱:先提交或撤销已有的内容,使用 /clear,再用一个简短而准确的请求重新开始。

课堂提问

  • 为什么几个小循环比一个大请求更好?
  • 当智能体走错方向时,你该怎么办?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 24 章 · 高级 · AI 智能体

Antigravity CLI(agy):终端里的 Google 智能体

目标

用 agy 启动 Google 的 Antigravity ,并给它一个任务。把它和 Claude Code、Codex 比较,并让多个互相检查。

Antigravity CLI 是 Google 用于的编程智能体。从官方页面运行安装脚本后,用 agy 命令启动。Google 还为旧版 Gemini CLI 的用户提供了迁移指南。

它使用 Google 的 Gemini ,用法和其他智能体一样:

  • 你在项目文件夹里运行它。
  • 你描述任务。
  • 你批准它的计划和命令,它就会读取和编辑文件。

第一次,它会打开,让你用 Google 账号登录。它还能把任务的不同部分同时交给几个帮手智能体。

轻松理解

可以这样想
Antigravity CLI 是另一个在终端里运行的编程智能体,来自 Google。会用一个智能体以后,其他的也会觉得很熟悉——就像开另一辆车:踏板的位置一样,只是有些按钮和设置换了地方。
例子

在项目文件夹里启动 agy,第一次用 Google 账号登录,然后给它一个和你给 Codex 或 Claude Code 差不多的任务。比较一下不同智能体为同一个任务做出的计划。

常见错误
一字不差地照着旧的 Gemini CLI 指南做。工具和命令会变,所以请到官方页面查看现在的安装和登录步骤。
深入一点

了解三个智能体很有用,因为每个模型都有不同的长处和盲点。一个好习惯是交叉检查:让一个智能体做修改,让另一个审查;或者让几个智能体分别分析同一个问题再比较——它们意见不一致的地方,你就亲自打开文件来判断。把所有智能体共用的项目规则放在 AGENTS.md 里,很多智能体都会读它,这样它们就会遵守同样的指令。

用自己的话解释

两个智能体对一个 bug 的原因看法不同。你怎样判断谁是对的?

对照解释

看每个智能体给出的证据——文件和行号、——然后亲自检查:运行、读那一行、写一个小测试。和真实表现一致的答案胜出,哪怕只有一个智能体这么说。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

三个智能体并排比较:Claude Code、Codex、agy(10 分钟)→ 安装并登录 agy(10 分钟)→ 在两个智能体里做同一个小任务(20 分钟)→ 比较并做决定(10 分钟)。

屏幕演示

  1. 在练习项目里运行 agy,让它解释项目结构。
  2. 把同一个 bug 交给 agy 和 Claude Code 或 Codex,比较两个计划。
  3. 让一个智能体审查另一个智能体的修改,展示你怎样在两者之间做决定。

学生任务

  1. 写一个包含你的项目规则的 AGENTS.md,并检查两个智能体都遵守它。
  2. 把一个任务交给两个智能体,写一张简短的表格:各自做了什么、哪个更好、哪里错了。

完成标准

学生在一个项目上运行过 agy,在同一个任务上比较过两个智能体,并能解释为什么交叉检查能发现错误。

学生卡住时

  • agy 启动不了或无法登录:查看官方安装页面,并在浏览器里用 Google 账号登录。
  • 智能体给出的答案不一样:这正是目的所在——打开它们指出的文件,让证据来决定,而不是少数服从多数。

课堂提问

  • 为什么两个不同的 AI 智能体能比一个找出更多错误?
  • 用好几个智能体时,为什么要把规则放在 AGENTS.md 里?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 25 章 · 高级 · AI 智能体

智能体技能(Agent Skills):教 AI 智能体做可重复的任务

目标

读懂并编写 SKILL.md 文件,让 每次都用同样的方式完成可重复的任务,并测试它在什么时候会被使用。

关于智能体技能的一切 — 它是什么、如何工作、SKILL.md 的规则、做出第一个技能、技巧,以及安装 SONUB 的技能 — 都在“智能体技能”页面上。用下面的链接打开它,一起阅读,最后用本章的自我检测结束这节课。

在 智能体技能 页面学习

这一章的讲解只放在那个页面上。上课时一起打开它,并用下面的按钮在这里记录进度。

用自己的话解释

为一个把会议记录整理成行动清单的技能写一段描述。

对照解释

例如:“把会议记录整理成带负责人和截止日期的编号行动清单。当用户要求从会议中整理行动项或待办清单时使用。不用于撰写完整的会议纪要。”它说明了做什么、何时使用以及不适用于什么。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

什么是技能、它放在哪里(10 分钟)→ 一起阅读一个真实的技能(10 分钟)→ 学生写一个小技能(20 分钟)→ 测试它什么时候会被触发(10 分钟)。

屏幕演示

  1. 打开示例 SKILL.md,指出名称、描述和步骤。
  2. 把技能放到 .claude/skills/weekly-report/ 中,然后说“帮我写周报”;再问一个不相关的问题,展示技能没有被使用。
  3. 把描述改得含糊不清,展示技能怎样变得不可靠。

学生任务

  1. 为一件你经常重复的任务(总结、检查清单、报告)写一个 SKILL.md,包含清楚的描述和三到五个步骤。
  2. 用两个应该触发它的请求和一个不应该触发它的请求来测试,并记录结果。

完成标准

技能有名称、说明何时使用的描述、编号的步骤和检查方法,并且在测试中被正确使用。

学生卡住时

  • 技能从来没被用上:把人们实际会说的话写进描述里。
  • 技能被错误的请求触发:在描述中加上它不适用于什么。

课堂提问

  • 为什么智能体一开始只读名称和描述?
  • 为什么从网上安装技能之前要先读一遍?
来源与延伸阅读

产品信息核对于 2026-10-16。AI 工具变化很快,请以官方页面为准。

第 26 章 · 高级 · AI 智能体

Claude Cowork:把多步骤工作交出去

目标

用工具完成跨文件和应用的任务,设定清楚的限制,跟进它的进度,并核查完成的工作。

Claude Cowork 使用和 Claude Code 相同的智能体技术,但不需要。在 Claude 桌面应用中,你描述一个任务,再给它访问所需文件夹的权限。例如说“把这 40 张收据按月份整理进电子表格”,它就会规划步骤、逐步完成,并展示进度。它是为办公和学习工作设计的:

  • 整理文件
  • 根据笔记起草文档
  • 把信息收集到表格中

Cowork 在 Claude 的付费方案中提供。

轻松理解

可以这样想
Cowork 就像把一个文件夹交给能干的助理:“把这些收据按月份整理到表格里。”你说明工作,让它能访问需要的文件夹,然后看着进度清单,看它一步步完成。
例子

把一个会议记录文件夹交给 Cowork,并说:“做一页决定事项的总结,再做一张表,写清谁在什么时候之前做什么。”发给别人之前,先拿两份记录和表格对一对。

常见错误
为了一个小任务就让它访问你的整个网盘。只共享这项工作需要的文件夹。
深入一点

智能体能做的事越多,你的指令就越重要:

  • 只给它需要的文件夹。
  • 说明它不能做什么(删除、发送、购买)。
  • 让它在不确定时停下来问你。
  • 把结果和原件对照检查。

软件团队有一个很有用的习惯叫交叉核对:把同一个问题交给两个或更多 工具,比较它们的回答,根据证据而不是多数意见来做决定。SONUB 自己的开发者就是这样工作的——一个问题同时交给好几个 AI ,然后在源文件中逐条核实每个说法。

用自己的话解释

列出一份好的智能体工具任务说明必须包含的四项内容。

对照解释

目标、输入(哪些文件或哪个文件夹)、预期输出,以及限制(不能做什么,什么时候要停下来询问)。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

什么是智能体工具(5 分钟)→ 带限制条件的现场任务(15 分钟)→ 学生设计一份任务说明(20 分钟)→ 交叉核对两个 AI 的回答(10 分钟)。

屏幕演示

  1. 给 Cowork 一个装有笔记的示例文件夹,让它写一份一页的总结文档;指出它在哪里请求权限。
  2. 展示一份带限制条件的任务说明:用哪个文件夹、输出什么、不能做什么、什么时候要询问。
  3. 把同一个事实性问题交给两个 AI 工具,比较回答并核查来源。

学生任务

  1. 为一件真实的杂事写一份任务说明:目标、输入文件夹、预期输出,以及它不能做的三件事。
  2. 如果你能使用 Cowork,就在里面运行,并把输出中的三项与原件对照;如果不能,就把同一个问题问两个 AI 工具并比较。

完成标准

任务说明写明了目标、输入、输出和限制,学生至少报告了一项自己核查过的内容。

学生卡住时

  • 没有付费方案:用免费工具写任务说明并完成交叉核对任务——规划能力是一样的。
  • 智能体动了不该动的文件:给它文件夹的副本而不是原件,并缩小它的访问范围。

课堂提问

  • 为什么一开始要让智能体在文件的副本上工作?
  • 当几个 AI 工具意见不一致时,为什么要根据证据而不是多数意见来决定?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 27 章 · 高级 · 持续工作的智能体

目标和 Ralph Loop:让智能体一直做到真正完成

目标

设定一个有明确终点线的目标,让循环工作直到达成目标,并用检查、上限和预算让它安全地停下来。

通常智能体一旦认为一次请求已经完成,就会停下。目标能把一次请求变成一项长任务:你说明目的和终点线,智能体就会一直工作,每一步之后检查自己的进度。

在 Codex 里,这就是 /goal 命令:

  • /goal 加上想要的结果,就能设定目标。
  • 单独输入 /goal,会显示目标。
  • /goal pause、resume 或 clear 用来控制它。

目标的状态有进行中、已暂停、已完成或受预算限制。只有在通过测试这样的证据支持时,才能标记为已完成。

是同样的想法,用一个简单的技巧做成:当智能体想要结束时,一个 Stop 钩子(在它停下的那一刻自动运行的小脚本)把它拦下,再把同一条送回去。智能体在文件和 历史中看到自己之前的工作,一轮又一轮地改进它。

轻松理解

可以这样想
普通的智能体一旦认为一次请求已经完成就停下,就像跑到第一个拐角就停下的跑步者。目标就像一场有终点线和检查点的比赛:智能体一直跑,在每个检查点核对清单,只有真正到达终点线——也就是你定的完成标准——或者预算用完时才停下。
例子

“/goal 所有测试都通过,README 里写清楚怎么运行这个应用。”智能体开始工作,运行测试,看到两个失败,修好它们,检查 README,两个条件都满足了才停下。Ralph Loop 也做类似的事:每次智能体想停下时,都把同一个提示词再给它一次。

常见错误
目标没有清楚的终点线,比如“把它做得更好”。要写能检查的东西:一个能通过的测试、一个能打开的页面、一份完整的清单。
一个机器人跑步者在长长的跑道上,路上有检查点站,每过一站就多勾一个方框,其中一站有一个重试箭头。终点线上有一座奖杯和一份全部打勾的清单。一个小仪表盘上显示暂停、播放按钮和一个预算表。
智能体一个检查点接一个检查点地往前走,直到满足完成标准——或者你暂停它,或者预算用完。
深入一点

循环好不好,全看终点线。“让它更好”永远没有尽头;“tests/ 里的所有测试都通过,页面加载没有错误”就能检查。

一定要设上限,否则循环可能整夜运行,白白花钱:

  • 最多几轮
  • 一个只有在真的完成时智能体才能说的完成语
  • 一个预算

在一个新的 Git 上启动循环,把项目规则放在 CLAUDE.md 或 AGENTS.md 里,并亲自检查结果。智能体说“完成了”只是一个说法,不是证明。

在终端中输入的命令
# Codex — one long task with a finish line you can check
/goal All tests in tests/ pass and the homepage loads without errors
/goal               # show the goal and its status
/goal pause         # also: /goal resume, /goal clear

# Claude Code — Ralph Loop plugin: the same prompt again and again, with limits
/ralph-loop "Fix the failing tests in tests/. Say DONE only when all pass." --completion-promise "DONE" --max-iterations 5

这些命令在你自己的电脑或服务器的终端里运行,而不是在这个页面上。运行前请逐行读一遍。

用自己的话解释

把“把主页做好”改写成一个给循环用的目标。

对照解释

例如:“主页通过 验证器,没有控制台错误,在 390 px 宽度下好读,每个链接都能用。最多 8 轮后停止。”它有可检查的条件和上限。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

为什么大任务只回复一次不够(5 分钟)→ 写一个有终点线的目标(10 分钟)→ 运行一个有上限的短循环(20 分钟)→ 在 Git 里审查它做了什么(15 分钟)。

屏幕演示

  1. 在 Codex 里输入 /goal 加一个可以衡量的目的,再输入 /goal 查看状态,然后暂停它。
  2. 在 Claude Code 里启动一个 Ralph Loop,设定完成语和最多 5 轮,并展示记录轮数的状态文件。
  3. 循环结束后展示 git log,并对照终点线检查工作。

学生任务

  1. 把三个模糊的请求(“改进我的网站”“修 bug”“写测试”)改写成有可检查终点线的目标。
  2. 在练习分支上运行一个最多 5 轮的循环,写下每一轮改了什么。

完成标准

目标有可检查的终点线和上限,循环自己停了下来,学生核实了结果。

学生卡住时

  • 循环停不下来:取消它,加上最多轮数和一条可以测试的终点线。
  • 每一轮都把上一轮的工作撤销了:目标不清楚——把终点线写成一个测试或一份检查清单。

课堂提问

  • 为什么循环既需要终点线,又需要上限?
  • 智能体说完成了,为什么你还要检查它的工作?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 28 章 · 高级 · 持续工作的智能体

VPS 和 tmux:让智能体一天 24 小时工作

目标

租一台小型(),用 连接,在 里运行,让它在你断开连接后继续工作,并保护好服务器和你的密钥。

VPS 是你在数据中心租的一台小电脑。你的笔记本休眠时,它依然开着。你用 SSH 密钥代替密码,通过 ssh user@address 连接,安装你的工具(、、、智能体),再克隆你的项目。但如果你直接在 SSH 会话里启动智能体,连接一断它就会停下。tmux 解决了这个问题:

  • tmux new -s agent — 打开一个会话。在里面启动智能体。
  • 按 Ctrl+b,再按 d — 脱离会话。智能体会继续运行。
  • tmux attach -t agent — 之后回到同一个画面。
  • tmux ls — 列出所有会话。

轻松理解

可以这样想
VPS 是你在一个从不休息的数据中心里租的一台小电脑。tmux 就像那台电脑上的一个房间,你离开后灯还亮着:你在房间里启动智能体,关上门(分离),之后回来,会发现它还在工作。
例子

用 ssh 登录服务器,运行 tmux new -s agent,启动智能体,然后按 Ctrl+b 再按 d 离开。合上笔记本电脑。第二天,再用 ssh 登录,运行 tmux attach -t agent,看看它一晚上做了什么。

常见错误
用密码登录,并让服务器对互联网敞开。请使用 SSH 密钥,让系统保持更新,绝不把密钥放在你要共享的项目文件夹里。
左边:夜里,一个人在合上的笔记本电脑旁睡着了。一条带钥匙图标的细线通向右边,线的插头已经松脱。右边:云中的数据中心里有一个亮着灯的房间,一个机器人在屏幕前继续工作。
你的笔记本电脑可以睡觉、断开连接。在 VPS 上,tmux 会话会让智能体一直工作,直到你回来。
深入一点

整夜运行的智能体需要护栏:

  • 给它一个有终点线和上限的明确目标。
  • 让它在一个上运行并,这样你第二天早上就能审查它的工作。
  • 放在环境变量里,绝不放进,并在你的 服务商那里设置消费上限。
  • 保护好服务器:只用 SSH 密钥、开防火墙、定期更新。

用 tmux attach 或读 Git 日志来查看会话情况,用 Ctrl+C 或 tmux kill-session -t agent 来停止它。

在终端中输入的命令
ssh user@address               # log in with an SSH key, not a password
tmux new -s agent              # open a session called "agent"
claude                         # start the agent with a goal and a limit
# press Ctrl+b, then d         -> detach; the agent keeps working
exit                           # log out — the session stays on the server

ssh user@address
tmux ls                        # list sessions
tmux attach -t agent           # back to the same screen
tmux kill-session -t agent     # stop it for good

这些命令在你自己的电脑或服务器的终端里运行,而不是在这个页面上。运行前请逐行读一遍。

用自己的话解释

写出命令:启动一个名叫 agent 的 tmux 会话,让它继续运行,之后再回到它。

对照解释

tmux new -s agent,启动,按 Ctrl+b 再按 d 脱离;之后重新登录,运行 tmux attach -t agent。如果忘了名字,tmux ls 会列出所有会话。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

为什么要用服务器:一直开着,一直在线(5 分钟)→ 用密钥通过 SSH 登录(10 分钟)→ tmux 新建、脱离、重新连接(15 分钟)→ 启动一个有上限的智能体循环,稍后再检查(20 分钟)。

屏幕演示

  1. 用 ssh 连接,运行 tmux new -s agent,启动一条耗时很长的命令,按 Ctrl+b d,退出登录,再次登录并运行 tmux attach -t agent。
  2. 在 tmux 里,在练习分支上启动一个带目标和轮数上限的智能体。
  3. 展示 API 密钥放在哪里(环境变量),以及服务商的消费上限页面。

学生任务

  1. 在自己的电脑或 VPS 上练习 tmux:创建会话、脱离、列出会话、重新连接,最后结束它。
  2. 写一份夜间运行计划:目标和终点线、上限、分支、你怎样检查它、怎样停止它。

完成标准

学生能用 tmux 让程序在断开连接后继续运行,并有一份带上限和审查步骤的安全夜间运行计划。

学生卡住时

  • 重新连接时出现“no sessions”:会话已经结束,或者服务器重启了——用 tmux ls 查看,再新建一个。
  • SSH 要求输入密码或拒绝连接:把你的公钥添加到服务器上,并用对应的用户连接。

课堂提问

  • 为什么 SSH 断开时程序会停下?tmux 是怎样防止这种情况的?
  • 整夜运行的智能体一定要有哪三种限制?
来源与延伸阅读
第 29 章 · 大师 · 亲手做一个 LLM

数值、预测与激活函数

目标

编写平均值、最大值这样的小函数,并解释其输出的含义。

从平均数、最大值和阈值开始。max 返回最大值,argmax 返回其位置。在单标签分类中,该位置可表示最高分类分数对应的类别。分数不自动等于校准良好的。改变判定阈值可能改变哪些样本被判为阳性。

轻松理解

可以这样想
神经元就像一个拿着评分表的小评委。它把每个输入乘以自己有多在乎它(),全部加起来,再加上一个起始加分(偏置),然后决定反应要有多强。最后这一步就是——它像一个调光开关,把总分变成输出,比如 sigmoid 会给出 0 到 1 之间的值。
例子

三种动物的分数是:猫 2.1,狗 3.4,兔子 0.5。max 给出 3.4,argmax 给出位置 1(从 0 开始数)——也就是狗。阈值设为 3.0 时,答案是“狗”;把阈值提高到 4.0,就什么也选不出来了。

常见错误
把 0 到 1 之间的任何分数都当成可信的概率。分数看起来像百分比,却不一定经过校准——要检查在这个分数下实际答对的频率。
三个输入通过粗细不同的管子流向一个小评委角色。评委在评分表上把它们加起来,转动调光开关,一盏灯作为输出变亮或变暗。
输入 × 权重,加在一起再加上偏置,然后由激活函数决定神经元亮得有多强。
深入一点

神经元可先计算 z = w·x + b,再应用激活函数。sigmoid 将有限实数映射到 0 与 1 之间,但它只是一种激活函数,并不是所有神经元的定义。其他网络也使用 ReLU 或 GELU。实现 sigmoid 只是实现一个部件,不等于好了网络。后续任务引入从数据拟合的模型,通过示例只是检查点,不是泛化能力的证明。

用自己的话解释

对于 [0.2, 0.7, 0.1],下标从 0 开始时 max 和 argmax 各返回什么?

对照解释

max = 0.7,argmax = 1。数值和索引是不同的输出。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

平均值、最大值和 argmax(10 分钟)→ 阈值和激活函数(10 分钟)→ 学生完成 AI 实验室的任务(20 分钟)→ 自我检测(10 分钟)。

屏幕演示

  1. 对 [0.2, 0.7, 0.1] 展示最大值、argmax,以及 argmax 选出的类别。
  2. 把判断阈值从 0.5 调到 0.3,展示哪些例子的类别变了。

学生任务

  1. 在 AI 实验室的代码模式中完成平均值、最大值和阈值任务。

完成标准

学生能说明最大值和 argmax 的区别,以及为什么分数不会自动就是概率。

学生卡住时

  • argmax 的答案差了一位:提醒学生 Python 的位置是从 0 开始数的。

课堂提问

  • 为什么医生可能会给预警检测选择更低的阈值?
来源与延伸阅读
第 30 章 · 大师 · 亲手做一个 LLM

训练并评估小模型

目标

把数据分成用和用,并解释分数无法告诉你的东西。

用 scikit-learn 拟合与。Iris 有四个测量值:萼片长、宽及花瓣长、宽。拟合前先划分数据,用训练集学习,再用留出的样本评估。训练分数高而新数据表现差,可能是。预处理也只能在上拟合,防止评估信息泄漏到学习过程。

轻松理解

可以这样想
训练和测试就像准备考试。如果你把练习卷的答案背下来,在那张卷子上能得 100%,但在出新题的真正考试中却会不及格。这就是过拟合。所以我们要留出一些题目(),让模型在学习时从来看不到它们。
例子

把 150 朵鸢尾花分开:120 朵用来训练,30 朵留出来。决策树通过一个接一个地提问来分类;不限制深度时,它在那 120 朵上得 100%,但在留出来的 30 朵上得分可能更低(某些分法下是 87%)。训练分数和测试分数差距很大,就说明它背下了那张卷子,所以试着限制深度再比较。

常见错误
在调参时一次又一次地偷看测试集。每偷看一次,你就多了解一点测试题,所以最后的分数看起来比模型的真实水平更好。调参时用单独分出的验证数据(从训练数据里留出来、专门用来选设置的一部分),把测试集留到最后。
左边,一个学生背下了答案卷,因练习得了满分而微笑,接着面对一张新考卷却一脸困惑。右边,另一个学生从书中学习规律,自信地回答新考卷,旁边有几张题目卡被锁在一个盒子里。
背练习卷就是过拟合。把测试题锁起来,只在最后用它们检查模型。
深入一点

邻居数 k 和树深是拟合前选定的,回归系数则可由训练学习。用验证集或交叉验证选择设置,将测试集留作最终评估。反复根据测试结果调参,会让评估过于乐观。报告划分方式、基准模型、分数和错误案例。一个小型 Iris 实验只是入门项目,不证明模型适用于所有群体和任务。

用自己的话解释

模型在训练数据上达到 100%,接下来应该检查什么?

对照解释

在合适的未见数据上评估,并检查错误与数据泄漏。仅训练准确率不足以判断。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

在黑板上划分训练集和测试集(10 分钟)→ 训练并评估模型(15 分钟)→ 学生比较训练分数和测试分数(15 分钟)→ 自我检测(10 分钟)。

屏幕演示

  1. 把一张小表格分成训练行和测试行,用前一部分训练,用后一部分打分。
  2. 展示一个在训练数据上得 100% 分、在测试数据上却更差的模型,并说出它的名字:过拟合。

学生任务

  1. 完成回归和分类任务,记下训练分数和测试分数。

完成标准

学生能解释为什么只看训练数据上的分数是不够的。

学生卡住时

  • 数据泄漏:确保缩放等预处理只在训练部分上拟合。

课堂提问

  • 你的模型在训练数据上得了 100% 分。接下来你要检查什么?
来源与延伸阅读
第 31 章 · 大师 · 亲手做一个 LLM

亲手做 LLM 1:字符、计数和第一个生成器

目标

用字符把文字变成数字,统计哪个字符后面跟着哪个字符,并根据这些计数生成新的文字。

每个都从把文字变成数字开始。最简单的分词器给每个字符一个 ID。最简单的——(bigram)模型——统计每个字符后面跟着其他各个字符的次数,再把次数换算成。生成文字时,它按这些概率挑出下一个字符,接上去,然后不断重复。运行下面的:它会打印出 ID、"h" 后面最可能出现的字符、一段生成的文字以及(loss)。

轻松理解

可以这样想
二元模型就像给“哪个字母常常跟在哪个字母后面”记账。读了大量文字之后,你会得到一张表:“q”后面几乎总是“u”,“t”后面经常是“h”。要写字时,你就按照这张表掷一个有偏向的骰子,一次出一个字母。
例子

在“hello hello help”中,“h”后面三次都是“e”,所以在“h”之后,模型选“e”的概率是 3/3 = 1。“l”后面出现过“l”、“o”、“l”、“o”和“p”,所以每种选择都有自己的份额。生成几个字母,你会得到类似“helo hello hel”的结果。

常见错误
指望二元模型写出真正的句子。它只记得前一个字母,所以写出来的是看起来像单词的胡话。这正是后面几章要加入更多的原因。
一张由字母对格子组成的表,格子里有高低不同的计数记号,连到一个有偏向的骰子。骰子一次掷出一块字母片,排进一行越来越长的字母片里。
数一数哪一块后面跟着哪一块,把次数变成概率,然后一次掷出一块。
深入一点

损失衡量的是模型对真实的下一个字符有多“意外”——也就是它给出的概率取对数后再取负的平均值。完美的模型损失为 0。真正的 使用由多个字符组成的,并且会看长得多的上下文,但循环是一样的:文字 → ID → 下一个词元的概率 → 挑一个 → 重复。

示例代码 在浏览器中用 Python 和 NumPy 运行。改一改代码,再运行一次。

用自己的话解释

表格显示 "t" 后面出现 "h" 的概率是 0.7,出现 "e" 的概率是 0.3。模型在 "t" 之后生成时会发生什么?

对照解释

它会按照这些概率随机选择:大约 10 次里有 7 次选 "h",3 次选 "e",然后从选中的字符继续往下生成。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

在黑板上把文字变成数字(10 分钟)→ 运行代码并阅读输出(10 分钟)→ 学生修改文字和起始字符(20 分钟)→ 讨论损失(10 分钟)。

屏幕演示

  1. 运行代码,逐行讲解打印的内容:词表、编码与解码、"h" 之后的概率、生成的文字和损失。
  2. 把训练文字换成几句另一种风格的句子,再运行一次,展示生成的文字怎样变化。
  3. 指着 probs 那一行,展示每一行的概率加起来都等于 1。

学生任务

  1. 把文字换成你自己写的三句话,从你选的一个字母开始生成 40 个字符。
  2. 找出在你的文字中最常跟在 "e" 后面的字符,并亲手数一数来核对。

完成标准

学生用自己的文字运行代码,并能解释概率表中的一行代表什么。

学生卡住时

  • 生成时出现 KeyError:起始字符不在文字中;请选一个在文字里出现过的字符。
  • 输出看起来像乱码:这是正常的,因为二元组模型只看前面一个字符。

课堂提问

  • 为什么模型必须把文字变成数字?
  • 损失为 0 意味着什么?
来源与延伸阅读
第 32 章 · 大师 · 亲手做一个 LLM

亲手做 LLM 2:会学习的神经网络

目标

用一个小型代替计数:它通过学习嵌入和,并能看到三个字符的。

计数表想往前多看几个字符,规模就会爆炸,而神经网络可以做到。每个字符都有一个学习得到的,也就是嵌入。

  • 把最后三个字符的向量拼在一起,送进一个隐藏层(位于之间、把数字混合成特征的中间层)。
  • 它为每一个可能的下一个字符输出一个分数。
  • 把分数变成。

时,把预测和真实的下一个字符比较,计算,再把每个权重朝着让损失变小的方向挪一小步。这一步就是梯度下降,而反向传播负责算出这个方向。

轻松理解

可以这样想
训练神经网络就像在大雾中走下山坡,去找最低的山谷。高度就是损失——模型错得有多厉害。你看不到山谷,但能感觉到脚下的地面往哪边倾斜(梯度),于是朝下坡迈一小步。走了很多小步之后,你就接近谷底了。
例子

第 0 步时,损失大约是 3.4。在 15 个字符里随便乱猜,损失大约是 2.7,所以一开始模型比乱猜还差。大约 300 步之后,它会降到 0.2 左右,生成的文字开始出现像样的单词,因为模型会看前面三个字符。

常见错误
为了快点结束而迈大步。如果太大,你会跳过山谷,损失会来回跳动甚至爆炸。小而稳的步子通常更好。
一个小小的登山者在雾气笼罩、弯弯曲曲的山坡上迈着小步往下走,一个指向下坡的箭头为他引路,山脚下是阳光明媚的山谷。
梯度下降就是感受损失的坡度,朝下坡迈一小步,一次又一次。
深入一点

看着损失随步数增加而下降:网络正在学习。生成的文字现在能组成真正的单词,因为它看到了更多上下文。控制生成时有多“大胆”——小于 1 会选更稳妥的字符,大于 1 会更冒险。大型 有数十亿个权重,用 在海量文字上训练,但每一步训练都是同样的思路。

示例代码 在浏览器中用 Python 和 NumPy 运行。改一改代码,再运行一次。

用自己的话解释

当温度从 0.8 降到 0.2 时,生成的文字会怎样变化?为什么?

对照解释

文字会变得更重复、更保守,因为用一个很小的温度去除分数,会让最可能的那个字符的概率远远大于其他字符。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

在黑板上讲嵌入和隐藏层(10 分钟)→ 运行代码并观察损失(10 分钟)→ 学生修改温度和文字(20 分钟)→ 讲解一步训练(10 分钟)。

屏幕演示

  1. 运行代码,指出损失每 50 步都在下降。
  2. 把 generate() 中的温度先改成 0.3,再改成 1.5,比较生成的文字。
  3. 把 lr 设为 5.0 再运行一次,展示步子太大会让训练变得不稳定。

学生任务

  1. 把训练文字换成你自己的句子,重新训练,记下最终的损失。
  2. 试两个不同的温度,用一句话描述它们的区别。

完成标准

学生能展示损失在下降,并说明什么是嵌入、什么是一步训练。

学生卡住时

  • 损失变成 nan:学习率太高了;把 lr 调得比现在低,例如降到 0.1。
  • 用你的文字生成时失败:起始字符串必须是文字中出现过的三个字符。

课堂提问

  • 反向传播计算的是什么?
  • 为什么上下文越多,生成的文字就越像真正的单词?
来源与延伸阅读
第 33 章 · 大师 · 亲手做一个 LLM

亲手做 LLM 3:注意力,Transformer 的核心

目标

加入自,让每个位置都能回看前面的字符并判断哪些重要,然后并观察它。

是如今 背后的架构,它建立在注意力机制之上:

  • 对每个位置,生成一个查询(query:我在找什么?)。
  • 前面的每个位置都提供一个键(key:我包含什么?)和一个值(value:我要传递什么?)。
  • 把查询和各个键比较,得到加起来等于 1 的注意力。
  • 输出就是按这些权重把值混合起来。

因果掩码阻止一个位置去看它后面的字符,这样模型就没法作弊。位置嵌入告诉模型每个字符处在什么位置。

轻松理解

可以这样想
注意力就像一间教室,每个学生都可以回头看前面同学的笔记。每个人举起一张问题卡(查询),前面的每个同学都戴着名牌(键),手里拿着自己的笔记(值)。名牌和问题越匹配,就会抄下越多那位同学的笔记。还有一条规则:谁都不能偷看后面的同学(因果掩码)。
例子

在“The cat sat because it was tired”(猫坐下了,因为它累了)中,当模型读到“it”时,它的查询和“cat”的键匹配得很好,所以“cat”的值有很多流进了“it”。在一个训练充分的大模型里,把注意力权重打印出来,会看到“cat”旁边有一个很大的数;本章的字符级小模型则会显示注意力集中在附近的字符上。

常见错误
以为注意力权重能解释模型“想”的一切。它只显示某一层里某一个头看了哪里——是有用的线索,而不是完整的解释。
一排学生。最后一个学生举起问题卡,用手电筒往回照向前面的同学,他们的名牌有的亮、有的暗。粗细不同的丝带把笔记从他们那里送到最后一个学生手中。一道小栅栏挡住了右边的座位。
每个位置都提出一个问题(查询),和前面所有的名牌(键)比较,再把它们的笔记(值)混合起来。不许偷看后面出现的内容。
深入一点

这段完全用 NumPy 训练一个为八个字符的注意力头,并打印最后一个字符的注意力权重,让你看到它依赖前面哪些字符。真正的 Transformer 会堆叠很多层,每层有很多个头,还会加上前馈层和归一化,并用 Adam 这类优化器在多得多的文字上训练。其余的一切——、嵌入、、、和——你现在都已经亲手做出来了。

示例代码 在浏览器中用 Python 和 NumPy 运行。改一改代码,再运行一次。

用自己的话解释

分别用一句话说明查询、键和值的作用。

对照解释

查询描述当前位置在寻找什么;键描述前面每个位置包含什么,以便与查询匹配;值是按照匹配程度按比例传递下去的信息。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

用日常例子讲查询、键和值(10 分钟)→ 运行代码,阅读损失和注意力权重(10 分钟)→ 学生动手实验(20 分钟)→ 联系到真正的 LLM(10 分钟)。

屏幕演示

  1. 用一句话讲解注意力:在 "the dog ran because it was scared"(狗跑了,因为它害怕)中,单词 "it" 关注的是 "dog"。
  2. 运行代码,阅读最后一个字符的注意力权重:前面哪些位置得到的权重最大?
  3. 去掉掩码(把它乘以 0),展示损失低得可疑,因为模型能看到答案了。

学生任务

  1. 用你自己的文字训练,并从你选的起始字符串开始生成。
  2. 为另一个例子(比如 X[10:11])打印注意力权重,并描述最后一个字符关注的是什么。

完成标准

学生训练出模型,展示损失在下降,并用自己的话解释查询、键、值和因果掩码。

学生卡住时

  • 修改 T 之后出现形状错误:掩码和窗口都依赖 T,所以只在一个地方修改 T。
  • 在旧设备上训练很慢:把步数降到 200;损失仍然会下降。

课堂提问

  • 为什么模型需要因果掩码?
  • 一个位置的注意力权重加起来等于多少?
来源与延伸阅读
第 34 章 · 大师 · 亲手做一个 LLM

在你的电脑上做一个 GPT:迷你版 GPT-2

目标

用 和 PyTorch 在自己的电脑上一个和 GPT-2 设计相同的小型 GPT。看着下降,并用你的生成文字。

GPT-2 是一叠 块:

  • 嵌入和位置嵌入
  • 由自和小型组成的一层层
  • 给每个可能的下一个词元打分的最后一层

最小的 GPT-2 有大约 1.24 亿个,用大型 在几十亿个词元上训练了好几天。这对笔记本电脑来说太大了。但同样的设计做小以后,真的能在笔记本上训练。用 4 层、4 个注意力头、128 个数字的嵌入(大约 80 万个参数),它只用 CPU 大约 3 分钟,就能从一小段文字(比如莎士比亚的作品)中学会。

Andrej Karpathy 的项目 nanoGPT 用 PyTorch(一个用来搭建和训练神经网络的 Python )写成,是做这件事的经典精简:准备数据,运行训练脚本,然后生成文字。它的作者现在把它标为旧项目,并推荐更新的全栈项目 nanochat。不过,要用几百行代码看懂 GPT-2 式模型,nanoGPT 仍然是最清楚的方式。

轻松理解

可以这样想
GPT-2 就像一个多层蛋糕:同一个 Transformer 块一层又一层地叠起来,每一层都把猜测再改进一点。完整大小的蛋糕需要专业的蛋糕房(用大型 GPU 跑好几天);而用同一份配方做的纸杯蛋糕版——层数更少、更薄——在你家厨房里几分钟就能烤好。
例子

4 层、4 个注意力头、128 个数的嵌入:大约 80 万个参数,在笔记本电脑上用莎士比亚的作品训练大约 3 分钟。从中采样,你会得到带有莎士比亚式换行和人名的文字,虽然那些词不一定总有意义。

常见错误
只盯着训练损失。如果训练损失一直下降,而验证损失开始上升,说明模型在死记硬背——就在那里停下,或者把模型变小。
一家有大烤箱的大蛋糕房里,架子上放着一个高高的专业多层蛋糕;旁边,一个有同样分层花纹的小纸杯蛋糕正在家用烤箱里烘烤;一张配方卡把两者连在一起。
同一份配方,两种大小:完整的 GPT-2 需要蛋糕房,小小的 GPT-2 在你的笔记本电脑上就能烤好。
深入一点

训练就是重复同一个步骤:

  • 取一批文字。
  • 预测每一个下一个词元。
  • 衡量误差(损失)。
  • 把每个参数稍一调,让损失变小。

盯住两个数字:训练损失,以及在模型没见过的文字上的验证损失。如果只有训练损失在下降,说明模型在死记硬背。训练结束后,你会得到一个保存了所有参数的检查点文件。

在 Mac 上用 mps 设备,在 NVIDIA 显卡上用 cuda,其他情况就用 cpu 并把模型做小一点。本章之前的章节已经用 NumPy 亲手搭过同样的部件;在这里,你会按真实的规模使用它们。

在终端中输入的命令
git clone https://github.com/karpathy/nanoGPT
cd nanoGPT
pip install torch numpy transformers datasets tiktoken wandb tqdm

python data/shakespeare_char/prepare.py      # text -> characters -> numbers

# a small GPT on the CPU (about 3 minutes); on a Mac use --device=mps
python train.py config/train_shakespeare_char.py --device=cpu --compile=False \
    --eval_iters=20 --log_interval=1 --block_size=64 --batch_size=12 \
    --n_layer=4 --n_head=4 --n_embd=128 --max_iters=2000 \
    --lr_decay_iters=2000 --dropout=0.0

python sample.py --out_dir=out-shakespeare-char --device=cpu

这些命令在你自己的电脑或服务器的终端里运行,而不是在这个页面上。运行前请逐行读一遍。

用自己的话解释

说出 GPT 的三个主要部分,以及每个部分是做什么的。

对照解释

嵌入把词元和位置变成;Transformer 块(自注意力加一个小型神经网络)在词元之间混合信息;输出层把最后一个向量变成每个可能的下一个词元的分数。然后由采样选出下一个词元。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

从三个浏览器章节到 GPT-2:同样的部件,变得更大(10 分钟)→ 安装 Python 和 PyTorch(10 分钟)→ 准备数据并开始训练(15 分钟)→ 采样生成文字,看懂损失曲线(15 分钟)。

屏幕演示

  1. 展示 GPT-2 的结构图,把每个部分和“亲手做 LLM”各章对应起来:嵌入、注意力、下一个词元的分数。
  2. 用较小的 CPU 设置运行 nanoGPT 的莎士比亚字符级训练(约 3 分钟),并展示它打印出来的训练损失和验证损失。
  3. 分别用早期的检查点和最终的检查点生成文字,并比较。

学生任务

  1. 在你的电脑上(或在免费的云端笔记本上)训练这个小模型,并保存开始和结束时的损失值。
  2. 改一个设置——层数、嵌入大小或训练步数——并写下损失和生成的文字发生了什么变化。

完成标准

学生训练了一个模型,有一个检查点,能展示损失在下降,并能解释训练损失和验证损失的区别。

学生卡住时

  • 内存不足:降低批大小、块大小或层数。
  • 在 CPU 上训练非常慢:把模型做小一点,或者使用带 GPU 的免费云端笔记本。

课堂提问

  • 为什么同样的 GPT-2 设计在小得多的规模下也能工作?
  • 如果训练损失一直下降,验证损失却在上升,说明了什么?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 35 章 · 大师 · 让你的模型随处运行

运行器:让模型活起来的程序

目标

解释做什么:加载、分词、一步步运行、和输出。然后用 llama.cpp 或 Ollama 运行一个模型。

好的模型只是一个装满数字的文件。运行器是使用它的。它会重复下面的工作:

  • 把权重加载到里。
  • 用模型的把你的文字变成。
  • 运行模型,得到下一个词元的分数。
  • 用 之类的设置采样出一个词元。
  • 把它加到文字后面,一个一个显示到屏幕上(流式输出)。

它会把之前的计算结果存进(),让每个新词元都生成得很快。它还会套用模型训练时使用的聊天模板。Ollama 和 llama.cpp 是包在模型外面的运行器,而 ChatGPT 这样的服务是在自己的上运行这类运行器。

轻松理解

可以这样想
训练好的模型就像一张音乐唱片,而运行器就是唱片机。唱片里存着所有的音乐(权重),但你需要一台唱片机来读取它、把你的话变成词元、播放下一个音符,并一直播下去。不同的唱片机能读不同格式的唱片。
例子

Ollama 和 llama.cpp 可以在普通电脑上读取 文件。你输入一个问题,运行器把它切分成词元,运行模型,采样出一个词元,显示在屏幕上,然后重复——所以回答会一个词一个词地出现。

常见错误
以为本地模型需要联网用的密钥。在你自己电脑上的运行器可以提供不需要密钥的 ,而且你的数据不会离开这台机器。
一张像是由小小数字组成的圆盘似的唱片,放在一台友好的唱片机上。音符变成一个个小小的文字气泡依次冒出来,架子上还摆着几台给不同形状唱片用的唱片机。
模型是唱片,运行器是读取它的唱片机,一次播放下一个词元。
深入一点

运行器的区别在于它们在哪里运行、能读哪些文件格式:

  • PyTorch——直接运行你的训练检查点。
  • llama.cpp——在电脑和手机上运行 GGUF 文件;Ollama——在电脑上运行。
  • 和手机——还可以使用 ONNX(很多工具都能读取的模型格式),或 Apple(Core ML)和 Google(LiteRT)自己的。

很多运行器都提供本地 API,所以你自己的应用可以和你电脑上的模型对话,就像和端 API 对话一样——不需要密钥,数据也不会离开这台机器。你的 nanoGPT 检查点经过一步转换后,就能在这些引擎里运行,下一章就做这件事。

在终端中输入的命令
# a runner on your computer: download a small open model and chat
ollama run llama3.2:1b

# the same runner as a local API — no key, nothing leaves the machine
curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2:1b",
  "prompt": "Explain a token in one sentence.",
  "stream": false
}'

这些命令在你自己的电脑或服务器的终端里运行,而不是在这个页面上。运行前请逐行读一遍。

用自己的话解释

列出运行器为了生成每个新词元而重复的步骤。

对照解释

它会重复这些步骤:

  • 取到目前为止的文字,变成词元。
  • 运行模型,得到每个可能的下一个词元的分数。
  • 把分数变成。
  • 使用 temperature 等设置,采样出一个词元。
  • 把它追加上去并显示出来。

遇到停止词元或达到长度上限时,就会停下。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

权重只是数字:还缺什么?(5 分钟)→ 一步步讲运行器的循环(15 分钟)→ 用 Ollama 或 llama.cpp 运行一个小型开放模型(20 分钟)→ 调用它的本地 API(10 分钟)。

屏幕演示

  1. 在黑板上写出运行器循环:分词 → 模型 → 分数 → 采样 → 追加 → 重复,并把它和采样那一章联系起来。
  2. 在本地运行一个小型开放模型(例如用 ollama run 运行一个 10 亿参数的模型),展示词元一个个流出来。
  3. 用 curl 调用本地 API,在请求里加上 "stream": false,展示完整的回答以一个 JSON 对象的形式返回。不加的话,每个词元都会返回一行 JSON。

学生任务

  1. 用自己的话把运行器循环写成带编号的步骤,并标出在哪里用到温度。
  2. 在你的电脑上运行一个小型开放模型,测一测它每秒能生成多少个词元。

完成标准

学生能解释运行器循环的每一步,运行过本地模型,并知道运行器可以提供本地 API。

学生卡住时

  • 模型太慢或装不下:选一个更小的模型,或量化程度更高的文件。
  • 回答看起来很奇怪:聊天模板或分词器和模型不匹配——使用和模型一起提供的文件。

课堂提问

  • 为什么只有一个权重文件还不足以和模型聊天?
  • 在本地运行模型,比通过云端 API 有什么好处?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 36 章 · 大师 · 让你的模型随处运行

手机上的你的 LLM:转换、压缩、嵌入应用

目标

把转换成适合手机的格式,用把它变小,用把它嵌入应用,并在你自己的手机上离线使用。

手机的很小,所以模型必须小而且经过压缩。量化就是用更少的位来存储每个。例如用 4 位代替 16 位,文件大约能小四倍,质量只一点点。

常用的路线是:

  • 用 llama.cpp 的转换工具把模型转换成 。
  • 量化它(Q4_K_M 是常见的选择)。
  • 先在电脑上测试。

你自己的 nanoGPT 也可以导出,但第 34 章的字符级模型(shakespeare_char)不能直接导出:要用 GPT-2 (data/shakespeare)重新,并保存成 Hugging Face 的 GPT-2 格式。而且一个只在莎士比亚作品上训练过的小模型只会写莎士比亚式的文字。想要一个有用的助手,就从一个约 10 亿到 30 亿个参数的小型开放模型开始。

轻松理解

可以这样想
量化就像用一个小行李箱收拾行李去旅行。你不再把每件衬衫按原尺寸整整齐齐地叠好(每个数 16 位),而是把它们卷得紧紧的(4 位)。东西还是都装得下,看起来也差不多,但行李箱小了大约四倍——小到可以放进手机。
例子

一个 30 亿参数的模型在 16 位时大约是 6 GB;量化到大约 4 位后不到 2 GB。把 GGUF 文件复制到手机上的离线聊天应用里,打开飞行模式问它一个问题——它照样能回答。

常见错误
指望一个用莎士比亚作品训练的小小模型成为好用的助手。想要实用的手机助手,就从一个小的开放模型开始,并让提示简短一些。
左边是一个大行李箱,里面是叠得整整齐齐的衣服。右边,同样的衣服被卷得紧紧的,装进一个小行李箱,小行李箱正好放进一个手机形状的口袋,旁边有一个小飞机图标。
量化用存每个数,把同一个模型装得更小,所以它能放进手机运行——即使离线也行。
深入一点

要在手机上用它,有两种方法:

  • 快捷的方法 — 把 GGUF 文件复制到一个已经内置运行器的应用里,比如 PocketPal ,然后离线聊天。
  • 开发者的方法 — 把运行器放进你自己的应用。例如在 Native 应用里用 llama.rn,或在 Flutter 应用里用 llama.cpp 的绑定。随应用附带或下载模型文件,再从你的里调用它。

一切都留在手机上,所以没有网络也能用,数据也能保持私密。但它比端慢,还耗电,所以要让短一些、模型小一些。还有一种方法是把运行器留在你的电脑上,让手机通过同一个 Wi-Fi 调用它的本地 。这样更简单,但只有在那台电脑附近才能用。

不要把“把模型嵌入应用”和(也就是嵌入那一章讲的)搞混。手机上的小型嵌入模型也可以用来搜索你自己的笔记。

在终端中输入的命令
# your own nanoGPT: train it with the GPT-2 tokenizer (data/shakespeare, not shakespeare_char)
# and save the weights as a Hugging Face GPT-2 folder (./my-model) — then it converts like any model

# llama.cpp: model folder -> GGUF (16-bit) -> 4-bit Q4_K_M
python convert_hf_to_gguf.py ./my-model --outfile my-model-f16.gguf
./llama-quantize my-model-f16.gguf my-model-Q4_K_M.gguf Q4_K_M
ls -lh my-model-*.gguf         # about four times smaller

# quick way: copy my-model-Q4_K_M.gguf into an offline chat app (e.g. PocketPal AI)
# builder's way: embed a runner in your app (llama.rn, a llama.cpp binding) and load the file

这些命令在你自己的电脑或服务器的终端里运行,而不是在这个页面上。运行前请逐行读一遍。

用自己的话解释

用四个步骤描述从你电脑上训练好的模型,到在手机上聊天的过程。

对照解释

1. 把模型转换成适合手机的格式,比如 GGUF。2. 量化它(例如到 4 位),让它能装进内存。3. 把它放进一个内置运行器的应用——现成的离线聊天应用,或嵌入了运行器的你自己的应用。4. 在手机上加载它,离线聊天。在各个步骤之间先在电脑上测试也很好。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

为什么手机需要小模型(5 分钟)→ 在电脑上转换和量化(15 分钟)→ 在手机应用里运行(15 分钟)→ 应用是怎样嵌入运行器的(15 分钟)。

屏幕演示

  1. 展示同一个模型在 16 位和 4 位时的文件大小,并在电脑上测试两者。
  2. 把一个量化过的小型 GGUF 模型加载到手机上的离线聊天应用里,打开飞行模式,然后聊天。
  3. 展示几行应用代码:加载模型文件,并从嵌入的运行器中流式获取词元。

学生任务

  1. 选一个小型开放模型,找到它量化后的 GGUF 文件,估算它能不能装进你手机的内存。
  2. 在你的手机上离线运行它,写下速度(每秒词元数),以及它做得好的一件事和做得不好的一件事。

完成标准

学生能解释转换、量化以及把运行器嵌入应用,并在手机上(如果没有手机,就在电脑上)离线运行过一个模型。

学生卡住时

  • 应用在加载时崩溃:模型对手机内存来说太大了——用更小的模型或更强的量化。
  • 没有手机:在电脑上用 llama.cpp 运行同一个 GGUF 文件;步骤是一样的。

课堂提问

  • 4 位量化让你得到什么,又失去什么?
  • 为什么在设备上运行的模型对隐私有好处?
来源与延伸阅读

产品信息核对于 2026-10-15。AI 工具变化很快,请以官方页面为准。

第 37 章 · 大师 · 结课项目

结课项目:用 AI 做点东西,并展示你的成果

目标

用本课程学到的工具规划、制作并展示一个小项目,附上 历史和能证明它可用的核查。

选一个小而有用的项目,比如为你的班级做一个测验生成器、一个整理文件的脚本、一个介绍兴趣爱好的网页,或者用你喜欢的文字一个属于你自己的迷你。然后这样做:

  • 写一页计划:目标、使用者,以及你打算怎样检查它能否正常工作。
  • 和编程一起,用一个个小循环来制作。
  • 每完成一个能用的步骤,就一次。
  • 用 AGENTS.md、CLAUDE.md 或技能让智能体遵守你的规则。
  • 最后,在 上发起一个拉取请求,说明你做了什么、怎样试用。

轻松理解

可以这样想
期末项目就像科学展览会。你选一个小问题,做出能回答它的东西,测试它,然后站在你的海报旁讲解:什么成功了,什么出了错,你是怎么发现的。故事讲得是否诚实,和结果一样重要。
例子

项目:给你们班做一个测验生成器。计划:从一章里出 10 道题,请朋友检查。和智能体一起用小循环来做,每完成一个能运行的步骤就提交一次,记下 出错题的一个时刻以及你是怎么发现的,然后附上截图发起一个拉取请求。

常见错误
选了一个大到做不完的项目。一个能运行、讲得清楚的小项目,胜过一个永远跑不起来的大项目。
一个学生自豪地站在科学展览海报旁,海报上有简单的图标——一张计划表、一台带着小机器人的笔记本电脑、一张检查清单和一个放大镜——同学们在一旁观看。
制定计划,用小循环来做,检查,并诚实地展示——你做了什么,AI 做了什么,以及你是怎么检查的。
深入一点

展示和一样重要:展示你的计划、AI 出错的一个时刻以及你是怎样发现的、你做过的测试或核查,以及你下一步打算做什么。要如实说明——哪些部分是你写的,哪些是 AI 写的,你又是怎样核查它们的。

用自己的话解释

你最终的拉取请求的说明中应该包含哪四项内容?

对照解释

项目做什么、怎样运行或试用、怎样核查过(测试或示例),以及哪些部分是在 AI 帮助下完成的。

这一栏由你自己标记,这里不打分。

要把这一章标记为已理解吗?

目前还不能取消,请在真正理解后再标记。

已标记为理解

这一栏由你自己标记,这里不打分。

教学指南

在课堂上如何讲这一章。学生也可以看。

课堂流程

项目创意和范围(15 分钟)→ 学生在一节或几节课中规划并制作 → 结合 Git 历史和演示进行展示(每人约 10 分钟)。

屏幕演示

  1. 展示一份示例计划,包含目标、使用者、核查方法和三个里程碑。
  2. 展示一个完成的示例仓库:提交记录、一份 CLAUDE.md 或 AGENTS.md,以及一个说明清楚的拉取请求。
  3. 做一个简短的示例展示,其中包括一次 AI 的错误以及它是怎样被发现的。

学生任务

  1. 写好一页计划,在开始制作之前先得到老师的批准。
  2. 至少用三次提交完成制作,并发起一个附有说明和试用方法的拉取请求。

完成标准

拉取请求已经发起,项目按说明正常工作,学生能解释一次 AI 的错误和一项核查。

学生卡住时

  • 项目太大:先缩减成一个从头到尾都能用的功能,再慢慢添加。
  • 代码能运行,但学生解释不了:让智能体逐行解释,然后自己重写其中一部分。

课堂提问

  • 哪一项核查最让你确信你的项目能正常工作?
  • 哪些部分是你自己做的,哪些是 AI 做的?