当前位置: 首页 > news >正文

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

最近在做Deepresearch以及刷到一个不错的文章:context-engineering-guide ,这篇文章揭示了提示工程以及上下文过程在智能体应用开源流程中,包括Deepresearch,MCP在内的一些概念,起到了非常重要的作用!

Context Engineering与Prompt Engineering的关系与区别

在深入探讨Context Engineering之前,我们需要理解它与Prompt Engineering的关系。传统的Prompt Engineering主要关注如何设计和优化单次的提示指令,让AI模型更好地理解用户意图并产生期望的输出。这就像是学会如何向一个专家提出精确的问题,通过精心设计的问题描述、示例和格式要求来获得高质量的回答。

而Context Engineering则是一个更加宽泛和系统性的概念,它不仅包含了Prompt Engineering的所有技巧,还扩展到了整个AI系统的上下文管理。如果说Prompt Engineering是"问话的艺术",那么Context Engineering就是"环境构建的科学"。它关注的是如何为AI系统提供完整的工作环境,包括背景知识、历史记录、工具调用、数据检索等各个方面,让AI在这个精心构建的上下文环境中更好地完成复杂任务。

什么是上下文工程?

几年前,包括许多顶尖的人工智能研究人员在内,不少人声称Prompt Engineering将会消亡。然而事实证明,他们的预测完全错误。Prompt Engineering不仅没有消失,反而变得比以往任何时候都更加重要,重要到正在被重新命名为Context Engineering。

Context Engineering是一个用来描述如何调整大型语言模型执行任务所需的指令和相关上下文的重要过程的术语。已经有很多业界专家对此进行了讨论,包括Ankur Goyal、Walden Yan、Tobi Lutke和Andrej Karpathy等人都曾提及这个概念的重要性。

人们之所以怀疑Prompt Engineering是一项严肃技能,主要是因为许多人将其与"盲目提示"混淆了。盲目提示是指在ChatGPT这样的LLM中使用简短的任务描述,仅仅是简单地向系统提问。而真正的Prompt Engineering需要更仔细地思考提示的上下文和结构,或许从一开始,它就应该叫做Context Engineering。

从开发者的角度来看,Context Engineering是一个迭代过程,用于优化提供给LLM的指令和上下文,以达到期望的结果。这包括建立正式的流程,如评估管道,用来衡量策略是否有效。

Context Engineering的核心定义

考虑到人工智能领域的快速发展,我们可以采用一个更宽泛的Context Engineering定义:设计和优化提供给大型语言模型和高级AI模型的指令及相关上下文的过程,以使其能够有效地执行任务。 这不仅包括基于文本的LLM,也涵盖了为日益普及的多模态模型优化上下文。

Context Engineering包括但不限于以下几个方面:设计和管理提示链、调整指令和系统提示、管理提示中的动态元素(如用户输入、日期时间等)、搜索和准备相关知识(即RAG检索增强生成)、查询增强、工具定义和指令(对于智能体系统而言)、准备和优化少样本示例、结构化输入和输出、短期记忆管理以及长期记忆检索等。

换言之,Context Engineering的目标就是优化在LLM上下文窗口中提供的信息,同时过滤掉噪声信息。这本身就是一门科学,因为它需要系统地衡量LLM的性能表现。

Context Engineering的实践应用

系统提示的设计与优化

让我们通过一个具体的例子来看Context Engineering在实际中的应用。笔者最近为一个个人使用的多智能体深度研究应用做了一些上下文工程工作。在这个应用中,Search Planner(搜索规划师)智能体负责根据用户查询生成搜索计划。

以下是为这个子智能体整理的系统提示:

你是一位专业的研究规划师。你的任务是将复杂的研究查询(由<user_query></user_query>分隔)分解为具体的搜索子任务,每个子任务关注不同的方面或来源类型。当前日期和时间是:{{ $now.toISO() }}对于每个子任务,请提供:
1. 子任务的唯一字符串ID(例如,'subtask_1', 'news_update')
2. 专注于主查询某个方面的具体搜索查询
3. 要搜索的来源类型(web, news, academic, specialized)
4. 时间段相关性(today, last week, recent, past_year, all_time)
5. 领域重点(如果适用)(technology, science, health等)
6. 优先级级别(1-最高到5-最低)所有字段(id, query, source_type, time_period, domain_focus, priority)对每个子任务都是必需的,除了time_period和domain_focus如果不适用可以为null。创建2个子任务,这些子任务一起提供对主题的全面覆盖。重点关注不同的方面、观点或信息来源。

在这个系统提示中,有很多部分都需要仔细考虑,为规划智能体提供精确的上下文,使其能够有效地执行任务。这不仅仅是设计一个简单的提示或指令,而是需要反复试验,并提供重要的上下文,以便模型能够最佳地执行任务。

指令层面的上下文工程

