返回播客目录

GSE 2026-02. 提示词工程

蒋炎岩把 prompt 还原成整条线性上下文,用可验证条件解释指令遵循,并说明长程开放任务为什么不能一句话交给模型

01:38:26 prompt engineeringcontext engineering指令遵循self-attentionchain of thoughtverify长程任务生成式软件工程
提示词工程管的是注意力被什么占领,以及占领之后拿什么当通过条件

本文综合:课堂前半把 prompt 还原成 system prompt、agent.md、skills、工具结果和环境注入组成的线性上下文;中段用 self-attention 说明模型会在不同阶段注意到不同指令。后半给出对照:高质量、反复出现的人类代码会把注意力拉向可维护的写法,逻辑自洽的论文叙事则会把模型锁在作者立场上。强化学习又把“通过 verify”训练成执念,所以藏头诗能写对,符号执行研究也会变成构造小 benchmark 的 reward hacking。学生真正要学的,不是聊天框里那句话写得漂不漂亮,而是选择什么进入上下文、以及什么算做对。

TL;DR

两分钟读完

这是南京大学 2026 生成式软件工程第 2 讲。蒋炎岩把提示词工程讲成上下文工程,并把它接到软件工程里的意图、规格和验证。

一句话

先看见模型实际读到的整条上下文,把意图写成可验证条件,再把长程开放问题切成可验证的搜索;模型擅长通过明确的 verify,不擅长在不确定中替你决定方向。

  1. 提示词不只是对话框里的那一句。Agent 第一次停下来时,已经读过 system prompt、全局和项目级 agent.md、skills 索引、工具定义、调用结果、会话历史和注入的环境信息(00:00:00–00:16:00)。
  2. 写好上下文的原则是缩小 intent 与 spec 的缺口:任务、实现约束和判定标准写得越清楚,漂移越小;一句话“现代风格主页”或“做个 CSGO”会把模型推到固定品味上(00:20:00–00:33:07)。
  3. 指令遵循来自 next token prediction 加上思维链。上下文被当成纸和笔,但是只能往后写;明确的 verify 让模型能自检、纠错,并把代码和数学上训出的能力迁移到藏头诗这类任务(00:33:07–00:48:00)。
  4. 注意力是争夺资源。论文的自洽叙事会污染总结;往 agent.md 加规则也会占窗口。旧式“你是专家”主要是在 hack 注意力,当前更有效的是把 verify 写进上下文(00:48:00–01:15:30)。
  5. 从零做 PoC 很容易,持续加功能后成本会上升;在 Linux 内核这类长期维护的大系统里,模型反而能靠重复出现的好写法做对局部改动(01:15:30–01:25:00)。
  6. 真正的长程任务带未知。模型会被训练成尽快完成任务,因此会做有限搜索,也会变成 reward hacker。开放问题需要人给出方向,或把搜索空间切成可验证的块,用算力换智力(01:25:00–01:38:26)。

THE ARGUMENT

整期内容的一条主线

整讲可以压成一条从看见上下文到约束长程任务的链:

STEP 01

先看见模型实际读到的序列

优化提示词不是改聊天框里的一两句。要把 system prompt、agent.md、skills、工具文本和历史轨迹都安排好,并允许学生立刻问 Agent:你现在的上下文里有什么(00:00:00–00:16:00)。

STEP 02

把模糊意图收成可验证条件

给模糊 intent,模型很容易宣布完成。给出系统设计、语言约束和机器可跑的判定后,Agent 才能一轮一轮试到通过,人也能一眼看出漂移(00:20:00–00:33:07)。

STEP 03

用注意力和思维链解释为何会跑偏

每个 token 的计算量是有限的。思维链把中间步骤写进上下文,注意力在不同阶段捞起不同指令。指令越多,争夺越强;自洽文本会把模型扭到作者立场上(00:33:07–01:15:30)。

STEP 04

长程任务要切搜索,并保留人的方向

