Поделиться через


Разработка потока

Поток запросов — это средство разработки, предназначенное для оптимизации всего цикла разработки приложений искусственного интеллекта на основе больших языковых моделей (LLM). Поскольку импульс для приложений ИИ на основе LLM продолжает расти по всему миру, поток запросов предоставляет комплексное решение, которое упрощает процесс прототипирования, экспериментирования, итерации и развертывания приложений ИИ.

С помощью потока запроса вы сможете:

  • Оркестрация исполняемых потоков с помощью LLM, запросов и инструментов Python с помощью визуализированного графа.
  • Тестирование, отладка и итерацию потоков с легкостью.
  • Создайте варианты запроса и сравните их производительность.

В этой статье вы узнаете, как создать и разработать первый поток запроса в Студия машинного обучения Azure.

Создание и разработка потока запроса

В студии выберите вкладку "Поток запроса" в левой панели навигации. Нажмите кнопку "Создать", чтобы создать первый поток запроса. Вы можете создать поток, клонируя примеры, доступные в коллекции, или создав поток с нуля. Если у вас уже есть файлы потока в локальной или общей папке, можно также импортировать файлы для создания потока.

Снимок экрана: создание потока запроса с нуля или коллекции.

Создание потока

Слева это плоское представление, основная рабочая область, в которой можно создать поток, например добавить средства в поток, изменить запрос, задать входные данные потока, запустить поток, просмотреть выходные данные и т. д.

Снимок экрана: основная рабочая область потока запроса.

В правом верхнем углу это представление файлов потока. Каждый поток может быть представлен папкой, содержащей файл flow.dag.yaml', файлы исходного кода и системные папки. Вы можете добавлять новые файлы, изменять существующие файлы и удалять файлы. Вы также можете экспортировать файлы в локальный или импортировать файлы из локального сайта.

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

В правом нижнем углу это только представление графа для визуализации. В нем показана структура потока, которую вы разрабатываете. Вы можете увеличить масштаб, увеличить масштаб, автоматический макет и т. д.

Примечание.

Невозможно напрямую изменить представление графа, но можно выбрать узел, чтобы найти соответствующую карточку узла в режиме неструктурированного режима, а затем выполнить встроенное редактирование.

Сеанс вычислений

Перед началом разработки необходимо сначала запустить сеанс вычислений. Вычислительный сеанс служит вычислительным ресурсом, необходимым для запуска потока запроса, который включает образ Docker, содержащий все необходимые пакеты зависимостей. Это должен быть для выполнения потока.

Снимок экрана: запуск сеанса вычислений в студии.

Входные и выходные данные потока

Входные данные потока — это данные, передаваемые в поток в целом. Определите входную схему, указав имя и тип. Задайте входное значение каждого входного значения для проверки потока. Вы можете ссылаться на входные данные потока позже в узлах потока с помощью ${input.[input name]} синтаксиса.

Выходные данные потока — это данные, созданные потоком в целом, которые суммируют результаты выполнения потока. Вы можете просматривать и экспортировать выходную таблицу после завершения выполнения потока или пакетного выполнения. Определите выходное значение потока, ссылаясь на выходные данные одного узла потока с помощью синтаксиса ${[node name].output} или ${[node name].output.[field name]}.

 Снимок экрана: входные и выходные данные потока.

Разработка потока с помощью различных средств

В потоке можно использовать различные виды инструментов, например LLM, Python, Serp API, безопасность содержимого и т. д.

Выбрав средство, вы добавите новый узел для потока. Необходимо указать имя узла и задать необходимые конфигурации для узла.

Например, для узла LLM необходимо выбрать подключение, развертывание, задать запрос и т. д. Подключение помогает безопасно хранить секретные ключи и управлять ими или другими конфиденциальными учетными данными, необходимыми для взаимодействия с Azure OpenAI. Если у вас еще нет подключения, сначала создайте его и убедитесь, что ресурс Azure OpenAI имеет развертывание чата или завершения. Средство LLM и prompt поддерживает использование Jinja в качестве языка шаблонов для динамического создания запроса. Например, можно заключить {{}} входное имя вместо фиксированного текста, чтобы его можно было заменить на лету.

Чтобы использовать средство Python, необходимо задать скрипт Python, задать входное значение и т. д. Вы должны определить функцию Python с входными и выходными данными, как показано ниже.

 Снимок экрана: написание скрипта Python для узла Python.

