链载Ai

标题: 有效的 Context 工程(精读、万字梳理)|见知录 004 [打印本页]

作者: 链载Ai    时间: 5 天前
标题: 有效的 Context 工程(精读、万字梳理)|见知录 004

本期概要:


Image

💎 方法:AI Agent 的有效上下文工程

1️⃣ 何为上下文工程 Context Engineering ?

2025 年 6 月以来,原名为「Prompt Engineering」的提示词工程,在 AI Agent 概念日趋火热的应用潮中,

经由 Anthropic、LangChain、Manus 等 AI 公司,以及 Andrej Karpathy(前 OpenAI 联创)、Tobi Lutke(Shopify CEO)等行业领袖的传播下,共识成了更适应 Agent 的新概念:

——「Context Engineering」,即上下文工程。


Image

在国内,也对应出现了“Prompt 工程已死,未来属于 context 工程”、“别再卷 prompt 了”等论调。

但,事实尽是如此?


虽然传播一个新概念的“好”方法,就是拿它与出了名的旧事物对比、营造冲突。

但 prompt 仍是 context 工程不可或缺的子集,context 工程则是为适应 AI Agent 架构日趋复杂健全的自然发展。(Anthropic 团队在《Effective Context Engineering for AI Agents》一文中,也提到了一致观点)


要简单区分两者差异的话,可以如此理解:


比如,Context 工程涉及的 system instruction 依旧是 prompt 工程实现的。并非全方位替代,只是需要根据 AI 开发情景,灵活选择实现深度而已

Anthropic 《Effective Context Engineering for AI Agents》:context engineering 与 prompt engineering 的差异


Image



2️⃣ 有限的大模型上下文空间 → Context Rot

大模型的上下文窗口有限。


从 GPT3.5 的 16K ,到 Claude 3.5 的 200K,再到现在 Gemini 2.5 Pro 的动辄 1M,近年来 LLM 上下文窗口大小,确实提升飞快。

这是否意味着我们可以高枕无忧,把一切 Context 都无脑地塞进去?


答案是否定的——时至今日,上下文依旧需要被视为有递减收益边际的有限资源。


不知道你在和 AI 聊天时,是否发现这么一个现象?

当对话长度不断增加(即使还没超过官方标称的上下文窗口尺度),模型的回复质量也会有明显的下降:


——1M 上下文的 Gemini 2.5 Pro,基本在 tokens 量来到 4w 左右时,会反映为推理缓慢,质量开始有所下降。


是的,最大上下文窗口 ≠ 最佳注意力窗口。

有个专门术语来描述这个普遍的负面模型现象:Context Rot,上下文腐烂。


如同人类在信息过载时会思维混乱,而过长的、充满干扰的上下文,同样会显著降低模型的推理能力。


而模型性能下降(上下文腐烂,context rot)的三大因素如下:

  1. 1.Context 输入越长→ 注意力被稀释。
  2. 2.问题与关键信息的语义相似度越低→ 模型越难匹配到答案。
  3. 3.关键信息与周围干扰内容的语义相似度越高→ 干扰增强,模型难以分辨。

这三个因素会相互放大,导致性能显著下降。


PS:反过来,控制 Context 长度、减少 Context 中的干扰项数量、提升问题与 Context 中有效信息的相似度,就能够提升 Agent 的处理效果


这三大因素来自于 Chroma 团队(打造了目前全球最主流的开源向量数据库之一)名为《Context Rot》的同名实验研究。


实验研究古法人工浓缩如下,个人觉得会对测试 AI 产品有一些实用启发。(比如测试较佳 context 长度)

如果觉得太长,也可以下滑到本段小结~

ingFang SC", "Helvetica Neue", Helvetica, Arial, sans-serif;letter-spacing: 0.578px;margin-top: 32px;margin-bottom: 8px;padding: 0px 2px;width: fit-content;">☞ Chroma:探究上下文对模型性能影响的关键要素

他们设计了一套实验,来测试影响 LLM 长上下文性能表现的因素:

在传统 NIAH(Needle in a Haystack:即 LLM 大海捞针测试)基础上,进一步拓展任务难度,考察大模型的语义理解层面的捞针能力,而非直接词汇匹配。


传统 NIAH 任务,是评估模型长上下文能力最广使用的基准之一:

将一个随机事实(针信息),放在较长的上下文(干草堆)中,通过直接问答,要求模型回答某个针的信息 ,比如:

干草堆:[大量无关文本]

藏在干草堆的针信息:“我从大学同学那里得到的最好的写作建议是每周都要写作。”

问题 Prompt:“我从大学同学那里得到的最好的写作建议是什么?”


Image

此时,模型被期望能从大量干草堆中,直接找到针信息,并回答“每周都写作”。全程无需间接推理信息,直接根据已有信息回答即可。


传统 NIAH 虽然很有效地考察了 LLM 的大海捞针能力,但实际问答场景往往不会如此直接清晰:

