文章
提示词工程化编写六步法
提示词工程化编写六步法
记住一句话:先定义、再流程、最后兜底。
第一步:定角色(你是谁)
写法: “你是一个 [领域] 的 [职称/角色],[特点/语气]。”
注意:
- 角色要具体,不要“助手”,要“快递单号提取助手”
- 可以加语气限定,如“态度友好”、“客观严谨”
第二步:定任务(干什么)
写法: “根据输入的 [输入是什么],完成 [输出是什么]。”
注意:
- 一句话说清输入→输出,不要展开
- 必须覆盖失败情况:加一句“如果没有找到,则返回空”
第三步:定输入(吃什么)
写法: “输入格式:标识符 {{变量名}}”
注意:
- 用占位符
{{variable}}明确变量名,方便程序对接 - 如果有多个输入,逐个列出
第四步:定流程(怎么干)
写法: 用编号列表,按顺序写执行步骤。遇到分支用“如果…则…否则…”
注意:
- 第一步通常是“解析输入、判断有效性”
- 分支必须覆盖主路径和异常路径
- 有判断规则时,把具体阈值/条件写进去(如“≥80分推荐”)
- 不要写废话步骤(如“输出结果”这种),只写决策逻辑
第五步:定格式(产出啥)
写法: 给一个纯 JSON/XML 示例,并强制“只输出 JSON,不要任何其他文字”。
注意:
- 字段名用英文,方便程序解析
- 数组字段说明清楚(如“待办事项数组,无则为 []”)
- 必须加一句:“不要输出 Markdown 代码块标记,不要输出解释文字”
第六步:定边界(别出错)
写法: 列出所有可能出问题的情况及处理方式。
注意,至少覆盖这5类:
| 必须覆盖 | 示例 |
|---|---|
| 空输入 | “输入为空字符串时,返回 []” |
| 无匹配 | “没有任何符合条件的结果时,返回空数组” |
| 模糊/异常输入 | “输入乱码或与任务无关时,返回错误标识” |
| 多条/去重 | “多条结果全部提取,相同项去重” |
| 禁止行为 | “绝对不要编造数据”、“不要使用文档外的知识” |
写完后的自检三问
写完提示词后,问自己这三句:
- 输入为空时,输出什么? → 检查边界里有没有写
- 没结果时,输出什么? → 检查格式里有没有空态定义
- 输出格式纯净吗? → 检查有没有写“只输出 JSON”
三点都满足了,这份提示词就是生产级的。
定角色、定任务、定输入、定流程、定格式、定边界。写完三问:空了咋办?没结果咋办?输出纯不纯?
示例场景:判断用户消息是否为“投诉”
需求:输入一句用户消息,判断是不是投诉。是投诉返回 true + 原因,不是返回 false。
| 步骤 | 说明 | 提示词怎么写 | 关键提示 |
|---|---|---|---|
| 1. 角色 | 给身份 | 你是一个客服质检专家,擅长识别用户消息中的投诉意图。 | 身份要具体,不要只写“助手” |
| 2. 任务 | 一句话说清干什么 | 根据用户消息,判断是否为投诉。是投诉输出 true,不是输出 false。 | 把“是/否”两种结果都写进一句话里 |
| 3. 输入 | 约定占位符 | 用户消息:```text {{user_input}} ``` | 用固定标识符包起来,给变量起名 |
| 4. 流程 | 编号写逻辑 | 1. 阅读消息,识别是否包含负面情绪或不满表达。 2. 如果包含抱怨、指责、要求赔偿、威胁差评等,判定为投诉。 3. 如果只是咨询、建议或闲聊,判定为非投诉。 | 每步一个动作,分支写“如果…则…” |
| 5. 格式 | 给 JSON 示例 + 纯净输出 | 只输出 JSON,不要其他文字。格式:{ "is_complaint": true, "reason": "含威胁差评" } | 这一行加粗:只输出 JSON |
| 6. 边界 | 把坑列出来 | - 空输入 → is_complaint: false, reason: "输入为空" - 模糊消息(如“呵呵”)→ 判为非投诉,reason说明“无明确投诉意图” - 禁止将单纯询问政策的消息误判为投诉 | 至少写空输入、无匹配、禁止行为 |
完整提示词
## 角色
你是一个客服质检专家,擅长识别用户消息中的投诉意图。
## 任务
根据用户消息,判断是否为投诉。是投诉输出 true 并说明原因,不是输出 false。
## 输入
用户消息:```text {{user_input}} ```
## 流程
1. 阅读用户消息,识别是否包含负面情绪、不满或诉求表达。
2. 如果消息包含抱怨、指责、要求赔偿、威胁差评、反复抱怨同一问题,判定为投诉。
3. 如果消息只是咨询问题、提出建议、纯聊天,判定为非投诉。
## 输出格式
只输出一个 JSON 对象,不要包含任何其他文字:
{
"is_complaint": true,
"reason": "用户威胁给差评"
}
## 注意事项
- 空输入时,is_complaint 为 false,reason 为“输入为空”。
- 模糊消息如“呵呵”、“好吧”,判为非投诉,reason 说明“无明确投诉意图”。
- 不要将普通咨询误判为投诉。练习场景:用户消息语言检测
需求
用户发来一条消息,你需要判断这条消息是中文、英文还是混合(中英夹杂),并给出判断依据(找到的关键词/特征)。
业务规则
- 如果消息中只有中文字符(允许中文标点)→ 中文
- 如果消息中只有英文字符(允许英文标点和数字)→ 英文
- 如果消息中同时包含中文和英文 → 混合
- 如果消息为空或无法判断 → 未知
要求
按六步法写出完整提示词:角色、任务、输入、流程、格式、边界。
你的填空模板
| 步骤 | 你要填的 |
|---|---|
| 角色 | 你是______ |
| 任务 | 根据______,判断______ |
| 输入 | 约定占位符______ |
| 流程 | 1. ______ 2. ______ 3. ______(有分支写分支) |
| 格式 | 输出 JSON 结构______ |
| 边界 | 空输入______、模糊输入______、禁止______ |
写完用这三条自测:
"Hello,请问这个产品多少钱?""I want to buy this product"""(空字符串)
提示词:
## 角色
你是一名中英文文本判定专家,擅长区分用户输入文本的语言类型。
## 任务
根据用户输入的一段文本,判断其语言类型(中文、英文、混合、未知),并说明判断依据。
## 输入
用户输入:```text {{user_input}} ```
## 流程
按以下顺序逐项判断,命中即停止:
1. 如果输入文本为空或仅含空白字符 → 判定为“未知”,依据为“输入为空”。
2. 检查文本中是否包含中文字符(Unicode范围:\u4e00-\u9fff)。
3. 检查文本中是否包含英文字母(A-Z, a-z)。
4. 根据检查结果判定:
- 只有中文、无英文 → “中文”,依据为“仅含中文字符”
- 只有英文、无中文 → “英文”,依据为“仅含英文字符”
- 同时有中文和英文 → “混合”,依据为“同时包含中英文,例如:[具体摘录的关键词]”
- 既无中文也无英文(如纯数字、纯标点、其他语言)→ “未知”,依据为“未检测到中文或英文字符”
## 输出格式
只输出一个 JSON 对象,不要包含任何其他文字:
{
"language": "中文",
"reason": "仅含中文字符"
}
## 注意事项
- 空输入或纯空白字符 → language 为“未知”,reason 为“输入为空”。
- 纯数字、纯标点、其他语言文本 → language 为“未知”,reason 说明未检测到中英文字符。
- reason 必须包含具体判断依据,如“仅含中文字符”、“同时包含中英文,关键词:Hello/请问”。
- 禁止输出任何非 JSON 内容,包括解释文字和 Markdown 代码块标记。练习场景:文本中的手机号和邮箱提取
需求
用户输入一段混排文本,你需要从中提取所有手机号和所有邮箱地址,分别放入两个数组返回。如果没有某类信息,对应数组为空。
业务规则
- 手机号格式:中国大陆手机号,1开头,共11位数字(如 13812345678)
- 邮箱格式:用户名@域名.后缀(如 test@example.com)
- 两种实体互不干扰,各自独立提取
- 同一个实体多次出现,只保留一次(去重)
要求
按六步法写出完整提示词:角色、任务、输入、流程、格式、边界。
你的填空模板
| 步骤 | 你要填的 |
|---|---|
| 角色 | 你是______ |
| 任务 | 根据______,提取______ |
| 输入 | 约定占位符______ |
| 流程 | 1. ______ 2. ______ 3. ______(注意两种实体分别处理,最后去重) |
| 格式 | 输出 JSON 结构(含两个数组)______ |
| 边界 | 空输入______、无匹配______、去重______、格式不严格______、禁止______ |
写完用这五条自测:
"请联系我:13812345678 或发邮件 test@abc.com""我的手机13800001111,备用机13800002222,邮箱 admin@test.cn""只有邮箱 support@example.com 没有手机号""1381234"(不完整手机号)""(空字符串)
提示词:
## 角色
你是一名文本信息提取专家,擅长从混排文本中精准识别中国大陆手机号和邮箱地址。
## 任务
根据用户输入的混排文本,提取所有符合格式的手机号和邮箱地址,分类放入数组并去重。如果没有某类信息,对应数组为空。
## 输入
用户输入:```text {{user_input}} ```
## 流程
按以下顺序处理:
1. 扫描文本,查找符合以下格式的实体:
- 手机号:1 开头的 11 位连续数字(如 13812345678),前后不能紧邻数字(避免误提取更长数字串)。
- 邮箱:包含 @ 且 @ 前后有合法字符,域名部分包含 . 的字符串(如 test@example.com)。
2. 分别将提取到的手机号和邮箱放入两个列表。
3. 对每个列表内部进行去重(相同字符串只保留一个)。
4. 如果没有任何手机号,tel 数组为空;如果没有任何邮箱,email 数组为空。
5. 直接输出 JSON,不要添加任何解释、评论或 Markdown 标记。
## 输出格式
只输出以下 JSON 对象:
{
"tel": ["13812345678"],
"email": ["test@example.com"]
}
## 注意事项
- 【空输入】如果用户输入为空字符串,输出 { "tel": [], "email": [] }。
- 【格式严格】手机号必须是 11 位且以 1 开头,邮箱必须包含 @ 和 . 且结构完整,不满足条件的忽略。
- 【去重】相同手机号或邮箱多次出现,只保留一个。
- 【纯净输出】不要输出 JSON 以外的任何文字,不要用 Markdown 代码块包裹。