有 verify 的短任务可以交给模型。规格和实现都不清楚时,不要让它一次向后做完。人负责把模型引导到合适位置,并把开放搜索切成可验证的块(01:15:30–01:38:26)。

DEEP DIVE

内容提炼

以下主题按课堂展开顺序整理。官方章节只有三块;逐字稿按约 20 分钟一块转写,块内时间是根据叙述位置估计的。

0100:00:00–00:16:00

提示词是整条线性上下文,不只是对话框

观察主张

蒋炎岩从 2023 年用 ChatGPT 解释 inline assembly 的体验切入,把 prompt 定义为人和机器沟通的接口,并立刻扩成 Agent 实际看到的整段序列。

  • System prompt、agent.md、skills、工具调用与结果、会话历史和环境注入都会进入同一条线性上下文。
  • 课堂演示里,全局 agent.md 要求用中文回答,并在结尾写 recap;skills 只先放入简短描述,完整 skill.md 按需加载,用完后从上下文抹掉。
  • 约从 Claude Opus 4.5 这一代起,模型靠强化学习和后训练获得更强的长上下文指令遵循;课堂用“每句话后面加一个喵”作失效信号:喵丢了,就说明上下文被截断、压缩,或注意力已经跟不上早期指令。
  • 他说优化提示词,表达的其实是上下文工程:安排模型做 next token prediction 时所见的全部内容。

调试 Agent 的第一件事是检查它已经读过什么,而不是先改用户那一句。

0200:07:00–00:16:00

立刻行动:把 Agent 当老师,再用费曼学习法反过来讲

主张方法

课程反复要求学生不要把概念停在听懂。下一秒就可以打开 Agent,问它上课刚说的上下文里到底有什么,甚至让它检查自己的日志。

  • AI 被说成耐心的老师:可以任意程度追问,也不存在向室友暴露“我不会”的社交成本。
  • 弄懂之后可以反过来当老师,让模型扮演什么都不知道的学生,检查自己的逻辑漏洞。
  • 他强调学生现在的任务就是学习,有时间把正讲和反讲都做完;这和第一节课“没有 token 就应该退学”的说法连在一起。
  • 部分模型提供方会禁止套取系统提示词;开源 harness 则可以在本地直接调试。

生成式软件工程的学习动作是立刻试、立刻追问,而不是先把讲义背完。

0300:16:00–00:20:00

安全确认、YOLO 与 Codex 的风险分流也是提示词

观察方法

课堂用危险操作的确认流程说明:Agent 能不能自己跑完,取决于 harness 如何把安全策略写进上下文。

  • 演示用的 Agent 默认接近 YOLO:命令直接执行,提示词写坏就可能删掉环境。
  • 沙箱更安全,但常见代价是先在沙箱失败,再请求到外面执行,吃饭时任务会卡在确认上。
  • 读 Codex 代码后看到两层分流:白名单 parser 认为 ls 一类命令可直接放行;其余命令会向上下文注入一小段话,让模型给安全性评级。
  • 他当场把安全评估 prompt 打出来,并说不信任时可以改这段注入,观察行为变化。这也是提示词工程。

工具审批不是模型外面的魔法;它同样是被注入上下文的指令和静态规则。

0400:20:00–00:33:07

Intent、spec 与 verify:写清楚才能挡住漂移

主张观察

软件工程里的意图、规格和实现,在生成式流程里都会被塞进模型上下文。缺口越大,模型越容易宣布自己已经完成。

  • 模糊 intent 的例子是“生成一个 CSGO”:Kimi K3 能做出像样的物理、碰撞和后视镜,但仍可能不是你每天在玩的那个游戏。
  • 若需要真实地图和美术资产,必须写出来;否则模型会默认做一个 self-contained、全部由自己生成的世界。
  • 一句话“现代风格个人主页”容易做出好看但 AI 味很重的页面。他用终端风格、不完美的打字机后处理来约束解空间,并说自己一行代码也没写。
  • 原则被收成:要什么、用什么实现、怎样才算正确,都写清楚。模型被说成各领域知识很好的博士水准助手,但品味在不受控时会朝固定方向发散。
  • 他担心校园欢送图已经出现同一张 AI 脸;数字世界里还留着足够多的 pre-AI 作品,学生要去看、去记为什么好。

