每个 playbook 都应有一个或多个示例。这些示例是最终用户与 playbook 之间的对话示例,包括智能体执行的对话和操作。这些实际上是 LLM 的少样本提示示例。
控制台提供了一个界面,供您输入操作。
多语言代理
如果您的代理处理多种语言,请在示例中使用每种语言。
输入和输出摘要示例
除了输入和输出参数之外,playbook 还支持接收输入摘要和发出输出摘要,以便与其他 playbook 交换信息。摘要有助于在 playbook 之间传递抽象的上下文信息,而参数则更有助于在 playbook 之间传递结构化、定义明确的字段。参数是在流和 playbook 之间交换数据的唯一方法。
向示例添加相关输入摘要,以帮助 playbook 在运行时根据这些输入摘要调整其操作。添加输出摘要,其中包含有关示例对话的相关且准确的详细信息,以便向 playbook 展示哪些详细信息对于总结很重要。
示例状态
在对话中的某个时间点,Playbook 会处于以下状态之一:
OK:Playbook 成功实现了其目标,并将控制权转移给父级 Playbook。CANCELLED:用户决定不继续执行分配给 playbook 的目标,控制权转移到父级 playbook。如果父级 playbook 是 CX flow,Dialogflow CX 会在 flow 运行之前检测用户输入 intent。FAILED:由于发生错误(例如,工具返回 500 错误),Playbook 无法继续执行目标。会话以失败状态结束。EndInteraction 消息会添加到响应中。ESCALATED:Playbook 确定无法实现目标,需要将情况上报给人工。会话以“已上报”状态结束。 EndInteraction 消息会添加到响应中。PENDING:对话在 playbook 中继续。
您应使用与顶级示例及其 playbook 调用所引用的 playbook 对应的状态来表示它们。
选择策略
选择策略设置用于控制是否将示例包含在发送给 LLM 的 playbook 提示中。
您可以使用以下选项:
- 动态选择:根据示例与当前对话上下文的相关性,有条件地包含示例。如果提示接近 token 数量上限,您可以省略示例。
- 始终选择:无论对话上下文如何,始终包含该示例。如果提示接近词元限制,您可以省略示例。
- 从不选择:提示中不包含该示例。该示例对 playbook 的性能没有影响。此设置对于临时排除示例进行测试非常有用。
添加操作
playbook 中提供的示例包含一系列操作。这些操作可以采用不同的组合,但主要描述了您与 playbook 之间的互动,以及在此期间为满足您的查询或要求而采取的操作。
您可以通过以下两种方式向示例添加操作:
- 如需手动添加操作,请点击右侧窗格底部的 + 按钮,或在将指针悬停在现有操作上时点击 Add action 按钮。当您通过点击 + 示例选项创建新示例或修改现有示例时,请使用这些选项。
- 如需根据现有 playbook 说明自动生成操作,请在右侧窗格底部的输入用户输入字段中输入用户输入。在创建或修改示例时,请使用此选项。 或者,在右侧的预览 playbook 窗格中测试 playbook 时,也可以使用此选项。如需从预览 playbook 窗格中将操作保存到示例,请从预览 playbook 窗格左侧的调用列表中选择 playbook 调用,然后点击保存示例。
检查自动生成的动作是否正确,并根据需要进行修改。对于示例很少或没有示例的 playbook,这一点尤为重要。
该 playbook 支持以下类型的操作。
Playbook 响应
提供 playbook 对用户查询的回答。
用户输入
输入用户查询。
工具使用
通过调用工具获取满足用户查询所需的其他信息。
此操作会指定以下详细信息:
- 工具:您必须调用的工具的名称。
- Action:您必须调用的 OpenAPI 工具的操作名称。对于数据存储区工具和函数工具,操作名称与工具名称相同。
工具输入:要包含在工具调用中的输入。这些输入通常来自之前与用户的对话。
对于 OpenAPI 工具,
POST、PUT和PATCH方法类型需要requestBodyJSON。createPet 操作的 OpenAPI 工具
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 响应。对于 OpenAPI 工具,它也可以是字符串错误(例如“404 Not found”)。
listPets 操作的 OpenAPI 工具输出示例:
{ "pets": [ { "id": 1, "name": "Luna" }, { "id": 2, "name": "Charlie" }] }针对查询“Where is my nearest store?”(离我最近的商店在哪里?)的数据存储区工具输出示例:
{ "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 在工具调用失败时如何响应的示例。您可以将 OpenAPI 工具调用失败表示为工具输出中的错误字符串(“404 not found”)。对于数据存储区工具,您可以使用 fallback 输入来指定在没有摘要回答时如何响应。
如果您希望数据存储区工具在 playbook 响应中包含 URI,请添加包含您希望 playbook 响应的 URI 的示例。如果此 URI 来自数据存储区工具,则数据存储区工具输出必须包含与 playbook 响应中的 URI 匹配的 URI。
包含工具使用操作的示例可能会非常冗长,并会增加输入 token 限制消耗。为了高效使用 token,请确保工具输出简洁明了,并包含与 playbook 目标相关的信息。对于数据存储区工具,请考虑从示例中移除代码段,因为它们会导致输入 token 消耗量较高。
playbook 调用
当 playbook 需要调用另一个任务 playbook 来满足用户查询时,请使用此操作。
为此操作指定以下详细信息:
- Playbook:要调用的 playbook 的名称。
- Playbook 调用输入摘要:前面对话中对所调用 Playbook 有用的相关部分的摘要。
- 输入参数:要传递给 playbook 的输入参数。
- Playbook 调用输出摘要:Playbook 在完成其目标后应生成的内容的摘要。
- 输出参数:playbook 在完成目标后生成的输出参数。
Playbook 转换
playbook 转换操作是一种终止操作,其后不应再执行其他操作,这表示常规流程 playbook 已决定退出并转换到目标常规流程 playbook。由于此操作表示 playbook 退出,因此请将 playbook 的输出参数添加到示例的 playbook 输出中。
Flow 调用
当任务 playbook 应调用 flow 时,会使用此操作。
此操作应指定以下详细信息:
- Flow:要调用的流的名称。
- 流输入参数:要传递给流的输入参数。
- 流返回参数:从流返回的输出参数。
流程转换
流程转换操作是一种终止操作,其后不应再有其他操作,表示常规流程 playbook 已决定退出并转换到目标流程。由于此操作表示 playbook 退出,因此请将 playbook 的输出参数添加到示例的 playbook 输出中。