本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
选择性优化
默认情况下,高级提示优化会端到端地重写整个提示模板的任何部分。通过选择性优化,您可以精确控制优化器可以修改提示的哪些部分。当您的提示很大或很复杂,并且某些部分已经调整得很好时,请使用选择性优化。这样,您就可以只改进仍需要加工的部分。
标签语法
使用advpo:(高级提示优化)命名空间为提示模板添加保留 XML-style 标签以控制优化范围:
<advpo:optimize>...</advpo:optimize>— 将某一部分标记为优化的焦点区域。优化器会重写这些标签内的内容。<advpo:exclude>...</advpo:exclude>— 将分区标记为已冻结。在任何情况下,优化器都不会修改这些标签内的内容。
advpo:命名空间前缀可防止与已将 XML-like 标记用于其他目的的提示发生冲突。
优化器如何确定要重写的内容
优化器的行为取决于提示模板中存在哪些标签。
标签存在 | 行为 | Mode |
|---|---|---|
无标签 |
整个提示经过端到端优化(与当前行为相同) |
传统模式 |
至少一个 |
优化器仅重写区块内的 |
显式包含模式 |
只有 |
优化器会重写所有不在块内的内容 |
Exclusion-only 模式 |
两种标签类型都存在 |
显式包含模式适用。优化器仅 |
显式包含模式 |
提示
您不需要这两种标签类型。如果将焦点区域包裹起来<advpo:optimize>,其他所有区域都会自动保留。您无需在要保留的内容周围添加<advpo:exclude>标签。<advpo:exclude>仅在没有<advpo:optimize>标签时使用。它会冻结特定部分,同时优化其他所有部分。
示例
以下示例说明如何使用<advpo:optimize>和<advpo:exclude>标签来控制优化器重写提示模板的哪些部分。
例使用 advpo: optimize 专注于一个部分
在此示例中,仅对投诉回复说明进行了优化。优化器完全按照写入的方式保留标识语句和策略约束。
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.
例使用 advpo: exclude 冻结特定部分
在此示例中,身份声明和策略约束被冻结。其他所有内容(投诉回复说明)均已优化。
<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>
例多个优化模块
您可以标记多个不连续的部分以进行优化。优化器可以重写其中的任何或全部。
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.
例用于生成内容的优化块为空
空<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.
与占位符变量的交互
以下规则描述了占位符变量如何与选择性优化标签交互。
内部变量
<advpo:exclude>:运行时仍然会像运行{{variableName}}时一样替换变量。排除适用于它们周围的模板文本—— “不要重写此模板文本” 并不意味着 “不要替换变量”。内部变量
<advpo:optimize>:变量占位符保留为占位符。优化器会重写周围的指令,但保持{{variableName}}引用完好无损。运行时变量值内的标签:优化器会忽略这些标签。标签解析仅在模板上进行,然后再进行变量替换。这样可以防止通过用户提供的输入值注入优化指令。
验证规则
以下配置会导致验证错误。
配置无效 | 错误 | 解决方案 |
|---|---|---|
嵌套标签(例如 |
ValidationException |
移除嵌套。在模板中的任何给定位置仅使用一种标签类型。 |
格式错误或未封闭的标签(例如,没有结束 |
ValidationException |
确保每个开头标签都有匹配的结束标签。 |
|
ValidationException |
检查 |
输出行为
在作业结束时返回的优化提示中,优化器会删除所有<advpo:optimize>和<advpo:exclude>标记。您会收到一个没有任何优化标记的干净提示。<advpo:exclude>区块内的内容(以及显式包含模式下的未加标签的内容)保持不变。<advpo:optimize>区块内的内容包含优化器的重写版本。
其他行为
下表描述了优化器如何处理其他方案。
场景 | 行为 |
|---|---|
多个 |
所有人都有资格进行优化。优化器可以重写其中的任何或全部。 |
多个 |
所有 |
空 |
有效。优化器在该位置生成并插入新内容。 |
Whitespace-only |
处理方式与空方块相同。 |
空 |
已忽略(无操作)。没有要冻结的内容。 |
标签将句子分成中间词或中间短语 |
允许。优化器将标记的内容作为一个单元进行操作。优化器可能会发出警告。 |
最佳实践
使用选择性优化时,请遵循以下最佳实践。
从
<advpo:optimize>标签开始。显式包含模式是最直观的——你可以标记你想要改进的内容,其他一切都保持不变。保持优化区块的独立性。在每个区块中放置完整的指令或逻辑部分。允许在句子中间拆分,但可能会产生尴尬的结果。
当您的提示已经部分调整时,请使用选择性优化。如果您已经调整了安全约束条件或输出格式指令,请将其冻结,以便优化器将重点放在仍需要处理的部分。
与多回合模式相结合。在单片多阶段提示中(参见优化多回合和分阶段提示),仅用于定位
<advpo:optimize>需要改进的阶段指令,同时保持对话处理样板冻结。