每个 playbook 都应包含一个或多个示例。 这些示例是最终用户与 playbook 之间的对话示例,包括代理执行的对话和操作。 这些实际上是 LLM 的少样本提示示例 。
控制台提供了一个界面,供您输入操作。
多语言代理
如果您希望代理处理多种语言,则示例应使用每种语言。
输入摘要和输出摘要示例
除了输入和输出参数之外,playbook 还支持接收输入摘要 和发出输出摘要 ,以便与其他 playbook 交换信息。摘要有助于在 playbook 之间传递抽象的上下文信息,而参数更有助于在 playbook 之间传递结构化、明确定义的字段。参数是流和 playbook 之间交换数据的唯一方式。
向示例添加相关输入摘要,以便在运行时根据输入摘要调整 playbook 的操作。 添加输出摘要,其中包含有关示例对话的相关准确详细信息,以向 playbook 展示哪些详细信息需要进行总结。
示例状态
在对话的给定时间点,playbook 将处于以下某种状态:
OK:playbook 已成功实现其目标,控制权现在将转移到父 playbook。CANCELLED:用户决定不继续执行分配给 playbook 的目标。 控制权现在将转移到父 playbook。如果父 playbook 是 CX 流,则系统会在流运行之前检测用户输入的意图。FAILED:由于某些错误(例如,工具返回 500 错误),playbook 无法继续执行目标。会话将以失败状态结束。系统会将 EndInteraction 消息添加到响应中。ESCALATED:playbook 确定无法实现目标,需要将情况上报给人工。会话将以升级状态结束。 系统会将 EndInteraction 消息添加到响应中。PENDING:对话仍在 playbook 中继续进行。
顶级示例及其 playbook 调用应使用与它们所引用的 playbook 对应的状态进行标记。
选择策略
选择策略设置用于控制是否将示例包含在发送给 LLM 的 playbook 提示中。 您可以使用以下选项:
动态选择:系统会根据示例与当前对话上下文的相关性有条件地包含该示例。如果提示接近令牌限制,则可能会省略该示例。
始终选择:系统始终会包含该示例, 无论对话上下文如何。如果提示接近令牌限制,则可能会省略该示例。
从不选择:系统从不会在提示中包含该示例。 该示例不会对 playbook 的性能产生任何影响。此设置可用于暂时排除示例以进行测试。
添加操作
playbook 中提供的示例由一系列操作组成。 这些操作的组合可能各不相同,但它们主要描述了用户与 playbook 之间的互动,以及为满足用户查询或要求而采取的操作。
您可以通过两种方式向示例添加操作:
- 如需手动添加操作,请点击右侧窗格底部的 + 按钮,或者将指针悬停在现有操作上时点击添加操作 按钮。 您可以在创建新示例 (点击 + 示例 选项)或修改现有示例时使用这些选项。
- 如需根据现有 playbook 说明自动生成操作,请在右侧窗格底部的输入用户输入 字段中输入用户输入。 您可以在创建或修改示例时使用此选项。 或者,您也可以在右侧的预览 playbook 窗格中运行时测试 playbook 时使用此选项。 如需将操作从预览 playbook 窗格保存到示例,请从预览 playbook 窗格左侧的调用列表中选择 playbook 调用,然后点击保存示例 。
请务必检查自动生成的操作是否正确,并根据需要进行修改。 对于示例较少或没有示例的 playbook,这一点尤为重要。
playbook 支持以下类型的操作:
Playbook 响应
playbook 对用户查询的响应。
用户输入
用户查询。
工具使用
这是用于获取满足用户查询所需的其他信息的工具调用。此操作应指定以下详细信息:
工具:应调用的工具的名称。
操作:应调用的 OpenAPI 工具 的操作名称。 对于 数据存储区工具 和 函数工具, 操作名称与工具名称相同。
工具输入:要包含在工具调用中的输入。 这些输入通常来自与用户的先前对话轮次。
对于 Open API 工具,
requestBodyJSON 需要用于POST、PUT和PATCH方法类型。createPet 操作的 Open API 工具
requestBody输入示例:{ "id": 1, "name": "Luna" }对于数据存储区工具,示例
requestBody中需要查询,其他字段是可选字段。{ "query": "Where is my nearest store?", "filter": "country: ANY(\"United States\")", "userMetadata": { "userCity": "San Francisco", }, "fallback": "We don't have any stores in your area." }工具输出:工具调用的响应。 这是工具针对给定输入的有效 JSON 响应。 对于 Open API 工具, 它也可以是字符串错误(例如,“404 Not found”)。
listPets 操作的 Open API 工具 输出示例:
{ "pets": [ { "id": 1, "name": "Luna" }, { "id": 2, "name": "Charlie" }] }数据存储区工具输出示例:
{ "answer": "Here's the address to your nearest store ...", "snippets": [ { "title": "San Francisco Downtown", "uri": "https://www.example.com/San_Francisco_Downtown", "text": "Address for San Francisco Downtown .." } ] }
为确保 playbook 安全无虞,还应包含 playbook 在工具调用失败时应如何响应的示例。
Open API 工具
调用失败可以在工具输出中表示为错误字符串(“404 not found”)。
对于
数据存储区工具
,可以使用 fallback 输入来指定在没有摘要回答时如何响应
。
如果您希望您的
数据存储区工具
在 playbook 响应中包含 URI,
请添加包含您希望 playbook 响应的 URI 的示例。
如果此 URI 来自
数据存储区工具,
则
数据存储区工具
输出应包含与 playbook 响应中的 URI 匹配的 URI。
请注意,在此场景中不能使用 fallback,因为它会停用 LLM playbook 的功能,即重新措辞数据存储区工具的回答以在 playbook 响应中包含 URI。
包含工具使用操作的示例可能会非常冗长 并导致输入 令牌限制 消耗增加。 为确保有效使用令牌, 请确保工具输出简洁明了 并包含与 playbook 目标相关的信息。 对于 数据存储区工具, 请考虑从示例中移除代码段, 因为它们可能会导致输入令牌消耗过高。
Playbook 调用
当 playbook 应调用另一个任务 playbook 以满足用户查询时,可以使用此操作。 此操作应指定以下详细信息:
- Playbook:要调用的 playbook 的名称。
- Playbook 调用输入摘要: 对被调用 playbook 有用的先前对话的相关部分的摘要。
- 输入参数: 输入参数 要传递给 playbook 的输入参数。
- Playbook 调用输出摘要: playbook 在完成目标后应生成的内容的摘要。
- 输出参数: 输出参数 playbook 在完成目标后生成的输出参数。
Playbook 转换
Playbook 转换操作是一种终端操作 (不应后跟其他操作) ,表示 例行 playbook 已决定退出并转换为目标例行 playbook。请注意,由于此操作表示 playbook 退出,因此请将 playbook 的输出参数添加到示例的 playbook 输出中。
流调用
当任务 playbook 应调用流时,可以使用此操作。 此操作应指定以下详细信息:
- 流 :要调用的流的名称。
- 流输入参数: 要传递给流的输入参数 。
- 流返回参数: 从流返回的输出参数 。
流转换
流转换操作是一种终端操作 (不应后跟其他操作) ,表示 例行 playbook 已决定退出 并转换为目标流。请注意,由于此操作表示 playbook 退出,因此请将 playbook 的输出参数添加到示例的 playbook 输出中。