掌握上下文工程:让你的 AI Agent 既“看得全”又“看得准”,新手程序员必备
2026/9/11 19:59:22 网站建设 项目流程

本文深入探讨了 AI Agent 的上下文工程,阐述了 Agent 在每次决策时如何向大模型传递信息。通过 KV Cache、提示词工程、Skills、Agent 状态栏和上下文压缩等技术,优化 Agent 在长任务中的表现,平衡信息完整性、准确性和效率。文章强调上下文质量对 Agent 能力的关键影响,并提供了实用的工程原则和设计方法,帮助程序员构建更高效的 AI Agent 系统。

  1. 什么是上下文工程 ?

上下文,就是模型在当前这一次决策时能够看到的全部信息。它不仅包括用户刚刚说的话,还包括:

  • 预先写好的行为规则(系统指令);
  • 外部功能说明(工具描述);
  • 之前聊了什么(对话历史);

因此,上下文工程可以定义为

上下文工程,就是系统性地设计、组织、更新和压缩这些信息,让模型在每一个决策点都能拿到“足够且正确”的信息。

1.1 为什么上下文是决定 Agent 能力上限的关键 ?

可以把一个大模型想象成一个刚刚加入公司的天才新员工。他的编程能力很强、逻辑能力很好、知识面也非常广。

但是你没有告诉他:公司代码库是怎么组织的;哪些模块负责什么;Git 分支规范是什么;哪些 API 可以调用;哪些操作需要审批;项目历史上做过什么架构决策。

然后你直接对他说:“帮我修一下这个 Bug。”即使这个员工再聪明,也很难把事情做好。

AI Agent 面临的就是完全相同的问题。所以:

模型能力决定 Agent 的基础智力,而上下文质量决定这些智力能发挥出来多少。

一个中等能力的模型,如果拥有完整、清晰、结构化的上下文,很多时候反而可能比一个更强的模型在信息不足的情况下表现得更好。

这也是为什么:

上下文工程不是简单地“往 Prompt 里多塞一些信息”,而是在构建一套高效的信息供给系统。

  1. Agent 每次给大模型看了什么?

要真正理解上下文工程,首先必须要明确:

大模型 API 本身通常是无状态的。 也就是说,大模型并不会天然“记得”上一轮发生了什么。每一次调用模型时,Agent 框架都需要重新把模型需要的信息发送过去。

以 OpenAI 的 Chat Completions API 为例,大模型 API 中最核心的是一个 messages 列表,其中通常包含四种角色:

  • System:系统消息;
  • User:用户消息;
  • Assistant:模型之前的回复;
  • Tool:工具执行结果。

2.1 System:系统消息

由开发者提供。主要负责定义:

  • Agent 是谁;
  • 应该遵守什么规则;
  • 什么事情可以做;
  • 什么事情不能做;
  • 遇到不同情况时应该按照什么流程处理。

模型将其视为最高优先级的指令。整个对话过程中通常只有一条,放在消息列表的最前面。

2.2 User:用户消息

也就是用户给 Agent 的输入。

例如:帮我查一下今天北京的天气。或者

帮我分析这个代码仓库为什么编译失败。

2.3 Assistant:模型之前的回复

就是模型之前的回复, 包括文本回复和工具调用请求。

这样模型下一轮才能知道:“我刚才已经做过什么了。”

2.4 Tool:工具执行结果

模型只是提出工具调用请求,真正执行工具的是 Agent 框架。

例如模型决定:调用天气工具 city = Beijing

Agent 框架执行后,得到:北京:晴,23℃

这个结果会再次加入上下文,然后重新交给模型判断下一步做什么。

除此之外,还有一个非常重要的部分:

工具定义(Tool Definitions) 作为请求的独立字段(而非消息),告诉模型有哪些工具可以使用、每个工具接受什么参数。

例如,它告诉模型:有哪些工具;每个工具能干什么;参数是什么;参数应该怎么填写。

在第一章中,我们还给了上下文的另一个定义:

上下文 = 静态前缀 + 动态轨迹

因此,Agent 每次调用模型时, 上下文的完整构成如下图所示:

上半部分(System Prompt + Tool Definitions)在整个对话过程中保持不变,下半部分(对话历史)随着交互的进行不断增长。

现在就有个新的问题:

