> For the complete documentation index, see [llms.txt](https://yeasy.gitbook.io/prompt_engineering_guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yeasy.gitbook.io/prompt_engineering_guide/di-si-bu-fen-jin-jie-yu-zhan-wang/12_automated_pe/12.1_auto_generation.md).

# 12.1 自动化提示词生成技术

随着大语言模型应用的规模化发展，人工设计和优化提示词的成本成为瓶颈。自动化提示词生成技术应运而生，它让机器参与到提示词的设计、生成和优化过程中，显著提升效率并发现人工难以想到的优化方案。

## 12.1.1 自动化提示词的核心价值

| 传统方式     | 自动化方式    |
| -------- | -------- |
| 依赖专家经验   | 可规模化执行   |
| 迭代周期长    | 快速探索大量候选 |
| 难以覆盖边缘情况 | 系统性测试    |
| 主观判断优劣   | 数据驱动决策   |

## 12.1.2 APE：自动提示词工程

APE（Automatic Prompt Engineering）是由 Zhou 等人在 2022 年提出的开创性框架，核心思想是 **用模型来优化模型的输入**。

### 工作流程

```mermaid
flowchart LR
    Task["任务定义"] --> Gen["生成候选提示词"]
    Gen --> Eval["评估各候选"]
    Eval --> Select["选择最优"]
    Select --> Refine["迭代优化"]
    Refine --> Final["最终提示词"]

    style Gen fill:#e3f2fd
    style Eval fill:#fff3e0
```

*图 12-1：APE 工作流程*

**详细步骤**：

1. **任务定义**：明确任务目标、输入输出格式、评估标准
2. **候选生成**：使用 LLM 生成多个候选提示词
3. **评估排序**：在验证集上评估各候选的表现
4. **迭代优化**：对最优候选进行微调和变体探索
5. **最终选择**：选择综合表现最佳的提示词

### APE 实现示例

```python
def automatic_prompt_engineering(task_description, examples, num_candidates=10):
    # 第一步：生成候选提示词
    generation_prompt = f"""
    你是一位提示词工程专家。请为以下任务生成 {num_candidates} 个不同的提示词：

    任务描述：{task_description}

    示例输入输出：
    {format_examples(examples)}

    要求：
    1. 每个提示词采用不同的策略（角色设定、格式、推理方式等）
    2. 确保提示词清晰、完整
    3. 以 JSON 数组格式输出所有候选
    """

    candidates = llm.generate(generation_prompt)

    # 第二步：评估候选
    scores = []
    for candidate in candidates:
        score = evaluate_prompt(candidate, examples)
        scores.append((candidate, score))

    # 第三步：选择并优化
    best_candidate = max(scores, key=lambda x: x[1])

    # 第四步：微调最优候选
    feedback = analyze_failures(best_candidate[0], examples)
    refined = refine_prompt(best_candidate[0], feedback)

    return refined
```

## 12.1.3 元提示：用提示词生成提示词

元提示是一种更加灵活的自动化方法，通过精心设计的“种子提示词”指导模型生成针对特定任务的提示词。

### 通用元提示模板

````
你是一位经验丰富的提示词工程专家，擅长为各类任务设计高效的提示词。

## 任务信息

任务名称：{task_name}
任务描述：{task_description}
预期输入：{input_format}
预期输出：{output_format}
目标模型：{target_model}

## 约束条件

- 模型上下文长度限制：{context_limit} tokens
- 响应时间要求：{latency_requirement}
- 成本预算：{cost_budget}

## 示例数据

输入示例：
{input_example}

期望输出：
{expected_output}

## 设计要求

请设计一个完整的提示词，包括：

1. **系统提示词**：设定角色和基本行为规范
2. **任务指令**：清晰描述任务目标和步骤
3. **格式规范**：定义输入输出格式
4. **示例**：提供 1-2 个少样本示例（如适用）
5. **边界处理**：如何处理异常输入

## 输出格式

请使用以下 YAML 格式输出：

```yaml
system_prompt: |
  [系统提示词内容]

user_template: |
  [用户提示词模板，使用 {variable} 标记变量]

examples:
  - input: "..."
    output: "..."

edge_cases:
  - condition: "..."
    handling: "..."
```
````

### 场景化元提示

针对特定场景的元提示可以生成更专业的结果：

**代码生成场景**：

```
为以下代码生成任务设计提示词：

任务：将自然语言描述转换为 Python 函数
目标：代码正确、可读、符合 PEP8 规范
特殊要求：
- 包含类型注解
- 包含 docstring
- 处理常见边界情况
```

**内容审核场景**：

```
为内容审核任务设计提示词：

任务：判断用户生成内容是否违规
违规类型：[仇恨言论、虚假信息、成人内容、垃圾广告]
要求：
- 给出违规判定（是/否）
- 如违规，指出违规类型和具体位置
- 给出置信度评分
```

## 12.1.4 基于反馈的迭代优化

自动化提示词优化的核心是建立反馈闭环：

### OPRO：基于优化的提示词改进

Google DeepMind 提出的 OPRO（Optimization by PROmpting）方法（Yang et al., 2023），让模型基于历史表现不断改进提示词：

```python
def opro_optimization(initial_prompt, task_examples, iterations=5):
    history = []
    current_prompt = initial_prompt

    for i in range(iterations):
        # 评估当前提示词
        score = evaluate(current_prompt, task_examples)
        history.append({
            "prompt": current_prompt,
            "score": score,
            "iteration": i
        })

        # 生成改进建议
        improvement_prompt = f"""
        以下是提示词优化的历史记录：

        {format_history(history)}

        当前最佳提示词得分：{max(h['score'] for h in history)}

        请分析历史数据，生成一个可能获得更高分数的新提示词。
        重点改进：
        1. 分析表现好的提示词的共同特征
        2. 识别表现差的提示词的问题
        3. 结合以上分析生成改进版本
        """

        current_prompt = llm.generate(improvement_prompt)

    # 最后一轮生成的提示词也要评估，否则它永远不会进入 history
    history.append({
        "prompt": current_prompt,
        "score": evaluate(current_prompt, task_examples),
        "iteration": iterations
    })

    return max(history, key=lambda x: x['score'])['prompt']
```

### 错误驱动优化

基于具体错误案例改进提示词：

```
原始提示词：
{original_prompt}

失败案例：
输入：{failed_input}
期望输出：{expected_output}
实际输出：{actual_output}

错误分析：
{error_analysis}

请基于以上错误案例，修改提示词以解决这个问题。
修改时请确保：
1. 不破坏原有的正确功能
2. 针对性地解决这个特定错误
3. 考虑是否存在同类型的潜在问题
```

## 12.1.5 自动化提示词搜索算法

除了基于 LLM 的生成方法，还有一些系统性的搜索算法：

| 算法    | 核心思想          | 适用场景    |
| ----- | ------------- | ------- |
| 网格搜索  | 遍历预定义的提示词变体组合 | 参数空间较小时 |
| 随机搜索  | 随机采样候选空间      | 参数空间较大时 |
| 贝叶斯优化 | 基于历史表现建模并智能采样 | 评估成本较高时 |
| 进化算法  | 变异、交叉、选择迭代    | 复杂提示词结构 |
| 强化学习  | 将提示词优化建模为序列决策 | 需要长期优化时 |

## 12.1.6 实践建议

1. **人机结合**：自动化生成探索候选空间，人工进行最终判断和精调
2. **小规模起步**：先在小规模验证集上快速迭代，再扩大评估范围
3. **保留历史**：记录所有尝试过的提示词和表现，用于后续分析
4. **关注边界**：自动化方法可能优化平均表现而忽略边界情况

## 想一想

1. 让 AI 自动生成提示词来优化 AI 的输出——这种“自我改进”循环的上限在哪里？什么时候仍然需要人工介入？
2. 自动生成的提示词往往更长且更冗余。在 Token 成本和效果之间，你如何权衡？
