卡帕西视角:提示词工程已死,上下文工程才是未来

8 阅读12分钟

🧠 卡帕西视角:提示词工程已死,上下文工程才是未来

从“写好Prompt”到“设计系统”,LLM应用的范式转移

如果你还在花大量时间雕琢提示词——尝试不同的措辞、调整Few-shot的数量、纠结于用“请”还是用“必须”——那么我要告诉你一个可能不太舒服的事实:这条路正在走向尽头。

我是Andrej Karpathy。作为曾经在OpenAI见证GPT诞生、在特斯拉带着AI解决自动驾驶问题、如今又创办Eureka Labs亲自投入AI教育的人,我越来越清晰地看到:Prompt工程是软件2.5时代的产物,而软件3.0需要的是上下文工程和Agentic Engineering。

这篇文章不是要否定吴恩达老师的工作——他的原则依然有效,但就像马车夫的技巧在汽车时代仍有部分可借鉴一样——我们已经站在了新的范式门口。


📌 目录

  1. 软件的三次范式转移
  2. 为什么“提示词工程”正在过时
  3. 上下文工程:新的杠杆点
  4. Agentic Engineering:从调用到编排
  5. 我的三层AI编程武器库
  6. 智能体的十年,而不是智能体之年
  7. 对开发者的行动建议

1. 软件的三次范式转移

整个软件开发史,可以粗暴地划分为三个阶段:

软件1.0:人类写代码

你用C++、Python、Java一条条写下if-elsefor循环、函数调用。编译器或解释器忠实地执行。你告诉机器每一步怎么做。 这统治了大概60年。

软件2.0:人类提供数据,机器学习权重

你用TensorFlow或PyTorch搭建一个神经网络架构,然后喂给它成千上万个标注样本。模型自己学习参数。你不再写“如何识别猫”,而是写“让模型自己学如何识别猫”。你提供目标,机器探索路径。 这是过去十年。

软件3.0:自然语言作为编程接口

现在,你可以对模型说:“写一个函数,输入用户名列表,输出按字母排序后的字符串,首字母大写。” 模型直接生成代码、运行、甚至帮你调试。你说目标,模型自己决定怎么做。 这就是我们现在进入的范式。

在这个新范式下,代码的单位不再是“行”,而是“宏观动作”。一个Prompt可能替代几百行样板代码。而更关键的是,你可以把完整的任务交给Agent: “重构这个模块,并补充单元测试。”

但你注意到问题了吗?Prompt本身正在贬值。 因为模型的推理能力越来越强,你不需要再手把手教它每一步。你只需要给它足够的上下文,它自己就会推导出正确的路径。


2. 为什么“提示词工程”正在过时

吴恩达老师在课程中强调的那些技巧——用分隔符标出文本、要求JSON输出、提供Few-shot示例——在GPT-3.5时代是金科玉律。但在GPT-4、Claude 3.5乃至更新模型的测试中,很多所谓“最佳实践”的效果已经显著衰减。

为什么?

因为模型在训练过程中已经内化了推理能力。RLVR(基于可验证奖励的强化学习)正在取代RLHF成为新的训练范式:模型的奖励信号不再是“人觉得这个回答好不好”,而是“这个代码能不能跑通”、“这个JSON是否符合格式”、“这个数学题的答案是否正确”。

别听人的,听结果的。 编译器说了算,测试套件说了算。

这意味着:当你给模型一个复杂任务时,它不再需要你拆解成10个步骤。它可以自己规划、自己试错、自己修正。你给的步骤越多,反而可能限制了它的探索空间。

一个真实的对比

任务GPT-3.5时代的PromptGPT-4时代的Prompt
从文本中提取日期“请找到所有日期,格式为YYYY-MM-DD,输出JSON数组…”“提取所有日期。”(模型自动推断格式)
情感分析提供5个示例 + 标签定义“判断情感。”(模型已内化)
代码生成详细描述函数签名、边界条件、异常处理“写一个函数,实现XX功能。”(模型自己会考虑边界)

当然,这并不意味着你可以随便写一句“帮我做个网站”。上下文的质量仍然决定一切,但“上下文”的内涵已经远远超出了“提示词”。


3. 上下文工程:新的杠杆点

我在2026年的一次演讲中提出过一个观点:提示词工程已死,上下文工程崛起。

