每个 playbook 都应包含一个或多个示例。以下示例展示了最终用户与剧本之间的对话,包括代理执行的对话和操作。这些实际上是 LLM 的少样本提示示例。
控制台提供了一个界面,供您输入操作。
多语言代理
如果您希望代理处理多种语言,示例应使用每种语言。
输入摘要和输出摘要示例
除了输入和输出参数之外,playbook 还支持接收输入摘要和发出输出摘要,以便与其他 playbook 交换信息。摘要有助于在 playbook 之间传递抽象的上下文信息,而参数则更适合在 playbook 之间传递结构化、明确定义的字段。参数是工作流和 playbook 之间交换数据的唯一方式。
向示例添加相关输入摘要,以使 playbook 在运行时根据输入摘要调整其操作。 添加输出摘要,其中包含有关示例对话的相关准确详细信息,以向 playbook 展示哪些详细信息需要总结。
示例状态
在对话中的某个时间点,剧本将处于以下某种状态:
OK
:playbook 已成功实现其目标,控制权现在将转移到父 playbook。CANCELLED
:用户决定不继续执行分配给 playbook 的目标。 现在,控制权将转移到家长剧本。如果父 playbook 是 CX 流,系统会在运行该流之前检测用户输入的意图。FAILED
:由于某些错误(例如,工具返回 500 错误),Playbook 无法继续实现目标。会话将以失败状态结束。系统会将 EndInteraction 消息添加到响应中。ESCALATED
:策略方案认为无法实现目标,需要将情况上报给人工处理。会话将以状态升级结束。 系统会将 EndInteraction 消息添加到响应中。PENDING
:对话仍在 playbook 中继续进行。
顶级示例及其 playbook 调用应使用与所引用的 playbook 对应的状态进行标记。
选择策略
选择策略设置用于控制是否将示例纳入发送给 LLM 的 playbook 提示中。 您可以使用以下选项:
动态选择:示例会根据其与当前对话上下文的相关性有条件地包含在内。 如果提示接近词元数量上限,则可以省略示例。
始终选择:无论对话内容如何,始终包含示例。 如果提示接近词元数量上限,则可以省略示例。
永不选择:示例永远不会包含在提示中。 此示例不会对剧本的性能产生任何影响。 此设置可用于暂时排除某个示例以进行测试。
添加操作
playbook 中提供的示例包含一系列操作。这些操作的组合可能各不相同,但它们主要描述了用户与剧本之间的互动,以及为满足用户查询或要求而采取的中间操作。
您可以通过两种方式向示例添加操作:
- 如需手动添加操作,请点击右侧窗格底部的 + 按钮,或将指针悬停在现有操作上时显示的添加操作按钮。 您可以在点击 + 示例选项创建新示例时,或在修改现有示例时使用这些选项。
- 如需根据现有剧本指令自动生成操作,请在右侧窗格底部的输入用户输入字段中输入用户输入。 您可以在创建或修改示例时使用此选项。 或者,您也可以在右侧的预览 playbook 窗格中测试运行时 playbook 时使用此选项。 如需将操作保存到预览 playbook 窗格中的示例,请在预览 playbook 窗格左侧的调用列表中选择 playbook 调用后,点击保存示例。
请务必检查自动生成的操作是否正确,并根据需要进行修改。 对于示例较少或没有示例的 playbook,这一点尤为重要。
该剧本支持以下类型的操作:
playbook 回答
针对用户查询的 playbook 回答。
用户输入
用户查询。
工具使用
这是一个工具调用,用于获取满足用户查询所需的其他信息。 此操作应指定以下详细信息:
工具:应调用的工具的名称。
操作:应调用的 OpenAPI 工具的操作名称。 对于数据存储区工具和函数工具,操作名称与工具名称相同。
工具输入:要包含在工具调用中的输入内容。 这些通常是从之前与用户的对话轮次中派生出来的。
对于 Open API 工具,
requestBody
JSON 是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 .." } ] }
为确保手册万无一失,还应包含工具调用失败时手册应如何响应的示例。
开放式 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 输出中。
Flow 调用
当任务 playbook 应调用流时,使用此操作。 此操作应指定以下详细信息:
- 流:要调用的流的名称。
- 流输入参数: 要传递给流的输入参数。
- 流程返回参数:从流程返回的输出参数。
流程过渡
流过渡操作是一种终端操作(不应后跟其他操作),表示常规 playbook 已决定退出并过渡到目标流。请注意,由于此操作表示 playbook 会退出,因此请将 playbook 的输出参数添加到示例的 playbook 输出中。