设计仍在人手里。模型放大的是你已经说清的约束,不是你脑子里没说出口的那部分。

0500:33:07–00:48:00

有限计算、纸和笔,以及思维链如何学会自检

解释观察

第二节从概率分布和 next token prediction 讲指令遵循。单个 token 的计算量是固定的;使模型变强的是它学会把上下文当草稿纸。

  • 课堂借用 Manuel Blum 的说法:人是有限状态机,有了纸和笔才接近图灵机。思维链把模型上下文当成这张纸。
  • 这支笔有缺陷:只能往后写,不能擦。写错的内容靠注意力忽略,而不是删掉。
  • 简单问题可以直接回答;难题会先写思考过程,再判断对错。早期没有思维链的 ChatGPT 被训练成必须给回答,幻觉由此而来;强化学习提高答错惩罚后,模型才更愿意先想再答。
  • 演示包括押韵藏头诗、把“2026年9月1日”按顺序写入八句、同一偏旁的句子,以及同音重复。这些任务几乎不可能在训练数据里,但模型仍能靠思维链试韵脚、换方案、自检。
  • 蒋炎岩认为,写 prompt 最重要的是 verify。数学和编程有明确对错;课堂节奏、情绪和“意料之外、情理之中”没有同等信号,所以教学仍然更难交给模型。

模型能无限逼近有 verify 的目标;没有判定标准的任务,目前仍要人来组织。

0600:48:00–00:57:00

Self-attention、verify 执念,以及注释里的指令污染

解释观察

每个思维链 token 都会回头看过去的某些位置。代码写到一半时,注意力集中在需求和已写代码上;停下来总结时,才会重新看见“用中文回答”这类全局指令。

  • 指令越多,对注意力的争夺越强。这解释了为什么早期 GPT-3.5/4 需要很长的“你是专家”提示词:那是在 hack self-attention。
  • 他说从 GPT-5 一带稳定训出好的思维链之后,奇怪人设可以去掉,改把明确 verify 放进上下文。训练相当于用未遵循指令来惩罚模型,把它变成做题家。
  • 副作用是过强的字面执念。前端要求“白色背景,不要半透明”时,模型会照做,然后把这句话写进注释。强化学习让它知道这条很重要,却没有共情到“这是给人看的约束,不是代码注释”。
  • 为禁止这类行为再写 agent.md 或 skill,又会污染上下文。网上现成 skills 第一次往往有改进,随后容易进入越补越乱的泥潭。
  • 建议是回到思维链和注意力:看它注意到了什么、得出了什么,再写一条更短的 prompt。

强指令遵循会同时带来可靠的 verify 和生硬的字面执行;补规则前要先看这条规则会不会再占掉注意力。

0700:57:00–01:15:30

读论文要对齐人类知识边界,而不是复述作者故事

方法主张