指令是提供给系统的高层指示,精确告诉系统要完成什么任务。例如:“你是一位专业的研究规划师。你的任务是将复杂的研究查询分解为具体的搜索子任务,每个子任务关注不同的方面或来源类型。”

很多初学者甚至是经验丰富的AI开发者可能就止步于此了。但从完整的提示来看,我们需要给系统提供大量额外的上下文,才能让它按照我们的意愿工作。这正是Context Engineering的意义所在:它通过告知系统更多关于问题范围和具体需求的细节,来引导系统的行为。

用户输入的结构化处理

用户输入虽然在系统提示中没有直接显示,但需要进行结构化处理。例如:

<user_query> What's the latest dev news from OpenAI? </user_query>

这里使用了分隔符,这是为了更好地结构化提示。这对于避免混淆非常重要,能够清晰地界定用户输入是什么,以及希望系统生成什么内容。有时候,输入的内容和希望模型输出的信息是相关的,比如查询是输入,而子查询是输出。

结构化输入与输出的优化

除了高层指令和用户输入之外,还需要花相当大的精力来详细描述智能体需要生成的内容结构。以下是提供给规划智能体的详细指令,以便它根据用户查询创建子任务:

对于每个子任务,请提供:
1. 子任务的唯一字符串ID(例如,'subtask_1', 'news_update')
2. 专注于主查询某个方面的具体搜索查询
3. 要搜索的来源类型(web, news, academic, specialized)
4. 时间段相关性(today, last week, recent, past_year, all_time)
5. 领域重点(如果适用)(technology, science, health等)
6. 优先级级别(1-最高到5-最低)所有字段(id, query, source_type, time_period, domain_focus, priority)对每个子任务都是必需的,除了time_period和domain_focus如果不适用可以为null。创建2个子任务,这些子任务一起提供对主题的全面覆盖。重点关注不同的方面、观点或信息来源。

仔细观察上面的指令,笔者列出了希望规划智能体生成所需信息的清单,并提供了一些提示和示例,以便更好地引导数据生成过程。这对于向智能体提供关于预期的额外上下文至关重要。例如,如果不告诉它优先级级别应该在1-5的范围内,系统可能会倾向于使用1-10的范围。

为了从规划智能体那里获得一致的输出,还需要提供关于子任务格式和期望字段类型的信息作为上下文:

每个子任务将包含以下信息:
id: str
query: str
source_type: str  # 例如,"web", "news", "academic", "specialized"
time_period: Optional[str] = None  # 例如,"today", "last week", "recent", "past_year", "all_time"
domain_focus: Optional[str] = None  # 例如,"technology", "science", "health"
priority: int  # 1(最高)到5(最低)

这种结构化输出的方法是Context Engineering中一个被许多AI开发者忽略的重要方面。这是一种非常强大的方法,尤其当智能体产生的输出不稳定,而它们又需要按照特定的格式传递给工作流中的下一个组件时。

工具集成与动态上下文

在构建智能体系统时,工具的集成是Context Engineering的重要组成部分。例如,将当前日期和时间作为上下文传入是非常重要的,这可以通过简单的函数调用实现:

The current date and time is: {{ $now.toISO() }}

这样的工具调用有助于增加动态性,即仅在查询需要时获取相关信息。这就是Context Engineering的意义所在——它迫使开发者对"向LLM传递什么样的上下文"以及"何时传递"做出具体的决策。这很重要,因为它消除了应用程序中的假设和不准确性。

日期和时间对于系统而言是重要的上下文,否则它在处理需要了解当前日期和时间的查询时往往表现不佳。例如,如果要求系统搜索上周发生的OpenAI最新开发者新闻,它可能会随意猜测日期和时间,从而导致次优的查询,最终搜索结果也不准确。

RAG与记忆管理

RAG(检索增强生成)和记忆管理是Context Engineering中的高级技术。虽然在基础版本中可能不需要使用短期记忆,但可以构建一个版本来缓存针对不同用户查询的子查询。这有助于加速和优化工作流。如果用户之前已经使用了类似的查询,可以将这些结果存储在向量数据库中,并查询这些结果,从而避免为已经生成并存在于向量数据库中的计划重新创建一组子查询。

这是一种巧妙的Context Engineering应用,它使应用程序更具动态性、更经济、效率更高。Context Engineering不仅仅是优化提示,更是根据设定的目标选择合适的上下文。在如何维护向量数据库以及如何将这些现有子任务拉入上下文方面,还有更多创意空间。富有创造性和新颖的Context Engineering才是真正的技术护城河。

状态与历史上下文管理

在复杂的智能体系统中,状态和历史上下文管理是一个重要组成部分。系统可能需要修订全部或部分查询、子任务,甚至是从网络搜索API获取的数据。这意味着系统将需要多次尝试解决问题,并且需要访问先前的状态以及系统可能的所有历史上下文。

