跳到主要内容

Prompt 工程入门

副标题:结构化 Prompt、模板化、多轮对话与 UI 结合

目标:让 Prompt 从“一句话灵感”变成“可维护、可评估、可配置”的产品能力。

目录

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