7 节 / 共 14

2.4 其他高级方法

📌 本节目标

学完这一节,你将掌握两种强大的高级提示技术:自一致性生成知识提示。你将理解它们如何提升模型回答的准确性和可靠性,并能独立编写提示词来应用这些方法,解决更复杂的推理问题。

1. 核心概念讲解

在前面的课程中,我们已经学习了零样本、少样本和思维链(Chain-of-Thought,简称 CoT)提示。这些方法非常有效,但有时模型可能会“想偏了”——比如在数学题上,虽然步骤看起来合理,但最终结果却错了。为了解决这个问题,我们需要更高级的技巧。

1.1 自一致性(Self-Consistency)

核心思想: “三个臭皮匠,顶个诸葛亮”。对于同一个复杂问题,我们不让模型只回答一次,而是让它多次推理(比如用不同的随机性生成多条思维链),然后从这些答案中选取出现频率最高的那个作为最终答案。

通俗解释: 想象你让一个学生做一道数学题。如果只做一次,他可能因为粗心算错。但如果让他独立做 5 遍,并且每次都写出详细的解题步骤,最后你会发现,正确的答案往往会出现 3 次或 4 次,而错误的答案各不相同。我们最终就采纳那个出现次数最多的答案。

比如:

  • 普通提示: “小明有 5 个苹果,妈妈又给了他 3 个,然后他吃掉了 2 个,还剩几个?” 模型可能回答:“6 个。”(正确)
  • 自一致性提示: 我们让模型“请用不同的思路计算 3 次,然后给出最终答案”。模型可能会生成:
    • 路径 1:5 + 3 = 8,8 - 2 = 6 → 答案:6
    • 路径 2:5 - 2 = 3,3 + 3 = 6 → 答案:6
    • 路径 3:3 - 2 = 1,5 + 1 = 6 → 答案:6 最终,答案“6”出现了 3 次,我们选择它作为最终输出。如果某次模型算错了(比如路径 3 算成了 5+1=7),那么“7”只出现 1 次,不会被采纳。

技术实现: 在调用 API 时,我们通常设置 n 参数(表示生成几条路径)和较高的 temperature 参数(比如 0.7,增加推理的多样性)。

1.2 生成知识提示(Generated Knowledge Prompting)

核心思想: 在让模型回答一个需要特定领域知识的问题之前,先让模型自己“生成”或“回忆”相关的背景知识。这相当于先给模型一个“预习”或“知识热身”的步骤。

通俗解释: 就像你问一位专家一个问题前,先让他翻翻书回顾一下相关理论,然后再回答。这样他的回答会更准确、更有依据。

比如:

  • 普通提示: “为什么天空是蓝色的?” 模型可能会直接回答:“因为瑞利散射。”
  • 生成知识提示:
    1. 第一步(生成知识): 你先问模型:“关于光的散射,有哪些关键知识?请列出 3 条。”
    2. 模型回答:
      • 知识 1:光是一种电磁波,不同颜色的光波长不同。
      • 知识 2:当光穿过大气层时,会与气体分子发生相互作用,产生散射。
      • 知识 3:瑞利散射的强度与波长的四次方成反比,波长越短,散射越强。蓝光波长比红光短,因此被散射得更多。
    3. 第二步(回答问题): 你接着问:“基于上述知识,请解释为什么天空是蓝色的?”
    4. 模型回答: “因为太阳光中的蓝光波长较短,根据瑞利散射原理,它被大气分子散射得更强烈,所以我们看到的天空呈现蓝色。”

通过先“生成知识”,模型的回答会更有条理、更深入,并且减少了胡编乱造的可能性。

2. 深入理解

