Agent Skill 原理与工程实践(二十):如何控制 Skill 上下文大小

Agent Skill 原理与工程实践(二十):如何控制 Skill 上下文大小

前面几章已经完成了 Skill 的工作流、工具调用、控制流和组合设计。从本章开始进入第六阶段:Context Engineering。

大纲给出的上下文加载链路是:

1
2
3
4
5
6
7
Skill Metadata
↓
Core Workflow
↓
Conditional References
↓
Tool Results

这四层不是普通的目录分类,而是一套上下文预算策略:

  • Metadata 只负责让模型发现 Skill;
  • Core Workflow 只负责让模型正确执行主流程;
  • Conditional References 只在特定分支需要时读取;
  • Tool Results 只保留完成当前决策所必需的信息。

控制上下文大小的目标并不是单纯“少用 token”,而是提高有效信息密度,让模型在正确的时刻看到正确的信息。


1. 上下文窗口不是资料仓库

Skill 目录可以保存大量资料,但模型当前上下文不应该装下全部资料。

应把两个概念分开:

1
2
3
4
5
Available Knowledge
文件系统、数据库、向量库、API、工件存储中可访问的信息

Active Context
当前推理步骤实际需要、已经进入模型窗口的信息

理想状态是:

1
2
Available Knowledge 很大
Active Context 很小但足够

如果把所有可用知识都预先放入上下文,就会出现:

  • 与当前任务无关的信息争夺注意力;
  • 关键约束被长文淹没;
  • 输入成本和延迟增加;
  • 更早触发 compaction 或截断;
  • 相似规则发生冲突;
  • 工具结果不断累积,后续决策越来越不稳定。

所以,Context Engineering 的本质是选择、组织、加载、压缩和淘汰信息。


2. “上下文越多,效果越好”为什么是错的

大上下文窗口只表示模型最多能接收多少内容,不表示每一段内容都能带来正收益。

可以用一个简单概念表达:

1
2
3
4
5
6
Context Utility
= Relevant Signal
- Noise
- Conflict
- Redundancy
- Staleness

同一份资料在不同阶段,价值并不相同:

信息 Triage 阶段 深度分析阶段 报告阶段
用户目标 高 高 高
完整 trace 原文 低 中 低
领域规则 低 高 低
已验证 finding 中 高 高
报告模板 低 低 高

因此,上下文管理不能只设一个总 token 上限,还要按阶段决定哪些信息应该出现。


3. 四层上下文模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
┌──────────────────────────────────────┐
│ Level 1: Skill Metadata │
│ name + description │
│ 作用:发现与触发 │
├──────────────────────────────────────┤
│ Level 2: Core Workflow │
│ SKILL.md 主体 │
│ 作用:执行主干、边界与检查 │
├──────────────────────────────────────┤
│ Level 3: Conditional References │
│ references / schemas / examples │
│ 作用:按分支补充专门知识 │
├──────────────────────────────────────┤
│ Level 4: Tool Results │
│ 检索结果、日志、分析产物、错误 │
│ 作用:提供当前任务的动态事实 │
└──────────────────────────────────────┘

越靠上,越早加载、越常驻,因此必须越短、越稳定;越靠下,越贴近当前任务,可以更具体,但要严格按需读取和及时释放。


4. 第一层:Skill Metadata 只解决发现问题

Metadata 的任务是帮助模型回答:

1
2
这个 Skill 是做什么的?
当前请求何时应该使用它?

例如:

1
2
3
4
---
name: scheduler-analysis
description: Analyze scheduler traces for run-queue latency, wakeup delay, CPU contention, migration, and affinity issues. Use after triage identifies scheduler signals or when the user explicitly requests scheduler analysis.
---

它不应该包含:

  • 完整执行步骤;
  • 大段领域知识;
  • 所有输入输出示例;
  • 工具 API 说明;
  • 故障排查手册;
  • 历史变更记录。

