Files
zhuangang/topics/ai/agent-design/02-context-skills-multiagent.md

106 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: ai.agent-design.context-skills-multiagent
title: 上下文工程、Skills、多 Agent 和 A2A
type: lesson
domain: ai
stack: [agent-design]
tags: [上下文工程, Context Engineering, Skills, 多 Agent, Supervisor, Handoff, A2A]
level: advanced
prerequisites: [ai.agent-design.react-planning]
est_hours: 3.5
related: [ai.prompt-engineering.index, ai.mcp.protocol-server, ai.ai-coding.index, ai.agent-design.interview]
week: [11, 13]
order: 2
---
# 上下文工程、Skills、多 Agent 和 A2A
> Skills、A2A 都是 2025 年之后快速发展的概念,规范和各产品的支持情况以官方文档为准。
## 解释说明
### 上下文工程(Context Engineering)
提示词工程关注“怎么写指令”,上下文工程关注**每一次调用时,模型的上下文窗口里放什么**:系统提示词、工具定义、检索结果、对话历史、记忆、工具返回、当前任务状态。Agent 效果不好,很多时候不是模型不行,而是上下文里缺了关键信息,或者塞了太多无关内容。
| 手段 | 说明 |
| --- | --- |
| 选择(Select) | 只放相关的:检索结果精选、按任务挑选工具子集、按需加载技能 |
| 压缩(Compress) | 历史对话摘要、工具结果只保留需要的字段 |
| 隔离(Isolate) | 子任务交给子 Agent,在独立的上下文中完成,只把结论返回 |
| 外部化(Write) | 长期信息写进文件 / 记忆库 / 状态,需要时再读取 |
### Skills(技能)
把某类任务的说明、规范、脚本打包成一个目录(例如 `SKILL.md` + 辅助文件),系统提示词里只放每个技能的**名字和一句话描述**,模型判断需要时再加载全文——这叫**渐进式披露**,可以在不撑爆上下文的前提下给 Agent 很多“专业知识”。Claude Code 等 AI 编程工具已经支持这种形式;团队也可以用它沉淀开发工作流(见 [AI 编程专题](../ai-coding/index.md))。
### 多 Agent
| 模式 | 做法 | 适合 |
| --- | --- | --- |
| Supervisor(主管) | 一个主 Agent 分派任务给多个专职子 Agent,汇总结果 | 任务可拆分、子任务独立 |
| Handoff(转交) | 当前 Agent 把对话转交给更合适的 Agent | 客服分流(售前 → 售后 → 技术) |
| 流水线 | 固定顺序:研究 → 写作 → 审校 | 内容生产 |
多 Agent 的代价:调用次数多、成本高、Agent 之间信息传递会丢失细节、更难调试。**先用单 Agent + 好的工具,确实需要上下文隔离或专业分工时再拆。**
### A2A(Agent2Agent 协议)
MCP 解决“Agent 怎么调用工具”,A2A 解决“**不同团队 / 不同框架的 Agent 之间怎么协作**”。核心概念:Agent Card(描述 Agent 的能力、地址、鉴权方式)、Task(有状态的任务:已提交、处理中、需要输入、完成、失败等)、Message / Artifact(消息和产出物),基于 HTTP + JSON-RPC,支持流式更新。了解即可,面试时能说清和 MCP 的区别。
## 案例
一个企业助手接入了 40 个工具和 6 份业务规范,系统提示词超过 2 万 token,模型经常选错工具。改造:
1. 规范改成 Skills,系统提示词只保留索引,按需加载;
2. 按意图把工具分组,每次只给相关的 8 个;
3. 报表类任务交给“数据分析子 Agent”,它在自己的上下文里多轮查询,只把结论和图表返回;
4. 长对话超过预算时压缩早期内容。
提示词长度降到 5000 token 左右,工具选择错误明显减少(用评测集验证)。
## 代码示例
[examples/agent-patterns/patterns.py](examples/agent-patterns/patterns.py) 中的 Skills 渐进式加载和上下文预算:
```python
def skills_index(skills):
"""放进系统提示词的只有名字和描述。"""
return "\n".join(f"- {s.name}: {s.description}" for s in skills)
skill = pick_skill("我上周买的耳机想退款,800 元", skills) # 真实项目由模型决定加载哪个
context.append(skill.body()) # 需要时才加载全文
@dataclass
class Context:
system: str
budget: int
keep_recent: int = 4
...
def add(self, role, text):
self.messages.append((role, text))
while self.size() > self.budget and len(self.messages) > self.keep_recent:
old = self.messages[: -self.keep_recent]
self.messages = self.messages[-self.keep_recent:]
self.summary = summarize(self.summary, old) # 早期对话压缩成摘要
```
技能文件示例:[skills/refund-policy/SKILL.md](examples/agent-patterns/skills/refund-policy/SKILL.md)。
## 易错点
- 把所有规范、所有工具都塞进系统提示词。
- 摘要丢失了关键事实(订单号、用户已确认的选择):摘要要求明确保留哪些信息,并用评测验证。
- 多 Agent 之间只传结论不传依据,出错后无法追溯。
- 为了“看起来高级”上多 Agent,实际效果和成本都不如单 Agent。
- 混淆 MCP 和 A2A:一个是 Agent 与工具,一个是 Agent 与 Agent。
## 面试常问
- 什么是上下文工程?和提示词工程有什么区别?
- 工具很多时怎么办?
- 什么时候需要多 Agent?有什么代价?
- A2A 和 MCP 的区别?