AI PRD 标准结构与写作模板
High Contrast
Dark Mode
Light Mode
Sepia
Forest
3 min read696 words

AI PRD 标准结构与写作模板

普通 PRD 写"做什么",AI PRD 还要写"什么情况下 AI 会失败"和"失败时怎么办"。这两个部分是 AI 产品 PRD 和传统 PRD 最本质的区别,写不出来就说明方案还没想清楚。

AI PRD 的完整结构

graph TD A[AI PRD 文档] --> B[01 目标与非目标] A --> C[02 用户场景与用例] A --> D[03 AI 能力描述] A --> E[04 失败机制与兜底] A --> F[05 评估标准与验收] A --> G[06 上线与灰度计划] B --> B1[问题是什么 / 不解决什么] C --> C1[主路径 / 边界场景 / 排除场景] D --> D1[模型能力 / 输入输出 / 置信度处理] E --> E1[失败类型 / 降级行为 / 人工兜底] F --> F1[业务指标 / AI 质量指标 / 验收流程] G --> G1[内测 → 灰度 → 全量 / 回滚条件] style A fill:#e3f2fd,stroke:#1565c0 style E fill:#ffebee,stroke:#c62828 style F fill:#e8f5e9,stroke:#2e7d32

六个必写章节的核心要求

章节 核心问题 常见错误写法 正确写法示例
目标与非目标 我们要解决什么、不解决什么 "提升用户体验" "将客服首响时间从 3 分钟降到 30 秒"
用户场景 谁在什么情况下用 只写 Happy Path 写出 3-5 个场景含边界和排除
AI 能力描述 模型做什么、输入输出是什么 "接入 GPT-4 实现智能回复" 写出输入格式、输出格式、置信度阈值、超时定义
失败机制与兜底 出错时用户看到什么 完全不写 每种失败类型对应一种降级行为
评估标准 怎么验收、数字是多少 "效果要好" "意图识别准确率 ≥ 85%,CSAT ≥ 4.2/5"
上线计划 怎么发、什么情况下停 "按研发计划上线" 写出灰度比例、观测指标、回滚触发条件

AI 能力描述的标准格式

这是 AI PRD 中最容易写得模糊的部分,PM 需要逼自己写清楚:

【AI 能力名称】:意图分类
输入:
- 用户消息文本(UTF-8,最长 500 字)
- 对话历史(最近 5 轮)
- 用户账户类型(普通/VIP/企业)
输出:
- 意图标签(枚举值,见附录意图清单)
- 置信度(0.0 - 1.0)
- 备选意图(top-3)
置信度处理规则:
- ≥ 0.85:直接进入对应流程
- 0.60 - 0.85:向用户确认意图
- < 0.60:转人工,告知用户"正在为您转接"
超时定义:
- 正常响应:< 2 秒
- 降级触发:> 3 秒自动兜底

Python 示例:AI PRD 骨架生成器

