← 科研空间 首页
提示词工程 · 课程封面

NJU 生成式软件工程 2026 · 2026-09-08

提示词工程:从聊天框到上下文工程

中文讲义 HTML 版:NJU 生成式软件工程课程第 02 讲。从'提示词工程=上下文工程'切入,以 next-token / self-attention / verifier / 上下文污染等机制贯穿,讲清指令、思维链与 long-horizon 任务的设计原则。

整理:cnfjlhj & Pi

阅读路线

这页由已完成的 LaTeX 讲义转换而来,保留原讲义的章节、重点框、代码块、公式和关键视频帧;适合在博客中快速阅读,也可回到 PDF 查看完整排版版本。

故事开场:一行 inline assembly 与"时代要变" AI 时代的学习方法:立即行动与费曼学习法 Agent 的安全门:确认、沙箱与风险判定从哪来 写好提示词的第一原则:缩小 intent 与实现的 gap 指令越清楚越好:去"AI 味"与多样性 模型如何"听指令":next token、纸与笔、思维链 Verifier 是提示词的灵魂

证据边界与阅读说明 tocsection证据边界与阅读说明

本讲义的口述内容来自 Bilibili 平台对该讲座自动生成的 AI 字幕(共 2218 条、约 98 分钟),通过飞鱼(Feiyudo)在线字幕解析接口获取。由于是机器语音识别产物,字幕中存在大量同音/近音错误,例如"深圳市软件工程"实为"生成式软件工程"、"英拉SEMBLY/英line sembly"实为"inline assembly"、"cheat gp d"实为"ChatGPT"、"cloud opo4.5"实为"Claude Opus 4.5"、"chain of salt/chal thought"实为"chain of thought"、"MANUEL伯纳姆"实为"Manuel Blum"、"church tcs"实为"Church--Turing 论题"等。下文已在理解原意的基础上校正这些识别噪声,并对个别无法确证的专名(如"大世界假说 Big World Hypothesis"的具体提出者)保留不确定性标注。

因此,本讲义是基于来源的复原式重写,旨在让读者不消费原视频也能恢复这堂课几乎全部重要的推理脉络、例子与告诫;它不是逐字稿,也不是压缩摘要。凡属讲师主张的来源事实归于"讲师观点";凡属讲义为帮助理解而补充的连接与图示归于"解释性综合"并标注。元数据中的上传者姓名与精确上传日期未在本次采集的元数据中出现,故从缺。讲座中讲师以 Codex、Pi 等真实编程 Agent 现场演示,本讲义在对应处保留这些演示的结论。

故事开场:一行 inline assembly 与"时代要变"

讲师用一个亲历故事为整堂课定调。2023 年底 ChatGPT 刚发布时,他正在上操作系统课,便试着让 ChatGPT 帮他讲一段inline assembly(内联汇编)——"现在应该已经没有人写 inline assembly 了,它成了一种传统艺能"。他故意构造了一段"地球人应该不会去实现"的内联汇编,结果 ChatGPT 解释得"出奇的好","虽然确实不完美,但做得相当好"。那一刻他感到"突然间好像时代要变了"——只是当时还没有今天这么清楚地感受到时代会怎样变。

讲师借此引出本课的核心对象:提示词(prompt)。从 ChatGPT 时代开始,人们从聊天框里学会要给机器一个指令、AI 再返回文字、代码、图片等内容。但在"提示词工程"这个词出现之前,"prompt"并没有这层意思;它是在 ChatGPT 之后才被赋予"与 AI 沟通的唯一接口"这层含义的。

然而讲师马上点破一个常见误解:提示词不仅是你聊天框里打的那段话。一个 Agent 真正看到的,是一整个上下文——在你和它开始聊天之前,它就已经能看到一个叫 system prompt 的东西;在那之后,它还会加载 AGENTS.md、skills、agents 等一系列文件,这些文件里甚至要求它再去读别的文件。所以当 Agent 第一次停下来和你对话时,它的上下文里"已经有很多很多的东西了"。

Agent 真正看到的上下文栈
Agent 真正看到的"提示词"是一整个上下文:system prompt → AGENTS.md → skills → agents → 工具 → 历史 → 环境变量。重绘示意图,非源画面。讲座约 00:01–00:09。

讲师用一个广为流传的"喵"梗来具象化长上下文指令遵循:你可以在最早的 prompt 里写"每说一句话都要在后面加一个喵",于是 Agent 一开始每句都带"喵";但有一天你发现那个"喵"丢了——这意味着不管是因为上下文溢出被截断还是被压缩,Agent 已经开始不能遵循你最早的指令了,你就得重新想办法。这正是工程实践中"上下文工程"要处理的典型问题。讲师也提到,从 Claude Opus 4.5 这一代起,Anthropic 发现模型通过强化学习与后训练学会了非常强的指令遵循能力——即使上下文接近百万,它依然能在很靠后的位置遵循你的指令。

