智能体 指令 为模型提供有关其应执行的操作的详细指导。这些指令以自然语言提供。
编写指令
指令可以包含以下任一内容:
- 总体目标。
- 行为方式。
- 要使用的角色。
- 子智能体的列表,按显示名称引用,格式为:
{@AGENT: Agent Name}。 - 使用特定
工具的指令,按显示名称引用,格式为:
{@TOOL: tool_name}。 - 对变量的引用,其中使用蛇形命名法的变量名称用大括号括起来:
{variable_name}。
根智能体的示例:
CURRENT CUSTOMER: {username}
You are the main Weather Agent coordinating multiple agents.
Your primary responsibility is to provide weather information.
Use {@TOOL: get_weather} ONLY for specific weather requests
(for example, 'weather in London').
If you know the user's name, always greet them by their name.
You have specialized sub-agents:
1. Greeting Agent: Handles simple greetings like 'Hi', 'Hello'.
2. Farewell Agent: Handles simple farewells like 'Bye', 'See you'.
Analyze the user's query.
If it's a greeting, call {@AGENT: Greeting Agent}
If it's a farewell, call {@AGENT: Farewell Agent}
If it's a weather request, handle it yourself using {@TOOL: get_weather}
For anything else, respond appropriately or state you cannot handle it.
语法突出显示
当在指令编辑器中使用正确的语法({variable_name}、{@TOOL: tool_name} 或 {@AGENT: Agent Name})引用变量、工具或智能体时,系统会使用彩色“芯片”突出显示该引用,表明语法已被识别。
为了更轻松地插入这些引用,指令编辑器提供了两个快捷方式:
- 输入“
@”会打开一个上下文菜单,其中包含三个选项:智能体、工具或 变量。您可以使用箭头键和 Tab 键或 点击来浏览此菜单。选择一个选项后,系统会显示更多选项,直到引用完成,此时引用将变为芯片。 - 输入“
{”会打开一个上下文菜单,其中显示可供快速 插入的变量。
语言支持
在设计智能体提示和指令时,请始终使用英语,以便智能体能够以最高质量理解内容。 当智能体与用户互动时,它们能够检测最终用户输入的语言,并自动使用相同的语言进行回复,除非另有明确说明。
如果您希望智能体仅使用某些语言(或不使用某些语言)进行交流,则应添加说明支持的语言的指令。 例如,如果智能体应仅使用意大利语进行回复,您可以在指令中添加“您只会说意大利语,不会说其他语言”。
如需查看受支持的语言列表, 请参阅 语言参考。
重构指令
您可以使用自然语言输入指令,但如果使用 XML 结构设置指令格式,智能体的表现可能会更好,因为这有助于模型更好地遵循指令。 我们提供了一个包含标记的标准 XML 结构,您可以使用这些标记来构建指令结构。 输入自然语言指令后,您可以点击指令面板上方的重构指令 按钮,将指令格式设置为我们推荐的 XML 结构。
下表介绍了推荐的 XML 标记及其使用方法:
| 标记 | 说明 |
|---|---|
role |
定义智能体的核心功能或职责。 |
persona |
描述智能体的个性、语气和行为准则。 |
primary_goal |
在 <persona> 中,指定智能体的主要目标。 |
constraints |
列出智能体必须遵循的规则或限制。 |
taskflow |
将对话流程概括为一系列子任务。 |
subtask |
在 <taskflow> 中,对话流程的特定部分,包含一个或多个步骤。 |
step |
在 <subtask> 中,包含触发条件和操作的单个步骤。 |
trigger |
在 <step> 中,启动步骤的条件或用户输入。 |
action |
在 <step> 中,当步骤被触发时,智能体应采取的操作。 |
examples |
包含少样本示例,用于指导智能体在特定场景中的行为。 |
以下是使用我们推荐的 XML 结构的相同指令的示例:
CURRENT CUSTOMER: {username}
<role>The main Weather Agent coordinating multiple agents.</role>
<persona>
<primary_goal>To provide weather information.</primary_goal>
How to handle prohibited topics and violations: Respond appropriately or
state inability to handle the request.
General guidelines: Follow the constraints and task flow precisely.
</persona>
<constraints>
1. Use {@TOOL: get_weather} ONLY for specific weather requests
(for example, 'weather in London').
2. If the user's name is known (from the 'CURRENT CUSTOMER' context), always
greet them by their name.
</constraints>
<taskflow>
These define the conversational subtasks that you can take. Each subtask
has a sequence of steps that should be taken in order.
<subtask name="Initial Greeting">
<step name="Check for Username and Greet">
<trigger>Start of conversation or new user interaction.</trigger>
<action>If a username is provided in the 'CURRENT CUSTOMER' context,
greet the user by their name. Otherwise, proceed without a
personalized greeting.
</action>
</step>
</subtask>
<subtask name="Query Analysis and Routing">
<step name="Analyze User Query">
<trigger>User provides a query.</trigger>
<action>Determine the intent of the user's query
(greeting, farewell, weather request, or other).
</action>
</step>
<step name="Handle Greeting">
<trigger>User query is identified as a simple greeting
(e.g., 'Hi', 'Hello').
</trigger>
<action>Call {@AGENT: Greeting Agent}.</action>
</step>
<step name="Handle Farewell">
<trigger>User query is identified as a simple farewell
(e.g., 'Bye', 'See you').
</trigger>
<action>Call {@AGENT: Farewell Agent}.</action>
</step>
<step name="Handle Weather Request">
<trigger>User query is identified as a specific weather request
(e.g., 'weather in London').
</trigger>
<action>Use {@TOOL: get_weather} to retrieve weather information and
provide it to the user.
</action>
</step>
<step name="Handle Other Queries">
<trigger>User query does not fall into greeting, farewell, or
specific weather request categories.
</trigger>
<action>Respond appropriately to the query or state that the request
cannot be handled.
</action>
</step>
</subtask>
</taskflow>
<examples>
</examples>
内嵌少样本示例
少样本提示是一种技术,即向大语言模型 (LLM) 提供少量示例,以指导其行为、语气或逻辑。在智能体的上下文中,“内嵌少样本示例”是指将这些示例直接放置在智能体的指令中,而不是放在单独的界面窗格中。这种方法通过展示而非仅告知的方式帮助模型理解复杂的要求,从而弥合抽象指令和具体执行之间的差距。
何时使用少样本示例
少样本示例是强大的校准工具,但应有策略地使用。请考虑在以下场景中添加它们:
- 解决质量问题:主要使用示例来修复模型始终误解指令的特定失败情况。
- 复杂的格式设置:当智能体需要以非常具体、非标准的格式输出数据时。
- 细致的逻辑:当“if-then”指令不足以捕捉决策过程的细微之处时。
最佳实践和警告
虽然少样本示例很有效,但应仔细整理,以避免降低智能体的性能。
- 谨慎使用:添加过多示例可能会导致智能体“过拟合”,这意味着它可能会严格遵循示例,而失去对新的、未见过的用户查询进行泛化的能力。
- 描述性而非详尽性:您无需列举每种可能的用户查询。示例旨在作为模型推理模式的指导,而不是作为查找数据库。
- 从指令开始:始终先尝试使用清晰、描述性的指令解决行为问题。只有在单独使用指令无法达到预期结果时,才添加少样本示例。
少样本示例的组成部分
智能体的标准少样本示例由四个不同的组成部分组成,这些组成部分模拟了一轮对话。
| 组件 | 标记 / 语法 | 说明 |
|---|---|---|
| 用户 | [user] |
表示最终用户的输入或查询。 |
| 模型 | [model] |
表示智能体的文本回答或思考过程。 |
| 工具输入 | tool_code |
演示智能体应如何构建对外部工具或函数的输入或“调用”(例如,特定实参/语法)。 |
| 工具输出 | tool_outputs |
模拟工具返回的数据,教智能体如何在最终回答中解读和利用这些数据。 |
少样本示例应使用以下格式:
<examples> EXAMPLE 1: Begin example [user] What's the weather in London? [model] ```tool_code get_weather(location="London") ``` ```tool_outputs {"temperature": "15 C", "condition": "Cloudy"} ``` [model] The weather in London is 15 C and Cloudy. End example </examples>
优化指令
您可以选择指令内容的一部分,然后系统会显示优化 按钮。 您可以点击此按钮,使用 AI 改进所选内容。 在要求 字段中,输入有关您希望如何改进所选内容的信息。
设置智能体回答的格式
您可以指示智能体如何设置文本回答的格式,以提高可读性。 以下是有关格式设置指令的最佳实践:
分块和空格
- 切勿 编写密集的段落。用户会浏览,而不是阅读。
- 将文本块限制为最多 1-2 个句子。
- 在每个不同的想法之间插入换行符以创建空格。
有策略地加粗
- 您必须加粗 最重要的数据点,以便它们立即突出显示。
- 始终加粗:产品名称、价格、日期、 订单号和截止日期。
- 示例:“经典 T 恤 的价格为 25.00 美元。”
列表优于文本
- 如果您提及两个以上的项或步骤,请自动 将它们转换为项目符号列表或编号列表。
- 对于选项,请使用标准项目符号 (
-);对于指令,请使用编号列表 (1.) 。
全局指令
除了定义智能体专用指令外, 您还可以在 高级智能体应用设置中定义全局指令。
智能体应用中的每个智能体都会继承全局指令,并且对于每个对话轮次,系统都会将全局指令与智能体专用指令一起发送给模型。
全局指令非常适合每个智能体都需要了解的通用信息。 例如:品牌语气、一般“注意事项”、全局共享变量和客户个人资料。