第 27 章

记忆与技能

Deep Agents Code 的持久化记忆、AGENTS.md 文件和可复用技能

从"一次性的助手"到"能学习、有技能的编程伙伴"

为什么需要它

你有没有试过让编程助手记住你的编码风格?

无记忆 Agent 的困境

  • 每次会话都是"新来的",不记得你的编码约定
  • 教过它的事下次全忘了,重复劳动
  • 项目架构只能写在注释里,Agent 不会主动看
  • 团队规范无法沉淀,每个人都要重新教一遍
  • 想让它自动执行某类任务?没有可复用的技能机制

Deep Agents Code 的解法

  • 自动记忆——Agent 自动保存学到的约定和偏好
  • AGENTS.md——持久化上下文文件,每次会话自动加载
  • 记忆优先协议——先查记忆再回答,确保一致性
  • Skills 技能——可复用的专业化工作流和领域知识
  • 社区技能——一行命令安装他人分享的技能
问题核心:没有记忆的编程助手就像一个每次都要重新培训的实习生。Deep Agents Code 提供两种自定义机制——Memory(记忆)存储偏好和约定,Skills(技能)提供可复用的专业化能力。两者互补,缺一不可。

开始之前

你需要会什么

  • 了解 Deep Agents Code 的基本使用(dcode 命令)
  • 了解 Agent 的基本概念(会话、上下文、提示词)
  • 熟悉 Markdown 文件的编写
  • 了解文件系统路径和目录结构

读完后你应该能

  • 说清 Memory 和 Skills 的区别与适用场景
  • 配置 AGENTS.md 文件(全局和项目级)
  • 使用 /remember 显式更新记忆
  • 创建、发现和调用自定义技能
  • 从命令行安装和使用社区技能

本章不会深入

  • SDK 编程式记忆后端(见 SDK 文档)
  • 沙箱和解释器的详细配置(见第 16、17 章)
  • 子代理的高级编排(见第 29 章)
  • 生产环境部署方案(见第 05 章)
两种自定义方式:Memory 用于存储通用编码风格、偏好和已学习的约定(跨会话持久保存);Skills 用于提供特定任务的上下文、约定、指南或指令(按需加载)。使用 /remember 可以同时更新两者。

自动记忆

Agent 使用"记忆优先"协议——先查记忆再回答

在你使用 Agent 的过程中,它会自动将信息存储在 ~/.deepagents/<agent_name>/memories/ 中,以 Markdown 文件的形式保存。整个过程分三步:

1. 研究

在开始任务之前,先搜索记忆以获取相关上下文

2. 响应

在执行过程中不确定时,查阅已有记忆

3. 学习

自动保存新信息以供未来会话使用

# 记忆文件按主题组织,存储在 Agent 专属目录下
# 每个 .md 文件记录一类知识,Agent 根据任务自动检索
~/.deepagents/backend-dev/memories/
├── api-conventions.md      # API 编码约定(命名、格式等)
├── database-schema.md      # 数据库表结构和字段说明
└── deployment-process.md   # 部署流程和注意事项

教 Agent 一个约定

dcode --agent backend-dev
> Our API uses snake_case and includes \
  created_at/updated_at timestamps

Agent 自动记住

> Create a /users endpoint
# Agent 无需提示即可应用约定
# 自动使用 snake_case
# 自动添加 created_at/updated_at
图:记忆优先协议三步循环
记忆优先协议:Agent 在回答问题或执行任务之前,会先搜索记忆文件。这意味着你教过它一次的约定,它在所有未来的会话中都会自动遵循——不需要每次都提醒。

AGENTS.md

持久化上下文文件——每次会话启动时自动加载

AGENTS.md 文件提供持久化上下文,在每次会话启动时都会加载到系统提示中。有两个层级:

全局 AGENTS.md

路径:~/.deepagents/<agent_name>/AGENTS.md

每次会话都会加载。适用于所有项目的通用配置。

所有会话

项目 AGENTS.md

路径:项目根目录下 .deepagents/AGENTS.md

当 Deep Agents Code 从该项目内部运行时加载。

项目特定

# 示例:项目级 AGENTS.md
# 此文件在每次会话启动时自动加载到 Agent 的系统提示中

## 项目架构
- 前端:React + TypeScript,位于 /frontend
- 后端:Node.js + Express,位于 /backend
- 数据库:PostgreSQL,使用 Prisma ORM

## 编码约定
- 使用函数式组件和 Hooks
- 所有 API 响应使用 { success, data, error } 格式
- 测试文件放在 __tests__ 目录下

