高级提示技巧

超越基础

掌握了基础的 Prompt 写法、Few-shot 和 CoT 之后,还有一些更高级的技巧能帮你解决更复杂的问题。

ReAct:推理 + 行动

ReAct(Reasoning + Acting)是一种让模型交替进行推理和行动的模式。它是 AI Agent 的核心思维框架。

问题:2024 年诺贝尔物理学奖得主是谁?他们在哪个大学工作?

思考:我需要查找 2024 年诺贝尔物理学奖的信息。
行动:搜索 "2024 Nobel Prize Physics winner"
观察:John Hopfield 和 Geoffrey Hinton 获得了 2024 年诺贝尔物理学奖。
思考:我找到了获奖者,现在需要查找他们的工作单位。
行动:搜索 "John Hopfield university" 和 "Geoffrey Hinton university"
观察:Hopfield 在普林斯顿大学,Hinton 在多伦多大学。
思考:我现在有了完整的信息。
回答:2024 年诺贝尔物理学奖由 John Hopfield(普林斯顿大学)
和 Geoffrey Hinton(多伦多大学)获得。

ReAct 的价值在于:模型不只是推理,它还根据推理结果采取行动(搜索、调用工具),然后基于行动的结果继续推理。这是 Agent 章节会深入讲解的内容。

自我反思与修正

让模型检查自己的输出,然后修正错误:

请完成以下任务:

步骤 1:写出解决方案
步骤 2:审查你的解决方案,列出可能的问题
步骤 3:根据审查结果修改解决方案
步骤 4:输出最终版本

实际例子:

请写一个 Python 函数,判断一个字符串是否是有效的 IPv4 地址。

写完后,请:
1. 列举 5 个边界测试用例(包括应该通过和应该失败的)
2. 用这些用例心算检查你的函数
3. 如果发现问题,修复并输出最终版本

这种"写-审查-修正"的模式能显著提高输出质量,特别是对代码生成任务。

Prompt 链(Prompt Chaining)

把一个复杂任务拆分成多个步骤,每步用一个专门的 Prompt,上一步的输出作为下一步的输入:

步骤 1: 分析需求
输入:用户需求描述
输出:结构化的功能列表

步骤 2: 设计 API
输入:步骤 1 的功能列表
输出:API 端点定义

步骤 3: 生成代码
输入:步骤 2 的 API 定义
输出:实现代码

步骤 4: 生成测试
输入:步骤 3 的代码
输出:测试用例
# 代码实现
def prompt_chain(user_requirement):
    # Step 1
    features = llm("分析以下需求,输出功能列表:" + user_requirement)

    # Step 2
    api_design = llm("为以下功能设计 REST API:" + features)

    # Step 3
    code = llm("实现以下 API:" + api_design)

    # Step 4
    tests = llm("为以下代码写测试:" + code)

    return code, tests

Prompt 链的优势:

  • 每步任务简单明确,模型更容易做好
  • 可以在中间步骤检查和干预
  • 可以为每步使用不同的模型——简单步骤用便宜模型,关键步骤用强模型

Meta-Prompting:用 LLM 写 Prompt

一个有趣的技巧:让 LLM 帮你优化 Prompt

我需要一个 Prompt,让 LLM 帮我审查 Python 代码。
目标是找出潜在的 bug、性能问题和安全隐患。

请帮我写一个高效的 System Prompt,包含:
- 角色设定
- 具体的审查维度
- 输出格式
- 示例

然后用模型生成的 Prompt 去做实际任务。如果效果不好,把结果反馈给模型让它优化。

这本质上是自动化 Prompt 工程,对于需要反复迭代的场景很有用。

分隔符技巧

在复杂 Prompt 中,用清晰的分隔符组织内容:

### 任务描述
分析以下代码的性能问题。

### 约束条件
- 只关注时间复杂度 O(n²) 以上的问题
- 忽略可读性问题
- 每个问题给出优化方案

### 输入代码
```python
# 代码在这里

输出格式

JSON 数组,每个元素包含 line, issue, suggestion


常用的分隔符:
- `###` 或 `---`:分隔不同部分
- ```` ``` ````:代码块
- `<tag></tag>`:XML 标签,适合结构化数据
- `"""`:包裹长文本

## 温度与采样参数进阶

除了 temperature,还有几个影响输出的采样参数:

| 参数 | 作用 | 推荐值 |
|---|---|---|
| `temperature` | 控制随机性 | 0(精确)/ 0.7(创意) |
| `top_p` | 只从概率前 p% 的 token 中采样 | 0.9-0.95 |
| `top_k` | 只从概率最高的 k 个 token 中采样 | 40-100 |
| `frequency_penalty` | 惩罚重复出现的 token | 0-0.5 |
| `presence_penalty` | 惩罚已出现过的 token | 0-0.5 |
| `max_tokens` | 最大输出长度 | 根据任务设定 |

实用建议:
- **大多数情况只需调 temperature**,其他参数保持默认
- **temperature 和 top_p 不要同时大幅调整**——它们的效果叠加可能导致输出混乱
- **代码生成用 temperature=0**——你想要确定性的、可预测的输出

## 要点总结

1. **ReAct 是推理 + 行动的循环模式**,是 Agent 的核心框架。模型根据观察动态调整下一步。
2. **自我反思能提高输出质量**——让模型检查并修正自己的输出,特别适合代码生成。
3. **Prompt 链把复杂任务拆成简单步骤**——每步用专门的 Prompt,更可控,更容易调试。
4. **Meta-Prompting 用 LLM 写 Prompt**——自动化迭代,对复杂 Prompt 的优化很有用。
5. **温度是最重要的采样参数**。精确任务 → 0,创意任务 → 0.7。其他参数通常保持默认。