Рабочие процессы с участием человека

Построение пайплайнов данных с Airflow

Volker Janz

Senior Developer Advocate at Astronomer

Примеры использования HITL

$$

$$

  • Подтверждение ответа, сгенерированного ИИ
  • Маршрутизация обращения в нужную команду
  • Проверка отчёта о качестве данных перед публикацией

Схема участия человека в процессе

Построение пайплайнов данных с Airflow

Семейство операторов HITL

$$

Оператор Сценарий использования
ApprovalOperator Бинарное подтверждение/отклонение
HITLBranchOperator Выбор следующих задач
HITLOperator Пользовательские варианты + форма
HITLEntryOperator Только ввод в форму, без вариантов

$$

  • Все операторы HITL реализованы как отложенные операторы
Построение пайплайнов данных с Airflow

HITLEntryOperator

from airflow.providers.standard.operators.hitl import HITLEntryOperator
from airflow.sdk import Param

review = HITLEntryOperator( task_id="human_review", subject="Review AI draft response", body="{{ ti.xcom_pull(task_ids='generate_draft') }}", params={ "feedback": Param("", type="string"), "urgency": Param("p3", type="string"), }, )
  • Конвейер приостанавливается до заполнения полей
Построение пайплайнов данных с Airflow

Доступ к ответу

@task
def send_response(hitl_output):
    feedback = hitl_output["params_input"]["feedback"]
    urgency = hitl_output["params_input"]["urgency"]
    print(f"Sending response (urgency: {urgency}): {feedback}")

draft = generate_draft() chain(draft, review) send_response(review.output)

 

  • Данные формы хранятся в params_input
  • Выбранные варианты (если есть) — в chosen_options
Построение пайплайнов данных с Airflow

HITLBranchOperator

from airflow.providers.standard.operators.hitl import HITLBranchOperator

route = HITLBranchOperator( task_id="route_complaint", subject="Route customer complaint", body="A customer reported an issue. Choose the responsible team.", options=["Billing Issue", "General Inquiry", "Technical Issue"], options_mapping={ "Billing Issue": "handle_billing", "Technical Issue": "handle_technical", "General Inquiry": "handle_general", }, defaults=["General Inquiry"], )

 

  • Человек выбирает вариант, сопоставленный с ID нижестоящей задачи
  • Невыбранные ветви пропускаются
Построение пайплайнов данных с Airflow

Требуемые действия в интерфейсе

 

  • Задачи HITL создают требуемое действие
  • Рецензенты отвечают в представлении экземпляра задачи

 

  • Все операторы HITL являются отложенными
  • Они освобождают слот воркера во время ожидания
  • Асинхронное ожидание обрабатывает Triggerer

HITL в интерфейсе Airflow

Построение пайплайнов данных с Airflow

Давайте потренируемся!

Построение пайплайнов данных с Airflow

Preparing Video For Download...