Skip to content

3.2.2 S.C.A.F.F. 框架(推荐框架)

经过本节学习,你将掌握

  • S.C.A.F.F. 框架的五个要素及其含义
  • 如何用这个框架描述一个技术开发任务
  • 框架的精简版,适合日常快速使用
  • 获得可直接复制的提示词模板

框架结构

S.C.A.F.F. 是五个英文单词的首字母缩写:

字母英文中文核心问题
SSituation情境你在做什么项目?当前状态如何?
CChallenge挑战当前要解决的具体问题是什么?
AAudience受众代码/产出给谁用?谁来维护?
FFormat格式期望 AI 输出什么格式?
FFoundations基础必须遵守的约束和原则是什么?

这个框架的设计逻辑是:先给背景,再说问题,然后明确对象,最后约束边界

五要素详解

S - Situation(情境)

回答:你在做什么?当前进展如何?

填写内容:

  • 项目类型和目标
  • 使用的技术栈
  • 当前的开发阶段
  • 已有的代码结构或设计决策

填写技巧:想象你在向一个刚加入项目的同事介绍情况。

C - Challenge(挑战)

回答:当前具体要解决什么问题?

填写内容:

  • 要实现的功能或要修复的问题
  • 输入是什么,输出是什么
  • 具体的业务逻辑

填写技巧:一句话说清楚"做完这件事,什么状态变成什么状态"。

A - Audience(受众)

回答:产出给谁用?

填写内容:

  • 代码的使用者是谁(用户?其他开发者?)
  • 代码的维护者是谁(你自己?团队?)
  • 使用者/维护者的技术水平

填写技巧:这决定了代码复杂度和注释详细程度。

F - Format(格式)

回答:期望 AI 输出什么形式的结果?

填写内容:

  • 完整代码还是代码片段
  • 需要什么文件格式
  • 是否需要注释
  • 是否需要使用说明

填写技巧:越具体越好。"给我代码"不如"给我一个完整的 React 组件文件,包含 TypeScript 类型定义"。

F - Foundations(基础)

回答:有什么必须遵守的约束?

填写内容:

  • 技术约束(必须/不能用某个库)
  • 性能约束(响应时间、内存限制)
  • 风格约束(命名规范、代码风格)
  • 安全约束(敏感数据处理)

填写技巧:用第二章的"不做清单"思维——明确告诉 AI 什么不能做。

完整示例:登录页面

来看一个具体案例:你需要 AI 帮你实现一个登录页面。

❌ 差提示词

帮我做一个登录页面

问题:AI 不知道用什么技术、什么风格、要哪些功能、有什么限制。结果大概率是一个"通用模板",和你的项目格格不入。

✅ 用 S.C.A.F.F. 框架改写

markdown
【Situation - 情境】
我正在开发一个个人博客系统的管理后台。
技术栈:Next.js 14 + TypeScript + Tailwind CSS
当前进度:首页和文章列表页已完成,现在需要添加登录功能。
设计风格:极简风格,参考 Notion 的登录页面。

【Challenge - 挑战】
实现管理员登录页面:
- 表单包含:邮箱输入框、密码输入框、登录按钮
- 点击登录后,验证格式(邮箱格式、密码不为空)
- 格式错误时,在对应输入框下方显示红色提示
- 暂时不需要真正的后端验证,先做前端界面和交互

【Audience - 受众】
- 用户:只有我一个人(博客管理员)
- 代码维护者:我自己,React 初学者
- 请在关键逻辑处添加注释,帮助我理解

【Format - 格式】
请提供:
1. 完整的登录页面组件代码(单文件)
2. 包含 TypeScript 类型定义
3. 样式使用 Tailwind CSS
4. 文件命名:LoginPage.tsx

【Foundations - 基础约束】
- 不使用任何 UI 组件库(如 shadcn/ui、Ant Design)
- 不使用第三方表单库(如 React Hook Form)
- 状态管理用 React 原生的 useState
- 响应式设计:移动端和桌面端都要适配