OpenAI 官方资料指出,每个 Skill 的 name 和 description 都会进入模型上下文;当 Skill 太多、description 太长时,系统可能需要缩短描述,模型反而更难选择正确能力。

因此 Metadata 要追求:

1
2
Specific enough to route
Short enough to coexist

4.1 Metadata 的预算问题

假设安装 50 个 Skill,每个 description 都写 300~500 个英文词,即使任何 Skill 尚未执行,发现层就已经很重。

控制方式包括:

  • 只挂载当前角色需要的 Skill;
  • description 用一两句说明能力与触发时机;
  • 删除营销式介绍和重复关键词;
  • 避免每个 Skill 都声称“必须在任何相关任务中使用”;
  • 对大型 Skill 集先做路由,再暴露子集合。

5. 第二层:Core Workflow 只保留执行主干

Skill 触发后,模型需要知道怎样正确执行。这部分放在 SKILL.md 主体中。

Core Workflow 应包含:

  • 角色和职责边界;
  • 必要输入与前置条件;
  • 主流程步骤;
  • 关键分支入口;
  • 必须遵守的安全约束;
  • 输出契约;
  • 最终检查;
  • 去哪里读取条件资料。

不应默认包含:

  • 每个工具的完整手册;
  • 所有领域背景知识;
  • 大量相似示例;
  • 很少使用的异常分支细节;
  • 可由脚本执行的算法实现;
  • 整份 Schema 或数据字典。

5.1 根 SKILL.md 应像路由器

OpenAI 官方建议,对于包含多个工作流的 Skill,让根文档成为最小路由器:给模型足够信息判断下一步去哪里,但不要迫使它读取当前任务不需要的内容。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Scheduler Analysis

## Workflow

1. Validate the trace type and requested time range.
2. Select one analysis path:
- Run-queue latency → read `references/runqueue.md`
- Wakeup delay → read `references/wakeup.md`
- CPU affinity → read `references/affinity.md`
3. Run the referenced analysis script.
4. Validate the output against `schemas/scheduler-finding.json`.
5. Return evidence, counter-evidence, confidence, and unknowns.

## Boundaries

- Do not diagnose memory or storage causes.
- Emit cross-domain signals instead.

如果用户只调查 wakeup latency,模型无需加载 runqueue 和 affinity 的详细规则。


6. 第三层:Conditional References 按条件加载知识

条件引用解决的是:

1
这份知识很重要,但不是每一次执行都需要。

适合拆入 reference 的内容包括:

  • 特定子领域的判断规则;
  • 大型 API 或命令参考;
  • 数据字典和 Schema;
  • 平台差异;
  • 罕见故障处理;
  • 详细示例;
  • 术语表;
  • 历史兼容信息。

6.1 条件必须写得可执行

不推荐:

1
必要时参考 `references/advanced.md`。

“必要时”没有可操作标准。

推荐:

1
2
3
- If `trace_format == perf-script`, read `references/perf-script.md`.
- If the finding involves CPU affinity or migration, read `references/affinity.md`.
- If the output fails schema validation, read `references/output-repair.md` once.

这相当于为 reference 建立加载谓词:

1
load(reference) only if condition == true

6.2 引用保持浅层

不推荐:

1
2
3
4
5
SKILL.md
→ overview.md
→ platform.md
→ linux.md
→ kernel-version.md

深层引用会让模型遗漏关键文件,也增加导航成本。

推荐:

1
2
3
4
5
SKILL.md
├── references/runqueue.md
├── references/wakeup.md
├── references/affinity.md
└── references/output-repair.md

根文件直接指向任务分支所需资料,尽量只跨一层。

6.3 大型 Reference 需要目录与定位提示

如果一个 reference 无法继续合理拆分,应提供:

  • 目录;
  • 稳定标题;
  • 搜索关键词;
  • 适用条件;
  • 明确的不适用范围。

例如:

1
2
3
4
Read only the section matching the detected kernel family:

