Appearance
Agent 核心模式
从最小的 ReAct 循环开始,再学习规划、记忆、上下文工程和执行框架。
| 文章 | 重点 |
|---|---|
| ReAct 模式 | 推理与行动交替的 Agent 骨架 |
| 任务规划与分解 | 长任务拆解、执行和重规划 |
| 记忆机制 | 短期上下文与长期记忆 |
| 记忆压缩 | 对话变长时怎么压、压什么、取舍在哪 |
| 上下文工程 | 在有限窗口中安排恰好够用的信息 |
| 智能体执行框架工程 | 把 Agent 做成可恢复、可审计的软件系统 |
| Agent Skills:用 SKILL.md 封装可复用的任务能力 | 用可加载的任务说明组织流程、工具和验收标准 |
文章学习清单
练习按文章分组放在入口页,文章正文专注于概念和案例。每个问题都配有详细参考答案,完成实验时请同时记录 token、延迟、错误和安全边界。
ReAct 模式
用纯提示词和
stop参数手写一个 ReAct Agent,体会文本解析的脆弱- 参考答案:要求模型输出
Thought和Action,再用解析器提取工具名与参数。格式稍有变化、括号或引号不完整、一次输出多个动作时,字符串解析就可能失败。验收至少保留一个失败样例,并加工具白名单、参数 JSON 校验、最大轮数和异常回传,不能假设模型永远遵守格式。
- 参考答案:要求模型输出
用原生
tools机制实现同样的 Agent,对比稳定性- 参考答案:原生工具调用提供结构化工具名和参数,
assistant.tool_calls与role: tool消息能按 id 配对,业务代码不再依赖正则。用相同问题和错误场景比较解析成功率、重试行为和日志可追踪性,同时说明原生 tools 仍需服务端参数校验和权限检查。
- 参考答案:原生工具调用提供结构化工具名和参数,
在 system prompt 中要求调工具前先说明目的,确认 content 中能拿到 Thought
- 参考答案:多数调用前应留下简短行动目的,并能与具体 tool call 关联;但隐藏推理不是可靠的观测数据,即使 content 没有 Thought,Agent 也必须正常运行。最终以行动是否正确、证据是否充分为准。
观察模型的 Thought,判断理解、选工具、填参数和继续判断是否合理
- 参考答案:挑出参数错位、过早收尾或无关调用案例,分别检查 system prompt、工具描述、状态和检索证据,提出可验证的修复。Thought 是调试线索,不是业务授权依据。
制造一次参数报错,验证模型能根据 Observation 改参重试
- 参考答案:工具把错误类型、可修复提示和是否可重试结构化返回,模型在有限次数内修正参数;错误要关联原始
tool_call_id,非法参数不能绕过后端校验,不可重试错误应结束或转人工。
- 参考答案:工具把错误类型、可修复提示和是否可重试结构化返回,模型在有限次数内修正参数;错误要关联原始
制造一次原地打转,观察如何打断
- 参考答案:让工具返回相同或无效结果,日志应发现相同工具和参数重复调用、没有新观察或状态未推进。重复检测、最大轮数、总 token 预算和超时触发后要安全停止,向用户说明进展并保留 trace。
任务规划与分解
让 Agent 输出 JSON 步骤列表,再由外层循环逐步执行
- 参考答案:计划至少包含目标、步骤 id、动作、输入、产出、依赖、验收条件和失败处理;外层按状态执行,不解析自然语言。日志要区分 pending、running、succeeded、failed、skipped,失败时能定位受影响范围并保留已完成结果。
故意把任务拆到 20 多步,对比合理粒度
- 参考答案:过细计划增加模型调用、上下文交接和失败点,合理粒度应让每步有清晰输入输出且能稳定完成。用 token、端到端耗时、工具调用数和成功率比较,说明哪些步骤应合并、哪些必须拆开。
加一个反思环节,完成后让模型自查并修正
- 参考答案:反思节点按完整性、事实证据、格式、约束和副作用清单检查,输出问题及修复动作,而不是泛泛说“结果很好”。故意注入缺失字段或错误数字,确认能发现并触发修正;连续反思必须有次数上限。
制造一步失败,让 Agent 只修订受影响步骤
- 参考答案:失败记录包含错误类型、输入、已尝试方案和受影响下游步骤;重规划只替换必要分支并复用有效产物。检查计划版本差异,确认已完成步骤未重复执行,依赖仍闭合,最终结果不引用失败分支数据。
对比同一复杂任务直接 ReAct 与先规划的成功率和 token 消耗
- 参考答案:评测表至少记录任务成功率、步骤完成率、工具调用数、输入输出 token、耗时和人工修正次数,并区分简单与复杂任务。要能说明规划在哪些任务上提高稳定性、何时额外成本超过收益,不能凭一次运行下结论。
记忆机制
给对话 Agent 加滑动窗口,超过 N 轮丢弃最早消息
- 参考答案:窗口滚动后仍需保留 system prompt、当前任务目标、固定约束、工具调用配对关系和最近若干轮。分别测试依赖开头约束与只依赖最近信息的问题,确认不会忘记目标或用户身份。
实现摘要压缩,用摘要替换过长对话
- 参考答案:摘要要保留目标、已确认事实、决策、未完成事项、约束和来源。比较压缩前后的 token 与回答一致性,重点检查数字、否定、时间、偏好和待办步骤没有被改写。
做一个能记住用户名字或偏好的 Agent
- 参考答案:第一次会话写入结构化记忆,新会话按用户身份读取并只注入必要内容。重启进程后仍可用,换用户不能读到前一用户信息,回答应体现偏好但不泄露存储细节。
给 Agent 加
save_memory工具,让模型判断什么值得写入- 参考答案:工具接收内容、类型、重要性、来源和可选过期时间,落库前检查长度、敏感信息和重复。用“请记住我的偏好”和普通闲聊测试,确认显式请求能保存、一次性信息不泛滥写入,失败可记录并向用户说明。
制造事实更新,验证旧记忆会更新而非新旧并存
- 参考答案:新旧事实按同一用户和属性关联,旧版本更新、失效或标记历史。更新后查询只使用当前事实,审计仍能说明谁在何时改了什么;无法确认的新信息不能直接覆盖高可信旧信息。
判断哪些内容值得写入长期记忆
- 参考答案:稳定、可复用、用户允许保存且能改善后续任务的信息(明确偏好、项目固定约束、长期身份事实)通常值得记。一次性问题、临时情绪、未经确认的推测、敏感数据和过期事件不应默认长期保存,还要考虑可查看、删除、更新和访问权限。
上下文工程
打印每轮实际发送的完整
messages,统计 token 去向- 参考答案:日志应分别统计 system prompt、历史消息、工具定义、工具结果、检索内容和模型输出的输入/输出/总 token,并脱敏。至少找出一个占用明显但对当前决策没有帮助的部分,解释它为何进入上下文以及能否裁剪。
找出冗余信息并裁剪或压缩,比较效果与成本
- 参考答案:保留未优化基线,比较滑动窗口、摘要、去重和工具结果截断后的 token、延迟和成功率。不能只证明变短,还要确认目标、关键约束、来源和未完成事项未丢失,并记录质量下降边界。
把读取整页网页的重工具改成子 Agent,只回传摘要
- 参考答案:主 Agent 应收到结论、证据位置、不确定性和待确认问题的结构化摘要,而不是全文。用同一问题比较改造前后的主上下文长度,抽查摘要能否支撑最终答案,必要时仍可按来源追溯原文。
把原始 JSON 工具结果精简成一行关键信息再入上下文
- 参考答案:工具层去掉状态码、内部字段和重复元数据,只保留决策所需字段,同时保留错误、时间、标识和来源。同一组调用中 token 应明显下降,模型仍能区分成功、失败、空结果和下一步动作,异常不能被吞掉。
阅读 Anthropic 的 context engineering 工程博客并对照实现
- 参考答案:应能用自己的话解释上下文选择、压缩、隔离、外部记事和工具结果整理分别解决什么问题,并在自己的 Agent 中指出至少两个可改进位置,说明影响的是质量、成本、延迟还是缓存命中,而不是只背术语。
智能体执行框架工程
区分 Agent、Workflow、Harness 与业务授权
- 参考答案:Agent 决定下一步意图;Workflow 规定步骤与依赖;Harness 受控执行 Agent,管理状态、工具、策略、预算、恢复和观测;业务授权依据身份与资源规则决定真实操作能否发生。Harness 可以调用授权系统,但不能替代它。
解释模型可见内容为何应是会话状态的投影
- 参考答案:完整内部状态可能包含密钥、调度字段、跨租户数据和大对象,既浪费 token 又有泄露风险。投影器只选择当前任务所需、脱敏且通过权限筛选的信息,同时保留日志和 Artifact 引用,使上下文可追溯、可重建。
设计一个高风险工具的执行路径
- 参考答案:路径应包含 schema 校验、身份与资源授权、风险分类、预算检查、人工审批、沙箱或业务执行、幂等键、超时取消、输出脱敏、事件记录和结果验证。模型只提出调用,不直接拥有执行权限。
说明 DeepSeek Harness 的三类事件分别适合什么
- 参考答案:SessionEvent 保存可持久化、可重放的会话事实;Agent Event 表达运行中的 inbox、step、状态和拦截;Capability Event 把文件系统、工具、遥测等策略或 adapter 接入扩展点。分开后,恢复、控制流和插件扩展不会互相污染。
说清 Step、Turn、Run 的关系以及 checkpoint 的作用
- 参考答案:Step 是一次模型请求及其工具调用;Turn 包含零到多个 Step;Run 是整次任务生命周期。checkpoint 是审批、外部等待或 Worker 崩溃后的安全恢复点,恢复前仍要重新检查权限、预算、取消状态和外部副作用。
列出 Coding Agent 在“完成修改”之外的验收证据
- 参考答案:至少包括基线与最终 diff、受影响文件范围、命令和退出码、lint/typecheck/test 报告、未运行项目及原因、Artifact 链接、配置版本和环境信息。模型说“已完成”只是叙述,不能替代这些证据。
Agent Skills
写一个最小的
SKILL.md,让 Agent 完成一份带来源的研究报告- 参考答案:入口文件至少包含 frontmatter、适用场景、输入要求、执行步骤、工具规则、失败处理和完成条件。目录可以另外放
references/、scripts/和模板,但不要把所有资料一次性塞进正文。验收时用正常请求、缺少范围、来源冲突和工具超时各跑一遍,检查报告是否区分事实、推断和待确认项,且每个关键结论能追溯到来源。
- 参考答案:入口文件至少包含 frontmatter、适用场景、输入要求、执行步骤、工具规则、失败处理和完成条件。目录可以另外放
区分 Skill、Tool、Workflow、MCP 和 A2A Agent Card 中的
skills- 参考答案:Skill 是可复用的任务流程、知识和约束;Tool 是一次外部动作;Workflow 是固定步骤与依赖;MCP 负责发现和调用外部工具、资源与提示词;A2A Agent Card 的
skills是远程 Agent 对外声明的能力。一个 Skill 可以指导模型调用 Function Calling 工具,也可以使用通过 MCP 发现的工具,但不能自行授予权限或替代业务授权。
- 参考答案:Skill 是可复用的任务流程、知识和约束;Tool 是一次外部动作;Workflow 是固定步骤与依赖;MCP 负责发现和调用外部工具、资源与提示词;A2A Agent Card 的
把一份过长的 Skill 拆成入口、参考资料和脚本,并比较上下文成本
- 参考答案:
SKILL.md只保留触发条件、决策步骤、边界和引用路径;长规则放references/,确定性处理放scripts/。对比拆分前后的输入 token、延迟、工具调用数和任务成功率,确认按需加载没有丢掉关键约束,也没有因为引用文件过深导致模型找不到资料。
- 参考答案:
为 Skill 设计一组“不该触发”的近邻测试
- 参考答案:围绕触发条件构造相似但不适用的请求,例如“只改写一段已有文字”不应加载带证据的调研 Skill,“没有来源要求的宣传文案”也不应强制进入研究流程。记录触发与未触发结果,检查误触发是否带来额外 token、无关工具调用或错误输出格式;同时保留真正需要该 Skill 的正例,不能只追求低触发率。