如何构建 Agent 及其上下文工程
如何构建 Agent 及其上下文工程
原文: https://www.nazha.co/posts/how-to-build-agents
整理时间: 2026-02-20
什么是 Agent?
.png)
Agent 是基于 LLMs 构建的具备自我决策能力、推理、规划和与环境交互的系统。
站在巨人肩膀上:使用 Claude Agent SDK 构建 Agent
为什么是 Claude Agent SDK
| 优势 | 说明 |
|---|---|
| 下限保障 | Claude Code / CoWork 基于 Claude Agent SDK 开发,已验证可行性 |
| 国产兼容 | Minimax、GLM、DeepSeek 都有兼容 Claude Code 的专有 API |
| 开箱即用 | 内置 Tools、上下文压缩、Session 管理 |
| 扩展能力强 | 支持 Hooks、MCP Tools、Skills 等方式扩展 |
| 官方出品 | 基础模型是 Claude Opus/Sonnet 时的最佳选择 |
长任务完成度是 Agent 的核心指标:

- 完成度越高的 LLMs,在指令对齐、工具有效使用上效果更好
- Opus 在长任务表现非常出色
- 建议:先用 Claude Agent SDK run 起来,后续再优化
Skills 是什么
一个典型的 Skill 包含三层内容:
- 元数据 - 告诉 Agent 这个 Skill 是干啥的,什么时候用
- 指令 - 工作流程、最佳实践、注意事项(Agent 确定使用时才读取)
- 资源或代码 - 脚本、模板或参考文档(渐进式披露策略)

Skills 的本质是「可复用的提示词」:
- ✅ 给 LLMs 运行时上下文学习的能力
- ✅ 动态的:执行过程中动态加载,非执行前注入
- ✅ 方便复用
- ✅ 依赖于 Agent 环境(非强依赖)
为什么需要动态加载?
如果把所有 Skills 放到系统提示词里:
- ❌ Token 膨胀 - 用不上的 token 占据系统提示词大部分
- ❌ 混淆 - 多余信息导致低质量回复
动态加载 → 原子化 → 可重用、可组合 👍
Skills vs MCP vs SubAgent
MCP (Model Context Protocol) 是连接 AI 应用与外部系统的开源标准
MCP 重点:Agent 和外部世界的数据交互
Agent 维度:以个体「人」或「角色」为维度定义
“我们不能把一个带说明书的电锯称之为木工”
—— 来自 @dotey


前端同学能听懂的比喻:
- React 页面 = Agent
- React Components = Skills
- useEffect = MCP
实际设计原则:
| 类型 | 适用场景 |
|---|---|
| Skills | 随时变化、灵活的领域知识和工作流 |
| Tools / SubAgent | 稳定的、可靠的行为 |
Hooks 是什么
利用 Hooks 在 Claude Code 生命周期的不同节点插入自定义处理。
可以做的事情:
- Log 记录
- 通知
- 代码格式化(如 ESLint 检查)
- …
不适合 Claude Agent SDK 的场景
- ❌ Claude 模型不是实现任务的最佳模型
- ❌ 有自己更好的抽象和实现
- ❌ 设计架构无法基于 Claude Agent SDK 实现
Multi-Agent 架构:转交 vs 委托
“一旦智能达到某个阈值,多智能体就成为提升性能的关键方式”
通过在不同上下文窗口的智能体间分配工作,增加并行推理的容量。
委托 (Delegation)
Agent as Tool - 专用 Agent 被封装为可调用的函数,供其他代理使用。
特点:
- 缓解多 Agent 之间通信难度
- 关注点分离 (Separation of concerns)
- “父子”分层协作模型
- 主 Agent 保持任务控制,调用子 Agent 处理子任务
- 不移交任务控制权

优点:架构设计简单,灵活性强
转交 (Handoff)
去中心化的多智能体编排方式,一个智能体可以将整个对话或任务委托给另一个智能体,单向转移控制权和上下文。
特点:
- 没有单一”大脑”
- 被转交的 Agent 完全接管与用户的互动
- 需要维护共享内存或状态传递上下文
缺点:
- 如果转交路径确定,灵活性较低
- 共享上下文更难管理
- 顺序回合增加延迟
其他 Multi-Agent 模式
| 模式 | 说明 |
|---|---|
| 工作流 | 按预定义 SOP 流程编排智能体 |
| Swarm | 多个代理作为团队解决问题,去中心化,共享信息上下文 |
| Graph | 基于确定性有向图的代理编排,包含多路径、分支、反馈循环 |


公式化的 Context Engineering
传统自回归 LLM 模型

其中 C = prompt,但对现代系统来说,C = prompt 是不够的。
上下文工程的重新定义
将上下文 C 重新概念化为动态结构的信息组件集合 c₁, c₂, …, cₙ:

组件类型:
| 组件 | 含义 |
|---|---|
| c_instr | 系统指令和规则 |
| c_know | 外部知识(RAG/Web Search/记忆系统) |
| c_tools | 可用外部工具的定义和返回 |
| c_mem | 执行累计的过程数据 |
| c_state | 多智能体系统和编排转交的数据 |
| c_query | 用户的请求 |
优化目标
「寻找到一组理想的上下文生成函数 F,以最大化提升 LLMs 的预期输出质量」
组装函数 A 是动态上下文编排形式:
A = Concat ∘ (Format₁, ..., Formatₙ)
知识检索是信息论最优问题:
- 选择与目标答案在给定查询条件下具有最大互信息量的知识
- 要求检索到的上下文不仅语义相似,且对于解决任务具有最大信息量