- Linux 5.x → `## Linux 5.x event mapping`
- Linux 6.x → `## Linux 6.x event mapping`

7. 第四层:Tool Results 是最容易失控的上下文

工具返回的是动态事实,也是 Agent 循环中增长最快的内容。

典型膨胀来源包括:

  • 搜索返回完整网页;
  • shell 输出数万行日志;
  • API 返回整个对象树;
  • 解析器重复返回原始数据;
  • 每次重试都保留几乎相同的错误;
  • 子 Agent 把完整推理历史传回主 Agent。

工具输出的正确原则不是“越完整越好”,而是:

1
2
3
Raw data stays outside context.
Relevant evidence enters context.
Stable artifacts are referenced, not repeated.

7.1 原始数据、工件和摘要分离

1
2
3
4
5
6
7
Raw trace
↓ stored as artifact
artifact://trace/sha256-...
↓ analyzed by script
structured summary
↓ selected fields
model context

模型通常只需要:

  • 工件标识;
  • 查询范围;
  • 关键统计;
  • 异常片段;
  • 证据位置;
  • 截断说明。

而不是完整原始文件。

7.2 Tool 应支持分页、过滤和投影

不推荐接口:

1
read_all_logs()

推荐接口:

1
2
3
4
5
6
7
search_logs(
time_range,
predicates,
fields,
limit,
cursor
)

工具应让调用者控制:

  • 时间范围;
  • 字段选择;
  • 结果数量;
  • 排序;
  • 去重;
  • 分页游标;
  • 是否包含原文片段。

7.3 输出摘要必须保留可追溯性

1
2
3
4
5
6
7
8
9
10
11
12
{
"summary": "14:03-14:04 runqueue latency sharply increased",
"evidence_count": 28,
"top_examples": ["event-188", "event-201"],
"artifact_ref": "artifact://sched/events.json",
"query": {
"from": "14:03:00",
"to": "14:04:30"
},
"truncated": true,
"next_cursor": "cursor-2"
}

摘要不能变成无来源的结论;模型应能按需回查原始证据。


8. Context Budget:给每一层设预算

不要只依赖模型的最大 context window。应在 Skill 设计中定义软预算:

1
2
3
4
5
6
7
context_budget:
metadata_tokens: 120
core_workflow_tokens: 2500
conditional_reference_tokens: 6000
active_tool_result_tokens: 8000
reserved_for_user_and_system: 4000
reserved_for_output: 3000

这里的数字只是示例,真实预算应通过 Eval 调整。重点是显式区分:

1
2
3
4
固定成本
+ 按需知识
+ 动态证据
+ 输出预留

如果不预留输出空间,输入阶段即使没有超限,最终回答也可能被迫缩短或截断。


9. Context Ledger:知道 token 花在了哪里

一次 Skill 执行可以维护上下文账本:

1
2
3
4
5
6
7
8
9
10
11
12
context_ledger:
system_and_project_rules: 1800
skill_metadata: 950
active_skill_workflow: 2100
references:
wakeup.md: 1700
conversation_history: 3200
tool_results:
trace_summary: 2600
metrics_query: 900
working_state: 700
total_input_estimate: 13950

账本的作用不是追求绝对精确,而是发现主要增长点:

  • Metadata 是否因 Skill 太多而膨胀;
  • SKILL.md 是否承担了百科全书职责;
  • 某个 reference 是否每次都被无条件读取;
  • Tool 是否重复返回大量相同内容;
  • 历史会话是否应该压缩或新开任务。

10. 上下文生命周期:进入、保留、压缩、淘汰

每一类信息都应有生命周期:

1
Discover → Load → Use → Distill → Evict

10.1 Discover

只暴露 Metadata 或索引,让模型知道信息存在。

10.2 Load

满足明确条件时读取正文或查询工具。

10.3 Use

信息参与当前判断,并产生结论或下一步动作。

10.4 Distill

把大结果转成结构化 finding、状态摘要或工件引用。

