4、Prompt Engineering(上):零样本提示、少样本提示、思维链提示,角色设定与系统提示词

各位同学,咱们今天聊聊 Prompt Engineering。说实话,这玩意儿是我这两年花时间最多的方向之一。你想想看,大模型再强,你问不对问题,它照样给你胡扯。我见过太多人一上来就抱怨模型不行,结果一看他的 prompt,嗯……问题出在哪儿,咱们今天一次说清楚。

4.1 零样本提示:最基础的对话方式

零样本提示,说白了就是不给任何例子,直接问。比如你问「翻译这句话:Hello World」,模型直接给你答案。这是最自然的方式,也是大多数人日常使用的方式。

但这里有个坑。我在项目中遇到过,零样本提示对简单任务还行,一旦任务复杂,模型就开始「自由发挥」了。比如你让它「写一封商务邮件」,它可能给你写出一篇散文来。

核心要点:零样本提示适合简单、明确、无歧义的任务。比如分类、翻译、简单问答。

举个例子:

用户:将以下句子分类为正面或负面情感。
句子:这个产品太棒了!
模型:正面

你看,这种任务零样本就能搞定。但如果你问「帮我分析一下这个产品的市场前景」,零样本可能就给你一堆套话。

4.2 少样本提示:给模型「打个样」

少样本提示,就是给模型看几个例子,让它照着你的路子走。我个人习惯,但凡任务稍微复杂一点,我都会给 2-3 个例子。为什么?因为模型其实是个「模仿高手」,你给它看什么,它就学什么。

我曾经在做一个客服系统时,发现零样本提示下,模型回答的语气总是太正式。后来我给了 3 个「亲切、口语化」的例子,效果立竿见影。

用户:将以下句子分类为正面或负面情感。

例子1:
句子:今天天气真好!
情感:正面

例子2:
句子:这电影太无聊了。
情感:负面

现在请分类:
句子:这个服务让我很失望。
情感:

模型会照着例子来,输出「负面」。这就是少样本的力量——你不需要训练模型,只需要「引导」它。

我的建议:少样本提示的样本数量,3-5 个最佳。太少模型学不会,太多反而会混淆。另外,样本的顺序也有讲究——把最典型的放在前面。

4.3 思维链提示:让模型「想清楚再说」

思维链提示,英文叫 Chain-of-Thought,简称 CoT。这玩意儿是我觉得 Prompt Engineering 里最实用的技巧之一。

为什么会这样?因为大模型本质上是个「概率预测器」,你直接让它输出答案,它可能跳过推理步骤,直接猜。但如果你让它「一步一步思考」,它的准确率会大幅提升。

我记得有一次做数学题测试,直接问「小明有 5 个苹果,小红有 3 个,他们一共有几个?」模型答对了。但问「一个水池,进水管 4 小时注满,出水管 6 小时排空,同时开多久能满?」模型直接给我算了个负数。

加上思维链提示后:

用户:一个水池,进水管4小时注满,出水管6小时排空,同时开多久能满?请一步一步思考。

模型:
第一步:进水管每小时注水 1/4 池。
第二步:出水管每小时排水 1/6 池。
第三步:同时开,每小时净注水 1/4 - 1/6 = 1/12 池。
第四步:注满需要 1 ÷ (1/12) = 12 小时。
答案:12小时。

你看,加上「请一步一步思考」这六个字,结果天差地别。

注意:思维链提示会增加 token 消耗,因为模型会输出推理过程。但为了准确性,这点成本值得花。我一般在关键任务上必加 CoT。

4.4 角色设定:给模型「一个身份」

角色设定,就是告诉模型「你是谁」。这招特别管用。你想想看,同样一个问题,你问一个医生和问一个律师,得到的答案能一样吗?

我在做教育类应用时,发现让模型扮演「资深数学老师」和「同学」,回答风格完全不同。扮演老师时,它会耐心讲解步骤;扮演同学时,它会用更口语化的方式。

用户:你现在是一位资深Python工程师。请解释什么是装饰器。

模型:装饰器是Python中一种用于修改函数或类行为的设计模式。它本质上是一个函数,接受另一个函数作为参数,并返回一个新的函数……

如果不加角色设定,模型可能直接给你百科式的定义。加了角色设定,它会用「工程师」的口吻,更接地气。

关键点:角色设定要具体。不要说「你是一个专家」,要说「你是一位有10年经验的Java后端开发工程师」。越具体,模型越能进入状态。

4.5 系统提示词:对话的「底层规则」

系统提示词,是很多大模型 API 里的一个特殊参数。它不像用户消息那样被模型「看到」,而是作为对话的「背景设定」存在。

我习惯把系统提示词当作「对话的宪法」。比如:

系统提示词:
你是一个友好的客服助手。你的回答必须:
1. 使用中文
2. 语气亲切
3. 不超过100字
4. 如果不知道答案,就说“我帮你转接人工客服”

这样一来,无论用户怎么问,模型都会遵守这些规则。我在项目中遇到过,如果不设系统提示词,模型有时候会「跑偏」,比如突然用英文回答,或者长篇大论。

我的经验:系统提示词里,把「禁止做的事」和「必须做的事」都写清楚。比如「禁止使用专业术语」「必须给出具体例子」。这样模型就不会自由发挥了。

4.6 实战组合:把这些技巧串起来

好了,咱们把今天学的串起来。假设你要做一个「编程助手」,可以这样设计:

系统提示词:
你是一位资深全栈工程师。回答问题时,请:
1. 先给出思路,再给代码
2. 代码必须包含注释
3. 如果问题复杂,请分步骤解释

用户:请用Python写一个二分查找算法。

模型(思维链+角色设定+少样本):
好的,我来实现二分查找。先说一下思路:
二分查找的核心是每次取中间值比较,缩小查找范围。

代码如下:
def binary_search(arr, target):
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2  # 取中间索引
        if arr[mid] == target:
            return mid  # 找到目标
        elif arr[mid] < target:
            left = mid + 1  # 在右半部分
        else:
            right = mid - 1  # 在左半部分
    return -1  # 未找到

你看,系统提示词设定了角色和规则,用户问题触发了思维链,模型自动给出了带注释的代码。这就是 Prompt Engineering 的魅力——你不需要改模型,只需要改提问方式。

总结一下:

  • 简单任务用零样本
  • 复杂任务加少样本
  • 推理任务必用思维链
  • 角色设定让回答更专业
  • 系统提示词定好规矩

嗯,今天的内容就到这儿。下一章咱们继续聊 Prompt Engineering 的下半部分,包括温度参数、Top-p 采样、以及如何调试 prompt。到时候我会分享一些我踩过的坑,保证实用。