2.1 为什么要用这些高级方法?

  • 提升确定性: 大语言模型本质上是概率模型,同一个问题问两次,答案可能不同。自一致性通过“投票”机制,极大地削弱了随机性带来的错误,让输出更稳定可靠。这在数学、逻辑推理等需要精确答案的场景中尤其重要。
  • 弥补知识短板: 模型虽然训练数据庞大,但对于一些冷门或需要精确回忆的知识,它的内部表示可能不够清晰。生成知识提示相当于一个“外部记忆激活器”,强制模型在回答前整理相关知识点,从而提升回答质量。
  • 减少“幻觉”: 模型有时会自信地给出错误答案(即“幻觉”)。自一致性通过多次推理,让“幻觉”答案难以形成多数派;生成知识提示则通过结构化知识的引导,让模型在更坚实的知识基础上推理,减少凭空捏造。

2.2 初学者常见的误区

| 误区 | 解释 | 正确做法 | | :--- | :--- | :--- | | 自一致性 = 重复问同一个问题 | 重复问同一个问题(temperature=0)会得到完全一样的答案,没有意义。 | 必须设置较高的 temperature(如 0.5-0.8),让模型每次推理的路径略有不同。 | | 生成知识提示太啰嗦 | 认为多了一步生成知识,提示词变长,调用成本变高。 | 对于复杂或需要专业知识的任务,这一步的收益远大于成本。对于简单问题(如“今天天气如何?”),则完全不需要。 | | 自一致性只用于数学题 | 认为它只对计算题有效。 | 自一致性可以应用于任何需要“推理路径”的任务,比如逻辑谜题、代码生成、甚至创意写作中的“最佳情节选择”。 | | 生成的知识可以不用管 | 直接让模型生成知识,然后接着问,但不对生成的知识做任何引导。 | 最好对生成的知识进行结构化引导,比如“请列出 3 个关键点”、“请用一句话概括核心原理”。这样生成的知识质量更高,更有利于后续的回答。 |

3. 实战演示

让我们通过一个具体的案例,演示如何编写自一致性提示。我们将使用一个经典的逻辑推理问题。

问题: “一个房间里有三个人,分别总是说真话、总是说假话、以及有时说真话有时说假话(随机)。你只能问两个是/否问题,来确定谁是谁。请给出解决方案。”

这是一个典型的逻辑难题。我们会先用普通提示,再用自一致性提示,看看效果差异。

3.1 普通提示(对比基准)

# 普通提示,只问一次
prompt = """
一个房间里有三个人,分别总是说真话、总是说假话、以及有时说真话有时说假话(随机)。
你只能问两个是/否问题,来确定谁是谁。请给出解决方案。
"""
# 假设调用模型,可能得到一个复杂但未必正确的方案。

3.2 自一致性提示(实战步骤)

我们将编写一个完整的提示,要求模型生成 3 条不同的推理路径,并最终汇总答案。

# 自一致性提示
prompt = """
你是一位逻辑推理专家。请解决以下问题。

问题:一个房间里有三个人,分别总是说真话、总是说假话、以及有时说真话有时说假话(随机)。
你只能问两个是/否问题,来确定谁是谁。请给出解决方案。

要求:
1. 请用三种不同的思路或策略来推理这个问题。
2. 对于每种思路,请写出完整的推理步骤和最终答案(谁是说真话的,谁是说假话的,谁是随机的)。
3. 在最后,请汇总三种思路的结果,并给出出现次数最多的最终答案。

请开始你的推理。
"""

# 假设模型返回的内容如下(模拟输出):
model_output = """
**思路一:利用“固定”角色提问**
1. 先问第一个人:“如果我问第二个人‘第一个人是说真话的吗?’,他会怎么回答?”
2. 分析:如果第一个人是真话者,他会如实转述假话者的谎言...
   最终推理结果:A是真话者,B是假话者,C是随机者。

**思路二:利用“否定之否定”**
1. 问第一个人:“你是说真话的吗?” 如果他说“是”,他可能是真话者或假话者...
   最终推理结果:A是真话者,B是随机者,C是假话者。

**思路三:利用“随机者”的不可预测性**
1. 先问第一个人一个已知答案的问题,比如“1+1=2吗?”...
   最终推理结果:A是真话者,B是假话者,C是随机者。

**汇总结果:**
- 思路一:A真,B假,C随机
- 思路二:A真,B随机,C假
- 思路三:A真,B假,C随机

最终答案:A是总是说真话的人,B是总是说假话的人,C是随机说话的人。
"""
print(model_output)

