Osmi
Учебные пособия

Структурированный вывод

Во многих случаях использования, таких как чат-боты, от моделей ожидается ответ в естественном языке. Однако есть ситуации, когда ответы в естественной речи не идеально подходят. Например, если нужно взять вывод модели, передать его в качестве тела HTTP-запроса или сохранить в базу данных, важно, чтобы результат соответствовал заранее определенной схеме. Это приводит к концепции структурированного вывода, когда модели направляют генерировать ответы в конкретном, структурированном формате. В этом учебном пособии мы рассмотрим, как получить структурированный вывод от LLM и передать его в качестве тела HTTP-запроса.

Во многих случаях использования, таких как чат-боты, от моделей ожидается ответ в естественном языке. Однако есть ситуации, когда ответы в естественной речи не идеально подходят. Например, если нужно взять вывод модели, передать его в качестве тела HTTP-запроса или сохранить в базу данных, важно, чтобы результат соответствовал заранее определенной схеме. Это приводит к концепции структурированного вывода, когда модели направляют генерировать ответы в конкретном, структурированном формате. В этом учебном пособии мы рассмотрим, как получить структурированный вывод от LLM и передать его в качестве тела HTTP-запроса.

Предварительные условия

Для HTTP-запросов мы будем использовать тот же сервер управления событиями.

Вот руководство по созданию структурированного потока в формате, соответствующем вашей документации "Агент как инструмент", с пошаговыми разъяснениями и запасными изображениями.


Обзор

  1. Получение пользовательского ввода через начальный узел.
  2. Использование LLM для генерации структурированного JSON-массива.
  3. Проход по каждому элементу массива.
  4. Отправка каждого элемента на внешний endpoint через HTTP.

Шаг 1: Настройка начального узла

Добавьте начальный узел на вашу схему.

Основные параметры ввода:

  • Тип ввода::
    • chatInput (по умолчанию): Поток начинается с сообщения чата от пользователя..
    • formInput: Поток начинается с формы (если нужно собрать структурированные данные от пользователя).
  • Эфемерная память:
    • (Опционально) Если включена, история чата не сохраняется между запусками..
  • Состояние потока:
    • (Опционально) Предзаполнение переменных состояния.
    • Пример:
      [
        { "key": "answers", "value": "" }
      ]
      
  • Сохранение состояния:
    • (Опционально) При включении состояние сохраняется в течение сессии.

Шаг 2: Генерация структурированного вывода с помощью LLM

Добавьте узел LLM и соедините его с начальным узлом.

Цель: использовать языковую модель для анализа ввода и создания структурированного JSON-массива.

Ключевые параметры:

  • JSON Структурированный вывод:
    • Ключ: answers
    • Тип: JSON Array
    • JSON Schema:
      {
        "name": { "type": "string", "required": true, "description": "Name of the event" },
        "date": { "type": "string", "required": true, "description": "Date of the event" },
        "location": { "type": "string", "required": true, "description": "Location of the event" }
      }
      
    • Описание: "answer to user query"
  • Обновление состояния потока:
    • Обновляет переменные состояния с созданным JSON-выводом.
    • Пример:
      [
        {
          "key": "answers",
          "value": "{{ output.answers }}"
        }
      ]
      

Шаг 3: Цикл по массиву JSON

Добавьте узел итерации и соедините его с выводом узла LLM.

Цель: пройтись по каждому элементу сгенерированного JSON-массива.

Ключевые параметры:

  • Входной массив:
    • Установите на значение переменной answers из сохраненного состояния:
    {{ $flow.state.answers }}
    
    • Это обеспечит перебор каждого события в массиве answers.

Шаг 4: Отправка каждого элемента через HTTP

Внутри цикла добавьте HTTP-узел.

Цель: для каждого элемента массива отправлять POST-запрос на указанный эндпоинт, например, http://localhost:5566/events.

Ключевые параметры:

  • Метод:
    • POST (по умолчанию для этой задачи).
  • URL:
    • Эндпоинт для отправки данных.
  • Headers(Заголовки):
    • (Опционально) любые необходимые HTTP-заголовки (например, авторизация).
  • Параметры запроса:
    • (Опционально) любые дополнительные параметры.
  • Тип тела:
    • json (по умолчанию): Отправляет тело как JSON.
  • Тело:
    • Данные для отправки в теле запроса.
    • Установить текущий элемент в цикле:
      {{ $iteration }}
      
  • Тип ответа:
    • json (по умолчанию): Ожидается ответ в формате JSON.

Примеры взаимодействий

Ввод пользователя:

create 2 events:
1. JS Conference on next Sat in Netherlands
2. GenAI meetup, Sept 19, in Dublin

Поток:

  • Начальный узел получает входные данные.
  • Узел LLM генерирует JSON-массив событий.
  • Узел цикла проходит по каждому событию.
  • Узел HTTP создает каждое событие через API.

Полная структура потока


Лучшие практики

Рекомендации по проектированию:

  1. Четкая схема вывода:: определите ожидаемую структуру вывода LLM, чтобы обеспечить надежную последующую обработку.

Распространенные варианты использования:

  • Обработка событий: Сбор и отправка данных о событиях в календарь или систему управления событиями..
  • Массовый ввод данных: Создание и отправка нескольких записей в базу данных или API.
  • Автоматические уведомления: Отправляйте персонализированные сообщения или оповещения для каждого элемента в списке.