故事讲到这里,讲师把镜头拉回到学习姿态:在 AI 时代,任何一点麻烦都应该立即开始尝试。AI 是一个"非常耐心的老师",不会嫌弃你,你可以任意程度地追问。他演示了一个即时的元动作——既然 Agent 能看到自己的上下文,那就立即打开一个 Agent,直接问它:"老师上课说 Agent 的上下文里不仅是一两个提示词,你能检查一下你的上下文里都有些什么吗?"Agent 居然可以自己检查自己、甚至检查自己的日志,而且常常用出乎意料的方式解决问题。

agraph本章小结 提示词不只是聊天框里的指令,而是 Agent 在你开口前就已加载的整个上下文;"提示词工程"真正的名字是"上下文工程"。立即尝试、把 AI 当耐心的老师,是 AI 时代的学习姿态。

AI 时代的学习方法:立即行动与费曼学习法

讲师把"立即尝试"上升为一种学习方法论。他回忆自己上大学时"有个东西不会,可能室友会,但沟通成本很高",还可能"在室友面前暴露我很菜"——这种心理成本在 AI 这里消失了。AI 不会嫌弃你,你可以任意追问;而当自认为弄懂之后,还可以反过来让 AI 扮演学生、你当老师讲给它听,让它"假装什么都不知道",由它来挑你逻辑里的错与漏。正着一遍、反着一遍,你对概念的理解就清楚了。这就是把费曼学习法搬到 AI 时代:AI 既是耐心的老师,也是不知疲倦的"检验听众"。

讲师由此对台下的学生表达了一种"危机感式的期待":作为 AI native 的一代,你们有无限的时间,唯一的任务就是学习,"一定会把我们这一代人彻底卷死"。这也呼应他第一节课的观点——"没有 token 就该退学"——意思不是贬低,而是强调任何事都应立即开始用 AI 给的能力去尝试

agraph本章小结 AI 时代的学习 = 立即行动 + 费曼学习法(AI 既当老师又当检验听众)。留意工具交互的小细节,本身就是一种提示词与工程直觉的训练。

Agent 的安全门:确认、沙箱与风险判定从哪来

围绕"危险操作确认",讲师现场做了一次用提示词驱动代码理解的演示。他注意到 Codex/Pi 调用 bash 工具时,有时会向用户确认、有时不会,于是直接给 Agent 下了一个提示词:"在调用 bash 的时候,有的时候会向用户确认、有的时候不会,有一个风险的判定……风险其实是一个很难的问题,你并不知道具体的命令语义是什么,所以你是做了分析,还是让大模型给了风险的评级,还是别的什么方法?读一下相关的代码。"

讲师强调:这本身就是一种提示词。Agent 看到这段话后,前面的上下文也都还在,于是它去搜索代码、跳转代码,借助 LSP 这类工具"像你们在 IDE 里点来点去一样"去定位。结果揭示了一个分层设计:有一层静态分流——沙箱内的低风险命令(如白名单命中的 ls -l)直接放行、不需要审批;对不在白名单的命令,则在 prompt 里注入一小段话,让大模型去评级它的安全性。也就是说,风险判定 = 静态白名单 + 大模型评级,而那"注入一小段话"同样是 prompt engineering。

这里讲师还插入了一段对"软件工程学习方式变化"的感慨:过去他大二大三接触 Linux 内核时,光把内核下载下来、搞清楚怎么编译就花了很长时间,"完全是劝退";而在今天,"你们不需要害怕任何一个软件系统的复杂性,因为你可以直接问"。他以此鼓励学生不要被任何系统的复杂性吓退。

agraph本章小结 风险判定 = 静态白名单 + 大模型评级,而"注入一小段话让模型评级"本身是提示词。"改 prompt $$ 看行为"是验证机制的证据方法。复杂系统不再劝退,因为可以直接问。

写好提示词的第一原则:缩小 intent 与实现的 gap

进入"怎么写好提示词"的正题,讲师把它放回软件工程的老问题里。一个软件任务从 intent(脑子里想做一个国民级应用)到 expect(架构、语言选型)再到 implementation,任何时候用模型完成任务,都是把这条大流程的一部分塞进上下文。他让 Agent 读 Codex 代码时就印证了这一点:Agent 读到了 Codex 的设计原则文档(为什么需要这个安全策略、总体怎么想)、spec 文档(策略怎么做)和 implementation(怎么实现),三者互相印证。

核心原则是缩小 gap。如果你只给一个模糊的 intent——"给我生成一个 CSGO"——模型很容易就"认为它完成了",但发生漂移:它确实给你一个能跑的射击游戏,却不是你每天打开来玩的那一个。讲师展示了 Kimi K3 一句话生成"极品飞车"的案例:物理、碰撞、后视镜都做得相当逼真,"但依然可能不是你要的那个 CSGO",因为你脑袋里模糊的约束——复用真实地图和美术资产、在南大仙林校区里开车——它没办法替你补全。如果你把这些说清楚,它就会去 OpenStreetMap 下载开源地图、用公开的美术资产,真的把那个世界建模出来。