После завершения создания запроса или скрипта Python можно выбрать "Проверить и проанализировать входные данные", чтобы система автоматически анализирует входные данные узла на основе шаблона запроса и ввода функции Python. Входное значение узла можно задать следующим образом:

  • Установка значения непосредственно в поле ввода
  • Ссылка на входные данные потока с помощью ${input.[input name]} синтаксиса
  • Ссылка на выходные данные узла с помощью ${[node name].output} или ${[node name].output.[field name]} синтаксиса

Ссылаясь на выходные данные узла, можно связать узлы вместе. Например, можно ссылаться на выходные данные узла LLM в входных данных узла Python, поэтому узел Python может использовать выходные данные узла LLM, а в представлении графа можно увидеть, что два узла связаны вместе.

Включение условного элемента управления в поток

Поток запросов предлагает не только упрощенный способ выполнения потока, но и обеспечивает мощный компонент для разработчиков — условный контроль, который позволяет пользователям задавать условия для выполнения любого узла в потоке.

В основном условный элемент управления предоставляет возможность связывания каждого узла в потоке с активированной конфигурацией. Эта конфигурация, по сути, является оператором "когда" определяет, когда должен выполняться узел. Эта функция реализуется при наличии сложных потоков, в которых выполнение определенных задач зависит от результатов предыдущих задач. Используя условный элемент управления, можно настроить определенные узлы для выполнения только при выполнении указанных условий.

В частности, можно задать конфигурацию активации для узла, нажав кнопку "Активировать конфигурацию " на карточке узла. Вы можете добавить оператор "when" и задать условие. Вы можете задать условия, ссылаясь на входные данные потока или выходные данные узла. Например, можно задать условие ${input.[input name]} в качестве определенного значения или ${[node name].output} в качестве конкретного значения.

Если условие не выполнено, узел будет пропущен. Состояние узла отображается как "Обходить".

Снимок экрана: параметр активации конфигурации для включения условного элемента управления.

Проверка потока

Вы можете протестировать поток двумя способами:

  • Запустите один узел.
    • Чтобы запустить один узел, щелкните значок запуска на узле в виде неструктурированного режима. После завершения выполнения можно быстро проверить результат в разделе выходных данных узла.
  • Запустите весь поток.
    • Чтобы запустить весь поток, нажмите кнопку "Выполнить" в правом верхнем углу.

Просмотр результатов теста и трассировки (предварительная версия)

Для всего выполнения потока после выполнения потока можно увидеть состояние выполнения в баннере запуска. Затем можно выбрать трассировку представления для просмотра трассировки для проверки результата и наблюдения за выполнением потока, где можно просмотреть входные и выходные данные всего потока и каждого узла, а также более подробные сведения об отладке. Он доступен во время выполнения и после завершения выполнения.

 Снимок экрана: кнопка вывода представления в двух расположениях.

Общие сведения о представлении трассировки

Тип трассировки потока запроса обозначается как Flow. В представлении трассировки можно наблюдать четкую последовательность инструментов, используемых для оркестрации потоков.

Каждый диапазон 2 уровня под корнем потока представляет узел в потоке, выполняемый в виде вызова функции, поэтому тип диапазона определяется как функция. Длительность выполнения каждого узла в дереве диапазонов отображается.

В дереве диапазонов вызовы LLM легко идентифицируются как диапазон LLM . Эти сведения содержат сведения о продолжительности вызова LLM и связанной стоимости маркера.

Щелкнув диапазон, можно просмотреть подробные сведения на правой стороне. Это включает входные и выходные данные, необработанные json и исключения, все из которых полезны для наблюдения и отладки.  Снимок экрана: сведения о трассировки.

Примечание.

В пакете SDK потока запросов мы определили типы диапазонов сервалов, включая LLM, Function, Embedding, Retrieval и Flow. Система автоматически создает диапазоны с информацией о выполнении в указанных атрибутах и событиях.

Дополнительные сведения о типах диапазонов см. в статье "Спецификация диапазона трассировки".

После завершения выполнения потока для проверки результатов можно нажать кнопку "Просмотреть результаты теста", чтобы проверить все записи выполнения журнала в списке. По умолчанию отображаются записи выполнения, созданные за последние семь дней. Чтобы изменить условие, можно выбрать фильтр .

Снимок экрана: результат теста потока.

Вы также можете выбрать имя записи выполнения, чтобы просмотреть подробные сведения в представлении трассировки.

Разработка потока чата

Поток чата предназначен для разработки беседных приложений, опираясь на возможности стандартного потока и обеспечивая расширенную поддержку входных и выходных данных чата и управления журналом чата. С помощью потока чата можно легко создать чат-бот, который обрабатывает входные и выходные данные чата.

