欢迎光临
我们一直在努力

第二十一篇:跨会话项目记忆:让AI自动记住你的测试命令、编译指令和项目模式

📌 标签:#项目记忆 #CLAUDE.md #持久化 #效率提升

在这里插入图片描述

每次打开 Claude Code,你都要重新告诉 AI “我的测试命令是 npm run test:ci”“构建需要先设置 NODE_ENV”“别碰 legacy/ 目录下的文件”——这不仅烦人,而且容易遗漏。跨会话项目记忆让这些信息永久固化,AI 每次进入项目都会自动加载,就像一位从第一天就加入团队的老成员。


1. 什么是跨会话项目记忆?

“跨会话项目记忆”不是 Claude Code 的某个单独功能,而是一套持久化上下文机制的总称。其核心思想是:

  • 每个项目目录可以有自己的记忆文件(CLAUDE.md、.claude/ 下的配置)
  • 这些文件会被自动加载到每个新会话的系统提示词中
  • 你告诉 AI 一次“我的测试命令是 make test”,它就永远记住了(针对这个项目)
  • 记忆可以提交到 Git,团队成员共享同一套 AI 行为规范

与普通对话历史的区别:

维度对话历史项目记忆
生命周期 单次会话(或手动 /clear 清空) 永久,直到你修改文件
作用范围 当前会话 该项目所有会话
加载方式 自动累积 每次会话自动注入系统提示词
可共享 否(仅本地) 是(通过 Git)
典型内容 临时的讨论、调试过程 项目规范、常用命令、架构说明

2. 核心记忆载体:CLAUDE.md

CLAUDE.md 是 Claude Code 最基础、最重要的记忆文件。当你在项目根目录(或 .claude/ 子目录)放置这个文件时,Claude Code 会在每次会话启动时读取它,并将其内容作为系统提示词的一部分。

