自然语言
是新的编程语言
八节课,不写一行代码,做出一个中文猜词游戏;再让六个 AI 来玩它,亲手做出一份模型 benchmark(基准测试,用同一套题比不同模型的强弱与成本)。
三代软件的区别不在语言,在「程序是怎么来的」
| 对比 | Software 1.0 | Software 2.0 | Software 3.0 |
|---|---|---|---|
| 程序怎么来的 | 人一行行写出规则 | 拿数据训练出来 | 用自然语言在上下文里说出来 |
| 长什么样 | 源代码:能读、能审、能改 | 权重矩阵:几十亿个浮点数,没法解释 | 一段话:上下文窗口里的 token(词元) |
| 人做什么 | 想清规则 → 编码 → 测试 | 定损失函数、备数据、搭网络 | 把意图、约束、例子放进上下文 |
| 典型产品 | 编译器、数据库、Excel | 人脸识别、推荐系统、AlphaGo | ChatGPT、Claude Code、Midjourney |
| 出错的样子 | bug(程序缺陷):能复现、能定位到那一行 | 泛化失败:错得有规律,但说不清 | 幻觉、误解意图:一本正经地答错 |
还有一行没写进表里 —— 需要什么人:1.0 要软件工程师,2.0 还得加上机器学习工程师和一整套数据设施,3.0 只要一个能把话说清楚的人。这个人可以是你。
门槛没有消失,只是从语法挪到了意图
少一个分号都不行。只有专业人士会写,而且全世界的软件工程师从来都不够用。
一个模型只会一件事,换个问题就得重新收数据、重新训练。个人从头训一个模型已经不现实。
训练一次,换问题只换一段话,权重一个都不动。需要的只是一个会说清楚的人 —— 可以是你。
因为语言本来就能作用于世界:咒语、圣旨、合同 —— 一说出口,现实就变了。哲学家 Austin 在哈佛的讲座就叫《How to Do Things with Words》。代码只是最僵硬的那种咒语,僵硬到只有专业人士会念。
有个比方说得好:以前程序员像巫师,得背下晦涩的咒语才能施法;AI 相当于给每个人发了一根魔杖。Karpathy 说 prompt 就是程序 —— 这不是比喻:一段能改变机器行为的文字,就是程序的定义。
它就是联想输入法 —— 所以它会一本正经地编
它看你前面几个字,按「这之后最常出现什么」排出候选。排序是算出来的,不是从哪张表里查出来的。
Claude、ChatGPT 做的是完全一样的事,区别只有两个:它读过的东西几乎是整个互联网;它看的不是前面五个字,是你这整段话。它不查资料,也不判断对错,只算下一个 token 最可能是什么。
它多半会给你一段像模像样的介绍:有主人公,有时代背景,有主题分析。问题是,鲁迅一生没有写过长篇小说,《铁屋》这本书也不存在。这个叫幻觉。
题目其实没看懂,但为了面子,也要用一串专业词把答案编圆。他不是想骗人,他只是从来不说「我不知道」。
幻觉不是 bug,是「猜下一个词」这个机制的副产品:它输出的是最像的那句话,不是最真的那句话 —— 流畅不等于正确。能治它的不是骂它,是给它一条退路 —— 允许它说不知道。解法在「三件事」那一页,做法在第 2 节。
角色扮演换的是语气,不是智商
「你是一位世界顶级的前端专家,有强迫症。请帮我做一个好看的登录页。」
「好看」是多好看?间距多少?用哪几个颜色?密码错了怎么提示?你一个字都没说,它只能去模仿互联网上「专家」这个词周围的语料 —— 而那里面平庸的比杰出的多得多。
结果:语气非常专业,选择还是随机的。你真正在意的约束,一条都没进去。
「做一个登录页:邮箱和密码两个输入框,卡片宽 420 像素,间距都用 8 的倍数。密码少于 8 位时,在输入框下面显示一行红字提示。」
一个字的人设都没有。它现在不用猜你的品味,因为你的品味已经写成了数字和条件。
结果:第一版就能用。接下来改的是细节,不是方向。
它以前为什么管用:GPT-3 那一代没做过指令微调,你不给人设它就顺着你的话瞎续写。现在厂商已经用后训练把「当一个好助手」塑造进了模型;「帮我做个登录页」这句话本身,就已经把前端的情境交代了。
证据:Zheng 等人拿 162 个人设,在四个模型家族的九个模型上做对照,没发现加人设能稳定提高准确率。我自己也试了:同一道算法题,一边人设是「Z 世代网络闺蜜」,一边是「资深程序员」,两边都写对了,最明显的差别是语气词。
皮套换了,人没换 —— 这就是 cosplay,或者说 VTuber。滥用人设是偷懒:具体要求没想清楚,指望一个通用角色替你补。就像作文开头硬引名人名言,有气势,没信息。
把它当成今天早上才到岗的临时工
你能想到的书他都读过,什么编程语言都会写。教他 for 循环是在侮辱他。
不知道你在做什么产品、给谁用、你这边有哪些不成文的规矩、上一次是怎么出的事故。
把这些他不可能知道的东西写下来交给他。这件事不是编程,是写作。
这个比喻出自 Anthropic 那场提示词工程圆桌(AI prompt engineering: a deep dive),提出者是负责塑造 Claude 性格的 Amanda Askell。下一页讲:交接具体交哪三件事。
三件事:说真实任务、写出默认假设、留一条退路
目标: 把 data/vectors.f32 里的词向量接进游戏, 玩家每猜一个词,返回它和目标词的真实余弦分数。 约束: 词表在 data/vocab.json,词表外的词返回「词表里没有这个词」; 余弦在后端算,前端只负责显示。 退路: 如果文件格式和我说的不一样,或者你不确定, 先停下来告诉我原因,不要自己编一个格式继续做。
别说一个擦边的任务,再指望它猜中你真正要的那个。想要网页就说网页。
你觉得「网页当然要能在手机上看」,它不觉得,因为你没说。所有你认为不言而喻的事,对一个今天早上才来的人都不是。
允许它说不知道,它才不会编。Amanda Askell 在那场 Anthropic 圆桌上给的原话是:让它从图表读数据时加一句「如果图片不是图表,或者你不确定,就说明原因,不要猜」。
左边这三段是大白话,第一版也不必面面俱到 —— 先说出来,有了结果再改,写作有改稿,跟它合作也一样。怎么用标签把指令和数据隔开,第 2 节讲。
同一句话说到第三遍,就把它存起来
第 1 次对话 用中文回答,技术术语保留英文。帮我解释一下什么是 embedding。 第 2 次对话 用中文回答,技术术语保留英文。这段报错是什么意思: TypeError: Cannot read properties of undefined …… 第 3 次对话 用中文回答,技术术语保留英文。帮我看看这个 prompt 哪里没说清楚…… —— 停。这句话为什么每次都要你说?
ChatGPT 叫「自定义指令」,Claude 叫「项目指令」,Claude Code 是一个叫 CLAUDE.md 的文件(第 2 节你会亲手写)。存一次,以后每次对话它都先读到。
产品背后本来就有一段你看不见的系统提示词(system prompt),交代助手是谁、守什么规矩;你在对话框里打的叫用户提示词(user prompt)。用临时工的话说:一个是公司规矩,一个是这次交给他的活。规矩优先。
先把眼前的事说清楚就够了。哪句话反复要说,再把它存起来 —— 说到第三遍是个好门槛。
你反复说的话,你会存进设置;全人类都在反复说的话,模型厂会直接存进模型。下一页。
咒语会过期,原理不会:咒语用到再学,原理现在就学
- 1
「Let's think step by step」:一篇论文发现,加上这句能把当时模型在算术题上的正确率从 17.7% 提到 78.7%。现在推理模型自己会在你看不见的地方写草稿,OpenAI 的官方建议反而是别加。
- 2
「你是顶级专家」:角色扮演那页刚拆过。
- 3
某个工具眼下的快捷键、配置文件的写法。
它们不是失效了,是被招安了:足够通用的技巧,会被模型厂吸收进模型、系统提示词或工具里,你不用再手动提醒。所以用到再学,问 AI 一句就有。「只要学得够慢,就不用学了」—— 这句玩笑对了一半。
- 1
它看到的字跟你看到的不一样。文字先被切成 token:strawberry 在你眼里是十个字母,在它眼里是两三块,所以早期模型数不清里面有几个 r。
- 2
流畅不等于正确。训练目标是「预测下一个 token」,没有附送事实核验器 —— 就是刚才的幻觉。
- 3
「我明明说过了」—— 但它可能已经看不见了。一次能看的内容有上限,聊久了最早几轮已经滑出窗口;聊天也不会改它的权重,关掉对话就忘。
从 Transformer 那篇论文到现在,模型换了无数代,token、上下文窗口、训练和推理的区别这几个词还在解释现象。这门课的八个词,全在这一堆里。
八节课只做一件事:把游戏做出来,让 AI 来玩
| 节 | 标题 | 这节学到的概念 | 课上动手 |
|---|---|---|---|
| 1 | 自然语言是新的编程语言 | 三代软件;施法者;联想输入法;幻觉;临时工;咒语会过期 | 玩中文 Semantle 十分钟 |
| 2 | 开机:怎么跟它说话 | 意图外部化;退路条款;XML 标签;system / user prompt;CLAUDE.md 与 SKILL; 存档;前端 / 后端;端口;依赖 | 让 agent 做出游戏外壳 |
| 3 | 词变成数字 | embedding;向量空间;余弦相似度(二维手算);HTTP;请求 / 响应;API;服务器 | 接入词向量,游戏开始算真分 |
| 4 | 模型内部 | token;context window;attention;pretraining / post-training / RL | 人肉 benchmark:网页版让模型猜 |
| 5 | Agent | agent loop;tool use;API 的第二扇门;状态码;key 不进存档 | 写猜词 prompt,后端自动跑完一局 |
| 6 | Eval | 指标;样本数与方差;成本;一个人怎么做出可信的 benchmark | 接满六个模型,用 prompt A 跑满 18 局,做出排行榜页 |
| 7 | 词库里有什么 | 词库的来历与年代;最近邻当筛子;向量方向与语料偏见;降维(PCA) | 用一个社会议题当筛子,从 5 万词里筛出属于它的 200 个 |
| 8 | Benchmark Day + Demo Day | 对照实验;模型实力 vs prompt 噪音;vibe coding 为什么翻车;怎么审 AI 写的代码;项目全图 | 先并排两张榜核对名次差,再给我做 10 分钟完整讲解 |
咒语会过期,这八个词不会 —— token · embedding · 向量空间 · 余弦相似度 · context window · agent loop · tool use · eval。每一个都能解释好几种现象,还能预测下一代模型怎么表现。第 8 节最后一节课,我们把这八个词原样再过一遍。
先玩十分钟,带一个问题回家
- 打开我发给你的试玩页 index.html(和 data.js 放在同一个文件夹),双击就行,不用联网;或者打开我给的那个链接。你自己一台电脑,键盘一直在你手上。
- 页面顶上一直写着目标词几个字(比如「目标词 2 个字」)—— 这是一开局就公开的,照着这个字数猜。至少猜 15 次;页面会把猜过的词按分数排好,不用一条条抄。
- 卡住了就点「提示」,每局两次。提示不算你的猜测次数,它给的那个词会自己进历史表、标着「提示」两个字。
- 只在纸上记三样东西:分数最高的三个词、它们的分数、你一共猜了几次(另外用了几次提示单独写)。十分钟到的时候要报出来。
- 时间一到就停,无论有没有猜中。这一节课我不解释分数是怎么算的 —— 也别照抄这个页面,第 2 节我们从一张白纸开始,做你自己的。
| 第几猜 | 你猜的词 | 分数 | 名次(没有就画横线) |
|---|---|---|---|
| 3 | 苹果 | 27.22 | — |
| 7 | 医院 | 78.80 | 第 4 名 |
| 9 | 护士 | 81.40 | 第 1 名 |
至少 15 次猜测;分数最高的三个词和它们的分数;一共猜了几次,另外用了几次提示。
还有两个带回家的问题:为什么「医院」比「苹果」离「医生」更近?这个分数,到底是谁算出来的?
不要在这一页解释余弦相似度。被问到「分数怎么来的」,统一回答:第 3 节我们自己动手算一遍。
① 你的文件没拷过来 —— 用我这台,我把页面开好推给你。② 两台都跑不起来 —— 改用英文原版 https://semantle.com/,规则一样,只是词是英文的。③ 都不行 —— 我投屏这个试玩页,你报词、我来敲,一样玩满十分钟。
解决那一半正在被机器接管,剩给你的是选择那一半
把 Claude Code 装好,跑通验证命令
- 订一个 Claude Pro(约 20 美元 / 月)。订不了的话,备用是腾讯的 WorkBuddy,免费体验版先装上,不用翻墙、不用海外卡;已经有 ChatGPT Plus 的可以用 Codex CLI 顶上。装法都在同一份指南里。
- 按 docs/setup-mac.md 或 docs/setup-windows.md 一步步装好 Node 和 Claude Code,然后登录你自己的账号。
- 在终端跑通两件事:claude --version(WorkBuddy 是 codebuddy --version)打印出版本号;再跟它说一句「在当前目录新建 hello.txt,内容是今天的日期」,确认文件真的出现了。
两张截图:一张是版本号那一行,一张是 hello.txt 出现在文件夹里。直接发给我。
卡住了就把终端里的红字原样发给我,不用自己先翻译。下节课没有 Claude Code 就没法上手。
第 2 节:开机,怎么跟它说话。带着装好的 Claude Code 和一个你想做的东西来。