原作者:厄梅尔·法鲁克·切莱比 | Kariyer.net 首席技术官

在人工智能驱动的软件开发领域,一种新的范式正在兴起。“VIbe Coding”(即那种凭直觉、往往是冲动地生成人工智能代码的方法)的时代正在迅速消逝。取而代之的是情景(上下文,context)工程,一种系统而深思熟虑的策略,它呼应了亚伯拉罕·林肯那句永恒的智慧:给我六个小时砍倒一棵树,我会用前四个小时磨利斧头。 ”

正如林肯深谙准备工作的重要性一样,人工智能工程师们如今也意识到,前期投入为大型语言模型(LLM)提供合适的上下文至关重要。这并非仅仅是设计巧妙的提示,而是要构建动态、稳健的系统,使人工智能助手能够生成准确且可扩展的代码。本文将深入探讨上下文工程的内涵,阐述它为何正成为人工智能开发者最关键的技能,以及如何在您自己的项目中应用这种强大的新方法。

引言:人工智能辅助编码的范式转变

今年早些时候,Andrej Karpathy 提出的“直觉式编码”概念指的是完全依赖人工智能编码助手,开发几乎无需任何输入或验证的应用程序。由于即时生成代码带来的多巴胺快感以及其对周末项目的适用性,这一概念迅速流行起来。然而,大多数开发者很快意识到,这种“直觉式”方法存在严重的局限性。凭直觉编写的代码在尝试扩展或投入生产环境时,可能会突然出现故障。

Qodo的综合研究报告《人工智能代码质量现状》清晰地揭示了这一现状:76.4% 的开发者不愿使用未经人工审核的人工智能生成的代码,并且经常遇到“幻觉”(人工智能生成错误或误导性信息)。问题不在于人工智能编码本身,而在于缺乏人工审核且上下文信息不足的“感觉式编码”方法。

那么,为什么会这样呢?因为直觉无法扩展,而结构可以。人工智能编码助手最大的问题在于它们缺乏必要的上下文信息,或者根本无法理解上下文。而这正是上下文工程发挥作用的地方,它将人工智能驱动的开发提升到了一个新的水平。

什么是情境工程?它为什么重要?

上下文工程是指通过向大型语言模型 (LLM) 提供正确格式的信息和工具来构建动态系统,使其能够合理地执行任务。通常,当人工智能代理无法可靠地执行任务时,根本原因在于模型没有接收到适当的上下文、指令和工具。LLM 应用正从单一提示演变为更复杂、动态且基于代理的系统。因此,上下文工程正成为人工智能工程师需要掌握的最关键技能。让我们更详细地探讨一下:

  • 上下文工程是一个系统:复杂的AI代理可以从许多不同的来源获取上下文信息。这些上下文信息可以来自应用程序的开发者、用户、之前的交互、工具调用或其他外部数据。将所有这些信息整合在一起需要一个复杂的系统。
  • 该系统是动态的:许多上下文信息会动态地加入。因此,构建最终提示的逻辑也需要是动态的。这并非一个简单的静态提示。
  • 你需要正确的信息:基于代理的系统性能不佳的一个常见原因是它们缺乏正确的上下文信息。逻辑逻辑模型(LLM)无法读懂人心;你需要向它们提供正确的信息。“垃圾进,垃圾出”的原则在这里同样适用。
  • 你需要合适的工具:LLM(学习型学习模型)并非总能仅凭输入信息完成任务。在这种情况下,如果你想赋予 LLM 更大的能力,就必须确保它拥有合适的工具。这些工具可以是用于搜索更多信息、执行操作,或介于两者之间的任何工具。为 LLM 提供合适的工具与提供正确的信息同等重要。
  • 格式很重要:就像与人沟通一样,与LLM(语言学习管理系统)沟通的方式也很重要。简短但描述性的错误信息远比一大段JSON数据有效得多。这一点同样适用于工具。工具的输入参数对于LLM能否使用它们至关重要。
  • 它能否合理地完成任务?在思考情境工程时,这是一个值得思考的问题。这再次强调了逻辑学习模型(LLM)并非读心术士;你需要为它们做好充分的准备才能成功运行。区分不同的故障模式也很有帮助。是因为你没有提供正确的信息或工具导致它失败?还是尽管拥有所有正确的信息,它仍然犯错?纠正这些故障模式需要截然不同的方法。

那么,上下文工程为何如此重要?当基于代理的系统出错时,很大程度上是因为逻辑逻辑模型(LLM)出错。从基本原理出发,LLM 出错的原因主要有两个:

  1. 基础型号存在缺陷;它不够好。
  2. 没有将适当的上下文传递给基础模型,因此无法产生良好的输出。

大多数情况下(尤其是在模型性能提升之后),模型误差源于第二个原因。传递给模型的上下文信息可能由于以下几个原因而存在缺陷:

  • 模型缺少做出正确决策所需的背景信息。模型不是读心术士。如果你不提供正确的背景信息,它们就无法知道它的存在。
  • 上下文格式混乱。就像人际交往一样,沟通至关重要!将数据传递给模型时,数据格式会直接影响模型的响应。

LangChain 的文章《情境工程的兴起》也强调了这一点:“LLM 应用正从单一提示演变为更复杂、动态、智能化的系统。因此,情境工程正成为人工智能工程师最重要的技能。” 虽然这种说法有些大胆,但情境工程是目前最值得关注的领域这一观点确实非常强烈。