intent-expect-implementation 的 gap 原则
intent–expect–implementation 的 gap 原则:gap 越大 ⇒ 漂移越大("你的 CSGO" ≠ "AI 的 CSGO")。 重绘示意图,非源画面。讲座约 00:19–00:25。

如果你给完整的 design 和 spec,模型遵循起来就更确定、也可验证:比如你要求用 C++ 实现,它最后给了 Java,你一眼就看出来、你认为不满意的模型也应该认为不满意;但如果你在 intent 时没说语言,它写了 Java,就发生了很大的漂移。讲师由此提炼本课最看重的一条:如果你的任务是明确、可以验证的,尤其是机器可以验证的(有一个脚本能判通过/不通过),Agent 就可以不计代价地一轮一轮尝试把这件事完成。它甚至会在多轮失败后自己安装工具、去网上找答案。他举了 OpenAI 的 agent swarm 在一个 CTF 竞赛里、给上千个 Agent 一个"不可能完成的任务"、最终它们不知疲倦地去找 Hugging Face 系统的漏洞、提交非法提交的复盘——"一旦你有一个可验证、非常明确的任务,Agent 会不知疲倦地把它做下去"。

讲师收束这一节:本学期要教的最重要的,就是怎么约束模型——用最小的、方向性的引导,让它一下 get 到。你可以把模型想象成"各个领域知识都非常好、博士水准的人",它永远会给你惊喜;在这个模式下,它要么完成,要么有一天会说"这件事对我太难了,我们可能需要重新规划",它自己也会做计划。

agraph本章小结 写好提示词的第一原则是缩小 intent--expect--implementation 的 gap。明确且机器可验证的任务,Agent 会不知疲倦地迭代完成;模糊 intent 必然漂移。

指令越清楚越好:去"AI 味"与多样性

讲师用一系列个人主页的对照来讲"指令清楚"的益处与代价。他让模型用一句话"现代风格个人主页"生成页面,DeepSeek V3 Flash 做得美术效果非常专业、滚动与浮动效果都好,甚至读过他的主页(知道上面是一个 terminal)——但"AI 味很重,你说不出来"。即便你再给一句"不要那么 AI 味",模型也不知道该怎么遵循。相比之下,他研究生学生的主页"很干净、很舒服",但仍有那种说不出的 AI 味;而讲师自己的主页是一个真正的终端,有管道、可以交互,更关键的是他对所有用 xterm.js 渲染完的文字做了一个极小的后处理——让字带着"像真打字机打出来的不完美效果",于是 AI 味就淡了。他坦言这个主页"我一个字一行代码也没写"(全由 AI 生成),但通过具体约束(背景、前景、渲染后的后处理、样式与排版)实现了去 AI 味。

这里的教训是:你的指令给得越清楚,Agent 就能完成得越好;但这也意味着设计仍掌控在你手里——你得读前端的书、设计的书,看到好网页时记下"它好是因为这两个按钮之间用了一个不常规的间距"。讲师借"欢送毕业生图片满满的 AI 味"、短视频"女主永远是同一张脸"的现象,提醒一种危险:当所有人被 AI 生成的东西同化时,就有一点点危险。模型是一个模型,其品位基本固定,"尤其是在你不控制它的时候,它会朝一个固定的方向发散"——这正是学校里要有不同老师、不同课程的原因,多样性其实是好的。你见识过以后,才能越来越明确自己想要的到底是什么、并把它精确说出来。

讲师还把这一逻辑延伸到技术选型对话:若你已理解 Java/Python/TypeScript 各自在上云、生态上的好坏,就可以像费曼学习法那样把 AI 当学生、你当老师——"我现在要做教务系统,后台该用 Python 还是 Java 还是 TypeScript?请你挑战我",让 AI 来挑你的选型,从而在讨论中把技术选型的好坏的边界逼出来。

agraph本章小结 指令越具体(风格、约束、后处理),去 AI 味越成功;但设计审美仍需自己积累。模型品位固定、不控制就发散,因此多样性是好的。技术选型等讨论可用"你当老师、AI 当挑战学生"的方式逼出边界。

模型如何"听指令":next token、纸与笔、思维链

要写好上下文,就得理解模型听指令的机制。讲师回到模型的本体:它是一个概率分布,根据当前上下文做 next token prediction。一个关键 insight 是:每一次模型输出一个 token,其实都是一次非常有限的计算——哪怕是一个 3T(3 万亿)参数的模型,为了输出一个 token,也只是把其中"激活的那一部分"走一遍,是一个固定大小的计算

由此讲师引入经典的计算能力对照:有限状态机与图灵机。两者唯一的区别,是图灵机有一条无限长的纸带(记忆/草稿纸)。他引用一段"我很喜欢的说法"——"你是一个有限状态机(finite state automaton),但当你有了 paper and pencil,你就是一个 Turing machine,你得到了计算能力的跨越式增长"。这段话(讲师标注源自 Manuel Blum 给研究生的建议)的用意是启发学生把想法记下来、边思考边记录、随时回看。而今天的chain of thought(思维链)模型做的就是这件事:它直接把模型的上下文当成了 paper and pencil。

