Context Engineering:从Prompt Engineering到上下文工程的演进


Context Engineering:从Prompt Engineering到上下文工程的演进

仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接

最近在做Deepresearch以及刷到一个不错的文章:context-engineering-guide,这篇文章揭示了提示工程以及上下文过程在智能体应用开源流程中,包括Deepresearch,MCP在内的一些概念,起到了非常重要的作用!
在深入探讨ContextEngineering之前,我们需要理解它与PromptEngineering的关系。传统的PromptEngineering主要关注如何设计和优化单次的提示指令,让AI模型更好地理解用户意图并产生期望的输出。这就像是学会如何向一个专家提出精确的问题,通过精心设计的问题描述、示例和格式要求来获得高质量的回答。
而ContextEngineering则是一个更加宽泛和系统性的概念,它不仅包含了PromptEngineering的所有技巧,还扩展到了整个AI系统的上下文管理。如果说PromptEngineering是\“问话的艺术\“,那么ContextEngineering就是\“环境构建的科学\“。它关注的是如何为AI系统提供完整的工作环境,包括背景知识、历史记录、工具调用、数据检索等各个方面,让AI在这个精心构建的上下文环境中更好地完成复杂任务。
几年前,包括许多顶尖的人工智能研究人员在内,不少人声称PromptEngineering将会消亡。然而事实证明,他们的预测完全错误。PromptEngineering不仅没有消失,反而变得比以往任何时候都更加重要,重要到正在被重新命名为ContextEngineering。
ContextEngineering是一个用来描述如何调整大型语言模型执行任务所需的指令和相关上下文的重要过程的术语。已经有很多业界专家对此进行了讨论,包括AnkurGoyal、WaldenYan、TobiLutke和AndrejKarpathy等人都曾提及这个概念的重要性。
人们之所以怀疑PromptEngineering是一项严肃技能,主要是因为许多人将其与\“盲目提示\“混淆了。盲目提示是指在ChatGPT这样的LLM中使用简短的任务描述,仅仅是简单地向系统提问。而真正的PromptEngineering需要更仔细地思考提示的上下文和结构,或许从一开始,它就应该叫做ContextEngineering。
从开发者的角度来看,ContextEngineering是一个迭代过程,用于优化提供给LLM的指令和上下文,以达到期望的结果。这包括建立正式的流程,如评估管道,用来衡量策略是否有效。
考虑到人工智能领域的快速发展,我们可以采用一个更宽泛的ContextEngineering定义:设计和优化提供给大型语言模型和高级AI模型的指令及相关上下文的过程,以使其能够有效地执行任务。这不仅包括基于文本的LLM,也涵盖了为日益普及的多模态模型优化上下文。
ContextEngineering包括但不限于以下几个方面:设计和管理提示链、调整指令和系统提示、管理提示中的动态元素(如用户输入、日期时间等)、搜索和准备相关知识(即RAG检索增强生成)、查询增强、工具定义和指令(对于智能体系统而言)、准备和优化少样本示例、结构化输入和输出、短期记忆管理以及长期记忆检索等。
换言之,ContextEngineering的目标就是优化在LLM上下文窗口中提供的信息,同时过滤掉噪声信息。这本身就是一门科学,因为它需要系统地衡量LLM的性能表现。
让我们通过一个具体的例子来看ContextEngineering在实际中的应用。笔者最近为一个个人使用的多智能体深度研究应用做了一些上下文工程工作。在这个应用中,SearchPlanner(搜索规划师)智能体负责根据用户查询生成搜索计划。
以下是为这个子智能体整理的系统提示:
在这个系统提示中,有很多部分都需要仔细考虑,为规划智能体提供精确的上下文,使其能够有效地执行任务。这不仅仅是设计一个简单的提示或指令,而是需要反复试验,并提供重要的上下文,以便模型能够最佳地执行任务。
指令是提供给系统的高层指示,精确告诉系统要完成什么任务。例如:\“你是一位专业的研究规划师。你的任务是将复杂的研究查询分解为具体的搜索子任务,每个子任务关注不同的方面或来源类型。\“
很多初学者甚至是经验丰富的AI开发者可能就止步于此了。但从完整的提示来看,我们需要给系统提供大量额外的上下文,才能让它按照我们的意愿工作。这正是ContextEngineering的意义所在:它通过告知系统更多关于问题范围和具体需求的细节,来引导系统的行为。
用户输入虽然在系统提示中没有直接显示,但需要进行结构化处理。例如:
这里使用了分隔符,这是为了更好地结构化提示。这对于避免混淆非常重要,能够清晰地界定用户输入是什么,以及希望系统生成什么内容。有时候,输入的内容和希望模型输出的信息是相关的,比如查询是输入,而子查询是输出。
除了高层指令和用户输入之外,还需要花相当大的精力来详细描述智能体需要生成的内容结构。以下是提供给规划智能体的详细指令,以便它根据用户查询创建子任务:
仔细观察上面的指令,笔者列出了希望规划智能体生成所需信息的清单,并提供了一些提示和示例,以便更好地引导数据生成过程。这对于向智能体提供关于预期的额外上下文至关重要。例如,如果不告诉它优先级级别应该在1-5的范围内,系统可能会倾向于使用1-10的范围。
为了从规划智能体那里获得一致的输出,还需要提供关于子任务格式和期望字段类型的信息作为上下文:
这种结构化输出的方法是ContextEngineering中一个被许多AI开发者忽略的重要方面。这是一种非常强大的方法,尤其当智能体产生的输出不稳定,而它们又需要按照特定的格式传递给工作流中的下一个组件时。
在构建智能体系统时,工具的集成是ContextEngineering的重要组成部分。例如,将当前日期和时间作为上下文传入是非常重要的,这可以通过简单的函数调用实现:
这样的工具调用有助于增加动态性,即仅在查询需要时获取相关信息。这就是ContextEngineering的意义所在——它迫使开发者对\“向LLM传递什么样的上下文\“以及\“何时传递\“做出具体的决策。这很重要,因为它消除了应用程序中的假设和不准确性。
日期和时间对于系统而言是重要的上下文,否则它在处理需要了解当前日期和时间的查询时往往表现不佳。例如,如果要求系统搜索上周发生的OpenAI最新开发者新闻,它可能会随意猜测日期和时间,从而导致次优的查询,最终搜索结果也不准确。
RAG(检索增强生成)和记忆管理是ContextEngineering中的高级技术。虽然在基础版本中可能不需要使用短期记忆,但可以构建一个版本来缓存针对不同用户查询的子查询。这有助于加速和优化工作流。如果用户之前已经使用了类似的查询,可以将这些结果存储在向量数据库中,并查询这些结果,从而避免为已经生成并存在于向量数据库中的计划重新创建一组子查询。
这是一种巧妙的ContextEngineering应用,它使应用程序更具动态性、更经济、效率更高。ContextEngineering不仅仅是优化提示,更是根据设定的目标选择合适的上下文。在如何维护向量数据库以及如何将这些现有子任务拉入上下文方面,还有更多创意空间。富有创造性和新颖的ContextEngineering才是真正的技术护城河。
在复杂的智能体系统中,状态和历史上下文管理是一个重要组成部分。系统可能需要修订全部或部分查询、子任务,甚至是从网络搜索API获取的数据。这意味着系统将需要多次尝试解决问题,并且需要访问先前的状态以及系统可能的所有历史上下文。
对于实际应用而言,这意味着智能体需要访问子任务的状态、修订情况、工作流中每个智能体过去的结果,以及帮助进行修订阶段所需的任何其他上下文。对于这种类型的上下文,传递什么取决于正在优化的目标。这里需要做出大量的决策。ContextEngineering并不总是直接了当的,这个组件需要经过多次迭代才能达到最佳效果。
最后我们看一个DeepResearch的智能体例子,下图展示了如何从简单指令扩展到包含时间context、输出格式、字段定义的完整系统。Contextengineer需要系统思维,精确定义每个组件,动态管理变化因素,持续优化效果。这已成为AI开发的关键技能。
图片来源:https ://x. com/ProgramerJohann/status/1942241296351105528/photo/1
在ContextEngineering中还有许多高级技术有待探索,包括上下文压缩、上下文管理技术、上下文安全和有效性评估等。这些技术主要用于衡量上下文随时间的有效性。上下文可能会被稀释或变得低效,即充斥着过时和不相关的信息,这需要专门的评估工作流来捕获这些问题。
上下文压缩技术能够在保持关键信息的同时减少上下文长度,这对于处理长文档或大量历史记录特别重要。上下文管理技术则涉及如何动态地添加、删除和更新上下文中的信息,以确保系统始终拥有最相关和最新的信息。
上下文安全是另一个重要方面,它涉及如何防止恶意或错误的上下文信息影响系统的行为。这包括对输入的验证、对上下文来源的审核以及对输出的监控等。
ContextEngineering将继续演变为AI开发者和工程师的一项重要技能集合。除了手动进行ContextEngineering,还有机会构建能够自动化处理有效上下文工程的方法。目前已经有一些工具尝试做到这一点,但这个领域还需要更多的进展。
自动化ContextEngineering可能包括智能的上下文选择、动态的上下文优化、基于性能反馈的上下文调整等。这些技术的发展将使ContextEngineering更加高效和可扩展,同时降低开发者的工作负担。
随着AI模型能力的不断增强和应用场景的日益复杂,ContextEngineering的重要性只会越来越突出。它不仅是一个技术问题,也是一个设计问题,需要开发者具备深入的领域知识和丰富的实践经验。
ContextEngineering代表了从简单的提示工程向全面的上下文管理的演进。它不仅包含了传统PromptEngineering的所有技巧,还扩展到了整个AI系统的环境构建和优化。通过系统性的上下文设计、结构化的输入输出管理、工具集成、记忆管理和状态维护,ContextEngineering为构建高效、可靠的AI应用提供了强大的技术支撑。
对于AI开发者而言,掌握ContextEngineering技能已经变得至关重要。它不仅能够显著提升AI系统的性能和可靠性,还能够为复杂的AI应用场景提供更好的解决方案。随着AI技术的不断发展,ContextEngineering必将成为AI开发领域的核心竞争力之一。
添加微信,备注”LLM“进入大模型技术交流群
如果你觉得这篇文章对你有帮助,别忘了点个赞、送个喜欢

/作者:致Great


文章作者: ZejunCao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ZejunCao !
  目录