## Git 规范
- 分支命名:feature/xxx、fix/xxx、chore/xxx
- 提交信息使用 Conventional Commits
注意:两个文件在启动时会附加到系统提示(system prompt)中。所以只写必要的信息,避免内容过长占用上下文窗口。额外的项目知识可以放在 .deepagents/ 目录下的其他文件中,然后在 AGENTS.md 中引用。

记忆原理

Agent 何时读取记忆、何时更新记忆

Agent 的记忆不是"只在启动时读一次",而是在整个交互过程中持续运作:

何时读取

  • 启动时:加载 AGENTS.md 到系统提示
  • 回答项目特定问题时:搜索记忆文件
  • 你引用过去的工作或模式时:查找相关记忆

何时更新

  • 你提供行为指导时:更新 AGENTS.md
  • 你给出工作反馈时:记住偏好
  • Agent 识别出模式时:自动保存新记忆
  • 你使用 /remember 时:显式触发更新

在 AGENTS.md 中引用额外文件

# AGENTS.md

## 项目架构
详细架构说明请参考 [架构文档](./architecture.md)

## API 约定
完整 API 规范请参考 [API 文档](./api-spec.md)

额外文件不会被自动加载

.deepagents/
├── AGENTS.md           ← 启动时自动加载到系统提示
├── architecture.md     ← Agent 需要时才读取(需在 AGENTS.md 中引用)
├── api-spec.md         ← Agent 需要时才读取(需在 AGENTS.md 中引用)
└── deployment.md       ← Agent 需要时才读取(需在 AGENTS.md 中引用)
图:记忆读取与更新双轨时间线
关键规则:额外的记忆文件不会在启动时读取,但 Agent 可以在需要时引用和更新它们。你必须在 AGENTS.md 中引用额外文件,Agent 才能感知到它们的存在。

全局与项目

什么时候用全局 AGENTS.md,什么时候用项目级

全局 AGENTS.md

~/.deepagents/agent/AGENTS.md

  • 你的个性、风格和通用编码偏好
  • 总体的语气和沟通风格
  • 通用编码偏好(格式化、类型提示等)
  • 适用于所有场景的工具使用模式
  • 不随项目变化的工作流和方法论

项目 AGENTS.md

.deepagents/AGENTS.md

  • 项目特定的上下文和约定
  • 项目架构和设计模式
  • 特定于该代码库的编码约定
  • 测试策略和部署流程
  • 团队指南和项目结构
# 文件结构示例

~/.deepagents/                     # 用户级配置根目录
└── backend-dev/                   # 以 Agent 名称命名的专属目录
    ├── AGENTS.md                  # 全局:编码风格、偏好(所有项目通用)
    └── memories/
        ├── api-conventions.md     # 自动保存的 API 约定记忆
        └── database-schema.md    # 自动保存的数据库结构记忆

my-project/                        # 项目根目录
├── .deepagents/
│   └── AGENTS.md                  # 项目级:架构、约定(仅本项目加载)
├── src/
└── .git/                          # Git 仓库是项目级配置被发现的条件
图:全局与项目 AGENTS.md 叠加加载
最佳实践:全局 AGENTS.md 写"你是谁"(风格、偏好、方法论),项目 AGENTS.md 写"这个项目怎么做"(架构、约定、流程)。两者在启动时合并加载到系统提示中。

技能概述

可复用的 Agent 能力——提供专业化的工作流和领域知识

Skills 是 Agent 的可插拔能力模块,遵循 Agent Skills 标准。添加技能后,Agent 会自动利用它们,并随着使用不断更新。

Memory vs Skills

维度MemorySkills
用途存储偏好和约定提供专业化工作流
加载方式启动时加载 + 按需搜索按需加载(匹配任务描述)
更新方式Agent 自动保存手动创建或社区安装
类比记事本——记经验工具箱——装工具

比喻只是帮助理解,实际上计算机内部的处理方式不同:Memory 是持久化存储介质上的 Markdown 文件,Agent 在启动时加载到系统提示词中;Skills 是按需加载的指令文件(SKILL.md),Agent 根据任务描述匹配后读取其内容并遵循其中的指令行事。

技能发现目录

# 技能发现目录(优先级从低到高)
~/.deepagents/<agent_name>/skills/   # 用户级:特定 Agent 的技能
~/.agents/skills/                     # 用户级别名
.deepagents/skills/                   # 项目级:当前项目的技能(优先级最高)
.agents/skills/                       # 项目级别名
~/.claude/skills/                     # 实验性:Claude Code 兼容目录
.claude/skills/                       # 实验性:Claude Code 兼容目录

