微信扫码
添加专属顾问
我要投稿
AI提示词设计的进阶指南:从单句优化到系统化信息架构,掌握上下文工程的核心技巧。核心内容: 1. 提示词工程与上下文工程的关键差异 2. 提升AI输出质量的8个实用技巧 3. 工业级大语言模型应用的系统化方法论
作者:Addy Osmani[1]
核心摘要: “上下文工程” (Context engineering) 指的是为 AI(如大语言模型)提供成功完成任务所需的所有信息和工具——而不仅仅是一句精心设计的提示词。它是“提示词工程[2]” (prompt engineering) 的演进,体现了一种更宏大、更系统化的方法。
要想从 AI 那里获得最佳结果,你需要提供清晰而具体的上下文。AI 输出的质量直接取决于你输入的质量。
如何改进你的 AI 提示词
提示词工程关注的是如何巧妙地措辞提问;而上下文工程则关注如何构建一个完整的信息环境,以便 AI 能够可靠地解决问题。
“提示词工程”曾是一个时髦词,本质上是指通过遣词造句来获得更好输出的技巧。它教会我们用巧妙的“一句话”进行“散文式编程”。但在 AI 圈子外,许多人将提示词工程简单理解为在聊天机器人里输入花哨的请求。这个词从未能完全传达出有效使用大语言模型所涉及的真正复杂性。
随着应用日益复杂,仅关注单个提示词的局限性也变得显而易见。一篇分析文章曾俏皮地评论道:提示词工程的探索,是为了给上下文工程的腾飞铺路。 换句话说,一句机智的一次性提示词或许能在演示中惊艳我们,但要构建可靠的、工业级的大语言模型系统,则需要更全面的东西。
正是这种认识,让我们的领域逐渐凝聚在 “上下文工程” 这个词上,它更准确地描述了从 AI 获取卓越成果的这门手艺。上下文工程意味着构建大语言模型所能看到的整个 上下文窗口 ——不仅是一条简短的指令,还包括完成任务所需的所有相关背景信息、示例和指南。
这个短语在 2025 年中由 Shopify 的 CEO Tobi Lütke 和 AI 领域的领军人物 Andrej Karpathy 等开发者推广开来。
Tobi 写道:“相比提示词工程,我真的更喜欢‘上下文工程’这个词。它更好地描述了核心技能:为任务提供所有上下文,使其能被大语言模型合情理地解决的艺术。” Karpathy 对此表示强烈赞同,并指出,人们通常将提示词与简短指令联系在一起,但在每一个严肃的大语言模型应用中,上下文工程都是一门精巧的艺术和科学,需要在每一步为上下文窗口填充恰到好处的信息。
换句话说,现实世界中的大语言模型应用并非靠运气或一次性的提示词成功,而是通过围绕模型的查询精心组装上下文来实现的。
术语的变化反映了方法的演进。如果说提示词工程是想出一句神奇的咒语,那么上下文工程就是为 AI 编写完整的剧本[3]。这是一种结构性的转变:提示词工程在你精心制作好一个提示词后就结束了,而上下文工程则始于设计整个系统,以便有组织地引入记忆、知识、工具和数据。
正如 Karpathy 解释的那样,要做好这一点,涉及到方方面面,从清晰的任务指令和解释,到提供少样本示例、检索到的事实(RAG)、可能的多模态数据、相关工具、状态历史,以及将所有这些小心翼翼地压缩到一个有限的窗口中。上下文太少(或类型不对),模型将缺乏信息,无法达到最佳性能;无关的上下文太多,则会浪费计算资源(token),甚至降低性能。 找到那个最佳平衡点并非易事。 难怪 Karpathy 称之为一门科学,也是一门艺术。
“上下文工程”这个词之所以流行,是因为它直观地捕捉到了我们在构建大语言模型解决方案时实际在做的事情。“提示词”听起来像是一个简短的查询;而“上下文”则意味着我们为 AI 准备的更丰富的信息状态。
撇开语义不谈,为什么这个转变如此重要?因为它标志着我们 AI 开发心态的成熟。我们已经认识到,生产环境中的生成式 AI 不像念一句魔法咒语,而更像是为 AI 设计一个完整的工程环境。一次性的提示词或许能做出炫酷的演示,但对于稳健的解决方案,你需要在每一步都控制模型“知道”什么和“看到”什么。这通常意味着检索相关文档、总结历史记录、注入结构化数据或提供工具——无论需要什么,只要能让模型不是在黑暗中猜测。结果是,我们不再将提示词视为我们希望 AI 能理解的一次性指令。我们开始从上下文管道的角度思考:所有那些为 AI 成功铺路的信息和交互片段。
为了说明这一点,我们来看看视角的差异。提示词工程常常是一场文字游戏(“也许我换种方式说,大语言模型就能做我想做的事了”)。相比之下,上下文工程感觉更像是传统的工程学:这个系统需要哪些输入(数据、示例、状态)?我如何获取这些输入并提供给系统?以什么格式?在什么时间? 我们基本上已经从从单个提示词中榨取性能,转向设计由大语言模型驱动的系统。
上下文工程意味着在运行时,动态地为 AI 提供成功所需的一切——指令、数据、示例、工具和历史记录——所有这些都被打包到模型的输入上下文中。
一个有用的心智模型[4](由 Andrej Karpathy 等人提出)是,将大语言模型看作一个 CPU,将其上下文窗口(它一次能看到的文本输入)看作是 RAM 或工作内存。作为工程师,你的工作类似于一个操作系统:将恰到好处的代码和数据加载到那个工作内存中,以完成任务。在实践中,这些上下文可以来自许多来源:用户的查询、系统指令、从数据库或文档中检索到的知识、其他工具的输出,以及先前交互的摘要。上下文工程就是将所有这些部分编排成模型最终看到的提示词。它不是一个静态的提示词,而是在运行时动态组装信息的过程。
图解:多个信息源被组合到大语言模型的上下文窗口(其“工作内存”)中。上下文工程师的目标是用正确的信息、正确的格式填充该窗口,以便模型能够有效地完成任务。
让我们来分解一下这具体涉及什么:
最重要的是,上下文工程是为了给 AI 的成功创造条件。
请记住,大语言模型功能强大但并非通灵——它只能根据其输入内容加上其训练期间学到的知识来作答。如果它失败或产生幻觉,根本原因往往是我们没有给它正确的上下文,或者我们给了它结构混乱的上下文。当一个大语言模型“智能体”行为失常时,通常是*“适当的上下文、指令和工具没有传达给模型”。垃圾进,垃圾出。反之,如果你确实*提供了所有相关信息和清晰的指导,模型的性能会显著提高。
提供高质量上下文的实用技巧
那么,具体来说,我们如何确保我们正在给 AI 它所需要的一切呢?以下是我在构建 AI 编程助手和其他大语言模型应用时发现的一些实用技巧:
记住黄金法则:大语言模型功能强大,但它们不会读心术。 输出的质量与你提供的上下文的质量和相关性成正比。上下文太少(或缺少部分),AI 就会用猜测(通常是错误的)来填补空白。无关或嘈杂的上下文可能同样糟糕,会将模型引向错误的方向。因此,我们作为上下文工程师的工作就是精确地为模型提供它所需要的,而不是它不需要的。
让我们直接面对批评。许多经验丰富的开发者认为“上下文工程”要么是换了层皮的提示词工程,要么更糟,是伪科学的流行词创造。这些担忧并非空穴来风。传统的提示词工程专注于你给大语言模型的指令。而上下文工程则涵盖了整个信息生态系统:动态数据检索、内存管理、工具编排,以及跨多轮交互的状态维护。当前许多 AI 工作确实缺乏我们期望于工程学科的那种严谨性。有太多的试错,太少的衡量,以及不充分的系统化方法论。说实话:即使有完美的上下文工程,大语言模型仍然会产生幻觉,犯逻辑错误,并在复杂推理上失败。上下文工程并非万能灵药——它是在当前约束下的损害控制与优化。
出色的上下文工程能够达成一种平衡——包含模型真正需要的一切,但避免可能分散其注意力(并增加成本)的无关或过多的细节。
正如 Karpathy 所描述的,上下文工程是科学与艺术的精妙结合。
“科学”部分涉及遵循某些原则和技术来系统地提高性能。例如:如果你在做代码生成,包含相关代码和错误信息几乎是科学常识;如果你在做问答,检索支持性文档并提供给模型是合乎逻辑的。有一些成熟的方法,如少样本提示、检索增强生成(RAG)和思维链提示,我们知道(通过研究和试验)可以提升结果。尊重模型的约束也是一门科学——每个模型都有上下文长度限制,过度填充该窗口不仅会增加延迟/成本,如果重要部分被噪音淹没,还可能降低质量。
Karpathy 总结得很好:“上下文太少或形式不对,大语言模型就没有获得最佳性能的正确环境。太多或太无关,大语言模型的成本可能会上升,性能可能会下降。”
所以,科学在于选择、修剪和优化格式化上下文的技术。例如,使用嵌入(embeddings)来找到最相关的文档以包含进来(这样你就不会插入不相关的文本),或者将长历史压缩成摘要。研究人员甚至已经对长上下文的失败模式进行了分类——比如上下文投毒(context poisoning,指上下文中早期的幻觉导致进一步的错误)或上下文干扰(context distraction,指过多的无关细节导致模型失去焦点)。了解这些陷阱后,一个好的工程师会仔细地策划上下文。
然后是“艺术”的一面——源于经验的直觉和创造力。
这关乎于理解大语言模型的怪癖和微妙行为。可以把它想象成一个经验丰富的程序员,“凭感觉”就知道如何组织代码以提高可读性:一个经验丰富的上下文工程师会对如何为特定模型组织提示词形成一种感觉。例如,你可能感觉到某个模型在你先概述解决方案方法再深入细节时表现更好,所以你在提示词中加入一个初始步骤,如“让我们一步一步地思考……”。或者你注意到模型经常误解你领域中的某个特定术语,所以你在上下文中预先澄清它。这些都不在手册里——你是通过观察模型输出和迭代来学习的。这就是旧意义上的提示词制作(prompt-crafting)仍然重要的地方,但现在它服务于更大的上下文。这类似于软件设计模式:理解常见的解决方案是科学,但知道何时以及如何应用它们是艺术。
让我们探讨一些上下文工程师用来打造有效上下文的常用策略和模式:
这些技术的影响是巨大的。当你看到一个令人印象深刻的大语言模型演示解决复杂任务(比如,调试代码或规划一个多步骤过程)时,你可以打赌,幕后不仅仅是一个聪明的提示词。有一个上下文组装的管道在支持它。
例如,一个 AI 结对程序员可能会实现一个这样的工作流程:
每一步都有精心设计的上下文:搜索结果、测试输出等,都以受控的方式被送入模型。这与“只提示大语言模型修复我的 bug”并期望最好的结果相去甚远。
随着我们越来越擅长组装丰富的上下文,我们遇到了一个新问题:随着时间的推移,上下文实际上会自我毒化。这种现象被 Hacker News 上的开发者 Workaccount2[6] 恰当地称为“上下文腐烂”(context rot),它描述了随着对话变长,上下文质量因积累了干扰、死胡同和低质量信息而下降的过程。
这种模式令人沮丧地常见:你以一个精心制作的上下文和清晰的指令开始一个会话。AI 一开始表现出色。但随着对话的继续——尤其是在有错误的开端、调试尝试或探索性的兔子洞之后——上下文窗口充满了越来越嘈杂的信息。模型的响应逐渐变得不那么准确,更加混乱,或者开始产生幻觉。
为什么会发生这种情况?上下文窗口不仅仅是存储——它们是模型的工作内存。当这个内存被失败的尝试、矛盾的信息或离题的讨论弄得乱七八糟时,就像试图在一张堆满旧草稿和无关文件的桌子上工作。模型很难辨别什么是当前相关的,什么是历史噪音。对话中早期的错误可能会累积,形成一个反馈循环,模型引用自己糟糕的输出,并进一步偏离轨道。
这在迭代性工作流程中尤其成问题——而这正是上下文工程大放异彩的那种复杂任务。调试会话、代码重构、文档编辑或研究项目自然会涉及错误的开端和路线修正。但每一次失败的尝试都会在上下文中留下痕迹,这些痕迹可能会干扰后续的推理。
管理上下文腐烂的实用策略包括:
这个挑战也凸显了为什么“把所有东西都扔进上下文”不是一个可行的长期策略。就像好的软件架构一样,好的上下文工程需要有意识的信息管理——不仅要决定包含什么,还要决定何时排除、总结或刷新。
上下文工程至关重要,但它只是构建完整大语言模型应用所需更大技术栈中的一个组件——与控制流、模型编排、工具集成和护栏等并存。
用 Karpathy 的话来说,上下文工程是*“一个正在兴起的、非同小可的厚重软件层中的一小部分”*,这个软件层驱动着真正的大语言模型应用。因此,虽然我们专注于如何打造好的上下文,但看清它在整体架构中的位置很重要。
一个生产级的大语言模型系统通常需要处理许多提示之外的问题,例如:
我们实际上在谈论的是一种新型的应用架构。在这种架构中,核心逻辑涉及管理信息(上下文)并通过一系列 AI 交互来适应它,而不仅仅是运行确定性函数。Karpathy 列出了控制流、模型调度、内存管理、工具使用、验证步骤等元素,这些都在上下文填充之上。它们共同构成了他戏称为 AI 应用的“一个正在兴起的厚重软件层”——厚重是因为它做了很多事!当我们构建这些系统时,我们本质上是在编写元程序:编排另一个“程序”(AI 的输出)来解决任务的程序。
对于我们软件工程师来说,这既令人兴奋又充满挑战。令人兴奋是因为它开启了我们以前没有的能力——例如,构建一个能无缝处理自然语言、代码和外部操作的助手。充满挑战是因为许多技术都是新的,并且仍在不断变化。我们必须考虑诸如提示词版本控制、AI 可靠性和道德输出过滤等问题,这些在以前并不是应用开发的标准部分。在这种背景下,上下文工程位于系统的核心:如果你不能在正确的时间将正确的信息输入模型,其他任何东西都救不了你的应用。但正如我们所看到的,即使是完美的上下文本身也不够;你还需要它周围的所有支持结构。
结论是,我们正在从提示词设计转向系统设计。上下文工程是该系统设计的核心部分,但它与许多其他组件并存。
核心要点: 通过掌握完整上下文的组装(并将其与扎实的测试相结合),我们可以增加从 AI 模型获得最佳输出的机会。
对于经验丰富的工程师来说,这种范式的核心在很多方面都很熟悉——它关乎于良好的软件实践——只是应用在一个新的领域。想想看:
在拥抱上下文工程时,你实际上是在说:我,作为开发者,对 AI 的行为负责。 它不是一个神秘的预言家;它是我需要用正确的数据和规则来配置和驱动的一个组件。
这种心态的转变是赋能的。它意味着我们不必将 AI 视为不可预测的魔法——我们可以用扎实的工程技术(加上一点创造性的提示词艺术)来驯服它。
实际上,你如何在工作中采纳这种以上下文为中心的方法呢?
随着我们前进,我预计上下文工程将成为第二天性——就像今天编写 API 调用或 SQL 查询一样。它将成为软件开发标准技能的一部分。已经有很多人在为问题抓取上下文时,进行快速的向量相似性搜索已经不再三思;这只是流程的一部分。几年后,“你把上下文设置好了吗?”将成为和“你处理好那个 API 响应了吗?”一样常见的代码审查问题。
在拥抱这一新范式时,我们并非抛弃旧的工程原则——我们是以新的方式重新应用它们。如果你花了多年时间磨练你的软件技艺,那份经验现在非常宝贵:它让你能够设计合理的流程,发现边缘情况,确保正确性。AI 并没有让这些技能过时;它放大了它们在指导 AI 中的重要性。软件工程师的角色并没有减弱——它正在演变。我们正在成为 AI 的导演和编辑,而不仅仅是代码的编写者。而上下文工程就是我们有效指导 AI 的技术。
开始从你提供给模型的信息的角度思考,而不仅仅是你问什么问题。 去实验它,迭代它,并分享你的发现。通过这样做,你不仅能从今天的 AI 中获得更好的结果,而且你也在为即将到来的更强大的 AI 系统做好准备。那些懂得如何喂养 AI 的人将永远拥有优势。
祝你上下文编码愉快!
作者 Addy Osmani 正在与 O'Reilly 合作撰写一本新的《AI 辅助工程》[7]书籍。如果你喜欢我在这里的文章,你可能会有兴趣去看看。
[1]
Addy Osmani:https://substack.com/@addyosmani[2]
提示词工程:https://addyo.substack.com/p/the-prompt-engineering-playbook-for[3]
为 AI **编写完整的剧本**:https://analyticsindiamag.com/ai-features/context-engineering-is-the-new-vibe-coding/#:~:text=If%20prompt%20engineering%20was%20about,in%20favour%20of%20context%20engineering[4]
心智模型:https://blog.langchain.com/context-engineering-for-Agents/#:~:text=As%20Andrej%20Karpathy%20puts%20it%2C,Karpathy%20summarizes%20this%20well[5]
将:https://blog.langchain.com/context-engineering-for-agents/#:~:text=What%20are%20the%20types%20of,a%20few%20different%20context%20types[6]
Workaccount2:https://news.ycombinator.com/item?id=44308711#44310054[7]
《AI 辅助工程》:https://www.oreilly.com/library/view/vibe-coding-the/9798341634749/
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-07-20
快来“抄作业”!从亚马逊Kiro泄露的Prompt,看懂顶级AI任务分解逻辑。
2025-07-20
Cline 源码浅析 - Prompt 设计
2025-07-19
一文掌握:AI Agent Prompt是什么?智能体Prompt如何设计?
2025-07-18
OpenAI核心研究员:比提示词工程更重要的,是spec-writing
2025-07-17
别再只会写“一句话指令”!用Context Engineering打造企业级AI应用
2025-07-17
一文说明白Context Engineering:AI智能体的动态语境构建术
2025-07-16
Cursor高手用「上下文工程」技巧吊打瞎写prompt的隔壁兄弟
2025-07-16
提示词生成原型别太香!教程一步不落教给你
2025-05-08
2025-05-08
2025-05-08
2025-05-07
2025-05-19
2025-06-12
2025-06-27
2025-05-07
2025-07-03
2025-06-21
2025-07-19
2025-07-08
2025-07-04
2025-06-23
2025-06-14
2025-06-04
2025-06-02
2025-05-17