Chroma 团队实际上,也注意到了这一点,并拓展了 4 种不同 NIAH 任务:

  1. 1.“针-问题对”相似度测试:构造不同语义理解难度的问题,测试不同 context 长度对回答的影响
  2. 2.干扰项测试:设置“不同的数量 + 不同的放置位置”的干扰项,测试不同 context 长度对回答的影响
  1. 3.“针-干草堆”相似度测试:当针信息与上下文的向量语义逐渐接近时,测试不同 context 长度对回答的影响
  2. 4.上下文文本、段落结构测试:测试相同内容含义时,逻辑连贯的结构与杂乱颠倒的结构,是否对模型推理性能有所影响


看完整体测试过程,我也总结了一些有助于理解 context 工程价值的现象:

  1. 1.无论如何,context 长度增加时,模型完成同样任务(即使很简单)的能力都会下降
  2. 2.针与问题之间的语义关系越难理解(相似度低),受 context 长度影响越大;且这种下降在长输入时会被显著放大。

    而 Context 长度较短时,模型对低相似度的问题,有更高的处理成功率

  3. 3.context 越长,干扰项对模型的影响也会加剧
  4. 4.针与干草堆的内容,在语义上越接近(主题越相关),模型识别针的能力越差。 如果针在语义上与周围内容格格不入(逻辑不连续、主题突兀),模型反而更容易识别。就像人玩找茬游戏,对突兀的信息更敏感。

    难:在 10 篇“写作建议”文章中找“最佳写作建议是每周写作”

    易:在“量子物理、烹饪、园艺”文章中找“最佳写作建议是每周写作”


⇣⇣⇣

小结:当 AI Agent 在多轮推理和更长的时间线上运行时,模型必然会面临越来越多的 context rot 因素。

冗余的上下文将大量占用模型的思考空间,显著降低其完成复杂任务的思考能力。

而上下文工程(Context Engineering)诞生的实质,正是在探究哪种上下文配置,最有可能引导模型输出我们期望的结果,获取更好的任务效果。



3️⃣ 有效开展 Context 工程的方法

AI Agent 发展至今,已经越来越能够在多轮推理和更长的时间内运行。


这些不断在“思考-行动-观察”中循环运行的 Agent,会在运行中不断产生、积累更多对下一次循环有影响的上下文数据

(包括系统指令 system prompt, 工具调用 tools, MCP, 外部数据, 对话历史 message history 等)


为了避免模型性能的下降,这些数据必须被 context 工程动态优化:

唯有效的 context 才配占据有限的上下文窗口资源。

Anthropic《Effective Context Engineering for AI Agents》:图解 Agent 开发中,context engineering 的起效形式


想要实现有效的 context 工程,大体上分为三类策略:



策略之一,从写好 System Prompt 开始

我们依旧可以从更熟悉的模块开始学习——通过 Prompt 工程,设计清晰、简单直接的系统提示。


有效的上下文,始于清晰的指令。

如果 Prompt 过于具体,使用大量示例、if-else 类的要求,则会使得模型更加僵化,缺乏处理意外情况的能力;

而 Prompt 如果要求过于模糊,或缺少足够的背景信息,则会无法对模型输出进行可控管理。


Image

在 Agent 运行过程中,每一轮推理所产生的部分 context(工具调用返回结果、Chat 回应等),也需经由 Prompt 引导其如何输出和被精炼(Kimi 那类 Model as Agent 的路线不在此列),方可具备一定的可预测性与管理意义。


以下是一些经过实践检验、能显著提升模型表现的提示词编写原则:


别忘了,system prompt,本身就是最小化的初始 context。

一个清晰、高效的 prompt,能够用最有必要的 tokens,为后续推理交互提供重要的方向指引。



ingFang SC", "Helvetica Neue", Helvetica, Arial, sans-serif;letter-spacing: 0.578px;margin-top: 18px;margin-bottom: 16px;padding: 0px 2px;width: fit-content;">策略之二,即时上下文,让 Agent 像人一样地获取上下文

考虑到在真实使用 AI 时,一方面上下文窗口有限,不可能把所有的相关 context 都塞进去。

另一方面,以往在推理前的阶段采用 embedding-based 检索的方案,常常会检索到很多“可能相关但实际没用”的内容。


所以,现在越来越多的 AI 应用,开始采用AI 自主探索的即时上下文方案:


当然,请记得权衡即时上下文探索,与向量检索/直接拼入context 等简单方案的耗时与效果。



策略之三,为超长程任务,实现无限上下文

虽然模型发展必然会带来更大的上下文窗口…

但如 Chroma 的 Context Rot 研究,无论如何,无关的 Context 占用上下文窗口时,必然会影响模型性能。


在当下的时间节点,Agent 的智能几乎与一次性自主运行时长挂钩。

AI Coding 中的代码重构任务、Deep Research 任务等,往往会运行数十分钟及以上,其产生的 context 必然会远超出模型的上下文窗口限制。

