

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 高级主题和策略
<a name="advanced-prompt-optimization-advanced-topics"></a>

## 本页面上的主题
<a name="advanced-prompt-optimization-advanced-topics-toc"></a>
+ [Multi-objective 优化](#advanced-prompt-optimization-multi-objective)
+ [优化多回合和分阶段提示](#advanced-prompt-optimization-multi-turn)

## Multi-objective 优化
<a name="advanced-prompt-optimization-multi-objective"></a>

高级提示优化每次运行接受一个指标，即每个样本一个标量分数。但是，它隐含地支持多目标（多维）优化：您可以将多个目标捆绑到一个标量（复合指标）中，然后该服务会针对该捆绑包优化提示。本节介绍我们推荐的模式、每种模式何时合适，以及需要注意的故障模式。

这适用于各个垂直行业——任何你同时关心不止一件事的地方：准确性\+语气、工具调用正确性\+安全性、忠诚度\+简洁性、延迟友好性\+完整性等等。

### 为什么一个指标实际上是多目标的
<a name="advanced-prompt-optimization-multi-objective-why"></a>

关于该系统的两个事实使它起作用：
+ **该指标为每个样本返回一个浮点值。**优化反馈循环将此标量读取为优化信号。你可以从幕后任意数量的分项分数中计算出来。
+ **两个指标后端都已经在内部汇总了子分数。**
  + 默认 LLM-as-a-Judge 模板在三个维度（答案准确性、答案完整性、表达质量）上进行`Overall`评分，分配权重，并发出标准化为 [0，1] 的单个分数。自定义标准合并到同一个标量中。有关更多信息，请参阅 [自定义 LLM-as-a-judge](advanced-prompt-optimization-evaluation.md#advanced-prompt-optimization-evaluation-llmj)。
  + Lambda/自定义代码指标返回一个数字，您可以控制其计算方式，包括子目标的任何组合。

因此，“每次运行一个指标” 是关于信号形状的合约，而不是对你可以优化的内容的限制。

### 将多个目标捆绑成单个指标的模式
<a name="advanced-prompt-optimization-multi-objective-patterns"></a>

根据您的目标相互关联来选择一个。

#### 模式 1 — 加权和（最常见）
<a name="advanced-prompt-optimization-multi-objective-weighted-sum"></a>

`final = w₁·s₁ + w₂·s₂ + ... + wₖ·sₖ`，权重之和为 1。

**何时使用：**目标大致独立，你可以对它们进行排名。 Trade-offs 是可以接受的 —— 只要总和增加，以牺牲另一种为代价来改进一个是可以的。

**选择权重：**
+ 按对用户的重要性进行加权，而不是按数据集中的频率进行加权。
+ 从粗略开始：`0.5 / 0.3 / 0.2`没问题。不要过度调整权重——这是一个单独的优化问题。

**示例（代理/工具使用）：**

```
final = 0.5 * tool_correctness + 0.3 * answer_correctness + 0.2 * format_compliance
```

#### 模式 2 — Hard-fail 大门（安全关键）
<a name="advanced-prompt-optimization-multi-objective-hard-fail"></a>

定义一个或多个门控目标。如果任何一扇门失效，则无论其余门如何，分数都是 0（或某个下限）。否则，分数是剩余目标的加权总和。

```
if not safety_check_passed:
    return 0.0
if wrong_tool_called_for_destructive_action:
    return 0.0
return 0.6 * accuracy + 0.4 * tone
```

**何时使用：**至少有一个目标是不可谈判的（PII 泄露、修改了错误的账户、拒绝禁止的内容）。每当 “平均良好” 提示不可接受，即使偶尔也无法通过安全栏时，请使用此选项。

**为什么这胜过了仅仅加权：**仅凭权重，优化器就可以用安全性与质量进行权衡，同时仍然可以攀登分数。大门通过施工使权衡变得不可能。

#### 模式 3 — 约束 \+ 奖励 (Pareto-style)
<a name="advanced-prompt-optimization-multi-objective-constraint"></a>

选择最重要的目标作为奖励。将其余部分表示为约束，当违反这些限制时，会从奖励中减去（而不是将其归零）。

```
reward = task_accuracy
penalty = 0.0
if response_too_long:
    penalty += 0.1
if missed_required_disclosure:
    penalty += 0.2
return max(0.0, reward - penalty)
```

**何时使用：**你想要一个主要目标来主导，但软性次要目标仍然应该决定提示。不如硬门那么脆弱，不如加权总和那么模棱两可。

#### 模式 4 — Lambda 外 LLM-as-a-Judge 部，内部（建议用于模糊\+结构混合）
<a name="advanced-prompt-optimization-multi-objective-lambda-llmj"></a>

Lambda 指标计算确定性子分数（正则表达式、JSON 解析、架构验证），并对 Lambda 函数中的模糊部分（语气、忠诚度、帮助性）调用 LLM-as-a-Judge 子评估。然后它将它们聚合为一个标量。

```
def compute_score(prompt, prediction, gold, ...):
    structural = grade_format_and_tools(prediction)        # 0..1 from regex
    semantic   = call_llm_judge(prediction, gold, criteria) # 0..1 from LLMJ
    if structural < 1.0 and is_safety_critical(prompt):
        return 0.0
    return 0.6 * semantic + 0.4 * structural
```

**何时使用：**你的目标将 “易于在代码中测试”（格式、工具名称、长度、引文的存在）与 “需要模型来判断”（语气、忠诚度、乐于助人）混合在一起。这通常比要求一个 LLM-as-a-Judge 提示生成单个复合乐谱要干净一些，因为确定性部分不会逐次漂移。

#### 模式 5 — Multi-dimension LLM-as-a-Judge （没有 Lambda）
<a name="advanced-prompt-optimization-multi-objective-multi-dim-llmj"></a>

使用内置 LLM-as-a-Judge 流程，也可以使用定义自己的尺寸和权重的流程。`customLLMJConfig.customLLMJPrompt`评委发出每个维度的分数和`Overall`；系统将解析为 [0, 1] 标量`Overall`（如果缺失，`Overall`则为维度求平均值）。

**何时使用：**您的所有目标都是语义/模糊的，并且没有确定性的子检查。创作速度最快。注意判断方差 — 重新运行相同的数据集两次，并先查看分数稳定性，然后再将其视为优化信号。

### 选择图案
<a name="advanced-prompt-optimization-multi-objective-decision"></a>


| \# | 你有... | 使用 | 
| --- | --- | --- | 
| 1 | 2—4 个模糊目标，全部是语义化的 | 图案 5（多维 LLM-as-a-Judge） | 
| 2 | 2—4 个目标将结构和语义融为一体 | 图案 4（Lambda 外层 \+ LLM-as-a-Judge 内部） | 
| 3 | 至少有一个不可谈判 safety/correctness 的标准 | 模式 2（硬失效门）— 与 1 或 4 结合使用 | 
| 4 | 一个明确的主要目标 \+ 软偏好 | 模式 3（约束 \+ 奖励） | 
| 5 | 几个大致相等的独立目标 | 模式 1（加权和） | 

你可以组合图案。典型的生产指标是 “加权总和\+安全方面的硬失败门”。

### 需要注意的故障模式
<a name="advanced-prompt-optimization-multi-objective-failures"></a>
+ **奖励表面上的黑客攻击。**如果你的分数是 “响应中是否包含'sure'这个词”，优化器将在每个输出中写入强制执行 “确定” 的提示。与关键词存在相比，更喜欢以结果为基础的子分数（工具名称、插槽值、结构有效性）。
+ **判断漂移。**一个多维 LLM-as-a-Judge 度指标，其权重每次通话都会有所不同（因为要求评委选择权重）会给出一个噪音大的优化信号。将权重固定在您的自定义标准中，或者将维度权重移到 Lambda 代码中。
+ **综合分数已饱和。**如果该指标快速达到 0.95 并保持不变，则您的子分数过于宽松。收紧评分量规；考虑提高最大标准（例如，部分积分变为 0 而不是 1），这样优化器就有余地。
+ **Sub-objectives 直接冲突。**“简洁” 与 “完整性” 是一个真正的权衡。加权和模式在该边界上选择一个操作点；如果你不喜欢它，可以改变权重。

### Pre-launch 清单
<a name="advanced-prompt-optimization-multi-objective-prelaunch"></a>
+ 在整个数据集的初始提示下计算指标，并检查每个维度的平均值，而不仅仅是标量。如果一个维度已经饱和，可以考虑将其从束中删除。
+ Spot-check 手工采用 5 个样品。该指标的判断是否符合你的判断？ 如果不是，请在优化提示之前修复指标。

## 优化多回合和分阶段提示
<a name="advanced-prompt-optimization-multi-turn"></a>

高级提示优化针对每个样本的评估优化单个提示模板。它本身不是回合感知型的——它无法在对话框中迭代对话框或在特定转弯处优化行为。*分阶段提示*是一种提示模板，其中多回合对话或工作流程在回合中重复使用相同的提示，提示本身包含工作流程每个阶段、步骤或阶段的说明。要优化这些提示，请将对话框状态扁平化为模板的输入变量，烘焙你想要完善的系统指令`promptTemplate`，然后用每个样本的参考响应来探测你真正关心的转弯。

这种模式是垂直不可知的。它适用于在不断增长的背景下反复调用模型的任何地方，包括客户服务流程、代理工具使用循环、多步推理、辅导、代码助手轮换、基于文档的 QA、分类工作流程等。

### 高级提示优化实际上优化了什么
<a name="advanced-prompt-optimization-multi-turn-mental-model"></a>
+ **输入：**带有`{{placeholder}}`变量的`promptTemplate`字符串。
+ **每个样本：**每个都`evaluationSamples[i]`提供这些变量的值和 a`referenceResponse`. 优化器对每个样本独立运行推理、评估、反馈和重写，然后在样本之间汇总指标。
+ **输出：**精致`promptTemplate`。变量、数据集和指标是固定输入；只有模板会发生变化。

任何你想要优化的东西都必须存在于其本`promptTemplate`身。每个样本的不同之处（对话历史记录、当前用户查询、检索到的上下文）是`{{variables}}`。你想要完善的系统指令是模板的一部分，从来都不是输入变量，或者服务没有什么可重写的。

如果您希望服务在回合 N 时改善行为，请将回合 N 表示为一个样本的渲染提示加输入变量，并作为所需的回合 `referenceResponse` N 模型输出。

### 模式 A — Stage-at-a-time （推荐入门）
<a name="advanced-prompt-optimization-multi-turn-pattern-a"></a>

一次优化对话的一个阶段。每个评估样本代表该阶段内的单个决策点。

这里的 “阶段” 是你可以用一套连贯的成功标准来描述的。垂直示例：
+ **Agentic/tool-use：**计划形成转弯、工具选择转弯、工具结果解释转弯、最终答案回合。
+ **客户支持：**受理、验证、操作、确认、结算。
+ **辅导/教育：**评估知识、解释概念、检查理解、总结。
+ **文档质量保证：**以检索为基础的答案、后续澄清、引文轮换。
+ **编码助手：**规范澄清、代码生成、代码编写、测试编写。review/fix

#### 何时使用模式 A
<a name="advanced-prompt-optimization-multi-turn-pattern-a-when"></a>
+ 你可以用不同的成功标准命名不同的阶段。
+ 一个阶段是降低质量，你想在不打扰其他人的情况下修复它。
+ 你需要快速迭代和紧密、可调试的反馈信号。

#### 模板形状
<a name="advanced-prompt-optimization-multi-turn-pattern-a-template"></a>

特定于阶段的系统指令已融入模板中（这是服务重写的内容）。只有对话历史和当前回合才是变量。下面的结构是说明性的，不是规定的。使用您的模型最能处理的任何分隔符或布局。唯一的要求是：(a) 你想在模板中实时优化的系统指令，以及 (b) 每个样本的变量被引用为`{{variablename}}`。

```
You are an assistant in the {STAGE_NAME} phase of a multi-turn task.
- ...the policy / goals / format / tool-use rules for this phase...
- ...constraints the model must satisfy at this point in the conversation...

Conversation so far:
{{conversation_so_far}}

User's current message:
{{user_query}}
```

#### 样本形状
<a name="advanced-prompt-optimization-multi-turn-pattern-a-sample"></a>

```
{
    "inputVariables": [
        {"conversation_so_far": "user: ...\nassistant: ...\n... (turns 1..N-1)"},
        {"user_query": "...the user input that triggers this stage..."}
    ],
    "referenceResponse": "...the assistant output that satisfies the stage's success criteria..."
}
```

#### 优缺点
<a name="advanced-prompt-optimization-multi-turn-pattern-a-tradeoffs"></a>

**优点：**反馈信号紧凑，提示更小，优化运行速度更快，更容易制定有针对性的指标。

**缺点：**没有 catch 跨阶段漂移；你将在每个阶段运行一次该服务，可能需要进行最终的集成测试。

### 模式 B — 完全扁平化对话（高级）
<a name="advanced-prompt-optimization-multi-turn-pattern-b"></a>

优化一个拥有整个多阶段策略的大型整体提示。每个样本都是直至探针的完整对话框。

#### 何时使用模式 B
<a name="advanced-prompt-optimization-multi-turn-pattern-b-when"></a>
+ 你的制作提示已经是单片的，你不想拆分它。
+ 你想让优化器看到较早的回合是如何设置后面的回合的，这样它的重写就会保留跨阶段流。
+ 探测回合的正确性取决于跨阶段积累的上下文（例如，“在回合 N 时，必须已经引用了正确的事实” 或 “必须已经调用了正确的工具”）。

#### 模板形状
<a name="advanced-prompt-optimization-multi-turn-pattern-b-template"></a>

完整的单片多相系统提示符实际上位于模板内部。该服务在优化期间会重写此主体。历史和当前转折仍然是可变的。选择您的模型可以很好地处理的任何布局；要求只是要优化的指令是模板的一部分，并且每个样本的数据都是通过`{{name}}`参考的。

```
You are an assistant for {TASK}. The conversation may proceed through phases:
1. {PHASE_1} — ...
2. {PHASE_2} — ...
3. {PHASE_3} — ...
(...the entire multi-phase policy, tool-use rules, tone, formatting, refusal rules...)

Conversation so far (turns 1..N-1, with role tags):
{{conversation_so_far}}

User's current message:
{{user_query}}
```

#### 样品形状（探头在任意转弯 N 处）
<a name="advanced-prompt-optimization-multi-turn-pattern-b-sample"></a>

```
{
    "inputVariables": [
        {"conversation_so_far": "user: ...\nassistant: ...\n[tool_call: X(...)]\n... (turns 1..N-1)"},
        {"user_query": "...the user input at turn N..."}
    ],
    "referenceResponse": "...desired assistant output at turn N..."
}
```

#### 为什么模式 B 能比模式 A 更好用
<a name="advanced-prompt-optimization-multi-turn-pattern-b-advantages"></a>
+ 优化器可以看到阶段的进度`conversation_so_far`，因此优化反馈可以同时推断各个阶段。
+ 部署单个优化的提示时，无需将多个优化的舞台提示拼接在一起，从而为您减少后期处理。

#### 模式 B 的注意事项
<a name="advanced-prompt-optimization-multi-turn-pattern-b-caveats"></a>
+ **前几回合中的随机性。**制作助理的轮流可能并不总是与罐装`conversation_so_far`完全匹配。将固定的历史记录视为预期的轨迹；在生产中，早期回合中的漂移可能会使优化失效。使用具有代表性的真实对话捕获，而不是综合的幸福路径。
+ **代币成本。**历史悠久的历史激增了每次试验的推断成本。该服务运行许多候选项 × 样本 × 迭代。相应地进行预算，如果成本是瓶颈，可以考虑截断到最近的 K 回合，再加上摘要。
+ **参考响应偏差。** `referenceResponse`考虑到那段历史，应该是正确的助手会说的话。如果您的参考响应过于狭窄（只有一个可接受的措辞），则优化器将过度适应它。尽可能使用对结果（工具名称、槽值、决策）进行评分的指标，而不是表面匹配的指标。

### Tool-call 在特定转弯处进行验证
<a name="advanced-prompt-optimization-multi-turn-tool-call"></a>

该服务会看到助手的文本输出。要评分 “模型在回合 N 时是否使用正确的参数调用了工具 X”，请选择一个：
+ **输出中的惯例：**让助手发出结构化代币，`<tool>X(arg=...)</tool>`并在 Lambda 指标中 regex/JSON 使用解析进行评分。最便宜，最可靠。
+ **LLM-as-a-Judge 自定义标准：**提供 a`customLLMJPrompt`，询问评委：“答复 (a) 命名工具`X`，(b) 是否包含论点`arg`，(c) 是否匹配所需的措辞`Y`？” 每个子支票都是 \+1；合计。易于创作，差异更大。
+ **带有下游仿真的 Lambda 指标：**如果您有工具执行工具，请通过它运行模型输出并根据观察到的副作用进行评分。最高保真度，大多数设置。

有关多回合或许多子检查的复合标准（工具正确性以及音调和完整性），请参阅部分。[Multi-objective 优化](#advanced-prompt-optimization-multi-objective)

### 推荐路径
<a name="advanced-prompt-optimization-multi-turn-recommended"></a>
+ **从对质量影响最大的舞台上的 Pattern A** 开始。获取一个有效的指标、一个 20-50 的样本数据集和一个端到端的优化。在您投资更大的模式 B 运行之前，这会验证您的数据集和指标。
+ **然后使用完整的单片提示符和多目标复合指标运行模式 B，以捕捉模式 A 可能错过**的跨阶段回归。
+ **在迭代提示之前迭代数据集。**如果服务重写了你的指标，但生产行为却没有改善，那么指标或数据集通常可能是问题所在。

### 何时不使用高级提示优化进行多回合
<a name="advanced-prompt-optimization-multi-turn-caveats"></a>
+ **对话框策略/状态机错误**（错误的阶段过渡逻辑）：平坦的提示重写无法解决这个问题。先修复编排层。
+ **工具架构错误：**该服务不会更改工具定义。它只能更改要求模型使用它们的提示。
+ **在固定历史和实时历史记录之间漂移：**如果真实的对话在几回合后与你的评估样本有很大差异，那么模式 B 的优化信号就会很弱。除了理想状态外，捕获真实可接受的生产跟踪以进行优化运行还有帮助。
+ **所需的行为取决于优化器从未看到的私有状态**（例如，模型只能通过工具调用学习的用户帐户数据）：在探测样本中`conversation_so_far`明确该状态，或者接受服务只能调整表面行为。

### 入门清单
<a name="advanced-prompt-optimization-multi-turn-checklist"></a>
+ 选择你关心的探测器转向。每个样本都变成一个或多个样本。
+ 决定模式 A 或 B（或两者兼而有之 — 先决定 A，然后决定 B）。
+ 构建 20 多个具有真实`conversation_so_far`性和清晰`referenceResponse`值的代表性样本。