2.1 文件位置优先级

  • .claude/CLAUDE.md(推荐,不会和项目文档混淆)
  • CLAUDE.md(根目录,向后兼容)
  • .claude/CLAUDE.local.md(本地覆盖,不提交 Git,用于个人偏好)
  • 2.2 典型内容结构

    # 项目:My E-Commerce API

    ## 技术栈
    – Node.js 20 + Express + TypeScript
    – PostgreSQL + Prisma ORM
    – Redis 缓存
    – Jest 测试框架

    ## 常用命令
    – 开发服务器:`npm run dev`(监听 3000,热重载)
    – 生产构建:`npm run build`
    – 运行所有测试:`npm test`
    – 运行单个测试:`npm test — –grep "pattern"`
    – 数据库迁移:`npx prisma migrate dev`
    – 代码格式化:`npm run format`

    ## 目录结构说明
    – `src/controllers/`:HTTP 请求处理,调用 service 层
    – `src/services/`:业务逻辑,调用 repository
    – `src/repositories/`:数据库访问(Prisma)
    – `src/types/`:TypeScript 类型定义
    – `tests/unit/`:单元测试
    – `tests/integration/`:集成测试

    ## 代码规范
    – 使用 `camelCase` 命名变量和函数
    – 使用 `PascalCase` 命名类和组件
    – 禁止 `any` 类型,未知类型用 `unknown` 并做类型守卫
    – 所有 API 响应格式:`{ success: boolean, data?: T, error?: string }`

    ## 重要约束
    – 不要修改 `src/generated/` 目录(Prisma 自动生成)
    – 环境变量配置在 `.env.local`,不要提交到 Git
    – 数据库迁移文件一旦生成,不要编辑,只能新增

    ## 外部依赖
    – 支付网关 API 文档:https://docs.stripe.com/api
    – 内部 Wiki:https://wiki.company.com/projects/ecommerce

    有了这份文件,AI 就知道:

    • 运行测试时用 npm test(而不是猜测 jest 或 mocha)
    • 修改代码时遵循命名规范
    • 避开自动生成的目录
    • 遇到数据库操作时使用 Prisma 模式

    2.3 使用 .claude/CLAUDE.local.md 做个人覆盖

    你可以在项目中添加 .claude/CLAUDE.local.md(记得加入 .gitignore),存放只属于你自己的偏好:

    ## 个人偏好
    – 我的测试环境需要额外设置环境变量:`export TEST_DB_URL=postgresql://localhost/testdb`
    – 请优先使用 `pnpm` 而不是 `npm`
    – 生成代码时,注释用英文,变量名用英文

    AI 会同时加载 CLAUDE.md 和 CLAUDE.local.md,后者覆盖前者的冲突项。


    3. 扩展记忆:.claude/settings.json

    除了 CLAUDE.md,项目级配置 .claude/settings.json 也可以存储一些“记忆”,特别是关于 AI 行为本身的设置。

    {
    "permissions": {
    "defaultMode": "default",
    "allow": [
    "Read",
    "Grep"
    ],
    "askForApproval": [
    "Write",
    "Edit",
    "Bash"
    ]
    },
    "model": {
    "default": "claude-3.5-sonnet",
    "fallback": "claude-3-haiku"
    },
    "hooks": {
    "preWrite": "npm run format — –check",
    "postTest": "echo 'Tests completed'"
    },
    "maxIterations": 30,
    "compactThreshold": 100000
    }

    这些配置虽然不完全是“自然语言记忆”,但同样会影响 AI 的行为,且跨会话持久。


    4. 记忆的自动加载机制

    当你运行 claude 进入项目目录时,Claude Code 按以下顺序加载记忆:

  • 全局配置:~/.claude/settings.json(用户级默认值)
  • 项目 CLAUDE.md:先加载 .claude/CLAUDE.md,再加载根目录 CLAUDE.md(如果两者都存在,合并)
  • 本地覆盖:.claude/CLAUDE.local.md
  • 项目 settings.json:.claude/settings.json
  • 环境变量:.env 或 shell 中设置的变量(如 ANTHROPIC_API_KEY)
  • 所有这些内容会被拼接到系统提示词中,对 AI 来说就像与生俱来的知识。你不需要在每次对话中重复。


    5. 维护记忆的最佳实践

    5.1 从零开始:让 AI 帮你生成初版 CLAUDE.md

    你不会写?让 Claude Code 自己写。

    在空项目或现有项目中,输入:

    请根据当前项目的 package.json、目录结构和源代码,生成一份 CLAUDE.md 草稿,包含技术栈、常用命令、代码规范和建议。

    AI 会扫描项目,输出一份高质量的初始文件,你只需要稍作调整。

    5.2 记忆随代码演进

    项目变化时(比如换了测试框架、增加了新的目录规范),及时更新 CLAUDE.md。可以定期让 AI 帮你审查:

    检查一下 CLAUDE.md 是否还符合当前项目的实际结构?如果有过时的地方,请建议更新。

    5.3 避免记忆过载

    CLAUDE.md 不是越长越好。AI 每次会话都要加载它,过大的文件会:

    • 消耗输入 token(每次会话的固定成本)
    • 稀释重点(AI 可能忽略埋在长篇文档中的关键信息)

    建议长度:150 行以内,只记录“AI 无法从代码中自动推断”的信息。例如:

    • 不要写每个函数的详细说明(AI 可以读代码)
    • 要写为什么某个设计决策如此(历史背景、权衡)

    5.4 使用标记分区

    用明显的标题和分隔符组织内容,方便 AI(和人类)快速定位:

    # 项目:…

    ## [COMMANDS] 常用命令

    ## [CONVENTIONS] 代码规范

    ## [CONSTRAINTS] 硬性约束

    ## [CONTEXT] 背景知识


    6. 记忆的版本控制与团队共享

    将 .claude/CLAUDE.md 和 .claude/settings.json 提交到 Git,团队所有成员 clone 后就能获得相同的 AI 行为。

    团队使用流程:

  • 项目负责人创建初始 CLAUDE.md。
  • 团队成员可以创建 .claude/CLAUDE.local.md 存放个人偏好(不提交)。
  • 定期在代码审查中讨论 CLAUDE.md 的更新(如同维护 README)。
  • 新人入职:只需 clone 项目,运行 claude,AI 已经知道一切。
  • 冲突处理:如果团队对某条规范有分歧,用 CLAUDE.md(团队共识)+ CLAUDE.local.md(个人覆盖)解决。


    7. 高级记忆技术:Skill 与 Command 存储

    除了 CLAUDE.md,你还可以在 .claude/commands/ 和 .claude/skills/ 中定义可复用的能力(第 18 篇),它们也是项目记忆的一部分。

    例如,创建一个 .claude/commands/build-prod.md:


    description: 构建生产版本并打包

    执行以下步骤:
    1. 运行 `npm ci –production`(确保使用 lockfile)
    2. 运行 `NODE_ENV=production npm run build`
    3. 将 dist/ 目录打包为 `build-$(date +%Y%m%d).tar.gz`
    4. 输出打包文件名

    团队成员输入 /build-prod 就能执行标准化构建流程,无需记住复杂的命令组合。


    8. 案例:一个真实项目的记忆演进

    初始状态:项目只有简单的 CLAUDE.md,写着“用 Jest 测试”。

    第 1 个月:团队引入了 Prisma,需要频繁运行迁移。在 CLAUDE.md 中添加:

    – 数据库迁移:`npx prisma migrate dev –name <描述>`
    – 重置测试数据库:`npx prisma migrate reset –force`

    第 3 个月:项目增加了微服务边界,要求不要跨服务直接调用。添加:

    ## 架构约束
    – 订单服务(src/order/)不能直接导入用户服务(src/user/)的 repository
    – 必须通过 src/gateway/ 中的 API 客户端调用

    第 6 个月:新人加入,通过 CLAUDE.md 快速上手,AI 给出的所有建议都符合团队约定。团队将 CLAUDE.md 的更新纳入 PR 审查清单。


    9. 常见问题

    Q1: CLAUDE.md 和 .claude/CLAUDE.md 哪个优先?

    如果两个文件都存在,Claude Code 会合并它们(先加载 .claude/ 下的,再加载根目录的)。推荐只用 .claude/CLAUDE.md,避免混乱。

    Q2: 修改 CLAUDE.md 后需要重启会话吗?

    不需要。在当前会话中,如果你修改了 CLAUDE.md,AI 不会自动重新加载。你可以输入 /init 命令(实验性)重新加载,或者直接 /clear 清空会话后重新进入(新会话会加载新版本)。

    Q3: 如何防止敏感信息被写入 CLAUDE.md 并提交?

    • 不要把 API Key、数据库密码等写在 CLAUDE.md 中。这些应该放在 .env 或 .claude/settings.local.json(加入 .gitignore)。
    • 使用 ${VAR} 语法引用环境变量。

    Q4: AI 有时会忽略 CLAUDE.md 中的指令,为什么?

    • 检查 CLAUDE.md 是否有语法错误(如 Markdown 格式混乱)。
    • 可能用户当前的指令优先级更高(AI 会优先遵循最新的用户输入)。
    • 可以加强语气:“严格按照 CLAUDE.md 中的规范执行。”

    Q5: 可以为子目录设置特定的记忆吗?

    目前不支持。CLAUDE.md 作用于整个项目(从运行 claude 的目录递归向上查找)。但你可以通过在子目录中运行 claude(作为独立“项目”)来实现隔离。


    10. 下篇预告

    项目记忆让 AI 知道了你的“习惯”,但要让 Claude Code 与外部服务(如 Jira、Slack、Figma)深度协作,你还需要 MCP Server——我们已经介绍过原理,下一篇将展示一个完整的实战:如何配置 MCP Server 并打通你的日常工具链。

    👉 下一篇: 使用MCP Server打造“外部连接”:从数据库到Jira、Slack全打通

    (注:第 22 篇规划为 MCP 实战,与第 20 篇主题相近但侧重点不同。第 20 篇是概念与配置,第 22 篇将聚焦端到端工作流案例。)


    思考题(自测理解)

  • 你的项目同时使用 npm 和 yarn(历史遗留)。你希望 AI 默认使用 yarn。如何在 CLAUDE.md 中表达这个偏好?如果某个团队成员想用 pnpm,应该怎么做?
  • 你发现 AI 在会话中提出了一个不符合项目规范的代码修改(但规范已写在 CLAUDE.md 中)。可能的原因是什么?如何改进?
  • 假设你有一个 monorepo,每个子项目有不同的构建命令。你该如何组织 CLAUDE.md?是放一个总的还是多个?

  • 记忆是 AI 的基石。给它一份好的 CLAUDE.md,它就能成为项目最资深的成员。下一章,我们将把这份记忆与外部世界连接起来。

    赞(0)
    未经允许不得转载:171主机测评 » 第二十一篇:跨会话项目记忆:让AI自动记住你的测试命令、编译指令和项目模式
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址