为了保障此类长程任务的连贯性与目标达成,Anthropic 团队引入了专门的上下文工程设计,在框架层面解决上下文污染与限制问题:


1)压缩(Compaction)

最直接的思路,是在上下文接近窗口限制时,把对话内容“有损压缩”,抛弃冗余无用的历史信息,并重新开启一个新的上下文窗口。

仅保留核心决策与细节(比如整体计划决策、执行过程错误和实现细节),以实现在新对话窗口的连贯性。


2)结构化笔记(Structured Note-taking)

当下,越来越多的 Agent 应用采用了这种外部 memory 策略,例如 Manus 等通用 Agent 的todo.md,MemU 等记忆框架的 memory 策略,均属于此列:

  1. 1.Agents 定期把重要记忆(如中间结论、待办事项、用户画像、用户活动)写入到可供 Agent 读写的外部笔记文件
  2. 2.在后续推理执行过程中,按需将记忆拉回上下文窗口。

能够以极小的上下文开销,进行持久化记忆。


我之前在测试 Browser-use Agents 的 2048 游戏最高分时,也将「在每一步游戏操作后,自行反思并记录心得与教训」作为 Agents 的 system prompt。

AI 在游戏过程中,就会额外记录结构化笔记,指导 AI 在新一轮游戏的操作决策,改进游戏得分。如:

-心得 1:固定一个角落放最大块(常用底部左/右角),尽量不要把它移出该角”
-心得 2:尽可能往同一个方向合并数字方块


3)多智能体架构(Multi-Agents Architectures)

这是一种更积极的“分而治之”的架构思想。

将一个复杂任务分解到多个子智能体,让专门的 Agent 专注于自己的任务与所需记忆空间,最后由一个主 Agent 在更高维度协调整体的任务计划。

每个子 Agent 的上下文压力都会小很多,模型性能能够发挥的更彻底,不易 context rot。


例如,Manus 所推出的 Wide-Research 功能,就采用了类似方案,有兴趣可以去试试看。因为是并行架构,所以能够在单位时间内开展更加广泛、深入的 Deep Research 研究或其他复杂任务。


至此,

可以根据 Agent 应用的类型和复杂度灵活组合,共同为超长程任务实现无限上下文,提供切实的可能。


4️⃣ 总结: 精心设计你的 Context 工程

回顾上文,system prompt 编写、即时上下文检索、上下文架构管理,一切讨论的锚点,最终都回归到了 context 工程的核心:


找到以最小 tokens 集合,最大化引出期望 AI 结果的策略。


Context 工程本身并不神秘,只是随着 AI Agent 架构日趋复杂、健全的自然工程发展。

理解了超长上下文如何影响 LLM 的性能表现,和 Agent 内的上下文记忆运作机制,我们才能更好地开展有效 context 工程。


最后的最后,请务必、务必,把上下文窗口视为有限的资源。


Ref:



🗂️ 梳理:Anthropic 界定的 Agent 类型

Anthropic 分享了他们过去一年里,与数十个团队、客户合作构建智能体时,总结下来的实用建议。

关于智能体的定义划分,往往在 workflows 和 agents 中有所混淆。Anthropic 将其统称为 agentic systems,智能系统:

如何选用、设计 agentic systems ?


以下是 Anthropic 总结的 workflow 与 Agents 类型,可能为你带来一些参考启发:


Workflow

增强型 LLM(the augmented LLM)

Image

Image

Image

Image

Image

Agent

Anthropic 把 Agent 定义为:LLMs autonomously using tools in a loop.


Image

Ref:



反思:止损线,亦是起跑线

“在抵达下一个阶段之前,这就是我探索愿意投入的、输得起的代价。”

发现自己在涉及到需要长期投入的重大决策时(如职业选择、亲密关系等),容易过度“忧虑未来的最终结果”。

导致因为畏惧远期回撤心理,不自觉地压抑当下的机会、幸福感,最终决定放弃对自己现阶段更有价值的行动。


比如:


被评价“这个人想得清楚”,看起来是件好事。但有时也会因为犹豫,错过一些机会。

很难区分保守与激进、深思熟虑与开放灵活,孰对孰错。


但重点在于,决策的第一步不仅仅是靠直觉、喜好,而是先明确自己当下最需要解决的问题是什么,盘算清自己愿意押注的筹码底线。

比如现在有多少储蓄,现在来看,最多愿意设置 xx 时间、金钱的止损线。再次之前要尽情探索自己创业可能性,到了止损阶段后,即使回去上班,自己也能接受。


过度忧虑未来、不预分配当前阶段的筹码,混乱地做出“明智、保护自己”的投资,是对流向自己的机会的不尊重。

——未来是很重要,投注成本是很珍贵,但也请多多珍惜当下。






欢迎光临 链载Ai (http://www.lianzai.com/) Powered by Discuz! X3.5