当 Agent 做到一定复杂度,问题往往不在模型能力本身,而在上下文怎么给、工具怎么给、流程怎么控。同一套模型,有的团队能把它用成「能稳定交付的执行系统」,有的团队只能得到「偶尔灵光一现的聊天机器人」,差距就在架构。
早期提示词工程里,上下文基本是静态的:一次性把提示词写好,然后让 LLM 自己发挥。随着架构的演化,,上下文变成动态的,它会「收」和「放」:
收(Contract):渐进式披露。屏蔽无关信息,减少 Token 消耗,聚焦注意力。(解决“准确性”)
放(Expand):动态注入。根据交互状态,主动引入外部话题、记忆片段或世界观设定。(解决“丰富性”与“持续性”)
这是一种系统架构策略:用有限 Token 去管理无限信息,用非确定性模型去执行标准化流程。
1. 三个典型瓶颈:Context、工具、SOP
复杂 Agent 基本都会遇到三个主要的问题:
-
上下文爆炸(Context Explosion)
文档、代码、历史对话、用户画像、任务状态……你不可能全塞进 Prompt。硬塞进去也会出现“Lost in the Middle”,关键信息被淹没。 -
工具过载(Tool Overload)
工具越多,定义越长,Token 越贵;更严重的问题是:工具选项越多,模型选择正确工具的概率越低,尤其是多个工具功能相近时。 -
执行不可控
当我们希望它按 SOP 做事(先检查、再验证、最后提交),它却容易跳步、漏步,或者为了“把话说圆”而瞎编执行结果。
「渐进式披露 + 动态上下文管理」就是对这三件事的统一解法:不要一次把世界交给模型,而是让模型在每一步只看到它此刻需要看到的东西。
2. 渐进式披露
渐进式披露不是少给信息,是分阶段给信息
有人把渐进式披露理解成省 Token。省 Token 是结果,不是核心。
核心是:把一次性的大上下文,拆成多轮的决策—反馈—再决策。每一步只给与当前决策相关的最小信息面,减少噪音,让模型的注意力更集中,也让系统更可控。
一个直观的工程化表述:
-
不是构建一个「全量 Context」 -
而是维护一个「可增长的 Context」,并且增长受控
你会看到两个动作交替出现:
-
Contract(收缩):隐藏、裁剪、摘要、替换为索引 -
Expand(扩张):按需加载片段、工具子集、记忆、世界观、流程状态
3. 数据层
传统做法,使用 RAG 很容易走向粗暴:检索到的内容直接拼进 Prompt,能拼多少拼多少(可以配置)。结果通常是两种:
-
Token 变贵,延迟变长 -
模型注意力被稀释,反而更不准
渐进式披露在数据层的落地方式,是把「获取信息」做成连续的动作序列,而不是一次性拉满。
参考 AI Conding 很贴近工程实际的步骤:
-
初始 Prompt 只有任务描述 -
AI 发现信息不足,发起 ls或grep请求 -
系统只返回 ls的结果(文件名列表),而不是文件内容 -
AI 选中目标,发起 read_file -
系统这时才披露文件内容
这里关键点不是 ls/grep/read_file 这些名字,而是信息披露粒度:
-
先给目录/索引(低成本,低噪音) -
再给片段(命中后才扩大) -
最后给全文(只在确认需要时才给)
3.1 披露层级建议:L0 到 L3
可以把上下文分成几层,这里定义的层级不是标准答案,但思路是这么个思路:
-
L0:任务和约束
用户需求、输出格式、禁止事项、成功标准。L0 必须稳定,尽量短,长期驻留。 -
L1:证据索引
文件列表、章节目录、数据库表名、日志摘要、搜索结果标题。只给“在哪里”。 -
L2:证据片段
命中的段落、代码片段、表结构、关键日志区间。只给“相关部分”。 -
L3:证据全量
全文档、完整文件、长对话历史。尽量少用,只在确实需要通读时开放。
系统要做的事是:让模型先用 L1 做定位,再用 L2 做判断,最后才允许 L3 进场。这样不仅省 Token,还可以减少模型在噪音里自我发挥的空间。
3.2 动态注入
动态注入常见误区:用户问 A,你检索 A;用户又问 B,你把 A+B 都塞进去;几轮后上下文就乱了,且不可控了。
比较常用的做法是引入「上下文预算」和「淘汰策略」:
-
每轮允许注入的 Token 上限(硬预算) -
驻留区(长期有效,例如用户身份、偏好、当前任务) -
工作区(当前步骤的证据片段) -
冷存区(旧证据移出,保留索引或摘要)
淘汰的对象通常是“旧证据全文”,不是“任务状态”。任务状态丢了,模型就会重复问、重复做;证据全文丢了,大不了重新检索。
4. 工具层
工具越多越强这件事,在 Agent 里是反的:工具越多,模型越容易犹豫、选错,甚至编造「我已经调用了某某 工具」。
渐进式披露在工具层的做法是:分层路由,按需可见。
参考一个很实用的层级披露思路:
-
Root 层只披露 5 个大类工具: 代码类、文档类、部署类、数据库类、通知类 -
模型先选大类,例如“我要查数据”-> 数据库类 -
下一轮 Prompt 才披露数据库相关的具体工具,例如 sql_query,get_table_schema
我们可以把它当成「工具菜单」:
-
第一屏:只显示一级菜单 -
点进去:才显示二级菜单 -
系统控制可见性,而不是让模型在 100 个工具里裸选
4.1 工具披露带来的三个工程收益
-
Token 控制更直接
大量工具的 schema 描述会花费大量的 Token。层级分发能把「工具定义成本」分摊到多轮,而且只在需要时支付。 -
工具选择准确率提升
选项少,模型更容易做对;更重要的是,减少「近义工具」同时出现。 -
安全策略更好落地
不该给的能力,默认不可见。你不需要在 Prompt 里反复警告“不要调用某某工具”,直接让它看不见。
4.2 「工具可见性」本质是一种权限系统
很多团队权限做在网关、做在后端鉴权,但 Agent 的权限还应该做在“可见性”上:
-
看不见:降低误用概率 -
看得见但不可用:模型会反复尝试,浪费回合 -
可用但有条件:需要把条件变成流程状态的一部分(下一节讲 SOP)
5. SOP 层
SOP 层就是当前很火热的 Skills,且不仅仅是 Skills,它是把流程写进披露逻辑,而不是写在提示词里
企业场景里,最怕的是「看似完成、实际没做」,而这在大模型的输出中很常见。让模型「请遵循 SO」”意义不大,它会漏步骤,而且它很擅长把漏掉的步骤用语言补上。
渐进式披露在 SOP 上的落地方式,是在我们的系统里做“流程锁”:上一步没通过,下一步的工具就不出现。
参考一段很清晰的流程控制(关键点直接引用):
-
阶段一(Lint):系统只披露 Lint 工具和当前 Diff,隐藏 Commit 工具 -
阶段二(Test):Lint 返回 Success 后,系统才披露 Test 工具 -
阶段三(Commit):只有测试通过,系统才披露 git_commit
这套逻辑解决的是“话术不可信”的问题:模型可以说“我已经测试通过”,但系统的状态机不会因为它一句话就放行。放行只能来自可验证的工具回执。
5.1 SOP 控制要点
把「检查点」设计成机器可判定
SOP 最容易失败的地方是检查点含糊,比如“确保无问题”“确认完成”。Agent 体系里要改成:
-
有工具回执的:以回执为准 -
没有工具回执的:以人工确认或外部系统状态为准 -
不能验证的:不要当作放行条件
能自动化判定,就不要让模型自评。
6. 为什么要引入 Agent Skill
这里本质是一种是工程分层,当然也是概念包装。
很多人会问:这些用代码控制不就行了,为什么还要提 Agent Skill?
把 Skill 当成一个架构抽象,会更容易把系统做稳:它解决的是解耦、复用、状态感知。
这里把关键逻辑说透:
6.1 Skill 是「上下文的容器」,用完即走
没有 Skill 时,你往往会得到一个越来越大的系统提示词:把所有话题、所有工具、所有规则都塞进去。结果就是注意力迷失、指令冲突、Token 爆炸。
有 Skill 后,你把「某一类任务需要的提示词 + 可用工具 + 知识入口」封装到一起:
-
需要时加载 -
不需要时卸载 -
上下文保持干净
这和「渐进式披露」是同一件事:Skill 是披露的载体。
6.2 Skill 是「动态注入」的边界
动态注入真正难的是边界:注入多少、注入什么、何时撤回。
Skill 让边界清晰:
-
注入不是“往 Prompt 拼字符串” -
注入是“激活某个 Skill”,让它把需要的最小信息面带进来
系统因此更容易做预算、做审计、做回放。
6.3 Skill 让路由变成可维护的系统,而不是靠直觉写 prompt
复杂 Agent 一定会路由:用户一句话可能触发“查资料 / 写代码 / 安抚情绪 / 改流程 / 发通知”。
Skill 体系下,路由的输出是“激活哪些 Skill”,而不是“写一段更长的提示词”。这会直接改善维护体验:
-
你能统计每个 Skill 的触发率、成功率、平均 Token -
你能对某个 Skill 单独迭代,而不牵一发动全身 -
你能为不同用户、不同权限加载不同 Skill 组合
7. 动态上下文管理
动态上下文管理要管理「状态 + 证据 + 权限」。
把上下文当成一段文本来拼接,迟早失控。更合理的视角是:上下文是系统状态在模型侧的投影。
建议把上下文拆成四类对象,每一类有不同的生命周期:
-
任务状态
当前处于哪个阶段、已完成哪些检查点、下一步允许做什么。它要短、稳定、结构化,尽量每轮都带。 -
证据
检索片段、工具输出、外部信息。它要可引用、可追溯、可淘汰。 -
偏好与长期记忆
能影响输出风格或长期策略的东西。它不该频繁变化,变化要可控,最好有写入门槛。 -
能力与权限
工具可见性、工具可用性、流程放行条件。它是约束,不是参考建议。
8. 可执行的架构清单
按“先做什么更值”排:
-
先做工具可见性控制
工具分层,默认只给 Root 类目;按分支披露具体工具。 -
把 SOP 变成状态机放行
上一步成功回执出现,下一步工具才可见。失败就停在当前阶段,不要让模型口头放行。 -
把上下文分区:驻留区 / 工作区 / 冷存区
驻留区短且稳定;工作区有预算;冷存区只保留索引/摘要。 -
先索引后片段的披露策略
任何大文本资源都先给目录、标题、命中位置,再给片段,不要一上来就全文。 -
Skill 化你的上下文与工具组合
让“动态注入”从拼 Prompt 变成“加载/卸载 Skill”。一开始不需要 100 个 Skill,把高频的 5–10 个先做稳。 -
把观测补齐
记录每轮:披露了哪些证据、开放了哪些工具、触发了哪些 Skill、用了多少 Token、是否命中检查点。没有这些数据,后面很难迭代。
9. 小结
一个成熟的 Agent 系统,外观上像在聊天,内部其实在跑一套受控的执行架构:
-
信息不是一次塞满,而是按步骤披露 -
工具不是全量开放,而是按层级开放 -
流程不是靠自觉,而是靠状态机约束 -
记忆不是越多越好,而是可写入、可淘汰、可追溯
把这四件事做好,Agent 会越来越像一个靠谱的执行系统:该问的问清楚,该查的查到证据,该做的按流程做完,做不到就停下来,不会硬编。
这就是「渐进式披露 + 动态上下文管理」的价值:不是让 Agent 说得更像,而是让它做得更稳。
以上。