模型处理很长的上下文是非常昂贵的。随着下半部分不断增长,假设当前上下文已经有几万个 Token,如果每生成一个新的 Token,都把前面的几万个 Token 从头计算一遍,Agent 的速度会越来越慢,成本也会越来越高。那么,该如何进行优化?

于是,就需要采用KV Cache 优化、上下文压缩等技术。

  1. KV Cache 友好的上下文设计

KV Cache 可以简单理解成:

模型把已经读过的内容产生的中间计算结果保存下来,下次继续往后读时,只需要计算新增 token 的部分。

因此,如果连续两次请求的前面部分完全一致:System Prompt+Tool Definitions, 那么前面的计算就可以直接复用。这一部分涉及到Transformer的基础. 用一个具体例子来说明。

假设模型正在处理“北京的天气怎么样”这句话,当读到“怎么样”时, 模型需要决定:前面哪些词对理解“怎么样”最重要?

计算过程分三步:

  • 首先,“怎么样”生成自己的 Query 向量(一串数字,代表“我在找什么”);
  • 然后, Query 与每个词的 Key 做点积(可以理解为“匹配度打分”——两组数字逐位相乘再加起来,结果越大说明越匹配),得到注意力权重;
  • 最后, 用这些权重对所有词的 Value 加权求和——打分高的词贡献多,打分低的词贡献少.

大致理解为: 每生成一个新词,它的 Query 都要与前面所有词的 Key 做匹配,再用所有词的 Value 加权求和。如果每次都从头计算所有 K 和 V,计算量会随上下文长度不断增长。KV Cache 就是把已算过的 K 和 V 缓存起来,让新词直接复用

假设开发者为了告诉 Agent 当前时间,把下面这句话放进 System Prompt:Current time: 10:30:01. 下一秒:Current time: 10:30:02. 看起来只改了一个数字。

但对于缓存而言:前面的 Token 已经不一样了。从发生变化的位置开始,后面的缓存就无法继续复用。

因此,一个看起来非常不起眼的动态时间戳,都可能让 Agent 的延迟和推理成本明显增加。

所以第二章给出了三个非常重要的工程原则:

  • 原则一:System Prompt 和核心工具定义尽量保持稳定, 确定之后不要频繁修改。甚至工具定义的排列顺序,也最好保持稳定。
  • 原则二:动态信息尽量往上下文末尾追加. 例如:当前时间;当前工作目录;用户当前状态;工具已经调用几次;当前任务进度。不要反复修改前面的 System Prompt,而应该追加到轨迹后面。
  • 原则三:尽量使用模型的标准 API 消息格式, 不要自行拼接消息.

因此可以总结为一句话:

静态信息放前面并保持稳定,动态信息不断往后追加。

这既有利于模型理解,也有利于 KV Cache。

  1. 提示工程:System Prompt 应该怎么写?

上下文结构设计好了,下一个问题就是:里面到底应该写什么?

这里就进入了大家比较熟悉的:提示工程(Prompt Engineering)。在 Agent 系统里,提示工程最核心的对象就是 System Prompt, 定义了 Agent 的身份、行为规则、约束条件和工作流程。

系统提示词的设计有一个实用的检验标准: 如果一个聪明的新员工读完你的系统提示词还不知道该怎么做, Agent 也一样不知道。

下面从几个维度讨论如何优化系统提示词:

4.1 系统提示词的语气和风格

语气和风格的设计是提示工程中最容易被忽视,却又深刻影响用户体验的部分。

例如, 可以要求“You MUST answer concisely with fewer than 4 lines”(你必须简洁地回答,不超过 4 行)等。

这种设计避免了 Agent 陷入冗长的自我辩护, 但过度使用会导致效果被稀释,应保留给真正关键的约束

4.2 系统提示词的结构化格式

现代大语言模型对结构化输入展现出显著的敏感性, 这源于训练数据中包含大量的结构化内容。

XML 和 Markdown配合使用, 可以形成一种双层结构: XML负责机器可解析的精确语义, Markdown负责人机共读的组织逻辑。比如一个系统提示词同时用了两者:

# 工具使用规范 ## 文件操作 <file_operation> - 读取文件前必须先检查路径是否存在 - 写入文件前必须先备份 </file_operation> ## 网络请求 <network_request> - 超时时间设置为 30 秒 - 失败后最多重试 3 次 </network_request>