什么是上下文工程?它不是“怎么写好一个Prompt”,而是如何为LLM构建一个高信息密度、低噪音、可检索、可更新的上下文环境

上下文窗口现在可以容纳几十万甚至上百万token。这是巨大的杠杆——你可以把整个代码库、一整本书、一整年的聊天记录塞进去。但问题也随之而来:如何填充这个窗口才最有效?

上下文工程的五层架构

层级内容说明
系统指令角色、边界、输出格式最稳定的控制层
任务描述当前要做什么一句话概括,不要啰嗦
Few-shot / 示例2-5个范例帮助模型理解“风格”而非“逻辑”
RAG检索结果从知识库中召回的相关片段动态注入,解决长尾知识
对话/工具历史之前的交互、工具调用结果维持状态,实现多步推理

关键洞察:你不再需要把每个细节都写进提示词。比如,模型需要知道公司的API文档,你不应该把它写死在Prompt里,而应该在运行时通过RAG(检索增强生成)动态拉取相关片段。这样可以避免上下文过载,也能保证信息更新。

上下文工程的典型代码结构

# 伪代码示意
def build_context(user_query, user_id):
    context = []
    # 1. 系统指令:固定
    context.append({"role": "system", "content": SYSTEM_PROMPT})
    # 2. 任务描述:简单重述
    context.append({"role": "user", "content": f"任务:{user_query}"})
    # 3. RAG:从用户的知识库中检索
    docs = retrieve_similar_docs(user_query, user_id, top_k=5)
    context.append({"role": "system", "content": f"相关资料:\n{docs}"})
    # 4. 历史对话:最近10轮
    history = get_conversation_history(user_id, limit=10)
    context.extend(history)
    return context

所以,别再纠结于“该不该在Prompt里加‘请’字”了。真正重要的是:哪些信息应该进入上下文?如何排序?如何压缩?如何更新?


4. Agentic Engineering:从调用到编排

如果说上下文工程是“喂好数据”,那么Agentic Engineering就是“让模型自己干活”。

一个Agent不只做一次LLM调用,而是循环执行:思考 → 调用工具 → 观察结果 → 再思考 → 完成。它可以读文件、写代码、跑测试、上网搜索、调用API。

我经常把Agent比作一个实习生:你给他一个大任务,他不会一次就做完美,但你能看到他一步步的思考过程,他会在不确定时停下来问你,他会从错误中学习。

Agent的四步循环

+-----------------+
| 1. 规划(Plan)   | ← 将大任务拆解成子任务
+--------+--------++-----------------+
| 2. 调用工具(Call)| ← 执行代码、搜索、读文件
+--------+--------++-----------------+
| 3. 观察(Observe)| ← 收集工具返回的结果
+--------+--------++-----------------+
| 4. 反思(Reflect)| ← 判断是否完成,若无则返回步骤1
+-----------------+

一个成熟的Agent框架(比如我参与过的AutoGPT、LangChain等)就是在代码层面实现这个循环,并处理好长期记忆任务中断恢复等工程问题。

Agent vs 非Agent的对比

维度普通API调用Agent
单次vs多步单次调用,一步到位多步循环,逐步逼近
工具使用无,或预先指定动态选择,按需调用
错误恢复失败即停止可重试、换方案
适用任务翻译、摘要、分类编程、研究、自动化运营

但请注意:Agent不是魔法。今天的Agent还很笨,它们会陷入死循环、会忘记之前的决定、会调用不必要的工具。所以……


5. 我的三层AI编程武器库

既然聊到Agent,我分享一下我现在是怎么用AI编程的。不是理论,是每日实战。

第一层:Cursor的Tab补全(75%的代码)

日常写代码时,Cursor的自动补全能预测我要写的下一行。它不聪明,但反应快、准确率高。这相当于智能版IDE补全

第二层:Claude Code / Codex(20%的代码)

当需要写一个完整函数、一个模块、或者重构一段逻辑时,我会切换到Claude Code或GitHub Copilot Chat。给它足够的上下文(相关文件和函数签名),它能在几秒内生成靠谱的实现。我会review一下,可能改几行,然后提交。这部分替代了我曾经的“查Stack Overflow”和“写样板代码”时间。

第三层:GPT-5 Pro / 最新模型(5%的代码)