当存在重复名称时,优先级高的目录会覆盖优先级低的。

自动发现:Deep Agents Code 在启动时会自动从上述目录发现技能。当你执行任务时,如果任务描述与某个技能匹配,Agent 会自动读取该技能文件并遵循其指令。你也可以通过 /skill:<name> [args] 直接调用。

创建技能

三步创建自定义技能——创建、编辑、添加资源

1. 创建技能

用 dcode skills create 命令

2. 编辑 SKILL.md

编写技能的指令和描述

3. 添加资源

可选:添加脚本等额外资源

# 用户技能:存储在 ~/.deepagents/<agent_name>/skills/,所有项目可用
dcode skills create test-skill

# 项目技能:存储在 .deepagents/skills/,仅当前项目可用
dcode skills create test-skill --project

命令执行后会生成以下结构:

skills/
└── test-skill/
    └── SKILL.md     # 技能定义文件:包含 frontmatter 元数据和指令内容

也可以手动复制

# 手动创建技能目录并复制现有技能
mkdir -p ~/.deepagents/<agent_name>/skills
cp -r examples/skills/web-research \
  ~/.deepagents/<agent_name>/skills/

SKILL.md 结构

---
name: test-skill                       # 技能名称,用于 /skill:name 调用
description: A skill for testing       # Agent 根据此描述判断是否自动匹配任务
---

# Test Skill Instructions

When using this skill:
1. First analyze the input
2. Then generate output
关键点:SKILL.md 的 frontmatter 中包含 name 和 description——Agent 通过 description 判断是否匹配当前任务。写好 description 是技能被自动触发的关键。

社区技能

一行命令安装社区分享的技能——站在巨人的肩膀上

使用 Vercel 的 Skills CLI 可以快速安装社区 Agent Skills:

# 全局安装一个社区技能(-g 全局,-a 指定 Agent,-y 跳过确认)
npx skills add vercel-labs/agent-skills \
  --skill web-design-guidelines -a deepagents -g -y

# 列出已安装的技能(-a 指定 Agent,-g 显示全局技能)
npx skills ls -a deepagents -g

全局安装(-g)

将技能符号链接到:

~/.deepagents/agent/skills/

默认 Agent 的用户级技能目录,所有项目可用。

跨项目共享

项目级安装(省略 -g)

将技能放置在:

.deepagents/skills/

在该项目中运行的任何 Agent 都可以使用。

项目专用

注意:全局安装仅针对默认的 agent 目录。如果你使用自定义命名的 Agent(如 backend-dev),请使用项目级安装,或手动将技能符号链接到 ~/.deepagents/{your-agent}/skills/。

调用技能

从命令行直接调用技能——无需交互式输入

使用 --skill 参数在启动时直接调用技能:

# 启动 TUI 并立即调用指定技能
dcode --skill code-review

# 使用 -m 向技能传递具体请求
dcode --skill code-review -m 'review the auth module'

# 将文件内容通过管道输入给技能(stdin 内容自动成为上下文)
cat diff.txt | dcode --skill code-review

# 管道输入 + 附加指令
cat diff.txt | dcode --skill code-review -m 'focus on security'

非交互模式

# 非交互模式运行技能(-n 运行后退出,适合脚本和 CI/CD)
dcode --skill code-review -n 'review this patch'

# 静默模式(-q 仅输出结果到 stdout,不显示工具调用详情)
dcode --skill code-review \
  -n 'review this patch' -q

交互模式

# 在交互会话中直接按名称调用技能
/skill:code-review

# 带参数调用:斜杠命令后的文本作为技能的输入参数
/skill:web-research \
  latest LangGraph features

# 重新扫描技能目录,发现新添加或修改的技能
/reload
注意:--skill 与 --quiet 或 --no-stream 搭配使用时需要 -n(非交互模式)。技能发现会在启动时运行,并可通过 /reload 重新触发。

管理技能

列出、查看和管理已安装的技能

# 列出当前 Agent 的所有用户级技能
dcode skills list

# 列出项目级技能(.deepagents/skills/ 下的)
dcode skills list --project

# 获取特定技能的详细信息(名称、描述、文件路径)
dcode skills info test-skill
dcode skills info test-skill --project

技能优先级

当多个目录存在同名技能时,优先级从高到低:

  1. .claude/skills/(实验性,最高)
  2. ~/.claude/skills/(实验性)
  3. .agents/skills/(项目级别名)
  4. .deepagents/skills/(项目级)
  5. ~/.agents/skills/(用户级别名)
  6. ~/.deepagents/<agent>/skills/(用户级,最低)

