

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

# 选择性优化
<a name="advanced-prompt-optimization-selective"></a>

默认情况下，高级提示优化会端到端地重写整个提示模板的任何部分。通过选择性优化，您可以精确控制优化器可以修改提示的哪些部分。当您的提示很大或很复杂，并且某些部分已经调整得很好时，请使用选择性优化。这样，您就可以只改进仍需要加工的部分。

## 标签语法
<a name="advanced-prompt-optimization-selective-tags"></a>

使用`advpo:`（高级提示优化）命名空间为提示模板添加保留 XML-style 标签以控制优化范围：
+ `<advpo:optimize>...</advpo:optimize>`— 将某一部分标记为优化的焦点区域。优化器会重写这些标签内的内容。
+ `<advpo:exclude>...</advpo:exclude>`— 将分区标记为已冻结。在任何情况下，优化器都不会修改这些标签内的内容。

`advpo:`命名空间前缀可防止与已将 XML-like 标记用于其他目的的提示发生冲突。

## 优化器如何确定要重写的内容
<a name="advanced-prompt-optimization-selective-modes"></a>

优化器的行为取决于提示模板中存在哪些标签。


| 标签存在 | 行为 | Mode | 
| --- | --- | --- | 
| 无标签 | 整个提示经过端到端优化（与当前行为相同） | 传统模式 | 
| 至少一个 `<advpo:optimize>` | 优化器仅重写区块内的`<advpo:optimize>`内容。所有未加标签的内容都将被保留。 | 显式包含模式 | 
| 只有`<advpo:exclude>`标签（没有`<advpo:optimize>`） | 优化器会重写所有不在块内的内容 `<advpo:exclude>` | Exclusion-only 模式 | 
| 两种标签类型都存在 | 显式包含模式适用。优化器仅`<advpo:optimize>`重写内容。优化器接受`<advpo:exclude>`标签，但将其视为冗余标签。 | 显式包含模式 | 

**提示**  
您不需要这两种标签类型。如果将焦点区域包裹起来`<advpo:optimize>`，其他所有区域都会自动保留。您无需在要保留的内容周围添加`<advpo:exclude>`标签。`<advpo:exclude>`仅在没有`<advpo:optimize>`标签时使用。它会冻结特定部分，同时优化其他所有部分。

## 示例
<a name="advanced-prompt-optimization-selective-examples"></a>

以下示例说明如何使用`<advpo:optimize>`和`<advpo:exclude>`标签来控制优化器重写提示模板的哪些部分。

**Example 使用 advpo: optimize 专注于一个部分**  <a name="advanced-prompt-optimization-selective-ex-optimize"></a>
在此示例中，仅对投诉回复说明进行了优化。优化器完全按照写入的方式保留标识语句和策略约束。  

```
You are a helpful customer service agent for Acme Corp. Always be polite and professional.

<advpo:optimize>When responding to a complaint, acknowledge the customer's frustration, summarize the issue, and propose exactly one concrete resolution. Use bullet points for clarity.</advpo:optimize>

Never disclose internal pricing or employee information.
```

**Example 使用 advpo: exclude 冻结特定部分**  <a name="advanced-prompt-optimization-selective-ex-exclude"></a>
在此示例中，身份声明和策略约束被冻结。其他所有内容（投诉回复说明）均已优化。  

```
<advpo:exclude>You are a helpful customer service agent for Acme Corp. Always be polite and professional.</advpo:exclude>

When responding to a complaint, acknowledge the customer's frustration, summarize the issue, and propose exactly one concrete resolution. Use bullet points for clarity.

<advpo:exclude>Never disclose internal pricing or employee information.</advpo:exclude>
```

**Example 多个优化模块**  <a name="advanced-prompt-optimization-selective-ex-multiple"></a>
您可以标记多个不连续的部分以进行优化。优化器可以重写其中的任何或全部。  

```
You are a technical support assistant for CloudWidget.

<advpo:optimize>When diagnosing an issue, ask clarifying questions about the customer's environment before suggesting solutions.</advpo:optimize>

Always check the knowledge base before escalating.

<advpo:optimize>When providing a solution, include step-by-step instructions with numbered steps. End with a verification step the customer can perform.</advpo:optimize>

Never share internal ticket IDs with customers.
```