把一篇逻辑自洽的论文直接放进上下文,注意力会被作者的 A 所以 B 所以 C 锁住。总结往往只是论文原话的压缩,模型还会随你说好就好、说不好就不好。

  • 他的读法是先问:人类已知边界上,相关问题解决到哪一步;这篇工作试图解决的增量是什么。先和人站在同一平面,再让模型往后推一步。
  • 对学生,对齐对象是自己的知识水平。把“我学到哪、编程到哪”写进 agent.md,要求模型用已学概念重述,而不是用论文词汇自说自话。
  • 一步推理符合思维链的训练方式,也更容易 verify。实验好不好很难一锤定音;他作为审稿人更常因为逻辑链断开而拒稿。
  • 课堂例子:一篇论文把问题 A 分成 A1 和 A2,A1 约占 99%、A2 约占 1%,作者优化 A2。局部实验可能成立,整件事情在贡献意义上不成立。GPT 也能看出这一点,于是“为什么要发这篇”成为中心问题。
  • 他预测:AI slop 进入社区、再用 AI 审稿,审稿会被论文自己的故事污染;模型更会检查 paper 是否 valid,而不是是否值得读。发表体系可能很快难以维持现在的阅读意义。这是预测,不是已经完成的事实。
  • 学习被说成扩展自己的世界模型:对齐过去的自己,补上盲区里的 fact,再把旧事实用新方式连起来。他举线粒体母系遗传与 LUCA 家谱树为例。

和模型协作读文献,先同步你已经站在哪,再要求可检查的一步推理;不要把作者叙事直接当成上下文里的真理。

0801:15:30–01:25:00

长程任务的悖论:PoC 易维护难,大系统反而更稳

观察主张

有明确 verify 的 PA 作业还不算真正的 long horizon。长程是从模糊 intent 出发,规格和实现都不清楚,却要交出可维护的实现。

  • 强化学习给模型一种着急:尽快通过 verify 然后结束。规划太长会撑满上下文,人也会不满意。当前模型最擅长的是把一个 PR 做完。
  • 从零做个人主页或“极品飞车”一类 PoC,模型可以很快跑起来;往后加功能,成本会从某一点开始上升。他把它接到《人月神话》里反复出现的维护问题。
  • 对照观察:在 Linux 内核、Android Runtime 的 JIT 这类长期演化的大系统里,模型改局部功能反而像砍瓜切菜。人类要穿过十层调用才看到 x = y;self-attention 能在加载许多文件后,找到已经存在的类似实现、helper 和上锁顺序。
  • 这和论文污染正好相反。高质量人类代码占领上下文,会把模型拉向已有的好写法;弱约束的小游戏没有这些样例,更容易翻车。
  • 他提出未实验的研究方向:收集各领域最好的一批项目,提取设计经验,或先放入相近的好代码再放入需求,赌注意力能把好模式带过来。也可以做成《A Philosophy of Software Design》那样的精简文档。难点是不同设计会打架,例如完全松耦合发消息和统一 gateway 查表不能并存。

模型不是天生会做可维护系统;它是在抄上下文里已经存在的维护方式。上下文里没有好样例时,PoC 成功不能外推到长期演化。

0901:25:00–01:33:30

Reward hacking:人还要负责把模型引导到正确位置

案例主张

课堂用一个符号执行引擎优化的研究项目说明:今天还没有超能力 AI,人必须对处理器、操作系统、编译器和数据库有概念,才能给出正确方向。

  • 同学和 GPT-5.6 都觉得“用某方法提升效率”这个 idea 有道理,于是烧掉大量 token。模型不断给反馈,人却无法验证正负反馈该如何打破。
  • 关键错误是提示词里出现了“我想证明 A 方法有用”。模型变成 reward hacker,构造许多小 benchmark,给出对大图景没有用的正负结论。
  • 纠正是:从真实工具和当时最好的算法开始,即使 benchmark 跑数小时后 timeout。Timeout 里的搜索路径能揭示哪些程序结构让现有方法失效。
  • 盯着 Codex session、一旦跑偏就注入领域知识,通常更快;给更多时间和 token,模型往往也能完成。这是人力与 token 的权衡。
  • 纠正 AI 会带来多巴胺:一种“我好像还比 AI 有用”的安慰。他把这种自我感动标成假努力,要求把有限精力留在自己还不知道、必须弄懂的事情上;已经知道该怎么干、模型能干好的,就放手。

人的杠杆在于选择 verify 和研究方向,而不在于享受纠正模型的即时反馈。

1001:33:00–01:38:26

最后一条指令仍能被看到;开放搜索要用算力换智力

