← 返回学习路线

M1.2 · 提示词进阶

掌握程度:熟练 小白职场人 📘 已发布学习资料
📥 下载资料 (.md) 含概念讲解 · 可运行代码 · 练习 · 自测

M1.2 提示词进阶

目标:用 Few-shot、思维链、自我校正、结构化输出,让结果更稳定可靠。

1. 少样本(Few-shot):给例子让模型照着做

当任务有"特定格式或风格"时,给 1–3 个例子比写一大段规则更管用。

prompt = """
请把用户的话改写成"礼貌拒绝"的回复。

例1:
用户:你们能开发票吗?
回复:抱歉,本店暂不支持开具发票,感谢理解。

例2:
用户:能便宜点吗?
回复:价格已是成本价啦,确实没法再低,还请见谅。

现在改写:
用户:能把课程录屏发我吗?
"""
# 模型会"模仿"例子的语气和结构,而不是自由发挥

2. 思维链(CoT):让模型"一步步想"

复杂问题直接要答案容易错,让它先推理再给结论。

prompt = """
请解答下面应用题,并展示推理过程。

题目:仓库有 120 件商品,第一天卖出 1/3,第二天卖出剩下的 1/4,
第三天又进货 50 件,最后剩多少?

请用以下格式:
步骤1:...
步骤2:...
最终答案:...
"""

进阶:加一句"如果某一步不确定,请明确说明",能显著降低瞎编。

3. 自我校正:让模型检查自己的答案

# 两步法:先答,再让它当"审稿人"
answer = llm(f"问题:{q}\n请给出解答:")
review = llm(f"下面这个解答有错误吗?请指出并修正:\n{answer}")

适合:数学、代码、事实性内容。实战里常把"生成 + 校验"串成一个流水线。

4. 结构化输出:要求返回 JSON / 表格

模型默认输出自由文本,你要程序化处理就得要 JSON。

import json

prompt = """
从简历文本中抽取信息,只返回 JSON,不要多余文字:
{
  "name": "",
  "years_of_exp": 0,
  "skills": []
}
简历:{resume_text}
"""
raw = llm(prompt)
data = json.loads(raw)   # 拿到结构化数据,方便入库/展示

踩坑:模型偶尔会夹带 ```json 标记。用这招兜底:

import re
m = re.search(r"\{.*\}", raw, re.S)   # 贪婪匹配第一个 { 到最后一个 }
data = json.loads(m.group(0)) if m else None

动手练习

  1. 用 Few-shot 写一段"把顾客差评改写成内部工单"的提示词(给 2 个例子)。
  2. 用 CoT 让模型解一道你工作里的真实计算题,看推理是否可信。
  3. 用"结构化输出"把一段会议纪要抽成 JSON(含 待办 / 负责人 / 截止日)。

自测

  1. Few-shot 适合什么场景?什么时候反而该少给例子?
  2. CoT 为什么能提升复杂题准确率?它的代价是什么(慢/贵)?
  3. 为什么要求 JSON 输出时,最好加一段"容错解析"代码?