对于实际应用而言,这意味着智能体需要访问子任务的状态、修订情况、工作流中每个智能体过去的结果,以及帮助进行修订阶段所需的任何其他上下文。对于这种类型的上下文,传递什么取决于正在优化的目标。这里需要做出大量的决策。Context Engineering并不总是直接了当的,这个组件需要经过多次迭代才能达到最佳效果。

最后我们看一个Deep Research的智能体例子,下图展示了如何从简单指令扩展到包含时间context、输出格式、字段定义的完整系统。Context engineer需要系统思维,精确定义每个组件,动态管理变化因素,持续优化效果。这已成为AI开发的关键技能。

图片来源:https://x.com/ProgramerJohann/status/1942241296351105528/photo/1

高级Context Engineering技术

在Context Engineering中还有许多高级技术有待探索,包括上下文压缩、上下文管理技术、上下文安全和有效性评估等。这些技术主要用于衡量上下文随时间的有效性。上下文可能会被稀释或变得低效,即充斥着过时和不相关的信息,这需要专门的评估工作流来捕获这些问题。

上下文压缩技术能够在保持关键信息的同时减少上下文长度,这对于处理长文档或大量历史记录特别重要。上下文管理技术则涉及如何动态地添加、删除和更新上下文中的信息,以确保系统始终拥有最相关和最新的信息。

上下文安全是另一个重要方面,它涉及如何防止恶意或错误的上下文信息影响系统的行为。这包括对输入的验证、对上下文来源的审核以及对输出的监控等。

Context Engineering的未来发展

Context Engineering将继续演变为AI开发者和工程师的一项重要技能集合。除了手动进行Context Engineering,还有机会构建能够自动化处理有效上下文工程的方法。目前已经有一些工具尝试做到这一点,但这个领域还需要更多的进展。

自动化Context Engineering可能包括智能的上下文选择、动态的上下文优化、基于性能反馈的上下文调整等。这些技术的发展将使Context Engineering更加高效和可扩展,同时降低开发者的工作负担。

随着AI模型能力的不断增强和应用场景的日益复杂,Context Engineering的重要性只会越来越突出。它不仅是一个技术问题,也是一个设计问题,需要开发者具备深入的领域知识和丰富的实践经验。

结语

Context Engineering代表了从简单的提示工程向全面的上下文管理的演进。它不仅包含了传统Prompt Engineering的所有技巧,还扩展到了整个AI系统的环境构建和优化。通过系统性的上下文设计、结构化的输入输出管理、工具集成、记忆管理和状态维护,Context Engineering为构建高效、可靠的AI应用提供了强大的技术支撑。

对于AI开发者而言,掌握Context Engineering技能已经变得至关重要。它不仅能够显著提升AI系统的性能和可靠性,还能够为复杂的AI应用场景提供更好的解决方案。随着AI技术的不断发展,Context Engineering必将成为AI开发领域的核心竞争力之一。

http://www.lryc.cn/news/583377.html

相关文章:

  • React、Vue、Angular的性能优化与源码解析概述
  • 深度学习 必然用到的 微积分知识
  • RAG实战之dify源码文件解析-pdf文件解析流程
  • 【Oracle报错】[INS-13001] 环境不满足最低要求。
  • 什么是幂等
  • 【03】MFC入门到精通——MFC 添加控件 设置属性 按钮 文本框
  • 第四节 chatPDF
  • 神经网络基础及API使用详解
  • 机器学习(西瓜书) 第四章 决策树
  • 通用游戏前端架构设计思考
  • 自动化测试报告优化:jenkins+jmeter定制化HTML报告生成
  • skywalking-agent-docker镜像
  • 方差、协方差和协方差矩阵
  • Windows 10/11新系统跳过强制联网激活和注册微软账户
  • JavaScript数组键值去重方法
  • 【C++】容器适配器 + stack/queue/deque详解
  • EFK9.0.3 windows搭建
  • Ubuntu连接不上网络问题(Network is unreachable)
  • ubuntu环境下调试 RT-Thread
  • windows部署多实例filebeat监控相同路径下文件
  • 【Kafka】登录日志处理的三次阶梯式优化实践:从同步写入到Kafka多分区批处理
  • SAP-ABAP:SAP中DELECT语句用法详解实例总结
  • Go语言Gin框架实战:开发技巧
  • 2024 睿抗编程技能赛——省赛真题解析(含C++源码)
  • 【Python】遇到 “non-integer arg 1 for randrange() ” 问题的解决方法
  • 技术开发栈中 URL地址末尾加不加 “/“ 有什么区别?
  • 闲庭信步使用图像验证平台加速FPGA的开发:第六课——测试图案的FPGA实现
  • 解决IDEA缺少Add Framework Support选项的可行性方案
  • java中list.remove(item); // 直接移除会导致ConcurrentModificationException
  • 图像自动化处理初探:从拖拽上传到参数设置