10.5 Evict

当原始信息不再影响未来决策时,从活动上下文移除。

这比“上下文满了再统一压缩”更主动,也更可控。


11. Working State 与对话历史分离

长任务不应该依赖模型从几十轮对话中重建当前状态。

可以维护结构化 Working State:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
goal: 定位 14:00-14:10 P99 延迟异常
constraints:
- read_only
- no production restart
confirmed_facts:
- p99 increased from 120ms to 840ms
- io latency correlated at 0.81
open_hypotheses:
- id: H1
claim: storage saturation contributed to latency
status: supported
- id: H2
claim: scheduler contention is primary
status: insufficient_evidence
artifacts:
- artifact://normalized-trace
completed_steps:
- triage
- io-analysis
next_steps:
- collect missing scheduler counters

后续步骤优先读取这份状态,而不是重复加载全部聊天和工具原文。

Working State 应保存事实、决定、约束、工件和未决事项,不应保存冗长叙事。


12. Trimming 与 Summarization 如何选择

OpenAI 的上下文管理资料区分了两种常见方法。

12.1 Trimming:裁掉旧内容

优点:

  • 行为确定;
  • 不需要额外模型调用;
  • 最近内容保持原样;
  • 容易调试和复现。

风险:

  • 早期的重要约束可能突然消失;
  • 最近一次超大工具输出仍可能占满窗口;
  • 长期承诺和标识可能丢失。

适合局部、短周期、工具密集且早期历史价值低的工作流。

12.2 Summarization:把旧内容压缩成状态

优点:

  • 能保留长期目标与关键决定;
  • 用较小体积承载较长历史;
  • 适合研究、规划和长会话。

风险:

  • 摘要可能遗漏或歪曲信息;
  • 错误事实可能污染后续上下文;
  • 需要记录摘要输入输出并单独评测。

12.3 Skill 中的推荐策略

1
2
3
4
5
Immutable constraints → 单独保留,不依赖摘要
Confirmed facts → 结构化 Working State
Large raw results → 工件引用
Recent interactions → 原样保留有限轮次
Old narrative → 压缩或淘汰

关键约束不能仅存在于会被裁剪的历史中,也不能完全依赖非确定性摘要。


13. Prompt Caching 不是 Context Reduction

这是一个常见误区。

1
2
3
4
5
Prompt Caching
降低相同前缀重复处理的成本或延迟

Context Reduction
减少当前窗口实际承载的信息量

缓存后,内容通常仍属于模型输入上下文,只是重复使用更经济。它不能解决:

  • 无关信息干扰;
  • 指令冲突;
  • 超过上下文上限;
  • Tool Result 长期堆积;
  • 模型难以定位关键信息。

所以,应先控制加载内容,再对稳定且必要的前缀使用缓存。


14. Tool Search 与 Skill Discovery 是同一种思想

Anthropic 的工具上下文文档提出:大量工具时,不必把所有 Tool Schema 预先塞入上下文,可以先暴露搜索能力,按需发现工具。

这与 Skill 的 Progressive Disclosure 本质一致:

1
2
3
4
5
6
7
8
Skill Discovery
Metadata first → SKILL.md on demand

Tool Search
Search interface first → Tool schema on demand

Reference Loading
Index first → Detailed document on demand

三者遵循同一条原则:

先提供选择所需的最小信息,做出选择后再加载执行所需的详细信息。


15. 用脚本减少上下文,而不只是提高确定性

脚本除了提供稳定执行,还能避免把大量实现和中间数据放进模型上下文。

例如分析一百万行 trace:

1
2
3
4
5
错误方式:
trace 原文 → 全部进入模型 → 模型统计

正确方式:
trace 原文 → script 统计与筛选 → 结构化摘要进入模型

脚本输出应面向决策:

1
2
3
4
5
6
7
8
9
10
11
{
"window": "14:03:00/14:04:00",
"runqueue_p50_ms": 3.2,
"runqueue_p99_ms": 47.2,
"top_tasks": [
{"pid": 1024, "p99_ms": 61.8}
],
"anomalous_intervals": [
{"start": "14:03:17", "end": "14:03:28"}
]
}

而不是把原始事件重新打印一遍。


16. 多 Skill 场景中的上下文隔离

父 Skill 不应把全部上下文广播给每个子 Skill。

1
2
3
4
5
6
Parent Context
├── user history
├── all findings
├── all raw tool results
├── other Skills' instructions
└── global state

应为子 Skill 构造 Task Packet:

1
2
3
4
5
6
7
8
9
10
11
task_id: sched-001
objective: 验证调度等待是否参与延迟异常
constraints:
- read_only
- incident_window_only
inputs:
trace_ref: artifact://normalized-trace
time_range: 14:00/14:10
known_facts:
- p99 spike confirmed
expected_output: scheduler_finding_v1

子 Skill 完成后,只返回结果 Envelope、必要工件引用和警告,不把自己的完整历史传回父上下文。

这样既隔离职责,也防止上下文呈乘法增长。


17. Retrieval 不是把搜索结果全部放入 Prompt

检索系统应包含三个阶段:

1
2
3
4
5
6
Candidate Retrieval
↓ 找到可能相关的内容
Re-ranking / Filtering
↓ 根据当前问题筛选
Context Packaging
↓ 只注入必要片段和出处

如果只做第一步,就会把大量“可能相关”资料塞进窗口。

Context Package 应包含:

  • 当前 claim 或子问题;
  • 精选片段;
  • 来源标识;
  • 时间与版本;
  • 适用范围;
  • 必要时的反证;
  • 是否截断。

不要把检索排名当作事实置信度,也不要因为内容进入上下文就默认它正确。


18. 过时信息与重复信息的处理

18.1 过时信息

每条动态事实应带时间或版本:

1
2
3
4
value: 47.2
metric: runqueue_p99_ms
observed_at: 2026-10-07T14:03:40+08:00
source: artifact://sched-summary

新结果到来时,不应让旧结果继续以同等权重常驻。

18.2 重复信息

同一事实可能同时出现在:

  • 用户消息;
  • Tool Result;
  • 工作摘要;
  • 子 Skill 输出;
  • 最终草稿。

推荐保留一个规范状态,并让其他位置引用它:

1
2
3
4
5
Canonical Fact Store
↑
messages / tools / skills contribute
↓
current context selects

重复不仅浪费 token,还会在副本不一致时造成冲突。


19. 注意力优先级:重要内容放在哪里

精简之外,还要保证关键内容容易被找到。

推荐结构:

1
2
3
4
5
6
7
8
9
# Skill Name

## Role and boundaries
## Required inputs
## Workflow
## Conditional references
## Output contract
## Failure policy
## Final check

重要规则应:

  • 出现在相关步骤附近;
  • 使用一致术语;
  • 避免在多个文件重复定义;
  • 必要时用 MUST 或明确禁止,而不是含糊建议;
  • 能由脚本或 Schema 验证时,不只依赖自然语言强调。

不要试图通过重复十遍来提高规则权重。重复会增加上下文,并可能出现版本不一致。


20. 一个可复用的上下文路由模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
---
name: performance-analysis
description: Investigate cross-domain system performance incidents. Use when the responsible subsystem is unknown or findings from multiple domains must be correlated.
---

# Performance Analysis

## Core workflow

1. Validate the incident objective and artifact references.
2. Read `references/triage.md` only when no target domain is known.
3. Select specialist analysis:
- Scheduler signals → delegate to `scheduler-analysis`.
- Memory signals → delegate to `memory-analysis`.
- I/O signals → delegate to `io-analysis`.
4. Store raw outputs as artifacts; keep only validated findings active.
5. Correlate findings and record contradictions.
6. Invoke `report-generator` only after analysis is complete.

## Conditional references