提示工程与情境工程:二者有何区别?

上下文工程远不止“提示工程”这么简单。早期,开发者专注于巧妙措辞以获得更好的反馈。但随着应用程序变得越来越复杂,人们逐渐意识到,为人工智能提供完整且结构化的上下文远比任何“神奇短语”都重要得多。

有人可能会认为,提示设计是上下文设计的一个子集。即使你掌握了所有上下文信息,如何在提示中组织这些信息也至关重要。区别在于,提示设计并非为了与单一输入数据集完美兼容,而是为了能够正确处理动态数据集

我还想强调,上下文的重要组成部分通常是关于LLM(逻辑逻辑模型)行为方式的基础指令。这通常是提示工程的重要组成部分。您把提供关于智能体行为方式的清晰详细的指令称为上下文工程,还是提示工程?我想两者兼而有之。

上下文工程的核心组成部分

上下文工程将各种组件整合在一起,使您能够从 AI 编码助手中获得最佳效果:

  • 工具使用:如果人工智能代理需要访问外部信息,则确保其拥有访问该信息所需的工具。当工具返回信息时,应以语言学习者 (LLM) 最易理解的方式格式化该信息。
  • 短期记忆:如果对话持续了一段时间,可以对对话内容进行总结,以便将来使用。
  • 长期记忆:如果用户在之前的对话中指定了自己的偏好,则能够检索该信息。
  • 提示工程:明确说明代理在提示中应如何行动的指令。
  • 检索:在调用 LLM 之前动态检索信息并将其添加到提示符中。

做好上下文工程需要花费大量时间为你的AI编码助手构建上下文。这与即兴编码截然不同,即直接开始编写代码。前期投入构建上下文将带来更好的结果,帮助你编写更优质的代码,并从长远来看节省更多时间。

实践中的上下文工程:以 Claude Code 为例

现在,让我们来看一个实际例子,它展示了如何在现实世界中应用上下文工程,并利用人工智能编码助手取得令人瞩目的成果。这个例子涉及使用 Claude Code 为一个新项目创建一个非常全面的计划,然后从头到尾实现该计划。虽然本例选择 Claude Code,但这种方法也适用于许多其他人工智能编码助手。

上下文工程工作流程:分步指南

  • 全局规则 (claude.md):这些是我们提供给 AI 编码助手的最高级别信息。它们包括一些高级信息,例如我们希望它遵循的最佳实践、我们希望它如何编写测试、我们希望它如何管理任务以及风格和规则指南。它们类似于 Windsurf 或 Cursor 等 AI IDE 中的全局规则。
  • 初始输入(initial.md):在这里,我们可以概括地定义想要实现的功能。例如,“我想构建一个使用 Pydantic AI 完成 ABC 运算的 AI 智能体。 ” 本部分内容务必尽可能详细。
  • 例如:尽可能为AI编码助手提供示例非常有帮助。这些示例可以来自您之前开发过的类似应用程序,也可以来自您在网上找到的代码片段。
  • 文档:我们列出了希望人工智能编码助手参考的在线文档或 MCP 服务器,以便检索。这可以显著减少幻觉。
  • 其他注意事项:避免 AI 编码助手常见陷阱的技巧(例如,环境变量的使用、项目结构和 README 的创建)。

创建全面计划:产品需求提示 (PRP) 和斜杠命令

这里,上下文工程的两个最强大的方面发挥了作用:Claude Code 斜杠命令和产品需求提示 (PRP)。PRP 是专门为指导 AI 编码助手而设计的提示,类似于产品需求文档 (PRD)。

  • generate_PRP命令:该命令使用 Claude Code 生成一个非常全面的项目计划。这是一个多步骤的过程。它以initial.md文件作为输入,代表我们进行全面的研究、架构规划,并逐步解决问题,最终为应用程序创建一个全面的计划。这正是我们之前讨论的工程化环境。

运行此命令时,Claude Code 会自动创建一个大型待办事项列表,并逐一完成。它会研究 API,分析现有代码库和我们提供的示例,查阅 Pydantic AI 文档,并基于所有这些信息生成一份全面的 PRP(产品需求建议书)。

执行 PRP:项目实施

PRP 创建完成后,我们只需执行它即可。execute_PRP命令会根据我们创建的这份全面计划启动项目端到端实施。所有提示都位于这些 Markdown 文件中,Claude Code 可以利用它们创建并完成一长串任务。

这个过程展示了 Claude Code 的智能体能力,以及在合适的条件下我们可以如何大幅减少幻觉。项目结束时,Claude Code 会完成所有测试并构建端到端的智能体。您只需验证输出结果即可。

结论:面向未来的技能

“感觉编码”的蜜月期已经结束。如今,上下文工程已成为人工智能编码领域的新常态,并且正在成为人工智能工程师最重要的技能。这种方法不仅能编写出质量更高、更少主观臆断的代码,还能显著节省开发时间和精力。

记住,这仅仅是个开始。上下文工程是一个博大精深的领域,它还涉及内存、状态和检索等诸多主题。开始探索这个领域,并通过制定全面的计划,体验与您的 AI 编码助手协同工作的强大功能。