优先级高的目录会覆盖优先级低的同名技能。

项目技能的发现条件

  • 项目的根文件夹必须包含 .git 文件夹
  • Deep Agents Code 从项目文件夹内的任何位置启动时,会向上查找 .git 来确定项目根目录
  • 使用 /reload 可在会话中重新扫描技能目录

需要 Git 仓库

技能生命周期:创建/安装 → 启动时自动发现 → 匹配任务时自动加载 → 用 /skill:name 直接调用 → 用 /reload 重新扫描。整个过程无需手动配置。

/remember 命令

显式触发记忆和技能更新的一站式命令

使用 /remember 可以显式提示 Agent 根据当前对话更新其记忆和技能:

适用场景

  • 你教了 Agent 一个新的编码约定
  • 你纠正了 Agent 的某个行为
  • 你想让 Agent 记住当前项目的关键信息
  • 你希望 Agent 更新某个技能的指令

更新内容

  • AGENTS.md:更新全局或项目级上下文
  • 记忆文件:保存新的约定、偏好、模式
  • 技能文件:更新 SKILL.md 中的指令
  • 所有更新在下次会话自动生效
# 在对话中教 Agent 一个约定后,使用 /remember 显式触发记忆更新
> 我们的项目使用严格的 TypeScript,禁止 any 类型
> /remember

# Agent 会将这条约定保存到 AGENTS.md 或记忆文件中
# 下次启动新会话时自动加载并遵循此约定
自动 vs 显式:Agent 通常会自动识别并保存重要信息。但当你不确定 Agent 是否理解了你的意图时,用 /remember 显式触发更新更保险——确保关键信息不会丢失。

动手练习

为一个后端开发 Agent 配置记忆和技能

现在轮到你了。停下来,为你的后端开发 Agent 设计记忆和技能配置。需求如下:

// 练习场景配置
Agent 名称:backend-dev
工作内容:开发和维护 Node.js REST API

需要记住(写入 AGENTS.md 或让 Agent 自动记忆):
1. 项目使用 Express + Prisma + PostgreSQL
2. API 响应格式统一为 { success, data, error }
3. 数据库迁移使用 Prisma Migrate
4. 测试使用 Jest + Supertest

需要技能(创建 SKILL.md 文件):
1. code-review:自动审查 PR 的代码质量
2. api-docs:根据路由定义生成 API 文档

任务 1:配置 AGENTS.md

  • 全局和项目级 AGENTS.md 各写什么内容?
  • 需要引用哪些额外的记忆文件?
  • 使用 /remember 测试记忆更新

任务 2:创建技能

  • 用 dcode skills create 创建两个技能
  • 编写 SKILL.md 的 description 和指令
  • 验证技能是否被自动发现

任务 3:测试效果

  • 启动新会话,验证记忆是否自动加载
  • 执行代码审查任务,验证技能是否触发
  • 用 dcode skills list 确认技能已安装
提示:先写 AGENTS.md(确定 Agent 知道什么),再创建技能(确定 Agent 能做什么)。记忆提供"知识",技能提供"能力"——两者结合才能发挥最大价值。

本章回顾

到这里,你已经掌握了 Deep Agents Code 记忆和技能的完整用法

你学到了什么

  • Memory(记忆):自动保存和检索 Agent 的学习成果
  • AGENTS.md:持久化上下文,分全局和项目两级
  • 记忆优先协议:先查记忆再回答,确保一致性
  • Skills(技能):可复用的专业化工作流,按需加载
  • 技能发现:启动时自动扫描多个目录
  • 命令行调用:--skill 直接调用,支持管道输入
  • 社区技能:npx skills add 一键安装
  • /remember:显式触发记忆和技能更新

后续章节预告

  • 远程沙箱 — 在隔离环境中执行代码
  • 子代理 — 多 Agent 协作完成复杂任务
  • 提供商配置 — 连接不同的 LLM 提供商
  • 配置详解 — Deep Agents Code 的完整配置
  • MCP 工具 — 扩展 Agent 的工具能力
核心结论:记忆让 Agent "记住经验",技能让 Agent "掌握能力"。两者结合,你的编程助手从"一次性工具"变成"持续成长的伙伴"。AGENTS.md 是知识库,Skills 是工具箱——用好它们,Agent 越用越懂你。

延伸阅读

继续本课程

官方文档

相关概念