- Kernel-version compatibility issue → read `references/kernel-compat.md`.
- Conflicting findings → read `references/conflict-resolution.md`.
- Schema validation failure → read `references/output-repair.md` once.

## Context policy

- Do not load every reference upfront.
- Do not paste raw traces into the conversation.
- Pass each specialist a minimal task packet.
- Replace completed tool exchanges with a validated finding and artifact reference.
- Preserve user constraints and unresolved questions verbatim.

## Final check

- Every claim has a source or is labeled as a hypothesis.
- No stale tool result overrides a newer result.
- Partial coverage is disclosed.

这个模板把上下文策略变成工作流的一部分,而不是运行时出问题后再补救。


21. 何时应把信息留在 SKILL.md

满足下面多数条件时,适合留在核心工作流:

  • 几乎每次执行都需要;
  • 遗漏会直接导致流程错误或安全问题;
  • 内容短而稳定;
  • 决定下一步读取哪个 reference;
  • 是输出契约或最终检查的一部分。

例如:

1
2
3
“不要修改原始 trace”
“每个结论必须关联证据”
“先验证输入,再选择分析分支”

这类规则不应藏在深层 reference 中。


22. 何时应把信息拆到 Reference

满足下面任一条件时,优先拆出:

  • 只在少数分支使用;
  • 内容较长;
  • 更新频率与核心工作流不同;
  • 属于平台、版本或领域细节;
  • 可以通过明确条件定位;
  • 不读取也能完成其他大多数任务。

判断公式可以写成:

1
2
Expected Context Cost
= Content Size × Load Frequency

一份 5,000 token 的资料如果只有 5% 任务需要,按需加载通常比放入核心工作流合理得多。


23. 常见反模式

23.1 Metadata 写成迷你文档

结果是所有会话都承担成本,且相邻 Skill 的描述互相挤压。

23.2 SKILL.md 变成知识百科

所有背景、API、示例和故障都放在正文,导致 Skill 一触发就加载整套资料。

23.3 无条件读取 references

虽然文件拆开了,但第一步要求“阅读 references 下所有文档”,等于没有渐进披露。

23.4 Tool 返回完整原始数据

缺少筛选、分页、摘要和工件引用,Agent 每执行一步都使上下文变大。

23.5 摘要替代事实来源

摘要经过模型解释,不能成为唯一证据。必须保留原始工件引用和可回查路径。

23.6 把缓存当作压缩

缓存减少重复计费或处理,不会消除无关内容对注意力和窗口容量的占用。

23.7 只在超限后处理

等 context overflow 或 compaction 才开始管理,往往已经丢失了重要结构。应从 Skill 信息架构阶段设计预算。

23.8 每个子 Skill 都接收完整父上下文

会让多 Skill 组合的上下文成本快速放大,也破坏职责隔离。


24. 如何评测上下文设计

24.1 Context Cost

1
2
3
平均输入 token
P95 输入 token
每个阶段的 token 分布

24.2 Retrieval Efficiency

1
2
3
读取的 Reference 中有多少真正用于结果
未读取但本应读取的资料比例
平均引用深度

24.3 Tool Result Efficiency

1
2
3
原始输出大小 / 注入上下文大小
重复 Tool Result 比例
截断后是否仍能完成任务

24.4 Quality

1
2
3
4
5
任务完成率
约束遵从率
证据引用正确率
摘要事实保真度
长任务中的遗忘率

24.5 Context Ablation Test

逐步移除某段上下文,观察质量是否下降:

1
2
3
删除后质量不变 → 可能是冗余
删除后特定分支下降 → 应改为条件引用
删除后所有任务下降 → 应留在核心工作流

这比凭感觉精简更可靠。


25. 官方资料带来的工程启示

25.1 OpenAI:Skill 根文档应成为最小路由器

官方 OpenAI Docs 强调,读取 Skill 本身会占用上下文。多工作流 Skill 应让根文档只提供选择分支所需的信息,再指向相应支持文档和脚本。