输出差异对比

方面差提示词的可能输出S.C.A.F.F. 的可能输出
技术栈可能是纯 HTML 或 Vue确定是 Next.js + TS + Tailwind
功能范围可能包含注册、忘记密码只有登录,符合当前需求
代码复杂度可能用了你不熟悉的库用 useState,初学者友好
注释可能没有关键逻辑有注释
风格随机风格极简风格,参考 Notion

待办清单案例:添加任务功能

延续第二章小李的项目,用 S.C.A.F.F. 框架描述"添加任务"功能:

markdown
【Situation - 情境】
我在做一个个人待办清单网页应用。
技术栈:React + TypeScript + Tailwind CSS
目标用户:像我一样容易忘事的职场新人
设计原则:极简,打开就是今日待办,添加任务 3 秒内完成
当前进度:项目刚初始化,还没有任何功能代码

【Challenge - 挑战】
实现"添加任务"功能:
- 用户在输入框输入任务内容
- 按回车键或点击添加按钮,任务添加到列表
- 添加成功后自动清空输入框并聚焦
- 空内容不能添加,输入框轻微抖动提示

【Audience - 受众】
- 用户:我自己,希望操作越简单越好
- 维护者:我自己,React 初学者
- 请解释为什么用这种实现方式

【Format - 格式】
请提供:
1. AddTask 组件代码(处理输入和添加)
2. TaskList 组件代码(展示任务列表)
3. 简单的组件使用说明

【Foundations - 基础约束】
- 任务数据暂存在组件 state,不需要持久化
- 不用任何状态管理库(Redux、Zustand 等)
- 样式用 Tailwind,保持简洁
- 每个任务只需要:内容文本 + 完成状态

精简版:S.C.F. 三要素

日常快速使用时,可以只保留三个核心要素:

要素必填原因
S - Situation没有背景,AI 只能猜
C - Challenge这是你要解决的问题
F - Foundations约束决定了输出边界

精简版模板

markdown
【背景】
[项目类型] + [技术栈] + [当前状态]

【任务】
[具体要做什么]

【约束】
- [必须遵守的限制1]
- [必须遵守的限制2]

精简版示例

markdown
【背景】
React + TS 的待办清单项目,已完成基础结构

【任务】
实现删除任务功能:点击任务右侧的删除图标,该任务从列表中移除

【约束】
- 删除前显示确认提示
- 用 Tailwind CSS
- 删除动画:淡出效果

可复制的完整模板

markdown
【Situation - 情境】
项目类型:
技术栈:
当前进度:
设计风格/原则:

【Challenge - 挑战】
要实现的功能:
- 
- 
- 
输入:
输出:

【Audience - 受众】
用户是谁:
维护者是谁:
技术水平:

【Format - 格式】
期望输出:
- [ ] 完整代码文件
- [ ] 代码片段
- [ ] 包含注释
- [ ] 包含使用说明
文件命名:

【Foundations - 基础约束】
必须:
- 
- 
不能:
- 
-

常见填写误区

误区问题正确做法
Situation 写太长AI 会迷失在细节中只写与当前任务相关的背景
Challenge 不具体"优化代码"太模糊说清楚优化什么方面
忘记写 AudienceAI 不知道代码给谁看初学者要求注释,高手可以省略
Format 只写"给我代码"输出格式随机指定文件类型、是否要注释
Foundations 只写"要做什么"AI 可能"加戏"同时写清楚"不要什么"

本节要点

S.C.A.F.F. 五要素:Situation(情境)、Challenge(挑战)、Audience(受众)、Format(格式)、Foundations(基础)

填写逻辑:先给背景 → 再说问题 → 明确对象 → 约束边界

精简版 S.C.F.:日常快速使用,保留背景、任务、约束三要素

关键技巧:"不做清单"和"做清单"同样重要

下一节,我们学习一个更轻量的框架:R.G.C.——适合快速提问和简单任务。