<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>潘锦的空间 &#187; 动态上下文管理</title>
	<atom:link href="https://www.phppan.com/tag/%e5%8a%a8%e6%80%81%e4%b8%8a%e4%b8%8b%e6%96%87%e7%ae%a1%e7%90%86/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.phppan.com</link>
	<description>SaaS SaaS架构 团队管理 技术管理 技术架构 PHP 内核 扩展 项目管理</description>
	<lastBuildDate>Sun, 12 Apr 2026 03:47:23 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>AI Agent 进阶架构：渐进式披露和动态上下文管理</title>
		<link>https://www.phppan.com/2026/01/ai-agent-progressive-disclosure-and-context-manage/</link>
		<comments>https://www.phppan.com/2026/01/ai-agent-progressive-disclosure-and-context-manage/#comments</comments>
		<pubDate>Sat, 17 Jan 2026 06:05:53 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[架构和远方]]></category>
		<category><![CDATA[AIAgent]]></category>
		<category><![CDATA[AIAgent架构]]></category>
		<category><![CDATA[动态上下文管理]]></category>
		<category><![CDATA[渐进式披露]]></category>

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