只有遇到顽固bug、复杂的算法设计、或者跨多个文件的重构时,我才会用最顶级的模型(比如GPT-5 Pro或Claude Opus)。它贵、速度慢,但推理能力最强。我会把整个项目的关键文件都塞进上下文,然后问:“为什么这个并发测试偶尔会死锁?” 它有时能找出我都没注意到的竞态条件。

四条铁律

我给自己定了四条规则,你也可以参考:

  1. Think Before Coding:让AI写代码之前,先想清楚你要什么。模糊的要求只会得到垃圾。
  2. Simplicity First:不要一上来就让AI写一个庞大架构。先从最简单的版本开始,再迭代。
  3. Surgical Changes:一次只改一个地方。让AI生成diff而不是整个文件。
  4. Goal-Driven Execution:告诉AI“目标是什么”,而不是“每一步怎么做”。让它自己规划路径。

最后这条,其实就是从Prompt Engineering到Goal Engineering


6. 智能体的十年,而不是智能体之年

媒体喜欢说“今年是Agent元年”。但每次有人问我“Agent什么时候才能真正成熟?”,我的回答都让他们失望:

智能体的十年,而不是智能体之年。

为什么?因为今天的Agent还有三个致命短板:

① 无法持续学习

一个Agent执行完任务后,你不会看到它的“能力”变强。它没有长期记忆,没有在线学习机制。下次遇到类似任务,它还是从零开始。

② 缺乏可靠的长期记忆

上下文窗口再大,也塞不下一整年的交互历史。我们需要的是外部向量数据库 + 高效检索 + 自动总结。这个组合今天还远未成熟。

③ 没有真正的“认知结构”

人类做事有目标层次、有优先级、有中断恢复机制。Agent只是基于当前上下文的next-token预测,它没有“我想完成这个任务”的内在驱动。它只是在模仿完成任务的文本模式。

要突破这些,需要的是架构创新,而不仅仅是更大的模型或更多的数据。乐观估计,这需要五年到十年。


7. 对开发者的行动建议

如果你现在就想让自己的AI应用更可靠、更强大,以下是我最直接的建议:

① 升级你的认知

从“我写代码”切换到“我描述目标”。每次接到一个新功能,先问自己:如果我把这个任务完整地丢给一个高级实习生,他会怎么理解?我需要补充什么信息? 然后把这些信息组织成上下文,而不是写成一堆if-else。

② 建立你的“AI编程武器库”

不要迷信任何一个工具。Cursor、Copilot、Codex、Claude、GPT-4/5——每个都有自己的优势和适用场景。学会在不同粒度上切换:Tab补全用快的,大块任务用中等的,最难bug用最强的。

③ 验收先行:先定义“什么算对”

无论你是写Prompt还是编排Agent,在让模型干活之前,先想清楚如何验证输出。代码能不能通过已有测试?JSON是否符合schema?答案是否能在文档中找到引用?有了自动化的验收信号,AI的可靠性会提升一个数量级。

④ 开始构建“第二大脑”

不要只依赖上下文窗口。用RAG把公司的知识库、你的笔记、历史对话都索引起来。让AI能够“记住”以前讨论过的内容。你的目标是让AI从“临时工”变成“长期员工”。


写在最后

吴恩达老师的Prompt工程原则,在GPT-3.5时代是通往可靠LLM应用的金钥匙。我也曾反复练习那些技巧。但现在,模型进化得太快了。

我们正在进入一个更令人兴奋、也更挑战认知的新阶段。在这个阶段,AI不再是一个需要你手把手教的笨孩子,而是一个有点灵性、但也有点不可预测的数字同事

你的任务不再是“写好提示词”,而是设计好上下文、编排好Agent、定义好验收标准。你要从程序员变成指挥家、变成教练、变成系统架构师。

这不是提示词的末日,而是提示词超越自身的开始

关于AI,我最喜欢的一个比喻来自我自己的反思:AI不是一种新的动物,而是一个“幽灵”——锯齿状的、统计性的、被召唤出来的能力集合。驾驭它需要全新的品味和判断力。而这,才是我们这个时代真正的工程挑战。

如果你已经在实践上下文工程或Agent编排,欢迎在评论区分享你的故事。我们一起,在软件3.0的浪潮里,把不可靠的智能,变成可靠的生产力。


本文核心观点源自Andrej Karpathy在YC AI Startup School(2025)、红杉AI大会(2026)及个人博客/推文的公开分享。由AI辅助整理成文。