方向性刺激提示 (Directional Stimulus Prompting)。
这是一种非常强大、直接且高效的提示技术,旨在精确控制大型语言模型(LLM)的输出格式、结构、风格或思考路径。
核心定义
方向性刺激提示 ,简单来说,就是在你的指令(Prompt)的末尾,直接给出期望输出的"开头部分"。这个"开头部分"就像一个强有力的"刺激"或"引子",引导模型沿着你指定的"方向"继续生成内容。
它利用了 LLM 强大的模式匹配和文本补全能力。当你给出一个开头,模型会认为它的任务就是"完成这个句子/段落/代码块",从而极大地减少了它自由发挥导致格式错误的概率。
一个简单的比喻
想象一下,你正在和一个小朋友玩"词语接龙"或"故事接龙"的游戏。
-
不使用方向性刺激提示: 你说:"给我讲一个关于龙的故事。"
- 小朋友可能会从任何角度开始:"从前有一座山..."、"龙是一种神奇的生物..."、"小明很喜欢龙..."。故事的开头是不可预测的。
-
使用方向性刺激提示: 你说:"我们来编一个关于龙的故事,故事的开头是:'在深夜的暴风雨中,一声古老的龙吟划破天际...'"
- 小朋友几乎肯定会接着这个场景往下编,比如"...一道闪电照亮了它巨大的鳞片。" 你已经为故事设定了基调、场景和方向。
这个"故事的开头"就是方向性刺激。
核心目标与作用
- 强制格式化输出: 这是最常见的用途。你可以确保模型返回的是特定格式的文本,如 JSON、Markdown、XML 等。
- 引导思考过程: 在进行链式思考(Chain-of-Thought)时,你可以引导模型从特定的第一步开始分析问题。
- 设定语气和风格: 通过给出一个特定风格的开头,可以确保整个回答都保持这种风格。
- 提高输出的稳定性和一致性: 每次都使用相同的刺激,可以使模型的输出结果更加可预测和可靠。
实际应用案例
下面通过几个例子,你可以清晰地看到它的威力。
案例1:强制输出 JSON 格式(最经典用法)
❌ 不使用方向性刺激的提示:
请从以下文本中提取关键信息,并以 JSON 格式返回:
文本:"张三,男,35岁,是复旦大学的软件工程师,他的邮箱是 zhangsan@fudan.edu.cn。"
可能的输出 (格式不稳定):
好的,这是提取的信息:
{
"name": "张三",
"gender": "男",
"age": 35,
"occupation": "软件工程师",
"organization": "复旦大学",
"email": "zhangsan@fudan.edu.cn"
}
问题:模型可能会添加额外的解释性文字,如"好的,这是...",导致程序解析 JSON 失败。
✅ 使用方向性刺激的提示:
请从以下文本中提取关键信息,并以 JSON 格式返回:
文本:"张三,男,35岁,是复旦大学的软件工程师,他的邮箱是 zhangsan@fudan.edu.cn。"
输出:
```json
{
几乎确定的输出 (格式稳定):
json
{
"name": "张三",
"gender": "男",
"age": 35,
"occupation": "软件工程师",
"organization": "复旦大学",
"email": "zhangsan@fudan.edu.cn"
}
这里的 ````json\n{` 就是方向性刺激。它强烈地暗示模型:"直接开始写 JSON 内容,不要有任何多余的废话。"
案例2:引导链式思考 (Chain-of-Thought)
任务: 计算一个篮球场的周长,篮球场长28米,宽15米。
❌ 普通的 CoT 提示:
一个标准篮球场的长度是28米,宽度是15米。请计算它的周长。请一步一步思考。
✅ 使用方向性刺激的 CoT 提示:
一个标准篮球场的长度是28米,宽度是15米。请计算它的周长。请一步一步思考。
思考过程:
第一步:确定计算周长需要用到的公式。
模型的续写:
第二步:周长的公式是 (长 + 宽) * 2。
第三步:将已知的长度和宽度代入公式。即 (28 + 15) * 2。
第四步:计算括号内的和:28 + 15 = 43。
第五步:计算最终结果:43 * 2 = 86。
最终答案: 篮球场的周长是86米。
通过给出思考的第一步,你为模型的整个分析过程搭建了框架,使其更有条理。
案例3:控制代码生成
任务: 写一个 Python 函数,计算斐波那契数列的第 n 项。
✅ 使用方向性刺激的提示:
请用 Python 编写一个函数,用于计算斐波那契数列的第 n 项。请包含文档字符串。
代码:
```python
def fibonacci(n):** """**
模型的续写:
python
def fibonacci(n):
"""
计算斐波那契数列的第 n 项。
参数:
n (int): 要计算的项数 (n > 0)。
返回:
int: 斐波那契数列的第 n 项。
"""
if n <= 0:
raise ValueError("项数必须是正整数")
elif n == 1:
return 0
elif n == 2:
return 1
else:
a, b = 0, 1
for _ in range(n - 2):
a, b = b, a + b
return b
通过给出函数签名和文档字符串的开头,模型会自然地完成剩下的部分,并且格式非常规范。
总结
方向性刺激提示 是一种简单却极其有效的技术。它将"指令"和"范例"无缝地结合在一起,通过提供一个输出的"引子",强制模型遵循你期望的路径。在需要结构化数据输出、稳定格式和可预测行为的场景中,这几乎是必用的技巧。就是方向性刺激。它强烈地暗示模型:"直接开始写 JSON 内容,不要有任何多余的废话。"*
案例2:引导链式思考 (Chain-of-Thought)
任务: 计算一个篮球场的周长,篮球场长28米,宽15米。
❌ 普通的 CoT 提示:
一个标准篮球场的长度是28米,宽度是15米。请计算它的周长。请一步一步思考。
✅ 使用方向性刺激的 CoT 提示:
一个标准篮球场的长度是28米,宽度是15米。请计算它的周长。请一步一步思考。
思考过程:
第一步:确定计算周长需要用到的公式。
模型的续写:
第二步:周长的公式是 (长 + 宽) * 2。
第三步:将已知的长度和宽度代入公式。即 (28 + 15) * 2。
第四步:计算括号内的和:28 + 15 = 43。
第五步:计算最终结果:43 * 2 = 86。
最终答案: 篮球场的周长是86米。
通过给出思考的第一步,你为模型的整个分析过程搭建了框架,使其更有条理。
案例3:控制代码生成
任务: 写一个 Python 函数,计算斐波那契数列的第 n 项。
✅ 使用方向性刺激的提示:
请用 Python 编写一个函数,用于计算斐波那契数列的第 n 项。请包含文档字符串。
代码:
```python
def fibonacci(n):** """**
模型的续写:
python
def fibonacci(n):
"""
计算斐波那契数列的第 n 项。
参数:
n (int): 要计算的项数 (n > 0)。
返回:
int: 斐波那契数列的第 n 项。
"""
if n <= 0:
raise ValueError("项数必须是正整数")
elif n == 1:
return 0
elif n == 2:
return 1
else:
a, b = 0, 1
for _ in range(n - 2):
a, b = b, a + b
return b
通过给出函数签名和文档字符串的开头,模型会自然地完成剩下的部分,并且格式非常规范。

这张图片清晰地展示了两种不同提示词(Prompt)策略对大语言模型(LLM)输出结果的影响:
标准提示 (Standard Prompting):
问题: 直接要求模型"简要地用2-3句话总结上述文章"。
结果: 模型给出了一个比较泛化的摘要,提到了核心人物和事件,但缺少一些关键细节。其 ROUGE-1 得分(一种衡量文本相似度的指标)为 34.48。
方向性刺激提示 (Directional Stimulus Prompting):
问题: 同样是要求总结,但增加了一个关键部分------"根据提示"(based on the hint)。
提示 (Hint): 提供了一系列关键词,如 Bob Barker; TV; April 1; "The Price Is Right"; 2007; 91。这些都是文章中的核心实体和信息点。
结果: 模型生成的摘要几乎完美地融入了所有提示词,内容更具体、信息量更丰富。其 ROUGE-1 得分显著提高到了 48.39。
结论: 图片的核心思想是,通过在提示词中加入明确的、方向性的"刺激"(即关键词或指令),可以引导模型生成更符合我们预期的、更精确、更详尽的内容。
总结
方向性刺激提示 是一种简单却极其有效的技术。它将"指令"和"范例"无缝地结合在一起,通过提供一个输出的"引子",强制模型遵循你期望的路径。在需要结构化数据输出、稳定格式和可预测行为的场景中,这几乎是必用的技巧。