封面:一篇看懂 AI 大模型(系列统一封面)

Day02|Prompt 工程的 3 个核心技巧(讲透版)

前言:同一个模型,凭什么有人用得好

凌晨两点,你盯着屏幕。

隔壁老王用着同一个 ChatGPT,三分钟搞定周报。你问了半小时,它还答非所问——要么写得太虚,要么格式乱七八糟。

你心里那个鼓点开始敲:是模型偏心?是我智商不够?

都不是。

差距不在模型,在 Prompt。

同一颗大脑,你给它清晰指令还是含糊问题,出来的东西天差地别。我踩过太多坑,把市面上的 Prompt 技巧翻了一遍,发现真正高频管用的,就 3 个。

今天我不光给你这 3 个名字,还讲透每一个为什么有效、怎么写、容易踩什么坑。读完你今晚就能用,而且知道为什么这么用。


PART 01:角色设定——先告诉模型,它是谁

为什么有效:大模型训练时,读过海量「某个角色说的话」。你给它一个身份,等于让它把注意力聚焦到那部分知识上,用那个角色的口吻和深度来回答。

往底层说一句:这是条件激活——身份词会激活模型里和该角色相关的参数通路,抑制无关的「发散」。所以加了角色,输出会更收敛、更专业、更少废话。

怎么写:一句话——「你是一个……」。

# 不加角色(泛泛)
prompt = "帮我写个产品周报"

# 加角色(聚焦)
prompt = "你是一个有 8 年经验的 ToB 产品经理。帮我写本周周报。"

加了角色,模型写出来的周报,术语、关注点、颗粒度全都不一样——它开始像一个产品经理那样思考。

角色选得对不对,效果差很多。常见角色和它们各自聚焦的方向:

角色 聚焦点 适合的活
ToB 产品经理 客户场景、指标、优先级 周报、需求文档
资深文案 钩子、节奏、情绪 标题、广告语
数据分析师 SQL、指标拆解、归因 数据解读、报表
代码审查员 边界条件、安全、性能 代码 review
面试官 追问逻辑、深度、反例 模拟面试、自检

三个角色卡对比:产品经理 / 文案 / 代码审查员

进阶一招:主角色 + 审核角色。先让模型扮演执行者产出,再让它切换成审核者挑刺,效果比一次生成好得多。

# 第一轮:执行者
draft = chat("你是有 8 年经验的 ToB PM。帮我写本周周报。")
# 第二轮:审核者
final = chat(f"你是挑剔的技术总监。审这段周报,指出 3 个不够具体的地方并改写:\n{draft}")

常见坑:角色太泛,等于没加。

"你是一个专家"——啥专家?模型还是不知道聚焦哪。"你是一个资深数据分析师,擅长 SQL 和指标拆解"——这才叫角色。

一句话:角色越具体,模型越知道调用哪块脑容量。


PART 02:任务拆解 + CoT 思维链——模型最怕含糊

为什么有效:模型不是一个字一个字往后蒙最准,而是一步步想更准。你把大任务拆成小步骤,等于强迫它一步步推理,而不是一口气猜一个答案。

底层原理就一句:拆解让模型把更多 token「花在推理」上,而不是直接跳到结论。每多一步中间过程,它就有更多机会修正方向,错误就更难累积到最终答案。

怎么拆:把"做一件事",拆成"按顺序做 3~5 件小事"。

# 含糊(模型瞎猜结构)
prompt = "帮我分析这个产品为啥留存低"

# 拆解 + 思维链(模型按步推理)
prompt = """你是一个产品增长专家。请按以下步骤分析留存低的原因:
1. 先列出 3 个最可能的假设
2. 对每个假设,给出验证它需要的核心数据
3. 最后按「影响面 × 置信度」排序,给出优先验证哪个
"""

看出差别没?含糊版,模型给你一段泛泛的"可能用户体验不好"。拆解版,它被迫先列假设、再给数据、最后排序——每一步都比"蒙一段"靠谱。

拆解版模型实际会这么答(每步都落到实处):

  • 假设:① 新用户引导太长,没等到 aha 时刻就走;② 核心功能入口太深,注册后找不到;③ push 太频繁被关通知。
  • 验证数据:① 看新用户「注册→首次成功」漏斗,卡在哪一步;② 看注册后 24h 内是否点过核心功能;③ 看 push 关闭率和关通知用户的留存对比。
  • 排序:按「影响面 × 置信度」,优先验证①——影响面最大(覆盖所有新用户),且数据现成。

看见没?同样的模型,换个问法,输出从「一段正确的废话」变成「一份能直接开干的行动清单」。