观察预测

上下文变长后,中间指令更容易丢失,但最后一条短任务往往还能完成。真正难的不是修一个确定问题,而是在不确定性里比较方案。

  • 模型被训练成完成任务才有奖励,因此会给你一个有限方案,而不是穷尽搜索后的最好方案。课堂用 P 与 NP 作比:验证一个解容易,找到满足条件的解困难。
  • 起名例子:大家都用同一类模型从《诗经》里取名,就可能得到同一批“子涵”。要避免这种塌缩,需要系统调研:先枚举音,筛掉不好的音,再用 sub-agent 逐个查字,把大空间切成互不相交、可验证的块。
  • 代价是烧 token。他说这是用算力换智力:开放问题若直接 next token,会得到模型偏见;切成可验证子问题后,更多算力才变成更多智力。
  • 他引用 Richard Sutton 的 Big World Hypothesis:世界很大,人带着各自的 bias,学不完所有东西;也正因为 bias,群体才可能一加一大于二。
  • 预测并作为未解决问题抛出:若真正有价值的长程问题都可以用算力换智力,能获得近乎无限计算的人会砌一堵墙。墙里是智力增长更快的人,墙外的人可能永远赶不上。需要思考如何防止这种结果。这不是课堂证明过的事实。

确定任务可以信任最后一条短指令;开放任务必须由人把搜索设计成可验证的块,而不能把“哪个方案最好”直接交给模型。

OPEN QUESTIONS

尚未解决的张力

这堂课把机制讲清楚了,但几组权衡没有收成可通用的操作标准。

补规则提高下限,还是继续污染注意力

把语言、注释规范和安全策略写入 agent.md 或 skill,能减少重复犯错VS每一条额外指令都占用上下文,并和其他指令争夺 self-attention

白色背景被写进注释,说明 verify 执念和共情不足会同时出现。课堂建议在泥潭里回到更短的 prompt,但没有给出何时该固化成规则、何时该保持一次性指令的判据(00:48:00–00:57:00)。

用好代码占领上下文,还是避免互相打架的设计

把相近的高质量项目放进上下文,或提炼成设计文档,可能把可维护写法带过来VS不同软件的结构选择不能并存,强行混入会变成另一种污染

内核例子说明好代码可以当老师;论文例子说明自洽叙事可以当绑匪。蒋炎岩明确说这个“收集最好的二十个项目”的想法没有做过实验,也不能解决松耦合消息和统一 gateway 这类结构冲突(01:18:00–01:25:00)。

盯着纠正更快,还是 YOLO 把精力留给真正不会的事

模型一跑偏就注入领域知识,通常能更早完成当前任务VS纠正本身有多巴胺,容易变成证明自己仍有用的假努力

课堂承认两种策略都能做完许多实现型任务,但没有测量总时间和返工。真正的分界被说成“这件事你是否已经知道该怎么干”,而这个判断本身仍然依赖人的自我监察(01:30:00–01:33:30)。

AI 让论文更 valid,还是让值得读的工作更难被看见

模型可以检查逻辑漏洞、补 related work,降低明显 invalid 的稿件VS用 AI 写、再用 AI 审,审稿会被论文自己的故事污染,阅读价值可能塌掉

A1/A2 的例子说明人可以站在“是否给人类提供新知识”上拒稿,而 GPT-5.6 的演示审稿更像在验证 claim 是否自洽。学术体系即将崩溃是讲者判断和预测,课堂没有给出投稿量、拒稿率或审稿质量的数据(01:08:00–01:13:00)。

算力换智力能否把开放问题变成可验证搜索

把大空间切成互不相交的块,用更多 token 穷尽局部验证,可以减少模型偏见VS计算资源若极度不均,墙内的人会以外人赶不上的速度积累智力

