记忆与技能
Deep Agents Code 的持久化记忆、AGENTS.md 文件和可复用技能
从"一次性的助手"到"能学习、有技能的编程伙伴"为什么需要它
你有没有试过让编程助手记住你的编码风格?
无记忆 Agent 的困境
- 每次会话都是"新来的",不记得你的编码约定
- 教过它的事下次全忘了,重复劳动
- 项目架构只能写在注释里,Agent 不会主动看
- 团队规范无法沉淀,每个人都要重新教一遍
- 想让它自动执行某类任务?没有可复用的技能机制
Deep Agents Code 的解法
- 自动记忆——Agent 自动保存学到的约定和偏好
- AGENTS.md——持久化上下文文件,每次会话自动加载
- 记忆优先协议——先查记忆再回答,确保一致性
- Skills 技能——可复用的专业化工作流和领域知识
- 社区技能——一行命令安装他人分享的技能
开始之前
你需要会什么
- 了解 Deep Agents Code 的基本使用(
dcode命令) - 了解 Agent 的基本概念(会话、上下文、提示词)
- 熟悉 Markdown 文件的编写
- 了解文件系统路径和目录结构
读完后你应该能
- 说清 Memory 和 Skills 的区别与适用场景
- 配置 AGENTS.md 文件(全局和项目级)
- 使用
/remember显式更新记忆 - 创建、发现和调用自定义技能
- 从命令行安装和使用社区技能
本章不会深入
- SDK 编程式记忆后端(见 SDK 文档)
- 沙箱和解释器的详细配置(见第 16、17 章)
- 子代理的高级编排(见第 29 章)
- 生产环境部署方案(见第 05 章)
/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
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
.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 中引用)
全局与项目
什么时候用全局 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 仓库是项目级配置被发现的条件
技能概述
可复用的 Agent 能力——提供专业化的工作流和领域知识
Skills 是 Agent 的可插拔能力模块,遵循 Agent Skills 标准。添加技能后,Agent 会自动利用它们,并随着使用不断更新。
Memory vs Skills
| 维度 | Memory | Skills |
|---|---|---|
| 用途 | 存储偏好和约定 | 提供专业化工作流 |
| 加载方式 | 启动时加载 + 按需搜索 | 按需加载(匹配任务描述) |
| 更新方式 | 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 兼容目录
当存在重复名称时,优先级高的目录会覆盖优先级低的。
/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
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
技能优先级
当多个目录存在同名技能时,优先级从高到低:
.claude/skills/(实验性,最高)~/.claude/skills/(实验性).agents/skills/(项目级别名).deepagents/skills/(项目级)~/.agents/skills/(用户级别名)~/.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 或记忆文件中
# 下次启动新会话时自动加载并遵循此约定
/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确认技能已安装
本章回顾
到这里,你已经掌握了 Deep Agents Code 记忆和技能的完整用法
你学到了什么
- Memory(记忆):自动保存和检索 Agent 的学习成果
- AGENTS.md:持久化上下文,分全局和项目两级
- 记忆优先协议:先查记忆再回答,确保一致性
- Skills(技能):可复用的专业化工作流,按需加载
- 技能发现:启动时自动扫描多个目录
- 命令行调用:
--skill直接调用,支持管道输入 - 社区技能:
npx skills add一键安装 - /remember:显式触发记忆和技能更新
后续章节预告
- 远程沙箱 — 在隔离环境中执行代码
- 子代理 — 多 Agent 协作完成复杂任务
- 提供商配置 — 连接不同的 LLM 提供商
- 配置详解 — Deep Agents Code 的完整配置
- MCP 工具 — 扩展 Agent 的工具能力
延伸阅读
官方文档
- AGENTS.md 标准 — 持久化上下文文件规范
- Agent Skills 标准 — 技能文件规范
- Skills CLI — 社区技能安装工具
相关概念
- deepagents npm 包 — SDK API 参考
- GitHub 仓库 — 源码和示例
- 上下文工程(第 08 章)— 短期记忆的管理策略