精选LangChain观点
“上下文工程”的兴起
作者提出“上下文工程”概念,即构建动态系统为LLM提供正确的信息、工具和格式,使其可靠完成任务。文章强调,智能体失败多因上下文不足或格式不佳,而非模型能力不足。上下文工程是提示工程的超集,涵盖工具使用、记忆、检索等。LangGraph和LangSmith可支持该实践。


头图来自 Twitter 上的 Dex Horthy。
上下文工程是指构建动态系统,以正确的格式提供正确的信息和工具,使 LLM 能够合理地完成任务。
大多数时候,当 agent 表现不可靠时,根本原因在于适当的上下文、指令和工具没有被传达给模型。
LLM 应用正在从单一提示词演变为更复杂、更动态的 agent 系统。因此,上下文工程正在成为 AI 工程师可以培养的最重要技能。
什么是上下文工程?
这是我喜欢的一个定义,它建立在 Tobi Lutke、Ankur Goyal 和 Walden Yan 最近对此的论述之上。让我们来拆解一下。
上下文工程是一个系统
复杂的 agent 可能从多个来源获取上下文。上下文可以来自应用程序的开发者、用户、之前的交互、工具调用或其他外部数据。将这些全部整合在一起涉及一个复杂的系统。
这个系统是动态的
许多上下文片段可能是动态传入的。因此,构建最终提示词的逻辑也需要是动态的。它不仅仅是一个静态提示词。
你需要正确的信息
agent 系统表现不佳的一个常见原因是它们根本没有正确的上下文。LLM 无法读心——你需要给它们正确的信息。垃圾进,垃圾出。
你需要正确的工具
LLM 并不总能仅凭输入就完成任务。在这种情况下,如果你想让 LLM 有能力完成任务,你需要确保它拥有正确的工具。这些工具可以是查找更多信息、执行操作或介于两者之间的任何工具。给 LLM 正确的工具与给它们正确的信息同样重要。
格式很重要
就像与人类沟通一样,你与 LLM 沟通的方式也很重要。一条简短但有描述性的错误信息会比一大块 JSON 数据有效得多。这也适用于工具。在确保 LLM 能够使用你的工具时,工具的输入参数非常重要。
它能合理地完成任务吗?
这是你在思考上下文工程时值得问的一个好问题。它强调了 LLM 不是读心者——你需要为它们的成功创造条件。它还有助于区分失败模式。它失败是因为你没有给它正确的信息或工具吗?还是它拥有所有正确的信息却只是搞砸了?这些失败模式的修复方式截然不同。
为什么上下文工程很重要
当 agent 系统出错时,很大程度上是因为 LLM 出错了。从第一性原理思考,LLM 出错有两个原因:
- 底层模型本身就出错了,它还不够好
- 底层模型没有被传递适当的上下文来产生良好的输出
大多数情况下(尤其是随着模型变得更好),模型错误更多是由第二个原因造成的。传递给模型的上下文可能因以下几个原因而糟糕:
- 缺少模型做出正确决策所需的上下文。模型不是读心者。如果你不给它们正确的上下文,它们就不会知道这些信息的存在。
- 上下文的格式很差。就像人类一样,沟通很重要!你在将数据传递给模型时如何格式化,绝对会影响它的响应方式。
上下文工程与提示词工程有何不同?
为什么从“提示词”转向“上下文”?早期,开发者专注于巧妙地措辞提示词以引导出更好的答案。但随着应用变得越来越复杂,越来越清楚的是,为 AI 提供完整且结构化的上下文远比任何神奇的措辞更重要。
我还想指出,提示词工程是上下文工程的一个子集。即使你拥有所有上下文,如何在提示词中组装它们仍然绝对重要。区别在于,你不是在设计提示词以适配单一输入数据集,而是让它接收一组动态数据并正确格式化。
我还要强调,上下文的一个关键部分通常是关于 LLM 应如何行为的核心指令。这通常是提示词工程的一个关键部分。你会说为 agent 应如何行为提供清晰详细的指令是上下文工程还是提示词工程?我认为两者兼而有之。
上下文工程的示例
- 工具使用:确保智能体如需访问外部信息,便配备可获取该信息的工具。当工具返回信息时,其格式需针对大语言模型进行最大程度的优化,以便消化吸收。
- 短期记忆:若对话持续较长时间,则创建对话摘要并在后续使用该摘要。
- 长期记忆:若用户在之前的对话中表达过偏好,则能够获取该信息。
- 提示工程:智能体应如何行事的指令在提示中清晰列出。
- 检索:在调用大语言模型之前,动态获取信息并将其插入提示中。
LangGraph 如何实现上下文工程
当我们构建 LangGraph 时,我们的目标是使其成为最可控的智能体框架。这也使其能够完美地实现上下文工程。
使用 LangGraph,您可以控制一切。您决定运行哪些步骤。您决定确切地将什么内容输入到大语言模型中。您决定将输出存储在哪里。您掌控一切。
这使您能够进行所有您想要的上下文工程。智能体抽象(大多数其他智能体框架所强调的)的缺点之一是它们限制了上下文工程。在某些地方,您可能无法更改确切输入到大语言模型中的内容,或无法更改预先运行的步骤。
附注:Dex Horthy 的《12 Factor Agents》是一篇非常值得一读的文章。其中的许多观点都与上下文工程相关(“拥有你的提示”、“拥有你的上下文构建”等)。这篇博客的标题图片也取自 Dex。我们非常欣赏他阐述该领域重要性的方式。
LangSmith 如何助力上下文工程
LangSmith 是我们的 LLM 应用可观测性与评估解决方案。LangSmith 的关键特性之一是能够追踪您的智能体调用。尽管我们在构建 LangSmith 时“上下文工程”这一术语尚未存在,但它恰如其分地描述了这种追踪所帮助实现的目标。
LangSmith 让您能够查看智能体中发生的所有步骤。这使您能够看到为收集发送到大语言模型的数据而运行了哪些步骤。
LangSmith 让您能够查看大语言模型的确切输入和输出。这使您能够确切地看到输入到大语言模型中的内容——它所拥有的数据及其格式。然后,您可以调试该内容是否包含任务所需的全部相关信息。这包括大语言模型可以访问哪些工具——因此您可以调试它是否被赋予了适当的工具来帮助处理手头的任务。
沟通即一切
几个月前,我写了一篇名为《沟通即一切》的博客。主要观点是,与大语言模型的沟通是困难的,且未得到足够的重视,并且常常是许多智能体错误的根本原因。其中许多观点都与上下文工程有关!
上下文工程并非新概念——智能体构建者在过去一两年里一直在这样做。这是一个新术语,恰如其分地描述了一项日益重要的技能。我们将就此主题撰写并分享更多内容。我们认为我们构建的许多工具(LangGraph、LangSmith)非常适合实现上下文工程,因此我们很高兴看到对这一方向的重视正在兴起。
了解您的智能体真正在做什么
LangSmith,我们的智能体工程平台,帮助开发者调试每一个智能体决策、评估变更,并一键部署。
译文已达到本站中文翻译的字数上限,剩余内容请查看原文。