Structured Output

在众多用例中,如聊天机器人,模型需以自然语言回复用户。然而,在某些情况下,自然语言回复并不理想。例如,如果我们需要获取模型的输出,将其作为HTTP请求的正文传递,或存储到数据库中,那么输出必须符合预定义的架构。这一要求催生了结构化输出的概念,即引导模型以特定的结构化格式生成回复。

在本教程中,我们将探讨如何从大型语言模型(LLM)生成结构化输出,并将其作为HTTP请求的正文传递。

先决条件

我们将使用相同的事件管理服务器来进行HTTP请求。

当然!以下是一个关于您的结构化输出流程的教程,其格式与您的“Agent as Tool”文档保持一致,包括详细的步骤说明和图像占位符。


概述

  1. 通过Start节点接收用户输入。

  2. 使用大型语言模型(LLM)生成结构化的JSON数组。

  3. 遍历数组中的每个元素。

  4. 通过HTTP将每个项目发送到外部端点。

步骤1:设置起始节点

首先,在画布上添加一个开始节点。

关键输入参数:

  • 输入类型:

    • chatInput(默认):流程从用户的聊天消息开始。

    • formInput:流程从表单开始(如果您想从用户那里收集结构化数据)。

  • 临时存储器: *(可选)如果启用此功能,流程将不会保留运行之间的聊天历史记录。

  • 流动状态: *(可选)预填充状态变量。

    • 示例:

      [
        { "key": "answers", "value": "" }
      ]
  • 持久状态: *(可选)如果启用,状态将在同一会话中保持不变。

步骤2:使用大型语言模型(LLM)生成结构化输出

添加一个LLM(大型语言模型)节点,并将其连接到Start(开始)节点。

**目的:**使用语言模型分析输入并生成结构化的JSON数组。

关键输入参数:

  • JSON结构化输出:

    • 键:answers

    • 类型:JSON 数组

    • JSON模式:

      {
        "name": { "type": "string", "required": true, "description": "事件的名称" },,
        "date": { "type": "string", "required": true, "description": "事件的日期" },,
        "location": { "type": "string", "required": true, "description": "事件地点" }
      }
    • 描述:“用户查询的答案”

  • 更新流状态:

    • 使用生成的JSON输出更新流状态。

    • 示例:

      [
        {
          "key": "answers",,
          "value": "{{ output.answers }}"
        }
      ]

步骤3:遍历JSON数组

添加一个迭代节点,并将其连接到LLM节点的输出端。

**目的:**遍历从LLM节点生成的JSON数组中的每个元素。

关键输入参数:

  • 数组输入:

    • 要遍历的数组。设置为保存状态中的答案:

    {{ $flow.state.answers }}
    • 这意味着节点将遍历答案数组中的每个事件。

步骤4:通过HTTP发送每个项目

在循环内部,添加一个HTTP节点。

**目的:**对于数组中的每个项目,向指定端点(例如,http://localhost:5566/events)发送一个HTTP POST请求。

关键输入参数:

  • 方法:

    • POST(此用例中的默认方法)。

  • URL:

    • 发送数据的端点。

    • 示例:

      http://localhost:5566/events
  • 头部信息: *(可选)添加任何所需的HTTP头(例如,用于身份验证)。

  • 查询参数: *(可选)如有需要,请添加任何查询参数。

  • 体型:

    • json(默认):以JSON格式发送正文。

  • 正文:

    • 请求体中要发送的数据。

    • 在循环中设置为当前项:

      {{ $iteration }}
  • 响应类型:

    • json(默认):预期接收JSON格式的响应。


示例交互

用户输入:

创建2个事件:
1. 下周六在荷兰举行的JS大会
2. 9月19日在都柏林举行的通用人工智能(GenAI)聚会

流程:

  • 起始节点接收输入。

  • LLM节点生成一个事件JSON数组。

  • 循环节点遍历每个事件。

  • HTTP节点通过API创建每个事件。


完整流程结构

{"key": "Structured Output", "value": "Structured Output"}

最佳实践

设计指南:

  1. 明确输出模式:定义大型语言模型(LLM)输出的预期结构,以确保下游处理的可靠性。

常见用例:

  • 事件处理:收集事件数据并将其发送到日历或事件管理系统。

  • **批量数据录入:**生成并向数据库或API提交多条记录。

  • **自动通知:**为列表中的每个项目发送个性化消息或提醒。

Last updated