常见问题:
- 过程累积导致的上下文膨胀
- 工具定义和结果大量消耗 token
- 中间推理过程在上下文大量累积
- Agent 执行过程中无法对齐目标,不遵循指令
上下文卸载
卸载策略
1. 卸载中间过程
- 委托任务到子 Agent
- 支持 Code execution
Code Execution 像函数一样:
- 有输入和输出
- 中间过程被封装/消除
- 不污染上下文
2. 渐进式披露
- 将大文档拆分成小文档
- 卸载到文件系统
- 对 RAG 返回的候选结果进行卸载
文件系统作为上下文的容器
为什么用文件系统?
| 优势 | 说明 |
|---|---|
| 容量无限 | 不受上下文长度限制 |
| 天然持久 | 内容不会丢失 |
| 智能体可直接操作 | 模型学习按需读写文件 |
| 可逆的 | 内容外部化,没有被丢掉 |
| Plan/Scratch files | 创建临时文件整理思路、跟踪进度 |
| Long context handling | 旧消息压缩到文件,需要时重读 |
核心观点:将文件系统当作结构化的外部记忆体
基于文件系统的二次检索策略

适用场景:组件文档、库文档、API 文档等偏结构性文档
传统 RAG 的问题:
- 如果只召回描述,没召回 API
- 或召回了 API 但没召回 Demo
二次检索步骤:
- 对文件做摘要处理
- 只把摘要文档送入 RAG 系统检索
- Agent 做粗略检索(5-10 个候选)
- 从候选中找出匹配要求的全量文档
好处:
- 减少 Token 和上下文
- 降低噪音干扰
- 后续可直接本地 grep 检索,无需再次召回
从 Tools 到 Scripting
减少中间过程还可以借鉴编程中「函数」的概念:
- 通过 Agent 自动编写和执行代码来链接操作
- 减少中间过程的输出
参考:
- Anthropic: Code execution with MCP
- 论文: CodeAct
自我强化
Claude Code 中的 Todo read/write 工具
作用:Todo 的读写,在读写过程中这份 Todo 会再次返回上下文,让 Agent 在长循环里持续对齐目标。
进阶:Plan 模式
- 包含 Todo 和思维过程的中间草稿
- Cursor Plan Mode
面向开发环境工具分层设计
趋势:越来越多的 Agent 把宿主环境搬到 Unix/Linux 环境
原因:
- LLMs 可直接访问文件系统
- Bash 操作等基础功能
- 配置了 Node.js/Python 可直接写脚本和代码
结论:标准协议(CodeAct/SQL/Shell)天然比自定义工具对 LLMs 更友好

事实:许多流行通用智能体使用的工具数量出人意料地少
- Claude Code: 十几个工具
- Manus: 不到 20 个
SOTA 构建生产智能体的三基本要素
- 沙箱 - 让 Agent 住在沙箱上
- 可执行环境
- 文件系统
Agent 的设计原则
1. 先定义好环境还是先构建智能体?
Biomni 案例 (开源)
- Biomni-E1: 统一行动空间的基础生物医学环境
- 150 种专业生物医学工具
- 105 个软件包
- 59 个数据库
- Biomni-A1: 专门设计用于高效利用该环境的智能代理

构建 E1 的方法:
- 从 25 个学科类别各选 100 篇最新论文
- LLM Agent 按顺序处理每篇论文
- 提取、复制或生成关键任务、工具、数据库和软件
A1 的设计:
- 使用检索系统识别最相关工具、数据和软件
- 基于 LLM 的推理和领域专业知识生成分步执行计划
- 每一步通过可执行代码表达,实现精确而灵活的组合
2. 从简开始,必要时才增加复杂性
建议路径:单智能体 → Multi-Agent
“做 Agent 设计和上下文工程的目的应该是「简化」而不是复杂化”
最佳实践来源:
- 并非来自更多花哨的上下文管理层
- 并非来自巧妙的检索技巧
- 而是来自简化
- 来自移除不必要的技巧并给予模型更多信任
经验:每一次简化系统架构,系统都会变得更快、更稳定、也更智能。
3. 动作空间的设计向训练数据看齐
上下文工程 SOTA 的最佳实践 = 「跟 LLMs 的认知对齐」
LLMs 针对全网信息训练,对已有系统、Spec、工具都非常了解。
向训练数据对齐的动作空间设计:
| 动作 | 说明 |
|---|---|
| 写代码 | 模型最擅长的能力 |
| Bash | Unix/Linux 命令行 |
| 文件读写 | 基础操作 |
命令行使用 -h |
获取帮助信息 |
总结
构建 Agent 及其上下文工程的核心要点:
- 使用 Claude Agent SDK 快速起步
- Skills = 可复用的动态提示词
- Multi-Agent 选择:委托 vs 转交
- 上下文工程 = 动态信息组件的编排
- 文件系统 = 外部记忆体
- 简化 > 复杂化
- 与 LLMs 训练数据对齐
原文: https://www.nazha.co/posts/how-to-build-agents
整理: 2026-02-20