**Example 用于生成内容的优化块为空**  <a name="advanced-prompt-optimization-selective-ex-empty"></a>
空`<advpo:optimize>`块告诉优化器在该位置生成并插入新的提示内容。  

```
You are a helpful assistant that summarizes documents.

{{document}}

<advpo:optimize></advpo:optimize>

Respond in plain English. Keep your summary under 200 words.
```

## 与占位符变量的交互
<a name="advanced-prompt-optimization-selective-variables"></a>

以下规则描述了占位符变量如何与选择性优化标签交互。
+ **内部变量`<advpo:exclude>`：**运行时仍然会像运行`{{variableName}}`时一样替换变量。排除适用于它们周围的模板文本—— “不要重写此模板文本” 并不意味着 “不要替换变量”。
+ **内部变量`<advpo:optimize>`：**变量占位符保留为占位符。优化器会重写周围的指令，但保持`{{variableName}}`引用完好无损。
+ **运行时变量值内的标签：**优化器会忽略这些标签。标签解析仅在模板上进行，然后再进行变量替换。这样可以防止通过用户提供的输入值注入优化指令。

## 验证规则
<a name="advanced-prompt-optimization-selective-validation"></a>

以下配置会导致验证错误。


| 配置无效 | 错误 | 解决方案 | 
| --- | --- | --- | 
| 嵌套标签（例如`<advpo:exclude>`，`<advpo:optimize>`内部或相反） | ValidationException | 移除嵌套。在模板中的任何给定位置仅使用一种标签类型。 | 
| 格式错误或未封闭的标签（例如，没有结束`<advpo:optimize>`标记） | ValidationException | 确保每个开头标签都有匹配的结束标签。 | 
| `advpo:`命名空间中的标签拼写错误（例如，）`<advpo:optmize>` | ValidationException | 检查`optimize`和的拼写`exclude`。高级提示优化可验证开始和结束标记。 | 

## 输出行为
<a name="advanced-prompt-optimization-selective-output"></a>

在作业结束时返回的优化提示中，优化器会删除所有`<advpo:optimize>`和`<advpo:exclude>`标记。您会收到一个没有任何优化标记的干净提示。`<advpo:exclude>`区块内的内容（以及显式包含模式下的未加标签的内容）保持不变。`<advpo:optimize>`区块内的内容包含优化器的重写版本。

## 其他行为
<a name="advanced-prompt-optimization-selective-edge-cases"></a>

下表描述了优化器如何处理其他方案。


| 场景 | 行为 | 
| --- | --- | 
| 多个`<advpo:optimize>`方块 | 所有人都有资格进行优化。优化器可以重写其中的任何或全部。 | 
| 多个`<advpo:exclude>`方块 | 所有`<advpo:exclude>`标签内的所有内容都被冻结。 | 
| 空`<advpo:optimize>`方块 | 有效。优化器在该位置生成并插入新内容。 | 
| Whitespace-only `<advpo:optimize>`阻止 | 处理方式与空方块相同。 | 
| 空`<advpo:exclude>`方块 | 已忽略（无操作）。没有要冻结的内容。 | 
| 标签将句子分成中间词或中间短语 | 允许。优化器将标记的内容作为一个单元进行操作。优化器可能会发出警告。 | 

## 最佳实践
<a name="advanced-prompt-optimization-selective-best-practices"></a>

使用选择性优化时，请遵循以下最佳实践。
+ **从`<advpo:optimize>`标签开始。**显式包含模式是最直观的——你可以标记你想要改进的内容，其他一切都保持不变。
+ **保持优化区块的独立性。**在每个区块中放置完整的指令或逻辑部分。允许在句子中间拆分，但可能会产生尴尬的结果。
+ **当您的提示已经部分调整时，请使用选择性优化。**如果您已经调整了安全约束条件或输出格式指令，请将其冻结，以便优化器将重点放在仍需要处理的部分。
+ **与多回合模式相结合。**在单片多阶段提示中（参见[优化多回合和分阶段提示](advanced-prompt-optimization-advanced-topics.md#advanced-prompt-optimization-multi-turn)），仅用于定位`<advpo:optimize>`需要改进的阶段指令，同时保持对话处理样板冻结。