Представьте, что вы получили письмо:
Здравствуйте! Что вообще такое Интеллос? А какие модели он поддерживает?
Если отправить это нашему текущему ИИ-ассистенту, он, скорее всего, ответит только на первый вопрос или даст расплывчатый ответ сразу на оба. Нам нужен способ сначала выделить каждый вопрос, а затем в цикле пройтись по базе знаний и ответить на них по очереди.

Экстрактор параметров

Экстрактор параметров
Экстрактор параметров можно представить как очень организованного разведчика. Он читает абзац текста (например, письмо) и выбирает из него ту конкретную информацию, которую вы запросили, аккуратно складывая её в упорядоченный список.

Практика 1: добавьте экстрактор параметров

Прежде чем дорабатывать почтового ассистента, удалим эти узлы: Поиск знаний, If/Else, LLM, LLM 2 и Агрегатор переменных.
1

Добавьте узел

Сразу после узла Start добавьте узел Экстрактор параметров.
Добавьте экстрактор параметров
2

Задайте ввод

Нажмите на Экстрактор параметров и в разделе Входная переменная на правой панели выберите email_content.
Задайте ввод
Поскольку ИИ не знает автоматически, какая именно информация нужна нам из письма, мы должны указать ему собрать все вопросы.
3

Добавьте извлекаемый параметр

Нажмите на значок плюс (+) рядом с Извлечь параметры, чтобы начать определять, что именно должен искать ИИ. Назовём его question_list.
Добавьте извлекаемый параметр
Типы параметровЕсли Экстрактор параметров — это разведчик, то тип — это ведро, в котором он переносит информацию. Под нужную информацию требуется подходящее ведро.Одиночные значения (маленькие вёдра)
  • String (текст): для одного фрагмента текста, например имени клиента
  • Number: для одного числа, например количества в заказе
  • Boolean: простое Да или Нет (True/False), подходит для результата проверки или решения
Списочные значения (массивы)
  • Array[String]: Array означает список, а String — текст. Так что Array[String] означает корзину, которая может хранить несколько фрагментов текста — например, все отдельные вопросы из письма
  • Array[Number]: контейнер, в котором хранятся разные числа, например список цен или товаров
  • Array[Boolean]: используется для хранения нескольких результатов проверки Да/Нет. Например, чтобы проверить список из нескольких пунктов to-do и вернуть, выполнен ли каждый из них, как в [Yes, No, Yes]
  • Array[Object]: продвинутая папка, хранящая наборы данных (например, список контактов, где у каждой записи есть имя и номер телефона)
4

Завершите добавление извлекаемого параметра

  1. Исходя из наших потребностей, выберите Array[String] для содержимого письма.
  2. Добавьте описание, чтобы дать дополнительный контекст. Можно написать: Все вопросы, заданные пользователем в письме. После этого нажмите Добавить.
Завершите добавление извлекаемого параметра
5

Добавьте инструкции

В поле Инструкции под извлекаемыми параметрами введите чёткую команду, которая объяснит ИИ, как действовать.Например: Извлеки все вопросы из письма и сделай каждый вопрос отдельным элементом списка.
Благодаря этому узел сможет найти в письме все вопросы. Теперь, когда наш разведчик успешно собрал ценные находки, переходим к следующему шагу: научим ИИ обрабатывать каждый вопрос.

Итерация

Итерация
С итерацией у вашего ассистента появляется команда близнецов. Когда вы передаёте список (например, вопросы из письма), для каждого отдельного элемента списка появляется близнец. Каждый близнец берёт свой элемент и выполняет ровно ту задачу, которую вы настроили, благодаря чему ничего не теряется.

Практика 2: настройте узел итерации

1

Добавьте узел

  1. Добавьте узел Итерация после Экстрактора параметров.
  2. Нажмите на узел Итерация и перейдите к панели Input справа.
  3. Выберите {x} question_list из Экстрактора параметров. Выходную переменную пока оставьте пустой.
Добавьте узел итерации
Расширенные настройки итерацииНа панели Итерация вы увидите дополнительные настройки. Кратко пройдёмся по ним.
Расширенные настройки итерации
Параллельный режим: ВЫКЛ (по умолчанию)
  • Когда отключён, рабочий процесс обрабатывает каждый элемент списка по очереди (завершает Вопрос 1, затем переходит к Вопросу 2).
  • Когда включён, рабочий процесс пытается обработать все элементы списка одновременно (как 5 поваров, которые готовят 5 разных блюд в одно и то же время).
Способ обработки ошибки: по умолчанию — прерывание при ошибке.
  • Прекращено: означает, что если любой отдельный элемент списка (например, 2-й вопрос) завершится с ошибкой во время подпроцесса, весь рабочий процесс немедленно остановится
  • Продолжить при ошибке: означает, что даже если 2-й вопрос завершится с ошибкой, рабочий процесс пропустит его и продолжит обработку оставшихся вопросов
  • Удалить аномальный вывод: похоже на игнорирование, но дополнительно удаляет этот конкретный сбойный элемент из итогового списка результатов
Вернувшись к рабочему процессу, вы увидите область подпроцесса под узлом Итерация. Каждый узел внутри этого блока будет выполняться один раз для каждого вопроса.
2

Добавьте узел поиска знаний

  1. Внутри блока Итерация добавьте узел Поиск знаний.
  2. Задайте текст запроса как {x} item. В итерации item всегда указывает на вопрос, который обрабатывается в данный момент.
Добавьте узел поиска знаний и задайте текст запроса
3

Добавьте узел LLM

  1. Добавьте узел LLM после Поиска знаний.
  2. Настройте его так, чтобы он отвечал на вопрос на основе найденного контекста.
Помните Урок 4? Используйте те приёмы работы с промптами и не забудьте про контекст!
Можете использовать промпт ниже:Система:
Пользователь:
Добавьте промпт LLM
Поскольку узел итерации генерирует ответ на каждый отдельный вопрос, нам нужно собрать все эти ответы, чтобы составить одно полноценное ответное письмо.
4

Задайте вывод итерации

  1. Нажмите на узел Итерация.
  2. В поле Выходная переменная выберите переменную, представляющую ответ LLM внутри цикла. Теперь узел Итерация будет собирать каждый ответ и складывать их в новый список.
Задайте вывод итерации
5

Добавьте финальный узел LLM

Наконец, подключите последний узел LLM. Этот финальный редактор возьмёт все собранные ответы и отшлифует их в одно профессиональное письмо.Не забудьте добавить промпт в системное сообщение и сообщение пользователя. Можете опереться на промпт ниже.
Пользователь:
Добавьте финальный узел LLM
6

Финальная проверка

  1. Нажмите на чек-лист, чтобы увидеть, не пропущено ли что-нибудь. Согласно заметкам, нам нужно подключить узел Вывод и исправить проблему с недопустимой переменной.
  2. Подключите узел Вывод к стоящему перед ним узлу LLM 2, удалите его прежнюю переменную, а затем выберите text в LLM 2 в качестве выходной переменной.
Выберите выходную переменную
Теперь вы можете написать тестовое письмо с 3 разными вопросами и проверить сгенерированный ответ.

Мини-задание

Что ещё может найти Экстрактор параметров?
Попробуйте поэкспериментировать с типом параметра в нём.