两者配合, 人读着清晰, 模型理解也准确。

4.3 系统提示词的设计流程

不要只堆规则,要设计流程.

假设给 Agent 写了 100 条规则:

  • 不能做 A
  • 遇到 B 要做 C
  • 如果 D 则不能 E
  • 出现 F 应该 G

规则越来越多以后,模型会遇到一个问题:

多条规则同时适用时,我到底应该先遵守哪一条?

所以相比“规则堆砌”,更加可靠的方法是:流程驱动。

例如:文件处理 标准操作流程(SOP) Step 1:检查文件是否存在 ↓ Step 2:判断文件类型 ↓ Step 3:执行预处理 ↓ Step 4:执行核心操作 ↓ Step 5:检查结果是否正确

这样模型在执行过程中始终知道:我现在在哪一步;当前目标是什么;下一步是什么;出现异常应该在哪个阶段处理。

好的 Prompt 不只是告诉模型“不能做什么”,更应该告诉模型“应该怎样完成任务”。

4.4 系统提示词的业务规则

在生产级 Agent 中,一个非常重要的问题是:不要让模型替产品经理制定业务规则。

例如:“根据具体情况选择合适的退款方式。” 这句话对人看起来似乎很合理。但对 Agent 来说却包含大量自由裁量空间:什么叫“具体情况”?什么叫“合适”?不同模型甚至同一个模型不同运行次数,都可能给出不同判断。

因此应该把业务规则细化成:

  • 情况 A → 使用方案 1
  • 情况 B → 使用方案 2
  • 情况 C → 禁止执行
  • 情况 D → 必须人工确认

大模型真正擅长的是:在复杂规则下进行理解和决策。

而不是:自己创造业务规则。

4.5 规则不好描述时,可以直接给例子

当期望的输出难以用规则精确描述时,可以直接给出两三个高质量的输入-输出示例。

例如你希望 Agent 写出某一种非常特殊的文案风格。

与其写:

自然一点, 少一点 AI 味, 句子不要太机械, 语言更有人情味

可能不如直接给它:

  • 输入 A → 理想输出 A
  • 输入 B → 理想输出 B
  • 输入 C → 理想输出 C

让模型从几个高质量例子中自己学习模式。但示例也不是越多越好。

两三个覆盖典型情况和边界情况的高质量示例,通常比十几个重复案例更加有效。

4.6 工具描述也是 Prompt 的一部分

除了系统提示词, API 请求中另一个重要的静态组成部分是工具定义(tools 字段) 。工具定义的质量直接决定了Agent使用工具的准确性.

工具定义写得好不好,会直接影响 Agent:会不会选错工具;参数会不会填错;会不会在不该调用的时候调用;是否理解多个工具之间的关系。

因此一个好的工具描述,而应该告诉模型:什么时候使用;什么时候不要使用;参数分别表示什么;有没有典型示例;是否应该和其他工具配合使用。

  1. Agent Skills

随着 Agent 覆盖的业务场景越来越多,系统提示词会不断膨胀.如果全部塞进 System Prompt:Prompt 会越来越长。这会产生两个问题:

  • 浪费 Token:绝大多数知识跟当前任务没有关系;
  • 稀释注意力:无关信息越来越多,真正重要的信息反而不容易被关注。

所以出现了一种新的上下文组织方式:Agent Skills.

Skills 的核心思想可以总结成四个字:按需加载。

它采用的是一种:Progressive Disclosure(渐进式披露)的设计思想。

Skills 通常可以分成三层:

第一层:元数据, 每个 Skill 必须包含一个 SKILL.md 文件,开头是 YAML frontmatter(即文件顶部用 --分隔的元数据块,类似书籍的版权页),包含 name 和 description 两个字段。

只告诉 Agent:

  • Skill 名称;
  • Skill 用途;
  • 什么时候应该使用;
  • 什么时候不应该使用.

这一层非常短,可以长期存在于上下文中。

第二层:核心流程. 当 Agent 判断某个任务需要特定的 Skill 时,运行时才加载完整的 SKILL.md。

第三层:细则. 通过文件引用深入到更详细的子文档。 如果任务进一步需要:“使用 HTML 模板制作 PPT。” 再继续读取对应的子文档、模板或脚本。 于是:

目录 ↓ 需要时加载 Skill ↓ 需要更深入时加载子文档