"""
AI PRD 骨架生成器
PM 视角:根据功能参数生成标准化 PRD 文档框架
"""
from dataclasses import dataclass, field
from typing import List, Dict, Optional
from datetime import date
@dataclass
class AICapabilitySpec:
"""AI 能力规格说明"""
capability_name: str
input_fields: List[Dict[str, str]]      # [{name, type, description, max_length}]
output_fields: List[Dict[str, str]]
confidence_rules: List[Dict[str, str]]  # [{range, action}]
timeout_normal_ms: int
timeout_fallback_ms: int
fallback_behavior: str
@dataclass
class FailureScenario:
"""失败场景定义"""
scenario_name: str
trigger_condition: str
user_experience: str    # 用户看到什么
system_behavior: str    # 系统做什么
severity: str           # P0/P1/P2
@dataclass
class AcceptanceCriteria:
"""验收标准"""
metric_name: str
baseline: str
target: str
measurement_method: str
owner: str
@dataclass
class PRDSpec:
"""PRD 输入规格"""
product_name: str
feature_name: str
author: str
problem_statement: str
success_metrics: str
non_goals: List[str]
user_scenarios: List[str]
excluded_scenarios: List[str]
ai_capabilities: List[AICapabilitySpec]
failure_scenarios: List[FailureScenario]
acceptance_criteria: List[AcceptanceCriteria]
rollout_stages: List[str]
rollback_trigger: str
def generate_prd_document(spec: PRDSpec) -> str:
"""生成 PRD 文档"""
today = date.today().strftime("%Y-%m-%d")
lines = []
# 文档头
lines += [
f"# {spec.feature_name} — 产品需求文档",
f"",
f"| 字段 | 内容 |",
f"|------|------|",
f"| 产品 | {spec.product_name} |",
f"| 作者 | {spec.author} |",
f"| 创建日期 | {today} |",
f"| 状态 | Draft |",
f"",
]
# 01 目标与非目标
lines += [
"## 01 目标与非目标",
"",
"### 问题陈述",
f"{spec.problem_statement}",
"",
"### 成功标准",
f"{spec.success_metrics}",
"",
"### 非目标(本期不做)",
]
for ng in spec.non_goals:
lines.append(f"- {ng}")
lines.append("")
# 02 用户场景
lines += [
"## 02 用户场景",
"",
"### 主要使用场景",
]
for i, scenario in enumerate(spec.user_scenarios, 1):
lines.append(f"**场景 {i}**:{scenario}")
lines += [
"",
"### 排除场景(明确不处理)",
]
for excluded in spec.excluded_scenarios:
lines.append(f"- {excluded}")
lines.append("")
# 03 AI 能力描述
lines += [
"## 03 AI 能力描述",
"",
]
for cap in spec.ai_capabilities:
lines += [
f"### {cap.capability_name}",
"",
"**输入规格:**",
"| 字段 | 类型 | 说明 |",
"|------|------|------|",
]
for inp in cap.input_fields:
lines.append(
f"| {inp.get('name','')} | {inp.get('type','')} | {inp.get('description','')} |"
)
lines += [
"",
"**输出规格:**",
"| 字段 | 类型 | 说明 |",
"|------|------|------|",
]
for out in cap.output_fields:
lines.append(
f"| {out.get('name','')} | {out.get('type','')} | {out.get('description','')} |"
)
lines += [
"",
"**置信度处理规则:**",
]
for rule in cap.confidence_rules:
lines.append(f"- 置信度 {rule['range']}:{rule['action']}")
lines += [
"",
f"**超时定义:** 正常响应 < {cap.timeout_normal_ms}ms,"
f"超过 {cap.timeout_fallback_ms}ms 触发降级",
f"**降级行为:** {cap.fallback_behavior}",
"",
]
# 04 失败机制与兜底
lines += [
"## 04 失败机制与兜底",
"",
"| 失败场景 | 触发条件 | 用户体验 | 系统行为 | 严重等级 |",
"|----------|----------|----------|----------|----------|",
]
for fs in spec.failure_scenarios:
lines.append(
f"| {fs.scenario_name} | {fs.trigger_condition} | "
f"{fs.user_experience} | {fs.system_behavior} | {fs.severity} |"
)
lines.append("")
# 05 评估标准与验收
lines += [
"## 05 评估标准与验收",
"",
"| 指标 | 基准值 | 目标值 | 测量方式 | 负责人 |",
"|------|--------|--------|----------|--------|",
]
for ac in spec.acceptance_criteria:
lines.append(
f"| {ac.metric_name} | {ac.baseline} | {ac.target} | "
f"{ac.measurement_method} | {ac.owner} |"
)
lines.append("")
# 06 上线与灰度计划
lines += [
"## 06 上线与灰度计划",
"",
"### 发布阶段",
]
for i, stage in enumerate(spec.rollout_stages, 1):
lines.append(f"{i}. {stage}")
lines += [
"",
f"### 回滚触发条件",
f"{spec.rollback_trigger}",
"",
]
return "\n".join(lines)
def validate_prd_spec(spec: PRDSpec) -> List[str]:
"""检查 PRD 规格的完整性"""
issues = []
if not spec.non_goals:
issues.append("未定义非目标(Non-goals),建议明确本期不做什么")
if len(spec.user_scenarios) < 2:
issues.append("用户场景不足,建议至少覆盖 3 个主要场景")
if not spec.excluded_scenarios:
issues.append("未定义排除场景,可能导致边界模糊")
for cap in spec.ai_capabilities:
if not cap.confidence_rules:
issues.append(f"AI 能力「{cap.capability_name}」未定义置信度处理规则")
if not cap.fallback_behavior:
issues.append(f"AI 能力「{cap.capability_name}」未定义降级行为")
if not spec.failure_scenarios:
issues.append("未定义任何失败场景,这是 AI PRD 必写部分")
if not spec.acceptance_criteria:
issues.append("未定义验收标准,无法客观判断上线条件")
return issues
# ── 演示 ──────────────────────────────────────────────
if __name__ == "__main__":
spec = PRDSpec(
product_name="智能客服平台",
feature_name="AI 意图识别与自动回复",
author="张三",
problem_statement=(
"当前人工客服首响时间平均 4.2 分钟,用户满意度 CSAT 3.8/5。"
"目标:通过 AI 将 70% 的标准问题实现自动回复,将首响时间降至 30 秒以内。"
),
success_metrics="首响时间 ≤ 30 秒(70% 问题),CSAT ≥ 4.2/5,人工转接率 ≤ 30%",
non_goals=[
"不处理需要账户操作的请求(如改密码、换绑手机)",
"不处理投诉类工单(直接转人工)",
"不支持语音输入(本期仅文字)",
],
user_scenarios=[
"用户询问标准配送时间 → AI 查询后直接回复",
"用户询问退款政策 → AI 从知识库检索并回复",
"用户描述问题含糊 → AI 追问澄清后处理",
],
excluded_scenarios=[
"涉及资金操作的请求",
"用户情绪激动、含有威胁性语言",
"超出产品支持范围的问题(如竞品咨询)",
],
ai_capabilities=[
AICapabilitySpec(
capability_name="用户意图识别",
input_fields=[
{"name": "user_message", "type": "string", "description": "用户输入文本,最长 500 字"},
{"name": "conversation_history", "type": "array", "description": "最近 5 轮对话"},
],
output_fields=[
{"name": "intent", "type": "enum", "description": "意图标签,见意图清单"},
{"name": "confidence", "type": "float", "description": "置信度 0.0-1.0"},
],
confidence_rules=[
{"range": "≥ 0.85", "action": "直接进入对应处理流程"},
{"range": "0.60-0.85", "action": "向用户确认意图"},
{"range": "< 0.60", "action": "转人工处理"},
],
timeout_normal_ms=1500,
timeout_fallback_ms=3000,
fallback_behavior="展示'正在为您处理...'并转人工队列",
),
],
failure_scenarios=[
FailureScenario(
scenario_name="模型超时",
trigger_condition="响应时间 > 3 秒",
user_experience="显示'正在连接客服,请稍候'",
system_behavior="放入人工队列,记录超时日志",
severity="P1",
),
FailureScenario(
scenario_name="低置信度意图",
trigger_condition="置信度 < 0.60",
user_experience="'我来帮您转接专属客服,请稍等'",
system_behavior="路由至人工,附带对话上下文",
severity="P2",
),
],
acceptance_criteria=[
AcceptanceCriteria(
metric_name="意图识别准确率",
baseline="N/A(新功能)",
target="≥ 85%(测试集 500 条)",
measurement_method="人工标注测试集离线评估",
owner="AI 工程师",
),
AcceptanceCriteria(
metric_name="首响时间",
baseline="4.2 分钟",
target="≤ 30 秒(AI 处理部分)",
measurement_method="系统日志统计 P50/P95",
owner="PM",
),
],
rollout_stages=[
"内部测试(1 周):研发 + PM + 测试,核心流程验证",
"Alpha(1 周):内部员工 100%,真实使用场景测试",
"Beta(2 周):外部用户 10%,观测 CSAT 和转接率",
"扩大灰度(1 周):50%,稳定性确认",
"全量发布:100%",
],
rollback_trigger=(
"Beta 阶段 CSAT 下降 > 10%、人工转接率 > 60%、"
"或出现内容安全问题时立即回滚"
),
)
# 验证完整性
issues = validate_prd_spec(spec)
if issues:
print("PRD 完整性检查发现以下问题:")
for issue in issues:
print(f"  ⚠ {issue}")
else:
print("PRD 完整性检查通过\n")
# 生成文档
prd_text = generate_prd_document(spec)
# 打印前 60 行预览
preview_lines = prd_text.split("\n")[:60]
print("\n".join(preview_lines))
print(f"\n... (共 {len(prd_text.split(chr(10)))} 行,已生成完整 PRD 骨架)")

本章 checklist

本章小结


下一节03-PRD评审与团队对齐机制 — PRD 写完不代表对齐完,如何主持评审让所有人真正理解而不只是"没意见"。