Playbook 示例

每个 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 工具requestBody JSON 需要用于 POSTPUTPATCH 方法类型。

    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 输出中。