大数据

提示词工程化编写六步法

提示词工程化编写六步法

记住一句话:先定义、再流程、最后兜底。

第一步:定角色(你是谁)

写法: “你是一个 [领域] 的 [职称/角色],[特点/语气]。”

注意:

  • 角色要具体,不要“助手”,要“快递单号提取助手”
  • 可以加语气限定,如“态度友好”、“客观严谨”

第二步:定任务(干什么)

写法: “根据输入的 [输入是什么],完成 [输出是什么]。”

注意:

  • 一句话说清输入→输出,不要展开
  • 必须覆盖失败情况:加一句“如果没有找到,则返回空”

第三步:定输入(吃什么)

写法: “输入格式:标识符 {{变量名}}

注意:

  • 用占位符 {{variable}} 明确变量名,方便程序对接
  • 如果有多个输入,逐个列出

第四步:定流程(怎么干)

写法: 用编号列表,按顺序写执行步骤。遇到分支用“如果…则…否则…”

注意:

  • 第一步通常是“解析输入、判断有效性”
  • 分支必须覆盖主路径和异常路径
  • 有判断规则时,把具体阈值/条件写进去(如“≥80分推荐”)
  • 不要写废话步骤(如“输出结果”这种),只写决策逻辑

第五步:定格式(产出啥)

写法: 给一个纯 JSON/XML 示例,并强制“只输出 JSON,不要任何其他文字”。

注意:

  • 字段名用英文,方便程序解析
  • 数组字段说明清楚(如“待办事项数组,无则为 []”)
  • 必须加一句:“不要输出 Markdown 代码块标记,不要输出解释文字”

第六步:定边界(别出错)

写法: 列出所有可能出问题的情况及处理方式。

注意,至少覆盖这5类:

必须覆盖示例
空输入“输入为空字符串时,返回 []”
无匹配“没有任何符合条件的结果时,返回空数组”
模糊/异常输入“输入乱码或与任务无关时,返回错误标识”
多条/去重“多条结果全部提取,相同项去重”
禁止行为“绝对不要编造数据”、“不要使用文档外的知识”

写完后的自检三问

写完提示词后,问自己这三句:

  1. 输入为空时,输出什么? → 检查边界里有没有写
  2. 没结果时,输出什么? → 检查格式里有没有空态定义
  3. 输出格式纯净吗? → 检查有没有写“只输出 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 结构______
边界空输入______、模糊输入______、禁止______

写完用这三条自测:

  1. "Hello,请问这个产品多少钱?"
  2. "I want to buy this product"
  3. "" (空字符串)

提示词:

## 角色
你是一名中英文文本判定专家,擅长区分用户输入文本的语言类型。

## 任务
根据用户输入的一段文本,判断其语言类型(中文、英文、混合、未知),并说明判断依据。

## 输入
用户输入:```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 结构(含两个数组)______
边界空输入______、无匹配______、去重______、格式不严格______、禁止______

写完用这五条自测:

  1. "请联系我:13812345678 或发邮件 test@abc.com"
  2. "我的手机13800001111,备用机13800002222,邮箱 admin@test.cn"
  3. "只有邮箱 support@example.com 没有手机号"
  4. "1381234" (不完整手机号)
  5. "" (空字符串)

提示词:

## 角色
你是一名文本信息提取专家,擅长从混排文本中精准识别中国大陆手机号和邮箱地址。

## 任务
根据用户输入的混排文本,提取所有符合格式的手机号和邮箱地址,分类放入数组并去重。如果没有某类信息,对应数组为空。

## 输入
用户输入:```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 代码块包裹。