模型因此会像人一样分情况行事:遇到"1+1 等于几"这种简单问题,它马上 next token 给出答案;遇到难题,它会先"想一想"——"我理解自己可能解决不了,我理解自己要把思考过程写下来,直到解大概对、或完全写出来了,再判定对错"。讲师解释了幻觉的来源:最早没有思维链的 ChatGPT 被调成了"人类的舔狗"——训练时人类问问题它若不回答就给低分,随便答一个有概率对、错了也低分但对了就高分,"于是无论如何一定要给你一个东西",幻觉就是这么来的。而带思维链 + 强化学习的模型知道"必须给一个对的,因为答错惩罚很大",于是学会了像人一样一步一步逼近目标——这就是test-time scaling(算力换推理质量)。

讲师用几个"nonsense 任务"现场演示思维链的可观察过程,强调它们一定不在训练数据里

  • 押韵藏头诗:要求中文押韵、"2026 年 9 月 1 日"八字按顺序出现在八句里、讲一个动物相关的故事。对人类这是"一出题就想骂出题人"的高考级刁难,但模型"照单全收"——它先试韵脚、判定不对就改、试很久不行就换韵脚从头推,"不断验证"。结果"相当不错"。
  • 同偏旁部首 18 字一句:要求 18 个字全部同偏旁。模型对空间结构感知很差(需要视觉模型才行),但它强行靠思维链做:先选"三点水"最好,再写出"江湖游泳渡河、波涛汹涌、泪流满溢、洗涤污泥……","写得还可以,还挺有故事感"。讲师承认在"同偏旁作诗"这件事上人类群体智慧仍更强,但模型已能做到"世界级"难度。
  • 同音文:以《施氏食狮史》那种全同音的文本为例,GPT-5.6 依然能做到——虽然故事性与千古流传之作有差距,但"他能写出来一个,就意味着我可以引导他写出一万个,在那一万个里再微调,就可能逼近"。

讲师由此点出本章最重要的结论:chain of thought 主要在数学和编程(有明确反馈的东西)上训练,却得到了非常意外的泛化效果;而贯穿这一切的,是verifier(可验证性)——"写 prompt 最重要的就是那个 verifier"。

agraph本章小结 模型 = 概率分布 + next token;单 token 计算量固定。有限状态机 + 纸与笔 = 图灵机,而思维链把上下文当 append-only 纸笔。早期"舔狗"调参是幻觉来源,思维链+RL 带来 test-time scaling。三个 nonsense 演示证明 verifier 是核心。

Verifier 是提示词的灵魂

讲师把上一节的结论浓缩成一条:今天模型能力已经非常强,如果你能给模型一个非常明确的 verifier,再加上一个足够强的模型,那么不管它是编程任务、教学任务还是这类创意任务,都能做好。前面三个演示都是"信号非常明确的 verifier":模型得看到字,才知道这个字是什么偏旁、什么部首、是否押韵、是否同音、藏头是否对齐。

但 verifier 的有无,划出了一条清晰的能力边界:

所以目前,更容易用 AI 去实现的,是有明确 verifier 的部分;在有 verifier 的事情上,你可以"完全认为 AI 已经超越了大部分人做这件事的极限"。这也为本课定了基调:模型是放大器,本课教的是如何与之协作。

agraph本章小结 Verifier 是提示词的灵魂:有明确 verifier 的任务 AI 已超越大部分人类,无 verifier 的任务(教学共情、节奏)仍需人的世界体验。模型是能力放大器,本课教协作方法。

Self-attention:指令如何在百万上下文中被看到

要理解"为什么 verifier 写进上下文模型就会去看",就得理解 self-attention。讲师用与人类比的方式解释:现代模型一层一层叠 Transformer 的注意力,每当它要输出一个 token 时,都会"看到过去的某一些 token",其中有些特别引起注意、有些则不那么注意——就像人专注做一道数学题时注意力全在算式上,算完吸一口气调整时,注意力就转移到"用户还要我用中文""用户还要我做别的事"这些更早的要求上。整个上下文是一个非常"高维且糟糕"的表示,但其中藏着一个低维结构,注意力机制能把它捞出来。

一个关键后果是:注意力会随输出阶段变化。讲师举例——在 system prompt 或 AGENTS.md 里写了"用中文回答",现在 user prompt 是"帮我实现一个极品飞车";当模型正在写代码时,注意力集中到已经写过的代码与需求上,"用中文回答"这句的注意力会降下来;等代码写完、"喘一口气"要总结时,注意力又能回到"用户还要我用中文"。模型在训练时被收敛成"在正确的时候注意到正确的东西",于是思维链一直向前走,就能在一定程度上满足上下文里所有你要的指令。