这招有个学名,叫 CoT(Chain of Thought,思维链)。本质就一句话:别让模型跳着答,让它把推理过程写出来。 复杂问题(推理、计算、多步规划)尤其管用。

CoT 有两种用法,按需选:

类型 怎么触发 适合
Zero-shot CoT 在 prompt 末尾加一句「请一步步思考」 通用、省事
Few-shot CoT 给 1~2 个带推理过程的样例 任务复杂、要求高

任务拆解 + CoT 思维链:问题 → 列假设 → 给数据 → 排序

⚠️ 但 CoT 不是万能的。简单任务(翻译一句话、改个错别字)用 CoT 反而变慢、变啰嗦,甚至引入错误——模型为了「凑步骤」会过度发挥。判断标准:任务需要推理/计算/规划才上 CoT,直觉型任务别画蛇添足。

拆解的粒度也有讲究,不是越细越好:

拆解粒度 步数 效果
太粗 1 步 退化成含糊提问,模型瞎蒙
舒适区 3~5 步 推理充分,又不啰嗦
太碎 7+ 步 模型啰嗦、容易跑偏,该合并

常见坑:拆得太碎,模型反而啰嗦。 3~5 步最舒服,超过 7 步考虑合并。


PART 03:Few-shot + 输出格式——给例子,定格式

为什么有效:你在 Prompt 里解释 100 句"我要那种……的感觉",不如塞给它一个真实样例。模型是模仿大师,照着例子来,准确率立涨。

怎么给:放 1~2 个「输入→输出」的样例,然后再给真实任务。

prompt = """把用户的吐槽分类成:bug / 需求 / 吐槽。

例子1:
输入:点了三次才下单成功
输出:bug

例子2:
输入:希望加个夜间模式
输出:需求

现在分类:
输入:""" + user_input

Few-shot 例子不是随便挑的,有四条挑选原则:

  • 数量:1~2 个就够,别堆。多了反而过拟合,模型变死板。
  • 顺序:把和当前任务最接近的例子放最后(近因效应最强)。
  • 反例:加一个「容易混淆但类别不同」的例子,模型分得更清。
  • 风格一致:所有例子的输入长度、输出格式要统一,不然模型学混。

输出格式控制:除了给例子,还要明说格式——「用 JSON 输出」「用 Markdown 表格」「不超过 50 字」。模型默认爱写长文,你不说格式,它就给你一大段散文。

三种常见格式的 before/after:

你想要的 别这么说 这么说
JSON 「结构化一点」 「只输出 JSON,字段:category, confidence」
表格 「整理一下」 「用 Markdown 表格,列:功能、优先级、理由」
短文 「简洁点」 「不超过 50 字,不要开头客套」

给你一个完整可跑的分类例子,带 JSON 解析:

import json
from openai import OpenAI

client = OpenAI()

resp = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{
        "role": "user",
        "content": f"""把用户反馈分类为 bug / 需求 / 吐槽,只输出 JSON。
{{"category": "...", "reason": "...一句话理由..."}}

输入:{user_input}""",
    }],
)
result = json.loads(resp.choices[0].message.content)  # 直接解析成 dict
print(result["category"], result["reason"])

Few-shot vs Fine-tune 的边界:当你发现 prompt 里要塞的例子越来越多(5 个以上还压不住),或者任务风格极度固定、调用又高频——那就是从 Few-shot 该升级到 Fine-tune 的信号了。例子能解决 80% 的问题,剩下 20% 重复到一定程度,就该烙进权重。

常见坑:例子给太多(5 个以上)反而过拟合,模型变得死板;例子之间风格要一致,不然模型学混。


结尾:3 招合一

回头看,Prompt 工程就 3 招:

角色设定(让它知道用哪部分脑)→ 任务拆解 + CoT(让它一步步想)→ Few-shot + 格式(让它照着做、按格式交)。

每招都不是玄学,是对着大模型的脾气来的。

Prompt 不是咒语,是写给模型的沟通说明书。你写得多清楚,它就答得多准。

下一篇我想拆更具体的——你最想让我讲 Few-shot 例子怎么挑CoT 在什么场景反而会搞砸,还是 Prompt 注入怎么防

这 3 招别光看,今晚就找一个真实任务练手——写周报、改文案、做分类都行,练一次比看十篇技巧帖管用。

评论区告诉我。

下一篇预告:Day03 可能讲「Few-shot 例子到底怎么挑——数量、顺序、反例都有讲究」
我是小刘檀木,一个从二本摸爬滚打到上市公司 AI 负责人的普通人。关注我,把 AI 学进简历

— END —

小刘檀木 · 帮普通人把 AI 学进简历

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