Prompt 工程入门
副标题:结构化 Prompt、模板化、多轮对话与 UI 结合
目标:让 Prompt 从“一句话灵感”变成“可维护、可评估、可配置”的产品能力。
目录
- Prompt 工程的本质:交互设计 + 约束设计
- 结构化 Prompt:Role / Task / Constraint / Output
- 多轮对话控制:什么时候追问、什么时候收敛
- 模板化与参数化:把 Prompt 交给 UI 驱动
- 输出可控:JSON/Markdown/表格与校验策略
- 评估与迭代:从“感觉不错”到“可验证更好”
- 最小可运行 Demo(Prompt 工程版)
- 完整可运行代码(Prompt 工程 + JSON 校验)
Prompt 工程的本质:交互设计 + 约束设计
做 AI 应用时,Prompt 不只是“写得像人话”,更像是:
- 交互设计:你如何从用户输入构建任务意图、上下文、状态
- 约束设计:你如何限制模型输出范围,降低幻觉与越权
- 工程化:版本管理、模板化、可配置、可回滚、可评估
简单判断你的 Prompt 是否“工程化”:
- 同一个任务,在不同人输入下,输出格式是否稳定?
- 输出能否被程序消费(JSON/字段化)?
- 出错时能否自动重试/追问补齐?
结构化 Prompt:Role / Task / Constraint / Output
推荐用一个固定骨架,降低随机性:
- Role(角色):让模型用什么身份/语气/能力边界工作
- Task(任务):要完成什么,以及成功标准是什么
- Constraint(约束):必须/禁止、字数、风格、引用、不得编造
- Output(输出):固定输出格式(Markdown/JSON/表格)
一个可复用的例子(PRD 生成):
Role:
你是资深产品经理,擅长把用户需求拆解成可实施的PRD。
Task:
根据用户输入的产品想法,输出一份 PRD 草案。
Constraint:
- 使用 Markdown
- 必须包含:背景、目标、用户画像、核心流程、功能点、异常场景、埋点建议
- 不得编造不存在的业务数据;如缺信息,列出“需要补充的问题”
Output:
按以下章节顺序输出:## 背景 ...(固定章节)
前端的优势在于:你可以把这些“约束”变成 UI 中的开关/选项,而不是写死在文本里。
可直接复用的 Prompt 模板库(示例)
下面给一组“可复制粘贴”的模板,适合做成产品里的“模板选择器”:
1)结构化总结(用于会议纪要/日报)
Role: 你是高级助理,擅长结构化总结。
Task: 把用户输入整理成结构化要点。
Constraint:
- 使用 Markdown
- 必须包含:背景、结论、行动项、风险
- 行动项必须可执行(动词开头)
Output:
## 背景
## 结论
## 行动项
## 风险
2)代码解释(用于代码评审/文档)
Role: 你是资深前端工程师。
Task: 用简洁语言解释下面代码做了什么。
Constraint:
- 先给一句话总结
- 再给 3-5 条要点
- 不要编造不存在的函数或模块
Output:
一句话总结:
- 要点1
- 要点2
3)RAG 回答(强约束引用)
规则:
1) 只能基于证据回答
2) 每个结论后必须标注引用 [S1][S2]
3) 无证据则明确拒答
多轮对话控制:什么时候追问、什么时候收敛
一个好用的 AI 产品,通常不是“一次性输出”,而是“对话式收敛”。
追问策略(缺信息就问)
当模型发现关键信息缺失时,应该:
- 先列出 最少问题集(3-5 个)补齐信息
- 用户回答后再生成最终结果
这对应的产品形态可以是:
- 对话里追问(Chat)
- 表单补齐(Form)
- 混合:先问 2-3 个关键问题,然后给表单让用户完善
收敛策略(信息足够就产出)
避免一直追问:当关键字段齐全时,直接输出结果,并提供“可编辑”的区域。
示例:追问优先级(最小问题集)
当用户“需求太模糊”时,用最小问题集快速收敛:
- 目标用户是谁?
- 最重要的 1-2 个功能是什么?
- 输出形式偏“表格/文案/计划/代码”?
只问 3-5 个问题,避免“问卷式轰炸”导致流失。
模板化与参数化:把 Prompt 交给 UI 驱动
把 Prompt 当成模板文件(或配置项),由 UI 状态驱动:
- 表单输入 → Prompt 参数
- 目标用户、语气、输出格式、长度、是否需要引用、是否需要生成结构化 JSON
- UI 状态 → 上下文
- 当前页面选中的文档、当前工作流步骤、用户最近一次操作
一个实用的模板结构(推荐你在工程里这么组织):
system:全局规则(安全、禁止编造、输出格式优先级)task:本次任务描述(由页面/按钮决定)context:上下文(用户输入、检索片段、历史摘要)output:固定输出 schema(Markdown 章节或 JSON schema)
示例:模板参数化(把 UI 变成 Prompt 参数)
{
"tone": "professional",
"length": "short",
"need_citations": true,
"format": "markdown",
"audience": "产品经理"
}
你可以把这些参数映射为 Prompt 片段:
tone=professional→ “语气:专业、克制”length=short→ “限制 300 字以内”need_citations=true→ “必须引用来源”
输出可控:JSON/Markdown/表格与校验策略
为什么要可控输出
因为“AI 输出”往往要被后续流程消费:
- 渲染到卡片/表格
- 写入数据库
- 驱动下一步工作流(比如生成任务拆解、生成测试用例)
两种常用输出方式
- Markdown(给人看)
- 适合:PRD、总结、方案、报告
- 技巧:固定章节标题;不要让模型自由发挥结构
- JSON(给程序用)
- 适合:字段化信息(标题、要点、优先级、风险列表)
- 技巧:服务端做 JSON schema 校验,不合格就重试/追问
兜底策略(很关键)
当输出不符合格式时,不要直接展示一坨“失败文本”:
- 自动重试(带上失败原因与示例)
- 追问补齐(缺字段就问)
- 降级展示(至少展示可读文本 + 提示用户如何修正)
示例:JSON Schema + 校验(可直接用)
{
"type": "object",
"properties": {
"title": { "type": "string" },
"summary": { "type": "string" },
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"priority": { "type": "string", "enum": ["P0", "P1", "P2"] }
},
"required": ["name", "priority"]
}
}
},
"required": ["title", "items"]
}
当校验失败时的最小策略:
- 把“失败原因”写回 Prompt,让模型修正
- 连续失败 2 次就降级为“可读文本 + 手动编辑”
评估与迭代:从“感觉不错”到“可验证更好”
最小可行评估体系(你做作品集也能讲清楚):
- 用例集:20-50 个真实问题/输入(覆盖边界情况)
- 指标(至少选 2 个)
- 格式合格率(JSON 可解析/章节齐全)
- 引用命中率(RAG 场景)
- 用户满意度(thumb up/down + 原因)
- 回归测试:每次改 Prompt、换模型,都跑一遍用例集
工程化建议:
- Prompt 版本号(v1/v2),支持回滚
- 重要 Prompt 走 Code Review(像代码一样)
- 线上 A/B:小流量验证再全量
Prompt 版本化与 A/B 示例
prompt_id: prd_generator
version: v3
changes:
- 增加“异常场景”章节
- 加强“不得编造”约束
metrics:
- 格式合格率: 92% -> 97%
- 用户满意度: 3.8 -> 4.2
让 Prompt 像代码一样可追溯,是“能长期优化”的前提。
最小可运行 Demo(Prompt 工程版)
目标:把“模板 + 参数 + 校验”跑通一遍。
最小可运行代码(模板渲染 + JSON 校验)
// demo-prompt.ts(伪代码)
const template = `
Role: 你是资深产品经理
Task: 生成PRD
Constraint: 必须输出JSON
Output: { "title": "...", "items": [ { "name": "...", "priority": "P1" } ] }
`;
const params = { title: "智能客服", feature: "自动总结" };
const prompt = template.replace("生成PRD", `生成PRD:${params.title}`);
// 这里假设你拿到模型输出 output
const output = `{"title":"智能客服","items":[{"name":"自动总结","priority":"P1"}]}`;
// JSON校验(伪代码)
const parsed = JSON.parse(output);
if (!parsed.items?.length) throw new Error("items 为空");
完整 Demo 结构(Prompt 版本化最小骨架)
demo-prompt/
prompts/
prd_generator.v1.txt
prd_generator.v2.txt
scripts/
demo-prompt.ts
README.md
常见坑排查清单
- 模型输出不是 JSON:未强制格式 → 增加 JSON schema + 重试
- 字段缺失:约束不够强 → 提示“字段缺失必须补齐”
- 模板太长:导致成本高/上下文爆 → 拆分为 system + task + context
完整可运行代码(Prompt 工程 + JSON 校验)
源码目录:
docs/demos/prompt-demo
cd docs/demos/prompt-demo
npm i
node index.js