记忆
每次 Qwen Code 会话都从一个全新的上下文窗口开始。有两种机制可以在会话之间传递知识,让你不必每次都重新解释:
- QWEN.md — 由_你_编写一次,Qwen 在每次会话中都会读取的指令
- 自动记忆 — Qwen 根据从你这里学到的内容自己编写的笔记
QWEN.md:你给 Qwen 的指令
QWEN.md 是一个纯文本文件,你可以在其中写下 Qwen 应该始终了解的关于你的项目或你的偏好的内容。可以把它看作是在每次对话开始时加载的永久性简报。
在 QWEN.md 中写些什么
添加那些否则你每次会话都不得不重复的内容:
- 构建和测试命令(
npm run test、make build) - 你的团队遵循的编码规范(“所有新文件必须有 JSDoc 注释”)
- 架构决策(“我们使用 Repository 模式,永远不要从控制器直接调用数据库”)
- 个人偏好(“始终使用 pnpm,而不是 npm”)
不要包含 Qwen 可以通过阅读你的代码自己弄清楚的内容。QWEN.md 在简短且具体时效果最好——它越长,Qwen 遵循它的可靠性就越低。
在哪里创建 QWEN.md
| 文件 | 适用对象 |
|---|---|
~/.qwen/QWEN.md | 你,跨所有项目 |
项目根目录下的 QWEN.md | 你的整个团队(将其提交到版本控制) |
.qwen/QWEN.local.md | 仅限你,仅限此项目(不要提交到 git) |
你可以任意组合使用这些文件。Qwen 会在你启动会话时加载所有这些文件。
如果你的仓库已经有一个供其他 AI 工具使用的 AGENTS.md 文件,Qwen 也会读取它。无需重复编写指令。
何时使用 .qwen/QWEN.local.md
用于特定于项目但属于个人的指令——属于此项目但不应与团队共享的内容:
- 你自己的集群 ID、容器注册表命名空间或云账户
- 硬编码了你本地环境的个人调试命令
- 你希望 Qwen 了解的关于你正在进行的工作的笔记,但不想提交
它在共享的项目 QWEN.md 之后加载,因此你的本地指令可以补充或覆盖团队的指令。
你必须自己将其添加到 .gitignore。 尽管 .qwen/ 通常被视为本地目录,但 qwen-code 不会为你生成 .gitignore,并且有些项目会提交 .qwen/settings.json。将此行添加到你的 .gitignore(或你的全局 git ignore)中:
.qwen/QWEN.local.md使用 /init 自动生成
运行 /init,Qwen 将分析你的代码库,以创建一个包含它找到的构建命令、测试指令和规范的初始 QWEN.md。如果已经存在一个,它会建议添加内容而不是覆盖。
引用其他文件
你可以在 QWEN.md 中指向其他文件,以便 Qwen 也读取它们:
See @README.md for project overview.
# Conventions
- Git workflow: @docs/git-workflow.md在 QWEN.md 的任何地方使用 @path/to/file。相对路径从 QWEN.md 文件本身开始解析。
自动记忆:Qwen 从你这里学到了什么
自动记忆在后台运行。在每次对话之后,Qwen 会悄悄保存它学到的有用内容——你的偏好、你给出的反馈、项目上下文——以便它可以在未来的会话中使用它们,而无需你重复说明。
这与 QWEN.md 不同:你不是编写者,Qwen 才是。
Qwen 保存什么
Qwen 会寻找四种值得记住的内容:
| 内容 | 示例 |
|---|---|
| 关于你 | 你的角色、背景、你喜欢的工作方式 |
| 你的反馈 | 你做出的纠正、你确认的方法 |
| 项目上下文 | 正在进行的工作、决策、从代码中不明显看出的目标 |
| 外部引用 | 你提到的仪表盘、工单跟踪器、文档链接 |
Qwen 不会保存所有内容——只保存下次真正有用的内容。
存储位置
自动记忆文件位于 ~/.qwen/projects/<project>/memory/。同一仓库的所有分支和工作树共享同一个记忆文件夹,因此 Qwen 在一个分支中学到的内容在其他分支中也可用。
所有保存的内容都是纯 Markdown 格式——你可以随时打开、编辑或删除任何文件。
定期清理
Qwen 会定期遍历其保存的记忆,以删除重复项并清理过时的条目。在积累了足够的会话后,这会在后台每天自动运行一次。如果你想让它立即运行,可以使用 /dream 手动触发。
在后台运行清理时,你的会话会正常继续。
开启或关闭
自动记忆默认开启。要切换它,请打开 /memory 并使用顶部的开关。你可以仅关闭自动保存、仅关闭定期清理,或同时关闭两者。
你也可以在 ~/.qwen/settings.json(适用于所有项目)或 .qwen/settings.json(仅限此项目)中进行设置:
{
"memory": {
"enableManagedAutoMemory": true,
"enableManagedAutoDream": true
}
}团队记忆(与协作者共享)
默认情况下,自动记忆是你私有的——它位于你的主目录下,永远不会被共享。团队记忆是一个可选的层级,整个团队通过 git 共享。
启用后,Qwen 会在仓库内部的 .qwen/team-memory/ 获得第三个记忆目录。它使用与私有层级相同的“每个记忆一个文件”的布局和 MEMORY.md 索引。因为它被提交到仓库中,所以它会以常规方式与每个协作者共享:你通过 git pull 接收队友的记忆,并通过 commit/push 分享你的记忆。Qwen 会将持久的、全项目范围的知识路由到这里——每个贡献者都必须遵循的规范、共享的引用指针(跟踪器、仪表盘)——而个人和快速过时的笔记则保持私有。
在 settings.json 中按项目(或全局)启用它:
{
"memory": {
"enableTeamMemory": true
}
}它默认关闭。请记住以下注意事项:
-
它受版本控制,对具有仓库访问权限的每个人可见。 将团队记忆视为提交到仓库。
-
阻止写入机密信息。 对
.qwen/team-memory/的写入会扫描凭据(API 密钥、令牌、私钥);检测到的机密信息会被拒绝,永远不会被写入。扫描是最后一道防线,而不是保证——不要将敏感数据放在那里。 -
更改可被审查。 团队记忆的写入会像其他任何文件一样出现在
git status/ PR diff 中,因此可以在提交前进行审查。在默认的批准模式下,Qwen 在每次团队写入前也会询问;在AUTO_EDIT/YOLO 模式(你已选择自动批准)下,它们会在没有提示的情况下应用,但仍然会出现在 diff 中。 -
该目录必须被 git 跟踪。 如果你的项目的
.gitignore排除了.qwen/*,请重新包含该路径以便共享:!.qwen/team-memory/ !.qwen/team-memory/**注意:使用文件通配符忽略形式(
.qwen/*),而不是带尾随斜杠的目录形式(.qwen/)。目录形式的忽略会使 git 完全跳过该文件夹,因此其下方的!重新包含将不起作用,并且团队层级在 git 中会保持静默为空。当启用该层级但其目录被 git 忽略或位于任何 git 仓库之外时,Qwen 会在启动时发出一次警告,因此这种错误配置不会被忽略。
QWEN_CODE_MEMORY_TEAM=1 / =0 会覆盖单次运行的设置。
自动 git 同步(可选)
默认情况下,你通过常规的 git 工作流共享团队记忆(通过 pull 接收,通过 commit/push 共享)。要让 Qwen 为你执行此操作,请启用同步:
{
"memory": {
"enableTeamMemory": true,
"enableTeamMemorySync": true
}
}开启后,在会话开始时,Qwen 会尽力同步 .qwen/team-memory/ 目录:它重建共享的 MEMORY.md 索引,首先快进拉取协作者的更新,然后在之上提交你的团队记忆更改,并仅推送该同步提交(通过显式的单分支 refspec)——这样你加载的索引就能反映最新状态。它只暂存团队目录(你的其他工作更改永远不会被提交),并且永远不会因 git 失败而阻塞会话。默认关闭。QWEN_CODE_MEMORY_TEAM_SYNC=1 / =0 会覆盖单次运行的设置。
启用前需要了解的两件事:
- 快进拉取作用于你的整个当前分支,而不仅仅是
.qwen/team-memory/(git 没有路径范围的拉取)。因此,同步会将你的分支快进到远程顶端。相比之下,推送是限定范围的:它仅发布此同步刚刚创建的提交,因此它永远不会推送你拥有的其他未推送的提交——如果你的分支已经领先于上游,同步会在本地提交并跳过推送。在快进拉取没有问题的分支上启用它——或者在专用的 checkout 上运行它。 - 分叉的分支保持不变(
--ff-only永远不会合并)。当发生这种情况时,同步在该会话中直接什么都不做;解决分叉(git pull)后它会恢复。没有上游(没有跟踪配置)的分支仍然会在本地提交,但会跳过推送——因为没有地方可以推送。
命令
/memory
打开记忆面板。从这里你可以:
- 开启或关闭自动记忆保存
- 开启或关闭定期清理(dream)
- 打开你的个人 QWEN.md(
~/.qwen/QWEN.md) - 打开项目 QWEN.md
- 浏览自动记忆文件夹
/init
为你的项目生成一个初始的 QWEN.md。Qwen 读取你的代码库并填入它发现的构建命令、测试指令和规范。
/remember <text>
立即将某些内容保存到自动记忆中,而无需等待 Qwen 自动获取:
/remember always use snake_case for Python variable names
/remember the staging environment is at staging.example.com/forget <text>
删除与你的描述匹配的自动记忆条目:
/forget old workaround for the login bug/dream
立即运行记忆清理,而不是等待自动计划:
/dream故障排除
Qwen 没有遵循我的 QWEN.md
打开 /memory 查看加载了哪些文件。如果你的文件未列出,Qwen 无法看到它——请确保它位于项目根目录或 ~/.qwen/ 中。
指令越具体,效果越好:
- ✓
Use 2-space indentation for TypeScript files - ✗
Format code nicely
如果你有多个包含冲突指令的 QWEN.md 文件,Qwen 的行为可能会不一致。请检查它们并删除任何矛盾之处。
我想看看 Qwen 保存了什么
运行 /memory 并选择打开自动记忆文件夹。所有保存的记忆都是可读的 Markdown 文件,你可以浏览、编辑或删除它们。
Qwen 总是忘记事情
如果自动记忆已开启,但 Qwen 似乎无法在会话之间记住内容,请尝试运行 /dream 强制执行一次清理。同时检查 /memory 以确认两个开关都已启用。
对于你始终希望 Qwen 记住的内容,请将它们添加到 QWEN.md 中——自动记忆是尽力而为的,而 QWEN.md 是有保证的。