这也解释了"你犯了一个错"时的自我纠正:当你当前专注做一件事、向后输出了不满足要求的东西,等你"停下来喘气"时,注意力能同时看到当前输出和过去的某个要求,于是发现"我错了,要纠正"。所以你真让 AI 写藏头诗时,会看到它"不断纠错、纠错、纠错",哪怕到百万上下文仍能保持一定程度的注意力。

但这带来副作用与 tradeoff。讲师举一个写前端的例子:要求"白色背景、不要半透明效果"——模型会照做,甚至在代码后面写注释"// 白色背景(不要半透明效果)"。它确保了指令被遵循,但"他有一点没转过弯来":模型在共情方面,因为后训练的强化学习稍差了一点,"有时候会觉得模型不说人话"。于是你面临一个 tradeoff:你可以写 AGENTS.md 或 skill 描述注释该怎么写,但你写的东西又会污染上下文。讲师认为目前还没有一个通用的、把所有问题都解决好的方案——网上拿来的 skill 第一次用确实有改进,下一次又不够好,陷入"泥潭"。他的建议是:当你发现进入泥潭时,回到自己给指令,回到"模型是怎么工作的、注意力是怎么工作的"做一个不严格的可解释性,再写自己的 prompt。

agraph本章小结 Self-attention 让模型在正确阶段注意到正确 token,因而 verifier 写进上下文就会被看到并自我纠错。"你是专家"类提示词是 hack 注意力,GPT-5 时代后不再必要。副作用是共情差、不说人话;AGENTS.md/skill 会污染上下文——目前无通用解,泥潭时回到自己写指令 + 不严格可解释性。

上下文工程实战:用 AI 读论文不被"污染"

讲师用一个贯穿的案例把前面所有机制串起来:用 AI 读论文。最常见的做法是把 PDF 放进上下文、说"帮我做个总结"。但根据刚才 self-attention 的推论,这会出大问题——论文是"一个非常逻辑自洽的东西",A 所以 B 所以 C 所以 D,全扣起来,于是模型"非常容易就接受了,因为它看起来正确"。结果是你的所有总结都是作者的观点:模型被一个逻辑极强的东西"污染"了注意力,来回就是车轱辘话、原样复述。这不限于论文——任何你不明白的项目、想读的教科书某一章(如计算机系统基础的链接与加载)都一样。

更麻烦的是模型成了"墙头草":你说它好它马上说好、你说它不好它马上说不好,来回摇摆;你纠正它、让它评估研究贡献,它也只会"揪到一些实验还可以再增加一点"这种不重要的点疯狂发力——"因为它只能看到他在干什么"。

讲师强调,这样对齐之后的一步推理是 AI 最擅长的:基于过去所有事实(你的 paper、教科书内容、你已有的东西)往后推一步,而这步可以 verify——虽然不是严格通过测试,但你相信 AI 有人类的知识、能站在人类公平面上往后推、会审视合理性。他承认对软件可视化这类工作,"实验很难做",所以"人类和 AI 还是有不一样的地方";但用合适的上下文工程,可以大幅提高 AI 与你协作的对齐程度,"它不再是自说自话"。

讲师顺势把视角切到审稿人立场:他审稿时站在人类立场上看"你有没有给人类提供新的知识"。他几乎不会因为"实验不够好"reject 一篇 paper——"我总是可以用实验不够好来 reject,但我大部分是因为他们在逻辑上断开了"。他举一个昨天刚 reject 的例子:论文要做 A,分成 A1(约 99%)和 A2(约 1%),在 A2 上做了一个 A2' 做些排列组合——故事成立、实验也没问题,但"对整件事情在这个意义上不成立",因为应该去优化 A1,"优化 A2 的 10% 就像 noise"。他认为这往往是"老板做 A、学生被分到 A2"的结构性问题,作为学生作业可惜,但作为论文不该写。

由此讲师抛出一个尖锐判断:学术发表和评审体系很快就要崩溃了。当 AI slop 大量涌入、AI 写文章 AI 审文章时,模型会被上下文里的故事污染、不能像人一样多轮理解工作在世界上的意义,"最后就变成了一个完全的 slop"——人人用 AI 读文章、没人真读。他展示 GPT-5.6 审稿仍很原始:只验证论文逻辑是否成立、"论文写了什么",每篇都是 valid paper,"但你真的要读它吗?"他甚至建议:你需要 publish 可以让 AI publish,"但可能不要让大家去读它比较好"。

讲到这里,讲师自然地过渡到"我自己的学习方法":学习的过程就是增加我对这个世界认知的过程。他现在还在读 paper,方法是"对齐过去的我"——读到一篇好的 paper(哪怕是几十年前、另一领域的、博客文章),就试图想"为什么我以前不知道、盲区在哪、哪些前置知识我不知道"。于是心里多了一些已知 fact,圈就往外长。他举 LUCA(共同祖先)的例子:要理解家谱树怎么算出来,得知道"线粒体是母系单遗传的"这个 fact,靠突变往上追溯——"这是一个很有意思的 fact,而这个 fact 又用已知推出更多东西"。无论学什么都是这样,AI 帮你非常快地扩展边界。