这就是渐进式披露。不是让 Agent 一开始知道所有细节,而是保证它知道“去哪里找到需要的知识”。

这也是上下文工程非常重要的思想转变:

从“把知识全部塞给模型”,转变为“让模型能够按需获取知识”。

  1. Agent 状态栏

如何让 Agent 随时看到任务进度、环境变化和工具调用计数等运行时状态?

提示工程给的是静态指令,而 Agent 在执行过程中还需要动态感知自身状态与任务进展。Agent 框架把这些动态信息整理成结构化摘要并注入上下文,这种机制称为 Agent 状态栏(Agent Status Bar).

也就是说,Agent状态栏就是让 Agent 知道自己“做到哪了”。

这个概念最好的类比是手机顶部的状态栏。

手机不会要求用户自己从过去几个小时的操作记录里推算:“现在还剩多少电?”

而是直接告诉你:Battery:36%; Wi-Fi:Connected; Time:10:30。Agent状态栏也一样。

Agent 状态栏的本质,就是把隐藏在长轨迹中的“隐式状态”,提前整理成模型可以直接读取的“显式知识”。

  1. 上下文压缩策略

Agent 每调用一次工具:Assistant Message;Tool Result。 轨迹就会继续增长。一次工具调用可能就返回几万甚至几十万个字符。

于是出现一个必然的问题:上下文会越来越大。

所以需要:Context Compression(上下文压缩)。

上下文压缩的设计原则: 与其期望模型从冗长的上下文中自动学习,不如主动地、显式地进行知识提炼。

虽然需要额外的计算投入(用专门的 LLM 调用来做总结),但产生的是经过压缩的高密度知识表示。

上下文感知压缩——将当前的查询意图和已积累的信息纳入压缩的决策过程。通过在压 缩提示中指定“Given the search query: {query}”和“Current context: {context}”,引导模型生成有针对性的摘要。

需要注意的是:

System Prompt 和 Tool Definitions 永远不动(这是KV Cache 要求)。压缩的对象是对话历史中的 tool results以及Assistant Message。

隔离优于压缩

上下文工程还有一个非常重要的思想:

隔离优于压缩。

假设主 Agent 要完成:“在整个代码库里找到处理支付回调的函数。”如果主 Agent 自己搜索:

搜索目录 ↓ 读取文件 A ↓ 读取文件 B ↓ 读取文件 C ↓ 读取文件 D ......

可能几十万个 Token 的代码都会进入主 Agent 的上下文。

因此,可以派一个子 Agent去搜索。

子 Agent 自己经历:几十次搜索;几十个文件;大量代码。最后只给主 Agent 返回。

这样:大量中间噪声根本不会进入主 Agent 的上下文。

所以:压缩是在垃圾进来以后再清理,而隔离是从一开始就不让垃圾进入主上下文。

当然,它也有代价:子 Agent 看不到主 Agent 的所有上下文。

因此主 Agent 给子 Agent 的任务描述必须:

  • 目标明确;
  • 提供必要背景;
  • 明确需要返回什么结果。
  1. 总结

经过这一章,我们可以把上下文工程总结成下面这套结构:

因此,可以总结出几个核心原则:

  1. 上下文不是越多越好,而是越相关、越清晰、信息密度越高越好。

  2. System Prompt 和核心 Tool Definitions 尽量保持稳定。

  3. 时间、状态等动态信息尽量追加到上下文末尾。

  4. Prompt 应该流程化、结构化,而不是无限堆叠规则。

  5. 大量领域知识不要全部常驻,通过 Skills 按需加载。

  6. **把工具调用次数、TODO、环境状态等隐式信息

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包

  • ✅ 从零到一的 AI 学习路径图
  • ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
  • ✅ 百度/阿里专家闭门录播课
  • ✅ 大模型当下最新行业报告
  • ✅ 真实大厂面试真题
  • ✅ 2026 最新岗位需求图谱

所有资料 ⚡️ ,朋友们如果有需要《AI大模型入门+进阶学习资源包》下方扫码获取~

① 全套AI大模型应用开发视频教程

(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)

② 大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!

③ 大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。

④ AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

⑤ 大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。

⑥ 大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

以上资料如何领取?

为什么大家都在学大模型?

最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

不出1年,“有AI项目经验”将成为投递简历的门槛。

风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!

这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

以上全套大模型资料如何领取?

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询