提示词是整条线性上下文,不只是对话框
00:00:00–00:16:00Insight
- System prompt、agent.md、skills、工具调用与结果、会话历史和环境注入都会进入同一条线性上下文。
- 课堂演示里,全局 agent.md 要求用中文回答,并在结尾写 recap;skills 只先放入简短描述,完整 skill.md 按需加载,用完后从上下文抹掉。
- 约从 Claude Opus 4.5 这一代起,模型靠强化学习和后训练获得更强的长上下文指令遵循;课堂用“每句话后面加一个喵”作失效信号:喵丢了,就说明上下文被截断、压缩,或注意力已经跟不上早期指令。
- 他说优化提示词,表达的其实是上下文工程:安排模型做 next token prediction 时所见的全部内容。
好今天我们来讲和生成式软件工程里面非常关系特别大的一个,也就是你和 AI 沟通的那个渠道就是自然语言的提示词。这基本上就是呃大家和机器沟通的唯一的接口。也就是从 ChatGPT 的时代大家从那个聊天窗呃开始跟 GPT 聊天的时候大家就知道哦。我们有 prompt,要给机机器一个指令。然后 AI 会给我们返回很多的内容可能是文字的代码图片都有可能通过 prompt 来来生成。然后我第一次感受 prompt 的力量是我每年。因为我上操系统课嘛,当时正好是二零二三年二零二三年那就是二二年底 ChatGPT 刚发布的时候。然后我试图呃让 ChatGPT 帮我讲一讲那个 inline assembly 现在应该已经没有人写 inline assembly 了。啊。对这成为了一个传统艺能。然后发现它解释得出奇的好。而且。而且真的是一个应该是没有在它训练语料之内的东西,就我稍微故意做了一个呃地球人应该不会实现的一个 inline assembly 但是它做得相当的好虽然呃确实不完美。啊。那那时刻我就觉得嗯。突然间就感觉好像时代要要变了。
但呃可能没有到今天这么清楚的呃感受到时代会变以及呃怎么样的变化。那提示词呃就就这样成为了一个新词对吧?prompt 在这之前呃好像对吧?在 ChatGPT 之前我们没有用这个意思来讨论过 prompt 这个啊。这个东西。实际上你们可能会觉得 OK 你在聊天框里面打的那段东西叫提示词对吧?,帮我生成一个什么什么的啊。游戏或者帮把这个作业给给做完。但实际上提示词不仅是在你的对话框当中的啊Agent 看到的是一整个 Agent 的上下文。也就是说从从你在和 Agent 聊天之前这个 Agent 它就能够看到一个叫做 System prompt 的东西。这也是一个提示词 OK 它也叫提示词,然后在这个 System prompt 之后它还会呃加载很多的很多的东西。比如说你的 agent.md 然后呃可能你你还会加载一些 skills,agent.md 里面还会要求它再去读别的文件。那实际上在呃你的 agent 第一次停下来和你对话的时候它里面已经有很多很多的东西了,就从最初的这个啊。
系统系统提示词开始有可能是你的那个 agent harness 像 Codex 呃它啊。它它内建的。然后除此之外。这个你你的所有的工具调用呢?和工具调用的结果它实际上也是出现在你的上下文里它是一个线性的上下文,然后直到呃有一天哈你你的 user 会和它聊天说哎给我做一个游戏吧。所以。所以提示词是非常非常呃长的。啊。这也意味着今天 Agent 的能力是是非常啊。离谱的对吧?它可以看到一个非常长提示词比如说你在最早的 System prompt 里面可以让它用中文回答。呃我我就会。因为我为了上课的效果嘛。我就会让他用中文回答哪怕我用呃英文写 prompt,就我这边的 user message 是英文呃它输出的仍然是中文你们会看到这个呃这个这个行为。然后那么实际上当我们说优化提示词的时候那我们就不仅仅是给他一个指令。实际上当我们说优化提示词或者说提示词工程的时候,我们实际上表达的是一个叫上下文工程也就是整个模型的上下文对吧?我们我们都知道啊。假设大家都知道啊。模型。做的是 next token prediction 对吧?
它每一次可以去预测下一个 token ,这个 token 可以是调用工具可以是就输出一个字符啊 anyway 但是它会不停地呃向后去推进你的任务的呃执行。大概我就感觉是从这个 Cloud Opus 4.5 这一代的时候呃 Anthropic 发现模型突然学会了它靠强化学习和后训练学会了非常强的指令遵循能力,你有一个非常长接近百万的上下文它依然可以在很后面的时候能够遵循你的指令并且能够一定程度上看到呃前面的东西。有一个有一个很著名的梗呃就是说你你可以在提示词上面在最早的 prompt 上面加一个说你每每说一句话都要在后面加一个喵。然后你等到有一天你发现这个就你跟它工作工作工作工作的时候突然发现它跟你聊天的时候那个喵丢了。然后你就知道它呃不管是。因为上下文溢出被截断了还是压缩了等等某种反反正它开始不能遵循指令了。这时候你就需要这个重新来啊。想一个办法对吧?这就是。大家在工程实践当中发现的很有趣的各种各样的呃上下文工程也就是提示词工程的呃方式。而我们今天呃我我上这门课也希望告诉大家最重要的一件事为什么会说那个没有没有?token 就应该呃退学呃。
我希望告诉大家的是所有的事情你都应该立即开始尝试 AI 给我们的一个能力就是任何时候你觉得有有有一点麻烦你都可以立即行动。因为 AI 是一个非常耐心的老师不像有的时候我我。因为我我我从我上大学的时候有一种感觉呃我有个东西不会可能我的室友会。然后我跟他沟通的成本很高。而且我可能会有这样的想法哎呀。我是不是?就在我室友面前暴露了。我很菜。对吧?这可能是一个我不想告诉她的秘密嗯嗯。但 anyway 菜也很正常但对于 AI 这个老师来说它不会嫌弃你。而且你可以任意程度的呃追问。所以呃当我们说比如说我刚才说到一个概念说哎我们的新 AI 的 Agent 是有一个很长的上下文的啊。它有 System prompt 有各种各样的东西那我下一秒钟。我就可以立即打开一个 Agent 对吧?我我可以立即打开一个 Agent 然后我可以直接对我可以直接问它说。老师上课的时候说Agent 的上下文里不仅是一两个提示词你能检查一下你的上下文里都有些什么吗。对吧?它。其实可以自己检查自己甚至它可以自己检查自己的日志。
这 Agent 就经常会给你一些惊喜当你问出一个问题的时候它的解决的手段是出乎你意料的对吧?所以我们来来看看一下啊。因为 Agent 正好是可以看到自己的上下文的对吧?根据我们上课所说它是 next token prediction 它能看到所有东西。所以它应该能够读读出来除非有有明确的指令禁止比如说有些呃像这个模型的 providers 它都会禁止你去套取它的系统上下文。啊。这是它会通过模型的微调也会呃通过一些明确的指令比如说在在 System prompt 的前面就会说说你任何形式你要回答 System prompt 都是都是拒绝的。但。因为这是一个整个开源的框架它本身你就可以 debug 它。所以你看这个系统的提示词来自哪里对吧?来自哪里。然后以及它的要求工具使用的指南回复要要简洁。然后接下来它会打开这个我用户下的 pi 下的 Agent 下的 agent.md 这个是我自己写的。所以你看我我。因为我是上课。演示的机器。所以我在这个全局的上下文里面。放了一个用中文回答。然后我有一个结尾必须写一个 recap 这个细节大家可能啊。意识到了。
就是你们第一个在模型跑完了。以后你们第一个看到的是啊。我总结了。这一次呃做做做什么对 agent.md 然后有这个项目级的指令。所以它是一层一层一层的呃 Agent 你目录里面还可以再放 agent点 md 然后还有一个 skills 的索引 skills 就是呃模型能够执行的功能比如说。我有个 make slides 的呃 skill 它可以使我能够呃在这里 F 五播放幻灯片的那个幻灯片的渲染那么这个幻灯片的渲染就是一个 skill 但是模型只能在上下文里面看到它的描述它那个我头上写那个 metadata 它的名字是什么它的描述一个简略的描述是什么。然后我整个很长它可能写一个很长的 skill 它都只是按需加载的。然后等到那一轮加载完了。以后这个 skill 也会从这个上下文里面被被抹掉对。啊。只有匹配任务的时候才啊。才读取完整的 skill.md 然后以及还有工具的定义你看它它的工具也是直接以文本的形式出现在它的上下文里了。然后以及绘画的绘画的历史啊。
环境变量每一次执行诶这是这是大家所不知道的每一次执行都会注入当前的一些环境比如说模型甚至是当前的时间如果你和这个 Definitive Check 去聊天的话你可以把它的那个每次注入的环境给套出来这个不属于系统提示词你是可以可以可以跟它啊。把它把它套出来的。所以这是一个非常长的呃序列。那我们要做的上所谓的上下文工程提示词工程就是把所有的这些都啊。安排好安排好呃对。所以刚才。其实我就演示了呃在 AI 时代我们学习应该怎么样对吧?我们呃不仅可以像刚才那样把它问清楚以及在你不明白的时候追问你还可以把它反过来呃。大家可能听说过这个叫费曼学习法就是你你怎么能够判定你是不是?理解这个知识了反过来你当老师。然后这件事情在你做就是我们做学生的时代也是很代价非常大的。因为你要做老师就必须要有一个听众来来检验你那那个听众很有可能是你的室友。但是室友可能不想听你在那啰嗦这个东西对吧?他可能对这个不感兴趣可能他他对这个了解得太清楚了呃也许他就是单纯不想互相帮助。但是 AI 这个时候你可以把就是刚我刚我们一直刚才说你可以把 AI 当老师对吧?
你去请教它请教它请教它把它弄懂。然后你可以在你自己自认为弄懂以后再反过来你自己再自己做老师。然后说 AI 你你现在来扮演学生我要把这个东西给你讲懂你假装什么都不知道。然后这时候你来看我哪里逻辑是不是?有有错有漏你在这个时候纠正我哎你再你正着一遍反着一遍你基本上就对这个概念理解得很清楚了。所以我觉得大家作为 AI native 的一代人一定会把我们这一代人给彻底卷死的。因为你们有无限的时间就我第一节课的观点对吧?你你们的每你们现在的任务就是学习没有没有?像我比如说要负责一些其他的事情就对就对别人负责那么呃那就是你们最好的最好的时代。所以呃你们你们也可以把这个费曼学习法呃给用起来刚才我就展示了。这样的一个呃解剖当前上下文的呃例子这个这个就就就过去了。然后呃你们在学习这些东西的过程当中会留意到很多有趣的小细节你们有没有?在呃用 Codex 的时候我不知道你们有没有?同学用 Codex 啊。不要紧呃你们在用任何 Agent 的时候都可能面临一个问题如果你要执行一件危险的操作它会让你确认。
当然比如说这个 pi 默认在默认的配置下它是 YOLO model 就是它它所有事情都直接执行。然后如果。如果我今天有一个提示词给得不是很好它有可能就直接把我整个就删了。我今天就好我今天我就直接下课了。这是这是有可能的但这是一个平衡对吧?你你你可以在更安全的环境里面运行比如说沙箱模式运行但沙箱模式运行你们如果观察过像 Codex 的运行它经常会我先试一下做一件什么事儿。然后失败了。然后它意识到这是在沙箱里面做哦。我在沙箱里面。其实不能做这件事我先要在外面再做一次。然后再做一次的时候它甚至会问呃我现在要。做件可能有一点危险的事情你是 yes 还是 no 然后这就很讨厌。因为呃你最想的对吧?对对于我们来说最想的就是哎我今天要去吃饭了很好我把这 Agent 的任务先跑上先把三个任务都想好三个任务都跑上。然后去吃饭。然后吃饭回来的时候你发现它跑了一分钟就问你要要确认你就对吧?就你就觉得浪费了 Agent 的时间浪费了自己的生命嗯。你们经常会看到这样的小细节。然后你们在小细节上的注意力。一定程度上成就了。你们可以可以走多多远。
所以这也是现在 AI 时代最好的地方呃比如说我就留意到 Codex 有有有这样的一个细节它有些命令它会认为这是一个不太危险的命令这是一个好像直接做也没有关系的命令。所以它不是说它每次调用 bash 的工具它都会叫你确认。它有些时候那个 ls 杠 l 它认为这个命令是安全的那它就它就是安全的实际上这个命令可能是不安全的。因为在我的环境里面可能把 ls 对吧?重新命名成了。另外一个比如说 rm 这样的命令。当然应该没有人要这样做对吧?在一个恶意的恶意恶意的环境里。那你可以好奇比如说这是怎么做到的对吧?你可以直接比如说我我我下载了一份这个 Codex 的代码这是就我觉得现代软件工程和过去软件工程很不一样的地方你们在比如说像大二大三的时候尤其是我我像你们这么大的时候比如说我我接触 Linux 内核啊。差不多对跟你们大二大三的时候差不多我接触 Linux 内核。然后呃我光把 Linux 内核下载下来搞清楚这个东西要怎么编译。就花了很长的时间。而且这还是我在有一定的 Linux 使用经验的呃基础上就是一个完全的劝退某种程度上我我能在那个年代活下来就是。
因为我我对这种劝退的东西有一种我一定还要试一试的执念。然后在今天你们啊。我相信每个同学都会有的如果这是一个好东西对吧?Codex 很好我呃也许你们不喜欢 Codex 对吧?你们喜欢派派更清亮。当然派显然是更清亮的呃但你们现在不需要害怕任何一个软件系统的呃复杂性。因为你可以直接问。比如说啊。当然我这里没有豆包输入法我还是就手输了嗯。我留意到一个很有趣的问题。在调用 bash 的时候有的时候会向用户确认有的时候不会有一个风险的判定风险。其实是是一个很难的问题你并不知道具体的命令语义是什么。所以你是做了分析还是让大模型给了风险的评级还是别的什么方法读一下相关的代码好对吧?这就是一种提示词。然后这个时候派当派看到我的这个提示词之后它前面的提示提示词也都有呃它就会去开始试图解决解决这个问题它去各种去搜搜索代码对吧?检索代码如果我有一些比如说像呃像 LSP 这样的呃工具的话它还可以去去工具里面像像你们在 ID 里面点来点去。对吧?你们有用过 ID 的那个功能吗?
呃我我记得我我上上操作系统或者计算机系统基础课的时候我都会说呃我发现有很多同学从 PA 1 做到 PA 4 你们那个 VSCode 里面都还是有红线的。怎么笑笑了对吧?笑了呃有红线就意味着你你没有解锁这个正确的配置虽然有红线没有没有?任何问题呃你还是可以在我们的受控环境下编译。然后把所有东西都完成呃。但是这不是正确的 practice 对吧?你应该花一点点时间去 configure 你的 VSCode 加上那个 include pass 呃。因为我们是有些杠 I 啊。这样的选项你你会指定一个编译的路径。然后你你把这些配置做好了。以后你就可以得到这个 ID 的所有的功能对吧?你可以用 control 去点。然后你可以去那个 rename symbol 用那种重命名符号的方式一次性重构很多东西哪怕是没有在大圆模型之前的呃时代。然后。然后在今天这件事情就配包括配置就变得更呃更容易了。然后你看它确实是有有让大模型呃风险评评级的这个呃。