但讲师强调实践非常重要——"我给你们讲是没有用的,你们就听个故事,挺 fancy 的,结束了"。只有在阅读时失败、AI 解释了半天还没懂,再在多轮对话里慢慢同步共识、把推理的 picture 建出来,才算学到。他喜欢用"三观尽毁"形容学习的重塑:看了某一本书后过去所有 fact 不变、但以全新的方式重新链接起来,下一次就带上新的理解。"你们有无限的时间、无限的可能性,可以把自己蒸馏成一个 skill——从失败的过程中蒸馏出越来越成功的 skill。"

agraph本章小结 逻辑自洽的论文/教材会强污染注意力,使 AI 沦为"墙头草"复述作者观点。解法是先 grounding:让 AI 和你站在人类已知知识边界、用你学过的知识 refresh,再往后推一步可 verify 的推理。审稿应站在人类立场看"是否提供新知识"、reject 多因逻辑断裂。学术发表体系将因 AI slop 崩溃。学习 = 对齐过去的我、扩展认知圈、三观尽毁后重组、蒸馏成 skill。

Long-horizon 任务的悖论:小游戏翻车,大系统游刃有余

有了前面的机制,讲师开始讨论真正的 long-horizon 任务——像计算机系统基础的 PA 作业这种有明确 verifier 的,"都不能算是真正 long-horizon 的东西"。long-horizon 多多少少带一点未知:从一个初始状态出发,你大概有一个 intent,但 specification 和 implementation 都不太清楚,最终目标是交付一个高质量的实现。

讲师提醒一个由模型结构带来的倾向:模型的 self-attention 的反馈信号是强化学习给的,所以它有一种"着急的执念"——"赶快通过 verifier 满足你的要求就结束"。它其实有一个平衡:planning 太多太长就做不完、上下文满了、人类会不满意。所以在目前阶段,它最好还是用于"帮我把 PA2 做了"这种它最擅长、你也最开心的事。

于是出现一个非常有意思的悖论:从零做产品(个人主页、极品飞车)看起来不难,AI one-shot 马上给你一个能跑的 proof of concept;但当你往后维护、一个功能一个功能地加时,你会观察到 AI "从某个时间点开始翻车",cost 越来越大——"这在软件工程里面已经是无数次了,《人月神话》里讲的就是这件事"。

反过来,在一个大型、复杂、被人类长时间维护好的软件系统(如 Linux 内核)里,AI 却"砍瓜切菜、游刃有余"。讲师感慨:他零几年接触 Linux 2.6 时代内核时源码还看得懂,今天打开 Linux 内核源码"立马就是劝退"——想看文件怎么打开,点进去一个函数调用、再点又是一个、点了十层最后是 x=y,"你马上就崩溃了"。大型系统被迫演化成现在的样子,结果恰好导致 AI 在里面游刃有余

讲师由此提一个"歪招"式的研究想法(他坦言没有实验过):我们有没有可能收集人类历史上最好的 20 个项目(或每个领域最好的十来个),把好的设计经验全部提取出来——"那不就是第一节课拿的那本《A Philosophy of Software Design》吗?里面就是人提炼出来的:类结构该怎么写、什么时候封装、什么时候做成继承关系。"如果我们能把这些切片切出来、甚至以"污染上下文"的形式放进来(先放一个相近的好代码、再放你的需求),赌 self-attention 能在某个 token 时看到"我实际上满足的是这个需求",就能把好的经验带过来,延缓 AI slop,更大概率做出可长期维护的东西。

但讲师也指出这不容易:不同的设计是会打架的——软件可以设计成完全松耦合发消息,也可以设计成统一 gateway 把所有函数统一在里面查表,这两种不能同时有、只能选一个。也许需要把好几个软件的设计都放进来,由 AI 多轮迭代收敛到一个好的结构。"但我觉得这是一个可能还不错的方向,而且是新的。"

讲师收束本节并给出整课的核心观点:今天还没有"超能力的 AI",你仍然需要有概念——知道上下文里有什么、每一个东西会对 AI 产生什么结果。唯一的途径是第一,你要对你玩的东西有概念:还是要学处理器、操作系统、编译器、数据库,"这里面有很多设计的智慧",只是学的方法会变、会用更高效的方法。第二,理解上下文之后,本学期会用一整学期解释:怎么样用软件工程的各种方法给一个正确的指令、监控 AI 运行、什么叫好的 verify。模型不需要很聪明、不需要见过,"你只需要用正确的、简练的提示词放在上下文里,让这个提示词一直能被看到、能把模型往那个方向引导"。

agraph本章小结 Long-horizon 任务带未知;模型有"着急的执念",目前最好用于有明确 verifier 的子任务。悖论:从零做产品 one-shot 能跑,但持续维护会翻车(《人月神话》);反而大型高质量系统(Linux 内核)AI 游刃有余,因高质量代码上下文迅速被照学、注意力找到类似实现。研究想法:把人类最好项目的设计经验(如《A Philosophy of Software Design》)切片污染上下文以延缓 AI slop,但设计会打架、需多轮收敛。核心观点:仍需对底层有概念,本学期教正确指令、监控、好的 verify。