要点分析:

  1. 明确要求多样性: 我们在提示词中明确要求“用三种不同的思路”,这比单纯依赖 temperature 更直接有效。
  2. 结构化输出: 要求写出“推理步骤”和“最终答案”,方便后续汇总。
  3. 强制汇总: 最后要求“汇总三种思路的结果”,并“给出出现次数最多的最终答案”。这模拟了自一致性的核心机制。
  4. 对比普通提示: 如果只用普通提示,模型可能只给出一种方案,并且可能包含逻辑漏洞。而自一致性提示通过汇聚多个推理路径,得出的答案往往更稳健。即使某条路径有错(比如思路二),只要多数路径指向同一答案,最终结果就是可靠的。

4. 关键要点

  • 自一致性通过“多次推理 + 多数投票”提升答案的鲁棒性,特别适合数学、逻辑等有确定答案的任务。关键在于设置较高的 temperature 并生成多条推理路径。
  • 生成知识提示通过“先回忆知识,再回答问题”的两步法,有效减少模型幻觉,提升回答的深度和准确性。适用于需要专业知识的问答。
  • 两种方法可以结合使用:例如,先用生成知识提示让模型回忆相关公式,再用自一致性提示进行多次计算并投票,效果会更好。
  • 不要滥用高级方法:对于简单问题(如“法国的首都是哪里?”),直接提问即可。高级方法会增加计算成本和响应时间,应在复杂问题上“精准投放”。
  • 提示词的结构化至关重要:在自一致性提示中,明确要求“列出不同思路”和“汇总结果”;在生成知识提示中,要求“列出关键知识点”。清晰的结构能引导模型产出高质量的输出。

✏️ 练习任务

任务 1:自一致性解决数学应用题

练习方向: 尝试自一致性提示并比较结果。

输入: 使用以下数学应用题,编写一个自一致性提示(要求模型用 3 种不同方法求解并投票)。

问题: “一个农场里,鸡和兔子共有 35 个头,94 只脚。请问鸡和兔子各有多少只?”

期望输出格式:

  1. 方法一(如:假设法):... 步骤 ... 答案:鸡 X 只,兔 Y 只。
  2. 方法二(如:方程法):... 步骤 ... 答案:鸡 X 只,兔 Y 只。
  3. 方法三(如:抬腿法):... 步骤 ... 答案:鸡 X 只,兔 Y 只。
  4. 汇总结果: 多数方法得出的答案一致,最终答案是:鸡 23 只,兔 12 只。

提示: 可以手动模拟模型输出,或者使用任何你方便调用的 AI 模型(如 ChatGPT、文心一言等)来完成这个练习。重点在于体验“多次推理 + 投票”的流程。

任务 2(选做):生成知识提示解决专业问题

进阶挑战: 选择一个你熟悉的专业领域(如编程、医学、法律),设计一个生成知识提示。

  1. 第一步: 让模型生成 3 条关于该领域某个概念的核心知识。
  2. 第二步: 基于这些知识,让模型回答一个具体问题。

示例(编程领域):

  • 第一步提示: “请列出关于 Python 中‘装饰器’的 3 个关键知识点。”
  • 第二步提示: “基于上述知识,请解释为什么下面的代码会输出 'Hello, World!':”
    @my_decorator
    def say_hello():
        print("Hello!")
    say_hello()
    

目的: 感受“生成知识”如何让模型在回答时更有条理和深度。

💡 下一节我们将学习相关的进阶内容,探索如何将这些高级方法组合起来,构建更强大的提示链(Prompt Chaining),以应对复杂的工作流。


本节由 StudyAI8 AI 课程团队生成并审核。