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


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

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

По мере роста импульса для приложений ИИ на основе LLM поток запросов предоставляет комплексное решение, упрощающее процесс прототипирования, экспериментирования, итерации и развертывания приложений ИИ. С помощью потока запроса можно:

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

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

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

На экране создания потока можно создать поток следующим образом:

  • Создание потока "Стандартный", "Чат" или "Оценка" из шаблона.
  • Клонирование доступного примера из коллекции "Обзор".
  • Импорт существующего потока из локальных файлов или общей папки.

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

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

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

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

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

Страница разработки

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

  • Поток или плоское представление на левой части страницы — основная рабочая область, в которой вы создаете поток. В представлении с плоской можно изменять узлы, инструменты, запросы и входные данные; запуск узлов или всего потока; и определите и просмотрите выходные данные.

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

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

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

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

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

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

Средства потока

В потоке можно использовать различные виды инструментов, таких как LLM, Python, Запрос, API Serp и безопасность содержимого. При выборе инструмента в конец потока добавляется новый узел для этого средства. Необходимо указать имя узла и задать необходимые конфигурации. Элементы управления узла можно использовать для изменения положения узла в потоке.

Входные и выходные данные узла

Средства LLM и Prompt используют Jinja в качестве языка шаблонов для динамического создания запроса. Например, можно заключить {{}} входное имя вместо фиксированного текста, чтобы его можно было заменить на лету.

Входные и выходные данные узла можно задать следующим образом:

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

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

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

Узлы LLM

Для узла Azure OpenAI LLM необходимо выбрать подключение, API и deployment_name и задать запрос. Вы используете подключение для безопасного хранения секретных ключей и управления другими конфиденциальными учетными данными, необходимыми для взаимодействия с Azure OpenAI.

Если у вас еще нет подключения, создайте его перед добавлением узла LLM и убедитесь, что ресурс Azure OpenAI имеет чат или развертывание завершения . Дополнительные сведения см. в статье "Настройка подключения " и создание ресурса и развертывание модели с помощью Azure OpenAI.

Узлы Python

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

from promptflow import tool

# The inputs section will change based on the arguments of the tool function, after you save the code
# Adding type to arguments and return value will help the system show the types properly
# Please update the function name/signature per need
@tool
def my_python_tool(input1: str) -> str:
    return 'hello ' + input1

Условный элемент управления

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

Условный элемент управления предоставляет возможность связать каждый узел в потоке с активированной конфигурацией. Эта конфигурация — это when инструкция, которая определяет, когда должен выполняться узел. Эта функция реализуется в сложных потоках, где выполнение определенных задач зависит от результатов предыдущих задач. С помощью условного элемента управления можно настроить определенные узлы для выполнения только в том случае, если выполнены указанные условия.

Задайте конфигурацию активации для узла, нажав кнопку "Активировать конфигурацию " на карточке узла. Добавьте инструкцию "Когда" и задайте условие. Вы можете задать условия, ссылаясь на входные данные потока или выходные данные узла. Например, можно задать условие ${input.<input name>} или ${<node name>.output} в качестве определенных значений. Если условие не выполнено, узел пропускается, а состояние узла отображается как "Обходить".

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

Тестирование потока

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

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

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

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

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

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

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

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

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

 Снимок экрана: сведения о трассировки.

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

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

Чтобы создать поток чата, на экране "Создать поток" выберите "Создать" на карте потока чата или выберите "Чат" в коллекции "Изучение" и клонируйте один из доступных потоков.

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

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

Входные данные чата, выходные данные чата и журнал чата

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

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

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

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

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

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

Управление журналом чата

Чтобы помочь вам управлять журналом чатов, в разделе "Входные данные" 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. Выберите "Просмотреть выходные данные " в верхней части страницы разработки, чтобы быстро просмотреть и отладить входные данные чата, выходные данные и журнал.
  5. На экране "Выходные данные" выберите вкладку "Трассировка", а затем выберите поток, чтобы просмотреть подробные сведения о потоке в правой области. Разверните поток и выберите любой шаг, чтобы просмотреть подробные сведения для этого шага.

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