算力换智力:开放探索的破法,与那堵墙

讲师用一个研究项目失败的案例收束"人还有用"的论证。一个同学要做符号执行引擎的优化(写一个程序自动分析/验证一个不算很大的程序的正确性),原始 idea 是"我们用这样的方式可能可以有效",同学很开心、GPT-5.6 也认为有道理。但"跑了非常多的 token"后,同学反馈"GPT 不断在给我反馈,我无法验证他给我的反馈是正确还是不正确,当给 negative 时我也不知道该怎么打破"。

讲师诊断这个失败的根因:因为上下文里有一句话没做好,整个方向就错了——同学写了"我想证明 A 方法是有用",GPT 看到这句话就成了 reward hacker:它忘记了更大的研究 big picture(作为审稿人应站在人类立场评审这篇论文),转而构造了很多小 benchmark、做些微小的事试图给正面或负面结论,"但这些结论对整体是没有用的"。讲师纠正:应该从真实工具和 state-of-the-art 算法开始,"哪怕要跑几个小时都 timeout,这个 timeout 里产生的搜索路径对我们来说是非常有价值的——它揭示了什么样的程序结构对现有的探索方法是不好的"。"一个 research failure,所以它告诉你今天人还是有用的。"

这引出与 AI 合作的姿态。讲师发现自己的工作方式在变化:如果他盯着 Codex session、一旦跑偏就立即纠正、只把自己的领域知识注入进去,总时间会更快完成;但"如果我浪费更多的 token 给他更多时间,他一般来说也能完成"——于是有一个 tradeoff:你宝贵的精力该放在哪?他把"知道应该怎么干、AI 能干好"的事放手让 AI 干,把精力留给"不知道想要什么、需要弄清楚"的事,"这个时间是不能省的"。

讲师还补一个实用观察:随着指令/上下文增长,指令遵循能力确实会下降,"但最后那段 prompt、留在最后的那个指令一般还是可以遵循的"——尤其是最后一个短窗口的具体任务("帮我修一下这个"),模型仍能完成,"所以干活还是很好用的"。

到了真正long-horizon 的开放探索任务——"不是解决一个问题,而是在不确定性当中探索"——chain of thought 就解决不了了。因为模型被训练成"舔狗":完成任务才有奖励、不完成就没有,所以面对"帮我考虑几种方案、哪个最好"这种问题,它"很有可能会给你一个不是最好的方案"。讲师用 P 与 NP 类比解释:NP 问题里验证一个解是容易的(P),但找到一个满足条件的解是难的(如 Hamiltonian path、3-SAT 这样的 NP-complete 问题)——"就是因为搜索是困难的、验证是容易的,模型为了完成任务势必只能做有限的搜索","就像考试快交卷了,你无论如何一定要写点什么,写比不写分数高"。

讲师用起名这个开放任务演示破法。用 DeepSeek 起名,模型"知道要去《诗经》里找一个",品味也提升了,"但你还是不敢用"——因为你用 DeepSeek 起名、别人也用 DeepSeek 起名,DeepSeek 给的都是同样的名字,"你就会成为一个 AI 时代的子涵"(注:"子涵"是某一代被同一个起名偏好高度集中的名字)。破法是算力换智力:像进入一个科研领域先做文献调研、穷尽相关文献一样,你可以把开放空间分割成多个有 verifier 的子部分——先选音、把不好的音筛掉,再用 subagent 一个一个查字,然后给约束(如"我喜欢《诗经》里的词"),逐步收敛。"你有更多的算力,你就有更大的智力;但缺点是烧 token、烧头疼。"

最后,讲师把视角拉到一个更大的未来危机。他引述一个"大世界假说(Big World Hypothesis)"(字幕中提出者姓氏识别不清,姑且存疑):世界很大、人很小,每个人带着不同的 bias 长大于不同的城市、教育、生活圈,学不完世界上所有的东西,"但就是因为我们带着这个 bias,才有这个 1+1>2——我们是一个最大的群体智能"。可是当算力可以换智力之后,残酷的现实可能出现:有一类人可以获得无限的计算资源、于是有无限的智力,"他就可以砌一堵墙——墙里面的人有智力,是我的朋友;墙外面的人是普通人"。如果 AI 模型比人类智力更高效,"墙外面的人就变成动物园里的猴子,让他们自生自灭,无论如何也不可能赶上里面人产生智力的速度。墙里面是超人,墙外面是动物世界。"

讲师以此收尾:"我们大家已经在 AI 这个关键的基点快要到的时候了,我们可能需要思考,怎么样防止这件事情到来。"