На странице разработки потока чата поток чата помечен меткой "чат", чтобы отличить его от стандартного потока и потока оценки. Чтобы проверить поток чата, нажмите кнопку "Чат", чтобы активировать поле чата для беседы.

Снимок экрана: страница разработки потока чата.

Журнал входных и выходных данных чата

Наиболее важными элементами, которые отличают поток чата от стандартного потока, являются входные данные чата, журнал чата и выходные данные чата.

  • Входные данные чата: входные данные чата ссылаются на сообщения или запросы, отправленные пользователями в чат-бот. Эффективная обработка входных данных чата имеет решающее значение для успешной беседы, так как она включает понимание намерений пользователей, извлечение соответствующей информации и активацию соответствующих ответов.
  • Журнал чата: журнал чата — это запись всех взаимодействий между пользователем и чат-ботом, включая входные данные пользователя и созданные ИИ выходные данные. Ведение журнала чата является важным для отслеживания контекста беседы и обеспечения ИИ может создавать контекстно релевантные ответы.
  • Выходные данные чата: выходные данные чата ссылаются на созданные ИИ сообщения, отправляемые пользователю в ответ на их входные данные. Создание контекстно подходящих и привлекательных выходных данных чата жизненно важно для положительного взаимодействия с пользователем.

Поток чата может иметь несколько входных данных, журнал чата и входные данные чата необходимы в потоке чата.

  • В разделе входных данных потока чата входные данные потока можно пометить как входные данные чата. Затем вы можете заполнить входное значение чата, введя в поле чата.

  • Поток запросов может помочь пользователю управлять журналом чата. В chat_history разделе "Входные данные" зарезервировано для представления журнала чата. Все взаимодействия в поле чата, включая входные данные чата пользователя, созданные выходные данные чата, а также другие входные и выходные данные потока, автоматически хранятся в журнале чата. Пользователь не может вручную задать значение chat_history в разделе "Входные данные". Он структурирован как список входных и выходных данных:

    [
    {
        "inputs": {
        "<flow input 1>": "xxxxxxxxxxxxxxx",
        "<flow input 2>": "xxxxxxxxxxxxxxx",
        "<flow input N>""xxxxxxxxxxxxxxx"
        },
        "outputs": {
        "<flow output 1>": "xxxxxxxxxxxx",
        "<flow output 2>": "xxxxxxxxxxxxx",
        "<flow output M>": "xxxxxxxxxxxxx"
        }
    },
    {
        "inputs": {
        "<flow input 1>": "xxxxxxxxxxxxxxx",
        "<flow input 2>": "xxxxxxxxxxxxxxx",
        "<flow input N>""xxxxxxxxxxxxxxx"
        },
        "outputs": {
        "<flow output 1>": "xxxxxxxxxxxx",
        "<flow output 2>": "xxxxxxxxxxxxx",
        "<flow output M>": "xxxxxxxxxxxxx"
        }
    }
    ]
    

Примечание.

Возможность автоматического сохранения или управления журналом чата — это функция на странице разработки при проведении тестов в поле чата. Для пакетных запусков пользователям необходимо включить журнал чата в набор данных пакетного запуска. Если журнал чата недоступен для тестирования, просто задайте для chat_history пустой список [] в наборе данных пакетного запуска.

Запрос на создание с журналом чата

Включение журнала чата в запросы является важным для создания контекстно-зависимого и привлекательного ответа чат-бота. В запросах можно ссылаться на chat_history прошлые взаимодействия. Это позволяет ссылаться на предыдущие входные и выходные данные для создания контекстно релевантных ответов.

Используйте грамматику для цикла языка Jinja для отображения списка входных и выходных данных.chat_history

{% for item in chat_history %}
user:
{{item.inputs.question}}
assistant:
{{item.outputs.answer}}
{% endfor %}

Тестирование с помощью поля чата

Поле чата предоставляет интерактивный способ тестирования потока чата путем имитации беседы с чат-ботом. Чтобы протестировать поток чата с помощью поля чата, выполните следующие действия.

  1. Нажмите кнопку "Чат", чтобы открыть поле чата.
  2. Введите входные данные теста в поле чата и нажмите клавишу ВВОД , чтобы отправить их в чат-бот.
  3. Просмотрите ответы чат-бота, чтобы убедиться, что они контекстно подходят и точны.
  4. Просмотрите трассировку на месте для быстрого наблюдения и отладки.

 Снимок экрана: окно чата потока чата.

Следующие шаги