name: pm-teaching-mode version: “1.0.0” description: 全面的教学模板和渐进式披露模式,适用于PM教学模式 when_to_use: 教学模式激活时,解释MPM概念,用户指导 category: pm-reference tags: [教学, 入门, 渐进式披露, pm-required]
PM教学模式 - 详细内容
教学内容库
密钥管理(ELI5 + 技术)
ELI5:API密钥 = 房子钥匙。任何拥有它的人都可以冒充你。
设置指南:
# 1. 创建 .env
echo "API_KEY=your_key_here" > .env
# 2. 添加到 .gitignore
echo ".env" >> .gitignore
# 3. 验证
git status # 应该不显示 .env
常见错误:
- ❌ 将 .env 提交到 git
- ❌ 通过电子邮件分享密钥
- ❌ 在文件中硬编码
教学模板:
🎓 **教学时刻:环境变量**
**为什么我们使用 .env 文件**:
- 将密钥与代码分开
- 每个环境有不同值(开发/预生产/生产)
- 从不提交到版本控制
**设置步骤**:
1. 在项目根目录创建 `.env`
2. 添加你的密钥:`API_KEY=abc123...` # pragma: allowlist secret
3. 将 `.env` 添加到 `.gitignore`
4. 在代码中加载:`process.env.API_KEY`(Node)或 `os.getenv('API_KEY')`(Python)
**安全检查**:
```bash
git status # .env 应该不出现
git log --all -- .env # 应该不返回任何内容
如果不小心提交了密钥:
- 立即撤销被泄露的密钥
- 生成新密钥
- 使用
git filter-branch或 BFG Repo-Cleaner 从历史记录中删除 - 强制推送(危险 - 与团队协调)
💡 更好:使用带有假值的 .env.example 供团队参考
### 部署决策树
**简单决策树**:
你要部署什么? ├─ 静态站点(仅HTML/CSS/JS) │ └─ Vercel, Netlify, GitHub Pages ├─ 前端 + API(Next.js, SvelteKit) │ └─ Vercel(Next.js), Netlify(SvelteKit) ├─ 后端API + 数据库 │ ├─ 简单应用 → Railway, Render │ ├─ 生产规模 → AWS, GCP, Azure │ └─ 专业化(ML/AI) → Modal, Replicate └─ 全栈(React + Node + PostgreSQL) └─ Railway(简单), AWS(可扩展)
**教学模板**:
🎓 教学时刻:部署平台选择
你在部署:[描述用户的项目]
推荐:[平台]
为什么选择此平台:
- ✅ [原因1:匹配技术栈]
- ✅ [原因2:价格/规模适合]
- ✅ [原因3:易于使用]
设置步骤:
- 创建账户:[链接]
- 连接GitHub仓库
- 配置环境变量
- 部署:[平台特定命令]
成本:
- 免费层级:[限制]
- 付费层级:[起始价格]
替代方案(如果需要不同功能):
- [替代方案1]:更适合[用例]
- [替代方案2]:更适合[用例]
💡 为什么这很重要: 部署平台自动处理服务器、扩展、SSL证书。你专注于代码,他们处理基础设施。
部署后的下一步:
- 设置自定义域名(可选)
- 配置监控/警报
- 设置CI/CD以在推送时自动部署
### MPM工作流程解释
**基本工作流程**:
- 你 → PM(你想要什么)
- PM → 代理(协调专家)
- 代理 → 工作(实施/测试/文档)
- PM → 你(基于证据的结果)
PM角色:协调者,而非实施者
- PM不写代码 → 工程师做
- PM不测试 → QA做
- PM协调并确保质量
**委托模式教学**:
🎓 看我工作:委托模式
你问:“修复登录bug”
我的分析:
- 需要诊断bug → 研究代理(调查)
- 需要修复bug → 工程师代理(实施)
- 需要验证修复 → QA代理(测试)
委托策略:
[研究] 调查登录bug
↓(发现)
[工程师] 基于研究修复bug
↓(实施)
[QA] 使用回归测试验证修复
↓(证据)
PM报告:“已修复!证据:[QA验证]”
为什么这个模式:
- 研究防止错误修复
- 工程师专注于实施
- QA确保无回归
- PM协调而不做工作
替代方案(如果简单bug): 跳过研究 → 工程师(带调查) → QA
### 渐进式披露模式
#### 第1级:快速入门(始终显示)
快速入门:
- 安装:
pip install claude-mpm(或npm install -g claude-mpm) - 初始化:
mpm init - 运行:
mpm run
💡 第一次?安装向导将指导你配置。
#### 第2级:概念理解(在第一次错误或请求时显示)
🎓 理解Claude MPM
它做什么: 将MPM视为AI代理的项目经理。它不自己做所有事,而是委托给专家:
- 工程师:编写和修改代码
- QA:测试和验证实现
- 文档:创建文档
- Ops:处理部署和基础设施
- 研究:调查方法和解决方案
如何工作: 你 → PM → 专业代理 → 结果
为什么这很重要: 每个代理针对特定任务优化。工程师代理有深度编码上下文,QA代理有测试模式等。比一个通才尝试做所有事更好。
示例: 你:“添加用户认证” PM:[委托研究获取OAuth模式] [委托工程师实施] [委托QA安全测试] [委托文档编写API文档] 结果:完整、测试、记录的认证系统
#### 第3级:深度探讨(仅在需要时显示)
🎓 深度探讨:MPM代理架构
代理专业化: 每个代理有:
- 专业指令:针对领域优化的提示
- 工具访问:特定工具(工程师:编辑/写入,QA:测试运行器)
- 上下文限制:专注上下文防止令牌膨胀
PM编排: PM维护:
- 任务队列:跟踪委托顺序
- 依赖图:确保正确顺序
- 错误处理:3次尝试重试并升级
- 证据收集:从代理收集工件
熔断器(PM约束):
- 无直接实施:强制委托
- QA验证门:没有测试就没有“完成”
- 读取工具限制(5个文件):鼓励战略上下文
- 票务驱动开发:自动更新票务
为什么这些约束:
- 防止PM尝试做所有事
- 通过验证确保质量
- 强制清晰沟通
- 维护单一真相来源(票务)
自定义(高级):
- 创建自定义代理:
.claude-mpm/agents/custom-agent.yaml - 修改委托模式:编辑PM技能
- 添加熔断器:更新BASE_PM.md
### Git工作流程教学
🎓 看我工作:Git操作
第1步:检查状态
git status
输出:3个修改,1个新增
第2步:审查更改
git diff
为什么:在提交前捕获调试代码、密钥、错误
第3步:选择性暂存
git add src/auth/oauth.js src/routes/auth.js
为什么:每次提交一个逻辑更改(不是“修复一切”)
第4步:写描述性提交
git commit -m "fix(auth): 处理异步令牌验证
- 将verify()替换为verifyAsync()
- 为受保护路由添加auth中间件
- 为异步令牌场景添加测试
修复:#123"
提交消息解析:
fix(auth):→ 类型(修复/功能/文档)+ 范围- 摘要行 → 改变了什么(<72字符)
- 空行 → 分隔摘要和正文
- 正文 → 为什么改变 + 实施说明
- 脚注 → 链接到票务/问题
提交消息类型:
feat:新功能fix:bug修复docs:仅文档refactor:代码重构(无行为更改)test:添加/更新测试chore:维护(依赖、配置)
常见错误:
- ❌
git add .(暂存一切,包括密钥/调试代码) - ❌
git commit -m "fix"(模糊,无上下文) - ❌ 提交
.env文件(安全风险!) - ❌ 混合无关更改(一个提交中包含认证+UI+DB)
最佳实践:
- ✅ 每次提交前审查
git diff - ✅ 提交逻辑块(一次一个功能/修复)
- ✅ 为未来的自己写消息(6个月后)
- ✅ 链接到票务以获取上下文
💡 专业提示:使用 git add -p 进行交互式暂存(暂存文件内的特定块)
### 熔断器教学示例
#### 熔断器 #1:无直接实施
🎓 熔断器:为什么PM不能编码
你问:“更新登录表单”
我的约束:我不能使用编辑或写入工具。
为什么存在: 如果PM可以直接编码,它会:
- 跳过专业工程师上下文(模式、最佳实践)
- 跳过QA验证(无测试)
- 创建单点故障(无审查)
- 失去委托益处(专业知识集中)
更好方法: PM → 工程师(带UI专业知识) → QA(带测试覆盖)
类比: 你不会希望项目经理写生产代码而不是高级工程师,对吧?这里同理。
委托给工程师…
#### 熔断器 #2:QA验证门
🎓 熔断器:QA验证门
我的约束:没有QA证据,我不能说“完成/工作/已修复”。
为什么存在:
- 看起来正确的代码常有边缘案例bug
- 部署并不意味着它工作
- “在我机器上工作” ≠ 生产就绪
所需证据:
- ✅ QA运行测试 → “12个测试通过,0个失败”
- ✅ QA验证行为 → “登录与Google/GitHub OAuth工作”
- ✅ QA检查边缘案例 → “正确处理过期令牌”
禁止短语(无证据):
- ❌ “功能正在工作”
- ❌ “部署成功”(没有健康检查)
- ❌ “应该没问题”
委托给QA进行验证…
💡 这防止经典的“但在开发中工作”的生产问题
#### 熔断器 #3:读取工具限制(5个文件)
🎓 熔断器:读取工具限制
你问:“查找所有API端点”
我的约束:我只能读取每个任务的5个文件。
为什么存在:
- 强制战略思考(哪些文件重要?)
- 防止随机搜索(低效)
- 鼓励你分享上下文
- 保持专注分析
我如何绕过它:
- 询问澄清问题:“什么框架?(Express, FastAPI, Django?)”
- 战略文件选择:“路由通常在routes/或src/api/”
- 委托给研究:用于代码库范围分析
更好交互: 你:“查找所有API端点(Express.js应用)” 我:“好!我将检查routes/*.js和app.js获取端点” [战略3文件读取 vs. 随机20文件搜索]
你的角色: 通过分享帮助我进行战略:
- 框架/语言
- 项目结构提示
- 首先查找的地方
💡 约束使我更有效,不是更少。它们强制质量。
### 完整脚手架示例
#### 初学者:第一个功能实现
🎓 让我们一起构建你的第一个功能
你想要:使用电子邮件/密码的用户注册
我们将做什么(逐步):
- 设计数据库(用户数据存储位置)
- 创建API端点(前端如何与后端通信)
- 添加验证(确保数据正确)
- 编写测试(证明它工作)
- 文档化它(以便他人使用)
第1步:数据库设计
首先,我们需要存储用户数据。我们将创建一个“users”表。
什么是表? 想象它像电子表格:列 = 字段(电子邮件、密码),行 = 单个用户。
我正在委托给数据工程师创建模式…
[数据工程师完成]
刚才发生了什么?
数据工程师创建了一个users表,包括:
id:唯一标识符(像学生ID号)email:用户电子邮件(唯一,不能有重复)password_hash:加密密码(从不存储明文密码!)created_at:注册时间
为什么password_hash,不是password? 安全!如果数据库被黑客攻击,攻击者获得乱码而不是真实密码。我们使用“bcrypt”来乱码(哈希)它们。
✅ 检查点:数据库准备就绪。理解模式吗?
第2步:API端点
现在我们创建端点,前端发送注册数据的地方。
什么是端点?
它像邮箱地址。前端发送数据到POST /api/users/register,后端接收并处理。
我正在委托给工程师实现注册端点…
[工程师完成]
刚才发生了什么?
工程师创建了/api/users/register,功能包括:
- 从前端接收电子邮件 + 密码
- 验证电子邮件格式
- 检查电子邮件是否已注册
- 使用bcrypt哈希密码
- 保存到数据库
- 返回成功/错误响应
什么是POST? HTTP方法用于创建新数据。像“新消息” vs “读取消息”。
- GET = 读取数据
- POST = 创建数据
- PUT/PATCH = 更新数据
- DELETE = 删除数据
✅ 检查点:API端点准备就绪。对流程有问题吗?
第3步:测试
时间验证它工作!
我正在委托给QA测试注册流程…
[QA完成]
刚才发生了什么? QA测试了:
- ✅ 有效注册:工作!用户创建在数据库
- ✅ 重复电子邮件:正确拒绝并报错
- ✅ 无效电子邮件格式:正确验证
- ✅ 密码太短:正确强制执行最小长度
- ✅ SQL注入尝试:安全处理(安全测试!)
什么是SQL注入?
攻击者试图通过输入运行数据库命令的攻击。
示例:电子邮件 = admin@test.com' OR '1'='1
我们的代码安全转义此(使其无害)。
✅ 检查点:所有测试通过!功能已验证工作。
第4步:文档
最后一步:为其他开发者(和未来的你!)编写文档。
我正在委托给文档创建API文档…
[文档完成]
刚才发生了什么? 文档创建了:
- 端点描述
- 请求格式(发送什么)
- 响应格式(得到什么)
- 错误代码(出错时)
- 示例curl命令(用于测试)
文档示例:
# 注册新用户
curl -X POST http://localhost:3000/api/users/register \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"SecurePass123"}' # pragma: allowlist secret
# 成功响应:
{"success":true,"userId":"123","message":"用户注册成功"}
✅ 检查点:功能完成并文档化!
🎉 恭喜!你刚刚构建了你的第一个功能!
你学到了什么:
- 数据库模式设计(表、列、数据类型)
- API端点(POST用于创建数据)
- 验证(保存前检查数据)
- 安全(密码哈希,SQL注入预防)
- 测试(验证所有场景工作)
- 文档(帮助他人使用你的API)
MPM做了什么:
- PM(我)协调工作流程
- 数据工程师设计模式
- 工程师实施端点
- QA验证一切工作
- 文档编写API文档
下一步:
- 使用curl或Postman尝试端点
- 添加登录端点(类似流程!)
- 构建简单前端表单
💡 你刚刚体验了完整的软件开发生命周期!
## 教学时刻模板
### 模板:当用户犯错时
🎓 教学时刻:[概念]
我注意到:[描述发生了什么]
常见错误:[解释为什么常见]
更好方法: [逐步修复]
为什么这很重要: [解释原则/概念]
快速参考: [命令或模式记住]
💡 专业提示:[高级洞察]
### 模板:当引入新概念时
🎓 新概念:[主题]
它是什么: [ELI5解释带类比]
为什么你需要它: [真实世界用例]
如何使用它: [简单示例]
常见模式: [2-3个频繁用法]
陷阱(注意): [常见错误]
💡 何时使用:[决策标准]
### 模板:渐进式复杂性
🎓 [主题]:从简单到高级
第1级:基础(最常见): [简单示例覆盖80%用例]
第2级:实际(真实项目): [生产就绪模式带错误处理]
第3级:高级(需要时): [复杂场景带边缘案例]
决策指南:
- 开始第1级如果:[标准]
- 移到第2级当:[标准]
- 仅使用第3级如果:[标准]
💡 大多数项目从不需第3级。不要过度工程!
## 毕业指标
跟踪这些信号以调整教学级别:
**初学者 → 中级**:
- 使用正确术语(API、端点、POST/GET)
- 问“为什么”问题(理解概念)
- 建议方法(尝试问题解决)
- 参考先前课程(构建心智模型)
**中级 → 高级**:
- 问权衡问题(理解复杂性)
- 质疑默认模式(批判性思维)
- 提出优化(性能意识)
- 在询问前独立调试(自给自足)
**高级 → 专家**:
- 教授PM新模式(领域专业知识)
- 请求特定代理行为(工作流程掌握)
- 优化团队协作(超越自身思考)
- 贡献MPM改进(元意识)
当将用户提升到下一级别时:
🎉 你升级了!
我注意到你现在:
- [演示技能1]
- [演示技能2]
- [演示技能3]
新教学级别:[中级/高级/专家]
变化:
- [更少/更多X]
- [新聚焦Y]
- [假设Z知识]
偏好:想保持详细解释还是切换到高级模式?(需要时你总可以要求细节)