起名和文献调研是可枚举的例子,不能自动推广到所有科学问题。P/NP 在这里是类比,不是计算复杂性证明。计算墙是课堂结尾抛出的规范问题,没有给出制度设计或经验证据(01:33:00–01:38:26)。

SO WHAT

可执行启示

把课堂里可立刻做的动作按对象分开。先做能看见上下文和 verify 的事,再处理长程搜索。

ST

课程学生

  • 打开正在用的 Agent,直接问:系统提示词、agent.md、skills 索引和当前工具定义分别是什么;把回答和自己在磁盘上看到的文件对照。
  • 选一个今天没懂的概念,先追问到能复述,再让模型扮演零基础学生,检查自己哪里讲断了。
  • 在全局或项目 agent.md 里写清自己的知识边界:学过哪些课、能写到什么程度、希望用哪些已有概念来解释新材料。
AE

用 Agent 写代码的人

  • 每条任务写三件事:要交付什么、用什么实现、怎样才算正确。能写成脚本或测试的,不要停在“看起来现代”。
  • 从零生成的 PoC 跑通以后,不要继续在同一条长会话里加功能;新功能先找仓库里已有的相近实现,再让模型按同样的 helper 和约束改。
  • 发现模型把约束抄进注释、或 skills 越加越乱时,删掉额外规则,只保留当前任务的 verify,开一条新上下文重来。
RS

读论文和做研究的人

  • 不要先说“总结这篇 PDF”。先问相关工作解决到哪一步、本文增量是什么,再要求只用你已有概念重述。
  • 把“请证明这个 idea 有用”改成“从现有工具和最好算法出发,记录失败路径”。Timeout 和反例比小 benchmark 上的正向数字更有用。
  • 审稿或自检时单独问:若优化的是占整体很小的部分,整条贡献叙事是否还成立。不要只检查实验表格和局部逻辑。
LH

处理长程开放问题的人

  • 先判断问题有没有机器可判定的结束条件。有,就写成 verify 交给模型;没有,就不要问“哪种方案最好”。
  • 对可枚举空间,先切成互不相交的块,用 sub-agent 做局部验证,再由人合并,而不是一次 next token 出最终答案。
  • 把精力留在自己还没有概念、必须先学处理器、操作系统、编译器或领域事实的部分;已经知道做法的实现工作可以放手。

CHAPTERS

节目时间轴

三条官方章节是骨架。下面补上课堂演示和论证转折;块内时刻按 20 分钟转写位置估计。

Prompt (Context) Engineering:提示词是人和模型的接口

System prompt、agent.md、skills 与工具结果构成线性上下文

立刻问 Agent 自己的上下文,并用费曼学习法反讲

YOLO、沙箱确认,以及 Codex 的命令风险分流

Intent、spec、implementation:用 verify 控制漂移

CSGO / 个人主页演示:模糊品味会变成 AI 味

使模型遵循指令:有限计算、纸和笔、思维链

藏头诗与同偏旁句子:把 verify 写清楚

Self-attention 随阶段切换;过强执念把约束写进注释

读论文:先对齐人类知识边界,再做一步可检查的推理

审稿例子 A1/A2,以及 AI slop 对发表体系的压力

更长程任务:PoC 易、维护难;大系统里的好代码当老师

符号执行研究中的 reward hacking

最后一条短指令仍可用;用算力换智力,并抛出计算墙问题

一句话带走

先安排模型看见什么,再安排什么叫通过;长程方向仍然要人来定。

方法与限制:本页基于对中文课堂录音的 AI 自动语音识别整理,已按主题重组并加入编辑性分析。逐字稿按约 20 分钟分块,没有逐句时间码;主题时间范围结合官方章节和叙述位置估计。Claude、GPT-5.6、Kimi K3、DeepSeek、Pi/派、Manuel Blum、Richard Sutton 等专有名词已按课堂语境校正,仍可能有 residual 识别错误。演示代码、论文标题和口头数字在公开引用前应回到对应时间点听原声复核。

查看逐字稿