本章精髓 大模型不是在查资料,它是在按概率一个词一个词往下接。它的三个毛病都是这个机制的直接结果:会编造、每次不一样、聊久了忘掉开头的规矩。三条对策也由此而来。
学完本章后,你应该能够:
- 说明大模型生成代码的方式,指出它与检索现成答案的区别;
- 解释 token 与上下文窗口的含义,估算一段中文大致占多少 token;
- 说出编造、随机、遗忘三种现象各自的成因与对应的处理办法;
- 用同一条需求做三次生成对比,判断哪些差异必须用约束写死;
- 按身份、任务、边界三段写出一段系统提示词;
- 在自己的电脑上装好编辑器,按规定建立文件夹并保留副本。
三次生成 · 差异分类 · 把要紧的写死
先做一个当堂就能做完的对比实验,原理随后解释。
1.1一个当堂就能做完的实验
把同一条需求,在三个新开的会话里各发一次,一个字都不改。拿回来的三份代码不一样。
打开 第02章演示_三版对比.html,页面上并排放着三版真实的生成结果,需求完全相同:
同一条需求,三次生成。标红处即三版之间不一致的地方
它不是记错了,也不是三次理解得不一样。每一次它都在从头重新写一遍,而写的过程本身带有随机性。第二部分会讲清这个随机性从哪里来。
1.2差异分成两类
三版之间的差异,性质并不相同:
第二类不能靠多试几次解决。试三次碰上一次对的,第四次照样会错。要哪一条,就把哪一条写进需求。
1.3本章新技巧:迭代式提示调优
一条需求写到位,通常不是一次写成的,而是这样调出来的:
第02章演示_三版对比.html,三版结果与差异表都是现成的,从第 2 步接着讲。1.4可直接复制的提示词
第一条,先用一句话的粗需求,在三个新会话里各发一次:
拿到三版、列完差异之后,把要紧的那几条写死,得到第二条:
新增的每一句,都对应三版差异中的一处:
1.5大模型的常见偏差
接词 · token · 概率 · 温度 · 上下文窗口
本章的核心内容集中在这一部分和下一部分。
这八个术语会原样出现在工具的设置界面、计费说明与技术文档中。前五个在本部分讲解,后三个在第三部分讲解。
2.1五个知识点,一个一个看
每一条都先摆出你在屏幕上会看到的现象,再说它背后是什么。
同一件事,接一个词,和接上千个词
现象:问它一件它不可能知道的事,例如你们班这学期的课表,它照样答得有模有样。
概念:大模型(large language model,LLM)里没有存放现成的答案。它做的事是根据前面已有的内容,估计下一个词最可能是什么,接上去,再估计下一个。
类比:手机输入法的联想。你打"今天天气",它给你"真好"。大模型做的是同一件事,只是一次接上千个词,接出来的是一整段代码。
9 个 token · 中文按字切开,英文常用词整块
它读到的不是字,是这样一串块
现象:按量计费的接口,账单上写的单位不是字数,是 token 数。
概念:token 是模型处理文本的最小单位。一个英文常用词通常算一个 token,一个汉字大致占一到两个 token。一段 500 字的中文需求,大约相当于 700 到 1000 个 token。
类比:快递按体积计费而不是按件数算,token 就是文字的体积单位。
接"今天天气"之后,它看到的候选与概率
现象:它的回答是一个字一个字冒出来的,不是整段一下子出现。
概念:生成过程逐个 token 进行,这一步叫下一词预测(next-token prediction):模型给出一批候选和各自的概率,挑一个接上,再算下一个。前面挑的词不同,后面越走越远。
类比:走迷宫时每个路口都有几条路,第一个路口拐错一步,后面看到的风景完全不同。
调的是挑法,不是它知道的东西
现象:同一个问题,有的工具每次回答几乎一样,有的每次都换一种说法。
概念:温度(temperature)是控制挑词随机程度的参数。温度低时总挑概率最高的那个,输出稳定;温度高时概率较低的词也会被选中,说法多变。温度只改变它怎么挑词,不改变它知道什么。调低温度不能消除编造,只会让它把同一个错误说得更一致。
类比:食堂打菜时阿姨手抖得轻还是重,改变不了今天窗口里有什么菜。
窗口装满之后,最早的内容被挤出去
现象:一个会话聊得很长之后,它开始重复犯已经纠正过的错误,例如又把文件拆开了。
概念:上下文窗口(context window)是模型一次能读进去的 token 上限。整个会话的全部内容加上它自己的回复,都要塞进这个窗口。超出上限时,最早的那部分被挤出去。
类比:一次只能带二十本书进考场,第二十一本带进来,最早那本就得放下。它不是偷懒,是那段文字已经不在它眼前了。
2.2亲手接一次词
打开 第02章演示_接词游戏.html。页面给出一句话的开头,下面列着候选词和各自的概率,点一个词接上去,再看下一批候选。左上角有一个温度滑块。
这个页面上有三件事可以亲眼看到:
页面上还有一个「一段代码」标签。切过去会看到:写代码时它面对的候选明显更少、概率更集中,常常有一个候选占到九成以上。这就是下一小节要解释的事。
2.3它为什么写代码比写别的准
既然是逐词接下去,为什么它写出来的代码大多能跑。三条原因:
反过来说,这三条不成立的地方,正是它最容易出错的地方。越是别人没做过的、越是你们专业特有的规则,它猜得越不准。你们学院的绩点换算办法、某种试剂的配比规矩、某类文献的著录格式,这些它没见过,只能按最常见的做法替你定一种。
编造 · 随机 · 遗忘 · 系统提示词
上一部分讲的机制,直接决定了这一部分的三条操作纪律。
3.1另外三个知识点
看上去越规整,越容易被采信
现象:让它列几条参考文献,格式挑不出毛病,去数据库里查却查不到这几篇。
概念:幻觉(hallucination)指模型给出看上去合理、实际不成立的内容。它按"下一个词最可能是什么"往下接,没有对应知识时,照样能接出一句读着通顺的话。它并不知道自己不知道。
类比:考试遇到不会的题,硬着头皮写满一页,字迹工整、条理清楚,就是答案不对。
两个会话之间没有任何通道
现象:关掉页面第二天再打开一个新对话,它不记得你昨天让它做过什么。
概念:一次连续的对话叫一个会话(session)。会话里的内容每次提问时会连同新问题一起送过去,看上去像是它记得;换一个新会话,之前的内容不再送过去,它就真的一无所知。
类比:在同一个工单里跟客服聊,工单关掉重开一个,接手的人看不到之前的记录。
第一段一次写好,整个会话都生效
现象:有的工具在设置里有一个"角色设定"输入框,填过之后,此后每一句回答都带着那个身份。
概念:你每次发过去的话叫提示词(prompt)。写在最前面、整个会话一直生效的那一段,叫系统提示词(system prompt)。
类比:新人上岗前先发一份岗位说明书,写清职责与权限,比每来一位顾客临时交代一次省事得多。
3.2三个毛病,三条对策
三个毛病都不是工具没做好,而是这套机制自带的。对策也就不是等它变好,而是改变你的用法。
成因:按概率接词,没有对应知识时照样接得出通顺的话,而且不做标记。
对策:凡是事实性内容一律当作待核对。姓名、电话、学号、机构名称、数据、参数写法,逐条自己验一遍。它给的东西默认是初稿,不是结论。
成因:每一步挑词都带随机,前面差一个词,后面走成另一版。
对策:要紧的规则写死成可执行的句子,不靠多试几次。公式、取整方式、文件形态、界面上有几栏,每一条都写成一句能检查的话。
成因:早期内容被挤出上下文窗口,它已经看不见那几句约束。
对策:一个会话只做一件事。换题目就开新会话,并把已经定下来的约束重新贴一次。它开始重复犯已经纠正过的错误,就是该换会话的信号。
打开 第02章演示_分词与窗口.html 的下半页,可以把第三条看成一个动作:一条一条往里发消息,看着最早那句"不要拆成多个文件"被推出窗口,随后它就真的又开始拆文件了。
3.3系统提示词:身份、任务、边界
系统提示词写三段就够:你是谁、做什么、不做什么。前两段大多数人都会写,出问题的几乎都在第三段。
3.4前沿三分钟:一个汉字值多少钱
大模型按 token 计费,输入和输出分别计价。生成一次名片页,需求加代码合起来大约一两千 token。2023 年以来,同等能力的模型调用价格持续下降,目前国内主流模型的价格已经低到个人可以随手多试几次的程度,这也是各家把"深度思考""多次生成"这类功能直接放进界面的原因。
价格下降改变的是做事的方式。生成一版的代价接近于零之后,"先写完再改"就不再划算,"同一条需求发三次做对比"这种做法才成立。工程上把这类用法叫作用算力换确定性:多花几次生成,换取对结果的把握。
便宜的是生成,贵的是判断。发三次的成本可以忽略,判断哪一版对、哪几处必须写死,仍然只能由人来做,这部分成本没有跟着下降。
四级工具 · 可审查 · 编辑器 · 副本
选哪一类工具,以及在自己电脑上把摊子铺好。
4.1工具分成四级
市面上叫得出名字的工具很多,按"你能插手到什么程度"排,只有四级:
4.2选工具先问一句:出了问题看不看得见
比较工具时,最先想到的问题往往是哪个更强。实际用起来更要紧的是另一个问题:它做的事,你能不能看到中间过程;出了问题,你能不能定位到哪一步错了。
第一级把整段代码交到你手上,坏了可以逐块检查、逐块替换。第三级只给你一个网址,页面不对时你能做的只有再描述一遍,然后期待这次运气好些。前者出问题时你有办法,后者只能重来。
4.3搭好工作台:三样东西
第一样,一个编辑器。记事本能改代码,但它看不出结构、找不到成对的符号、改完也不能立刻预览。装一个正经的编辑器(例如 VS Code),代码有颜色、括号成对高亮、少一个符号当场标红。
第二样,一套文件夹规范。一个"零代码课"总文件夹,每章一个子文件夹,作品文件名前面带上章号。学期结束时,这个文件夹就是你的作品集。
一个文件夹装一章,副本和正本放在一起
第三样,改动之前先复制一份。改坏了能退回去,是这门课里最便宜的保险。
配套的习惯是小步走:改一处,刷新一次,确认没坏再改下一处。攒了五处改动一起看,页面出问题时,你分不清是哪一处引起的。
另外还有一条会话上的规矩:一个会话只做一件事。做名片页的会话不要用来问别的题目;一件事做完,下一件开新会话,并把已经定下来的约束重新贴一次。判断该不该换会话有个现成的信号:它开始重复犯已经纠正过的错误。
三选一 · 三次对比 · 当堂交
上机环节由此开始,当堂完成并提交。
5.1三个题目,任选其一
三个题目做的是同一件事:用一条粗需求发三次,找出它替你做主的地方,把要紧的写死,再发三次验证。区别只在题材。
一页实习信息卡:岗位、时间、投递方式,做成手机上一屏看完的页面。
通用读书会招新一页纸:从"做个招新页"这一句开始,调到三次结果一致。
偏文科一个小换算工具,需求里写一条只有你们专业才这样的规则,检查三次生成有没有把它换掉。
偏理工题目 C 的规则要具体到能判断对错,例如"结果一律向下取整"或"保留两位小数,第三位直接舍去",不要写成"计算要准确"。
5.2共同验收标准
5.3常见错误与处理
5.4提交内容
提交方式:按教师提供的作业模板(Word)填写,文档开头注明所选题目。提交渠道见课堂通知。当堂提交。
5.5再进一步(选做)
把调稳之后的那条需求,发给另一家厂商的模型。如果结果在你关心的那几条上仍然一致,说明这条需求已经写到了不依赖某一个工具的程度。
反过来,如果换个工具就散了,说明你依赖的是这个工具的默认习惯,而不是需求本身写清楚了。散在哪几条,那几条就是还要补的。
- 大模型不是查资料,是按概率一个词一个词往下接。同一条需求两次结果不同,源头就在这里,不是工具没做好。
- token 是它处理文字的单位,上下文窗口是它一次能看见的上限。聊久了它忘掉开头的规矩,是因为那段文字已经被挤出窗口,不是它偷懒。
- 温度只改变它怎么挑词,不改变它知道什么。调低温度不能消除编造,只会让它把同一个错误说得更一致。
- 三个毛病对三条对策:会编造,所以事实性内容逐条核对;每次不同,所以要紧的规则写死;聊久了忘,所以一个会话只做一件事。
- 越是只有你知道的规则,它猜得越不准。检查的重点不在代码写得漂不漂亮,而在那些只有你知道的规则有没有被它改掉。