Plan First - Structured Problem Solving
Plan First implements the Plan-and-Solve research paradigm for tackling complex tasks systematically.
The core insight: Generative AI performs better when it plans before acting, especially on multi-step tasks where dependencies exist between steps.
The Analogy: Architect vs. Builder
| Builder Approach | Architect Approach (Plan First) |
|---|
| Start building immediately | Design blueprints first |
| Discover problems mid-project |
Anticipate issues before they arise |
| May need to tear down and rebuild | Build correctly the first time |
| Works for simple structures | Essential for complex projects |
When to Use Plan First
Perfect for:
- - 🏗️ Multi-step coding tasks (implement feature X that requires Y, Z, W)
- 📝 Complex writing (reports, documentation with sections)
- 🔬 Analysis tasks (data analysis with multiple phases)
- 🧩 Problem-solving (math, logic, puzzles with steps)
- 📋 Project planning (breaking down large initiatives)
Skip for:
- - ⚡ Single-step tasks ("What is 2+2?")
- 🎯 Direct questions ("What is the capital of France?")
- 🔄 Pure exploration (brainstorming without structure)
The Workflow
Step 1: Generate the Plan
Before ANY execution, create a detailed plan:
CODEBLOCK0
Step 2: Validate the Plan
Self-check before proceeding:
- - [ ] Are steps in logical order?
- [ ] Are dependencies clearly marked?
- [ ] Is each step specific and actionable?
- [ ] Are success criteria verifiable?
- [ ] Did I miss any prerequisite steps?
If gaps found: Revise the plan first.
Step 3: Execute Step by Step
Execute ONE step at a time, in order:
CODEBLOCK1
Step 4: Handle Deviations
If a step fails:
- 1. Analyze why it failed
- Revise plan if needed (add missing steps, reorder)
- Resume from current step
If requirements change:
- 1. Stop execution
- Revise remaining plan
- Continue with updated plan
Plan Format Template
CODEBLOCK2
Examples
Example 1: Code Implementation
Task: "Add email verification to signup flow"
CODEBLOCK3
Example 2: Writing Task
Task: "Write annual report for engineering team"
CODEBLOCK4
Example 3: Data Analysis
Task: "Analyze customer churn for Q4"
CODEBLOCK5
Best Practices
1. Make Steps Concrete
❌ Vague: "Set up authentication"
✅ Concrete: "Create users table with bcrypt password hashing"
2. Define Clear Verification
Every step needs a pass/fail check:
- - "Tests pass"
- "Database table exists with correct schema"
- "Can send test email successfully"
- "Response time < 200ms"
3. Keep Steps Small
Break large steps into smaller ones:
❌ "Build entire API"
✅
- - "Create database schema"
- "Implement GET endpoint"
- "Implement POST endpoint"
- "Add validation"
- "Write tests"
4. Mark Dependencies Explicitly
This prevents trying to build on foundations that don't exist.
5. Plan for Failure
Include what to do if a step fails:
- - Rollback procedure
- Alternative approaches
- When to stop and reassess
Comparison: Direct vs Plan-First
Task: "Build a REST API for todos"
| Direct Approach | Plan-First Approach |
|---|
| Start coding endpoints | Plan database schema first |
| Discover need auth later |
Include auth in initial plan |
| Maybe forget validation | Explicit validation step |
| Inconsistent error handling | Define error format upfront |
| Tests added at end | Test steps interleaved |
When Plans Change
Mid-execution discovery: "Actually we need OAuth, not simple auth"
- 1. Stop current execution
- Reassess remaining plan
- Add OAuth-specific steps
- Update dependencies
- Resume with revised plan
Don't wing it. Update the plan.
Integration with Other Skills
Plan First + Team Code:
- 1. Generate master plan
- Delegate parallelizable steps to agents
- Execute dependency-aware
Plan First + Self-Critique:
- 1. Generate plan
- Critique the plan ("Am I missing anything?")
- Revise
- Execute
Quick Start Template
CODEBLOCK6
References
- - Research: "Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models" (Wang et al., 2023)
- Related: Chain-of-Thought (CoT), Tree-of-Thought (ToT), ReAct
- See references/examples.md for more detailed examples
技能名称: 先规划后执行
详细描述:
先规划后执行 - 结构化问题解决
先规划后执行 实现了 规划与解决 研究范式,用于系统地处理复杂任务。
核心见解:生成式AI在行动前先进行规划时表现更佳,尤其是在存在步骤间依赖关系的多步骤任务中。
类比:建筑师 vs. 建造者
| 建造者方法 | 建筑师方法(先规划后执行) |
|---|
| 立即开始建造 | 先设计蓝图 |
| 在项目中途发现问题 |
在问题出现前预判 |
| 可能需要推倒重建 | 一次性正确建造 |
| 适用于简单结构 | 对复杂项目至关重要 |
何时使用先规划后执行
完美适用于:
- - 🏗️ 多步骤编码任务(实现需要Y、Z、W的功能X)
- 📝 复杂写作(包含多个章节的报告、文档)
- 🔬 分析任务(包含多个阶段的数据分析)
- 🧩 问题解决(包含步骤的数学、逻辑、谜题)
- 📋 项目规划(分解大型计划)
跳过适用于:
- - ⚡ 单步骤任务(2+2等于多少?)
- 🎯 直接问题(法国首都是什么?)
- 🔄 纯探索(无结构的头脑风暴)
工作流程
第一步:生成计划
在任何执行之前,创建一个详细的计划:
任务:构建用户认证系统
计划:
- 1. [设置] 初始化用户表的数据库模式
- 依赖项:无
- 成功标准:迁移无错误运行
- 2. [实现] 创建密码哈希工具
- 依赖项:第一步完成
- 成功标准:bcrypt集成正常工作
- 3. [实现] 构建登录端点
- 依赖项:第一步、第二步
- 成功标准:有效凭据返回JWT
- 4. [实现] 构建注册端点
- 依赖项:第一步、第二步
- 成功标准:创建用户,返回令牌
- 5. [集成] 为受保护路由添加中间件
- 依赖项:第三步、第四步
- 成功标准:未授权请求被拒绝
- 6. [测试] 编写全面测试
- 依赖项:第三步、第四步、第五步
- 成功标准:所有测试通过
第二步:验证计划
继续前的自我检查:
- - [ ] 步骤顺序是否合理?
- [ ] 依赖项是否清晰标记?
- [ ] 每个步骤是否具体且可操作?
- [ ] 成功标准是否可验证?
- [ ] 是否遗漏了任何先决步骤?
如果发现差距: 先修改计划。
第三步:逐步执行
按顺序一次执行一个步骤:
执行第一步:初始化数据库模式
✓ 运行:CREATE TABLE users...
✓ 验证:表存在且列正确
✓ 标记完成
执行第二步:创建密码哈希工具
✓ 运行:实现 hashpassword(), verifypassword()
✓ 验证:单元测试通过
✓ 标记完成
... 继续直到所有步骤完成
第四步:处理偏差
如果某一步失败:
- 1. 分析失败原因
- 必要时修改计划(添加缺失步骤,重新排序)
- 从当前步骤继续
如果需求变更:
- 1. 停止执行
- 修改剩余计划
- 使用更新后的计划继续
计划格式模板
markdown
任务
[需要完成事项的清晰陈述]
计划
步骤N:[动作动词][做什么]
依赖项: [列出先决步骤]
方法: [如何完成此步骤]
验证: [如何确认成功]
文件/工具: [要修改或使用的内容]
步骤1:[设置/实现/分析/测试] 描述
依赖项: 无
方法:
验证: [具体测试或检查]
文件: [要创建/修改的文件]
步骤2:...
[继续所有步骤]
风险分析
潜在障碍: [可能出错的地方]
缓解措施: [如何处理问题]
回滚计划
如果在步骤N失败: [如何撤销/重置]
示例
示例1:代码实现
任务: 在注册流程中添加邮箱验证
markdown
计划
步骤1:[设置] 创建email_tokens表
依赖项: 无
方法:
- - 为emailtokens表创建迁移
- 字段:id, userid, token, expires_at, used
验证: 迁移运行,表结构正确
文件: migrations/003
emailtokens.sql
步骤2:[实现] 添加邮件发送工具
依赖项: 第一步
方法:
- - 创建 utils/email.py 包含 sendverificationemail()
- 使用SMTP或SendGrid
- 在邮件链接中包含令牌
验证: 能成功发送测试邮件
文件: utils/email.py
步骤3:[实现] 修改注册端点
依赖项: 第一步、第二步
方法:
- - 用户创建后,生成令牌
- 发送验证邮件
- 返回请查看您的邮箱响应
验证: 注册创建令牌并发送邮件
文件: routes/auth.py
步骤4:[实现] 创建验证端点
依赖项: 第一步
方法:
- - GET /verify-email?token=xxx
- 检查令牌有效且未过期
- 将用户标记为已验证
验证: 点击链接将用户标记为已验证
文件: routes/auth.py
步骤5:[集成] 在登录中添加已验证检查
依赖项: 第四步
方法:
- - 修改登录要求 verified=True
- 如果未验证则返回适当错误
验证: 未验证用户无法登录
文件: routes/auth.py
步骤6:[测试] 编写测试
依赖项: 第一步至第五步
方法:
- - 测试注册创建令牌
- 测试邮件已发送
- 测试验证正常工作
- 测试未验证无法登录
验证: 所有测试通过
文件: tests/test_auth.py
示例2:写作任务
任务: 为工程团队编写年度报告
markdown
计划
步骤1:[分析] 收集指标
依赖项: 无
方法:
- - 从CI/CD拉取部署频率
- 从监控获取事件数据
- 收集代码审查统计
验证: 拥有所有需要的数据点
文件: data/raw_metrics.json
步骤2:[起草] 编写执行摘要
依赖项: 第一步
方法:
验证: 涵盖所有主要要点
文件: report/executive_summary.md
步骤3:[起草] 编写详细章节
依赖项: 第二步(保持语气一致)
方法:
- - 基础设施改进
- 团队成长与招聘
- 流程优化
- 交付的主要项目
验证: 每个章节包含数据+叙述
文件: report/sections/*.md
步骤4:[集成] 编译和格式化
依赖项: 第二步、第三步
方法:
验证: 文档完整且格式化
文件: report/annual
report2024.md
步骤5:[审查] 自我审查和润色
依赖项: 第四步
方法:
验证: 准备好供利益相关者审查
文件: [同上]
示例3:数据分析
任务: 分析第四季度客户流失情况
markdown
计划
步骤1:[数据] 提取客户数据
依赖项: 无
方法:
- - 查询第三季度活跃客户的数据库
- 获取他们第四季度的活动状态
- 包含订阅层级、注册日期
验证: 数据集具有预期的行数
文件: data/customers_q4.csv
步骤2:[分析] 计算流失率
依赖项: 第一步
方法:
- - 定义流失:第四季度无活动
- 计算总体流失率
- 按层级、获取渠道细分
验证: 数字与预期相符
文件: analysis/churn_basic.py
步骤3:[分析] 识别模式
依赖项: 第二步
方法