25.2 OpenAI:长会话需要裁剪或压缩,但两者风险不同

Trimming 更确定,却可能突然遗忘早期信息;Summarization 能保留长期状态,却可能产生摘要漂移和上下文污染。因此关键约束、确认事实和原始证据引用应分层保存。

25.3 Anthropic:上下文窗口是共享资源

Skill 与 system prompt、对话历史、其他 Skill metadata 和用户请求共享上下文。写入任何一段内容都应问:它是否值得长期占用注意力?

25.4 Anthropic:渐进披露是三级加载机制

Metadata 常驻,SKILL.md 在触发时读取,额外资料与脚本按需访问。这使 Skill 可以携带丰富资源,而不必让全部资源进入当前上下文。

25.5 Anthropic:Tool Context 也要按需发现和淘汰

Tool Search 减少预加载定义,Programmatic Tool Calling 减少中间往返结果,Context Editing 清理失去价值的旧结果。它们分别处理上下文膨胀的不同阶段。


26. 本章最终模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
                ┌─────────────────────────┐
Always Loaded │ Skill Metadata │
│ short routing signal │
└────────────┬────────────┘
│ triggered
▼
┌─────────────────────────┐
On Trigger │ Core Workflow │
│ minimal execution router│
└────────────┬────────────┘
│ branch condition
▼
┌─────────────────────────┐
On Demand │ Conditional References │
│ domain-specific detail │
└────────────┬────────────┘
│ current evidence need
▼
┌─────────────────────────┐
Transient │ Tool Results │
│ filter → distill → evict│
└─────────────────────────┘

控制 Skill 上下文大小的核心不是固定某个 token 数字,而是建立加载纪律:

1
2
3
4
5
先发现,再读取;
先路由,再展开;
先筛选,再注入;
原文留在工件,结论进入状态;
信息完成使命后及时压缩或淘汰。

27. Skill 专项复盘

27.1 Skill 目录很大是否一定有问题?

不一定。未读取的 reference、asset 和 script 不占用活动上下文。问题在于是否有清晰的按需加载路径。

27.2 SKILL.md 是否越短越好?

不是。它必须完整承载核心工作流、关键约束和路由逻辑。目标是最小充分,而不是机械追求最少字数。

27.3 Tool Result 应不应该进入上下文?

当前判断所需的结构化结果应该进入;大规模原始数据应保存为工件,通过引用和按需查询访问。

27.4 有 Prompt Cache 后还需要精简吗?

需要。缓存降低重复成本,但不能减少窗口占用、噪声或指令冲突。

27.5 如何证明上下文设计有效?

同时测量输入 token、参考资料命中率、工具输出压缩比、任务完成率、约束遵从、摘要保真度和长任务遗忘率。


28. 本章实践

选择一个现有 Skill,完成一次 Context Audit:

  1. 统计 Metadata、核心工作流、Reference 和 Tool Result 的大小;
  2. 标记哪些信息始终需要、条件需要或只用于单步决策;
  3. 把根 SKILL.md 重构为最小工作流路由器;
  4. 为每个 reference 写出明确加载条件;
  5. 将引用深度压到一层;
  6. 为大 Tool Result 增加过滤、分页、摘要和工件引用;
  7. 建立结构化 Working State;
  8. 为关键约束设计不可丢失的保存位置;
  9. 对裁剪和摘要分别做事实保真测试;
  10. 运行 Context Ablation,删除没有质量贡献的内容。

下一章将严格按照大纲继续讨论不同指令层的职责与优先级:

第 21 章:Skill 与 AGENTS.md / System Prompt / User Prompt 的关系。


官方参考资料


Agent Skill 原理与工程实践(二十):如何控制 Skill 上下文大小
https://cj0510.github.io/2026/10/07/AI/Skill/20-如何控制Skill上下文大小/
作者
CJ1018
发布于
2026年10月7日
许可协议
CC BY-NC-SA 4.0