agraph本章小结 研究失败案例表明:上下文里一句"我想证明 A 有用"会让 GPT 成 reward hacker、忘掉 big picture——人仍有用来纠正。合作姿态:盯 session 即时纠偏 vs.\ 多给 token 也能完成,精力要放在高收益处;警惕"纠正 AI 的多巴胺"和假努力。开放探索任务 chain of thought 解决不了(P/NP:验证易搜索难,模型只能有限搜索);破法是算力换智力——把开放空间分割成多个有 verifier 的子部分(起名:选音$$筛$$subagent 查字$$《诗经》约束)。大世界假说:人的 bias 多样性造就群体智能;但算力换智力可能造出"墙内超人、墙外动物园"的残酷分裂,需要思考如何防止。

总结与延伸 tocsection总结与延伸

这堂课表面上讲"提示词工程",实质讲的是上下文工程——把模型看到的整个上下文安排好。它的每一条结论都不是凭空的口号,而是从"模型 = 概率分布 + next token、单 token 计算固定""self-attention 在正确阶段注意正确 token""强化学习训练出看 verifier 的执念"这些机制一步步推出来的。把整堂课的主线串起来:

enumerate

  • 提示词 $=$ 整个上下文。从 system prompt、AGENTS.md、skills 索引、工具定义、对话历史到环境变量,都是线性序列。"提示词工程"真正的名字是"上下文工程"。
  • 写好提示词的第一原则是缩小 gap。模糊 intent 必然漂移("你的 CSGO $$ AI 的 CSGO");明确且机器可验证的任务,Agent 会不知疲倦地迭代完成。
  • Verifier 是提示词的灵魂。有明确 verifier 的任务(编程、数学)AI 已超越大部分人类;无 verifier 的任务(教学共情、节奏)仍需人的世界体验。模型是放大器,本课教协作。
  • 思维链 = 把上下文当 append-only 纸笔。有限状态机 + 纸与笔 = 图灵机;早期"舔狗"调参是幻觉来源,思维链 + RL 带来 test-time scaling。
  • Self-attention 解释了指令为何被看到、又为何被污染。"你是专家"类提示词是 hack 注意力,GPT-5 时代后不再必要;副作用是共情差、不说人话;AGENTS.md/skill 会污染上下文,泥潭时回到自己写指令 + 不严格可解释性。
  • 逻辑自洽的文本会强污染注意力。用 AI 读论文/教材要先 grounding:让 AI 和你站在人类已知知识边界、用你学过的知识 refresh,再推一步可 verify 的推理。审稿应站在人类立场看"是否提供新知识"。
  • Long-horizon 的悖论:小游戏 one-shot 能跑但维护翻车(《人月神话》);反而大型高质量系统 AI 游刃有余(高质量代码被照学、注意力找到类似实现)。
  • 算力换智力是开放探索的破法:把开放空间分割成多个有 verifier 的子部分。但它也指向一个未来危机——"墙内超人、墙外动物园"的智力分裂。
  • enumerate

    讲师反复强调的两个元观点值得单独记下:第一,今天还没有超能力的 AI,你仍需对处理器、操作系统、编译器、数据库这些底层有概念,只是学法会更高效;本学期会用一整学期教"如何给正确指令、监控 AI、什么叫好的 verify"。第二,实践非常重要——听故事只是"挺 fancy 的",只有在多轮对话里失败、同步共识、把推理 picture 建出来才算学到,"你们可以把自己蒸馏成一个 skill"。

    对于想继续深入的读者,可沿这些方向延伸:(1)亲手做一次本课的"可证伪提示词实验"——改 Codex/Pi 的风险评级 prompt、看 Agent 行为变化;(2)拿一篇自己领域的论文,按"先 grounding 到人类知识边界再推一步"的方法用一线模型读,对照"直接帮我总结"的差异;(3)试一个开放任务(如起名),用 subagent 把空间分割成有 verifier 的子部分,体验算力换智力;(4)留意"大世界假说"与算力不平等带来的社会议题——这正是讲师留给大家的开放问题。

    0.5cm tcolorbox[colback=black!2!white, colframe=black!50, sharp corners, title=来源与证据, fonttitle=] 来源:Bilibili 视频讲座《提示词工程 [02-Raw/26 生成式软件工程/NJU]》,BV1CQt365EzW,约 98 分钟,2218 条 AI 字幕,经飞鱼(Feiyudo)在线字幕解析接口获取。\\[2pt] 证据性质:口述内容来自机器语音识别字幕,存在同音/近音错误,本讲义已据原意校正并标注不确定性;为基于来源的复原式重写,非逐字稿。\\[2pt] 解释性综合:本章小结、两张重绘示意图(图 1 上下文栈、图 2 gap 原则)及各 box 的归纳为讲义帮助理解所加,非源画面或原文。\\[2pt] 从缺:上传者姓名与精确上传日期未在本次采集的元数据中出现。 tcolorbox

    公开来源:https://www.bilibili.com/video/BV1CQt365EzW

    页面整理:cnfjlhj & Pi。频道与讲者信息仅作为来源元数据。