写在前面
作为一名AI编程工具的深度用户,我已经使用Cursor超过一年了,最近也在体验Claude Code、Gemini等各种AI编程助手。在这个过程中,我一直在探索所谓的"vibe coding"——那种与AI深度协作的编程体验,并开发了多个MCP(Model Context Protocol)项目来实现更好的AI协作。
昨晚,一位群友分享了这篇来自LangChain的文章。读完后我惊呼:文章中的很多观点竟然与我这一年多来的探索和认知高度一致!特别是关于"上下文工程"的概念,简直就是对我日常AI编程体验的完美理论总结。
我意识到,这不仅仅是一篇技术文章,更是对当下AI应用开发趋势的深刻洞察。相信很多和我一样在AI编程前线摸爬滚打的朋友,都会在这篇文章中找到共鸣。
所以我决定将其翻译出来,希望能帮助更多中文开发者理解这个正在重塑AI应用开发的新概念。
本文译自 LangChain 官方博客,原文发布于2025年6月23日
上下文工程是构建动态系统,以正确的格式提供正确的信息和工具,使大语言模型能够合理地完成任务。
大多数时候,当智能体表现不稳定时,根本原因是没有向模型传达合适的上下文、指令和工具。
随着大语言模型应用从单一提示词发展为更复杂的动态智能体系统,上下文工程正在成为AI工程师最重要的技能。
什么是上下文工程?
上下文工程是构建动态系统,以正确的格式提供正确的信息和工具,使大语言模型能够合理地完成任务。
这个定义借鉴了Tobi Lutke、Ankur Goyal和Walden Yan最近的观点。让我们来详细分解一下:
上下文工程是一个系统
复杂的智能体通常需要从多个来源获取上下文。上下文可以来自应用程序开发者、用户、历史交互、工具调用或其他外部数据。将这些整合在一起需要一个复杂的系统。
这个系统是动态的
这些上下文片段中的许多都可能动态输入。因此,构建最终提示词的逻辑也需要是动态的,而不仅仅是静态提示词。
你需要正确的信息
智能体系统表现不佳的一个常见原因是它们缺乏正确的上下文。大语言模型无法读心——你必须给它们正确的信息。垃圾输入,垃圾输出。
你需要正确的工具
大语言模型不一定总是能够仅仅基于输入来解决任务。在这些情况下,如果你想让大语言模型能够做到这一点,你需要确保它拥有正确的工具。这些工具可以用于查找更多信息、执行操作或介于两者之间的任何事情。给大语言模型正确的工具与给它正确的信息同样重要。
格式很重要
就像与人类沟通一样,如何与大语言模型沟通也很重要。一个简短但描述性的错误信息要比大量的JSON数据块更有效。这也适用于工具。当确保大语言模型能够使用工具时,工具的输入参数是什么非常重要。
它能否合理地完成任务?
这是你在思考上下文工程时应该问的一个很好的问题。它强调了大语言模型不是读心者——你需要为它们的成功创造条件。它还有助于区分失败模式。是因为你没有给它正确的信息或工具而失败吗?还是它拥有所有正确的信息,只是搞砸了?这些失败模式有着截然不同的修复方法。
为什么上下文工程很重要
当智能体系统出错时,很大程度上是因为大语言模型出错了。从第一性原理来思考,大语言模型可能因为两个原因出错:
- 底层模型本身出错了,它不够好底层模型没有获得适当的上下文来产生良好的输出
通常情况下(特别是随着模型变得更好),模型错误更多是由第二个原因造成的。传递给模型的上下文可能因为几个原因而糟糕:
- 缺少模型做出正确决策所需的上下文。模型不是读心者。如果你不给它们正确的上下文,它们不会知道它的存在。上下文格式糟糕。就像人类一样,沟通很重要!当传入模型时,你如何格式化数据绝对会影响它的响应方式
上下文工程与提示词工程有何不同?
为什么从"提示词"转向"上下文"?早期,开发者专注于巧妙地措辞提示词来诱导更好的答案。但随着应用程序变得更加复杂,越来越清楚的是,向AI提供完整和结构化的上下文远比任何神奇的措辞更重要。
我还认为提示词工程是上下文工程的一个子集。即使你拥有所有的上下文,你如何在提示词中组装它们仍然非常重要。区别在于,你不是为了与单一输入数据集很好地工作而设计你的提示词,而是接受一组动态数据并正确地格式化它。
我还要强调的是,上下文的一个关键部分通常是关于大语言模型应该如何行为的核心指令。这通常是提示词工程的关键部分。你会说为智能体应该如何行为提供清晰详细的指令是上下文工程还是提示词工程?我认为两者都有一点。
上下文工程的例子
好的上下文工程的一些基本例子包括:
- 工具使用:确保如果智能体需要访问外部信息,它拥有可以访问它的工具。当工具返回信息时,它们以大语言模型最容易消化的方式格式化短期记忆:如果对话进行了一段时间,创建对话的摘要并在将来使用它长期记忆:如果用户在之前的对话中表达了偏好,能够获取该信息提示词工程:智能体应该如何行为的指令在提示词中被清楚地列举检索:动态获取信息并在调用大语言模型之前将其插入提示词
LangGraph如何支持上下文工程
当我们构建LangGraph时,我们的目标是使其成为最可控的智能体框架。这也使它能够完美地支持上下文工程。
使用LangGraph,你可以控制一切。你决定运行什么步骤。你决定确切地什么进入你的大语言模型。你决定在哪里存储输出。你控制一切。
这使你能够进行所有你想要的上下文工程。智能体抽象的缺点之一(大多数其他智能体框架都强调这一点)是它们限制了上下文工程。可能存在你无法改变确切进入大语言模型的内容,或确切预先运行的步骤的地方。
旁注:Dex Horthy的"12因子智能体"是一篇非常好的读物。那里的许多观点都与上下文工程有关("拥有你的提示词"、"拥有你的上下文构建"等)。这篇博客的标题图片也取自Dex。我们真的很喜欢他在这个领域中传达重要内容的方式。
LangSmith如何帮助上下文工程
LangSmith是我们的大语言模型应用可观测性和评估解决方案。LangSmith的一个关键功能是追踪你的智能体调用的能力。尽管当我们构建LangSmith时"上下文工程"这个术语还不存在,但它恰当地描述了这种追踪所帮助的内容。
LangSmith让你看到智能体中发生的所有步骤。这让你看到运行了什么步骤来收集发送到大语言模型的数据。
LangSmith让你看到大语言模型的确切输入和输出。这让你看到确切进入大语言模型的内容——它拥有的数据以及格式化的方式。然后你可以调试该内容是否包含任务所需的所有相关信息。这包括大语言模型可以访问的工具——所以你可以调试它是否被给予了适当的工具来帮助手头的任务
沟通就是一切
几个月前,我写了一篇名为"沟通就是一切"的博客。主要观点是与大语言模型沟通很困难,没有得到足够的重视,并且往往是许多智能体错误的根本原因。这些观点中的许多都与上下文工程有关!
上下文工程不是一个新想法——智能体构建者在过去一两年中一直在这样做。这是一个新术语,恰当地描述了一项日益重要的技能。我们将在这个主题上写更多内容并分享更多内容。我们认为我们构建的许多工具(LangGraph、LangSmith)都完美地构建来支持上下文工程,所以我们很兴奋看到对此的重视起飞。