AI Workflow з розгалуженням та умовною логікою

Розробка AI Workflow з розгалуженням та умовною логікою

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

Розробка AI Workflow з розгалуженням та умовною логікою

При обробці 500+ вхідних документів щодня — рахунки, договори, скарги, заявки — критично миттєво маршрутизувати кожен документ до потрібного спеціаліста. Лінійний пайплайн тут неефективний: помилки класифікації сягають 15%, а час обробки одного документа — до 45 хвилин. В результаті термінові рахунки губляться, скарги зависають, а договори підписуються із затримками. Особливо гостро проблема стоїть у компаніях з високим документарним навантаженням: ритейл, логістика, фінанси. Щодня десятки спеціалістів вручну сортують документи — це не лише повільно, а й дорого: на сортування йде до 30% робочого часу. AI Workflow (також machine learning workflow) з умовним розгалуженням AI на базі LangGraph усуває ці втрати. Ми проєктуємо такі системи під ключ з гарантією результату: автообробка до 80% потоку, точність класифікації — від 90%, час маршрутизації — секунди замість годин.

Як обрати тип розгалуження для вашого workflow?

Усі методи розгалуження (conditional branching AI) діляться на три категорії. Порівняємо їх у таблиці:

Тип Основа Приклад Контроль Гнучкість Типова точність
Детерміноване Жорсткі правила (if/else) if amount > 1000: Повний Низька 95-99% (на структурованих даних)
LLM-based Рішення мовної моделі Класифікація тональності Середній Висока 85-92% (на неструктурованих)
Hybrid Комбінація Структурні дані - код, текст - LLM Високий Максимальна 92-97%

Вибір типу залежить від задачі: для передбачуваних сценаріїв достатньо детермінованого, для складних неструктурованих — hybrid дає 2-3x приріст точності порівняно з чисто LLM-підходом. Також можна комбінувати з RAG pipeline для збагачення контексту.

Що таке hybrid-розгалуження і коли його застосовувати?

Hybrid-розгалуження об'єднує детерміновані правила та LLM-based рішення в одному workflow. Наприклад, при обробці рахунку детермінована нода перевіряє формат та числові поля, а LLM витягує неструктуровані дані (найменування товарів, умови). Якщо LLM не може знайти суму, спрацьовує retry-цикл зі зміненим промптом. Такий підхід знижує latency на 30% порівняно з чисто LLM-рішенням і забезпечує точність 95% навіть на зашумлених даних. Hybrid-розгалуження незамінне, коли в одному потоці зустрічаються і структуровані, і неструктуровані документи.

Реалізація з LangGraph

Згідно з офіційною документацією LangGraph, умовні ребра дозволяють маршрутизацію на основі стану. Розглянемо приклад графа для обробки документів:

from langgraph.graph import StateGraph, END from langchain_openai import ChatOpenAI from typing import TypedDict, Literal, Optional import json class WorkflowState(TypedDict): input_document: str document_type: Optional[str] extracted_data: Optional[dict] validation_errors: list[str] processing_path: str output: Optional[dict] llm = ChatOpenAI(model="gpt-4o", temperature=0) # Нода 1: Класифікація документа def classify_document(state: WorkflowState) -> WorkflowState: response = llm.invoke(f"""Визнач тип документа. Типи: invoice, contract, complaint, inquiry, other Документ: {state['input_document'][:500]} Відповідь одним словом:""") return {**state, "document_type": response.content.strip().lower()} # Нода 2a: Обробка рахунку def process_invoice(state: WorkflowState) -> WorkflowState: response = llm.invoke(f"""Витягни дані рахунку. {state['input_document']} Поверни JSON: {{vendor, amount, date, due_date, items}}""") return {**state, "extracted_data": json.loads(response.content), "processing_path": "invoice"} # Нода 2b: Обробка договору def process_contract(state: WorkflowState) -> WorkflowState: response = llm.invoke(f"""Витягни ключові умови договору. {state['input_document']} Поверни JSON: {{parties, subject, amount, duration, key_conditions}}""") return {**state, "extracted_data": json.loads(response.content), "processing_path": "contract"} # Нода 2c: Обробка скарги def process_complaint(state: WorkflowState) -> WorkflowState: response = llm.invoke(f"""Класифікуй скаргу. {state['input_document']} Поверни JSON: {{category, severity: low/medium/high/critical, requires_immediate_action: bool}}""") return {**state, "extracted_data": json.loads(response.content), "processing_path": "complaint"} # Нода 3: Валідація def validate_data(state: WorkflowState) -> WorkflowState: errors = [] data = state.get("extracted_data", {}) if state["document_type"] == "invoice": if not data.get("amount"): errors.append("Missing invoice amount") if not data.get("vendor"): errors.append("Missing vendor information") return {**state, "validation_errors": errors} # Нода 4a: Успішне завершення def finalize_success(state: WorkflowState) -> WorkflowState: return {**state, "output": { "status": "processed", "path": state["processing_path"], "data": state["extracted_data"], }} # Нода 4b: Обробка помилок def handle_validation_errors(state: WorkflowState) -> WorkflowState: return {**state, "output": { "status": "validation_failed", "errors": state["validation_errors"], "requires_manual_review": True, }} # Routing функції def route_by_document_type(state: WorkflowState) -> str: mapping = { "invoice": "process_invoice", "contract": "process_contract", "complaint": "process_complaint", } return mapping.get(state["document_type"], "process_unknown") def route_after_validation(state: WorkflowState) -> str: return "handle_errors" if state["validation_errors"] else "finalize" # Побудова графа graph = StateGraph(WorkflowState) graph.add_node("classify", classify_document) graph.add_node("process_invoice", process_invoice) graph.add_node("process_contract", process_contract) graph.add_node("process_complaint", process_complaint) graph.add_node("validate", validate_data) graph.add_node("finalize", finalize_success) graph.add_node("handle_errors", handle_validation_errors) graph.set_entry_point("classify") graph.add_conditional_edges("classify", route_by_document_type, { "process_invoice": "process_invoice", "process_contract": "process_contract", "process_complaint": "process_complaint", "process_unknown": "handle_errors", }) graph.add_edge("process_invoice", "validate") graph.add_edge("process_contract", "validate") graph.add_edge("process_complaint", "validate") graph.add_conditional_edges("validate", route_after_validation, { "finalize": "finalize", "handle_errors": "handle_errors", }) graph.add_edge("finalize", END) graph.add_edge("handle_errors", END) workflow = graph.compile() 

Як реалізувати циклічні розгалуження з retry?

У реальних сценаріях дані можуть бути неповними або низької якості. Ми додаємо retry-цикл з обмеженням спроб:

MAX_RETRIES = 3 def check_quality_and_retry(state: WorkflowState) -> str: """Вирішує: прийняти результат або відправити на переробку""" if state.get("retry_count", 0) >= MAX_RETRIES: return "accept" # Приймаємо навіть неідеальний результат quality = assess_output_quality(state["output"]) if quality < 0.8: return "retry" return "accept" def increment_retry(state: WorkflowState) -> WorkflowState: return {**state, "retry_count": state.get("retry_count", 0) + 1} # Додаємо цикл до графа graph.add_conditional_edges("quality_check", check_quality_and_retry, { "retry": "processing_node", "accept": "finalize", }) 

Чому hybrid-розгалуження ефективніше?

З нашої практики: workflow обробки вхідної кореспонденції. Замовник отримував 500+ документів на день (email attachments, завантаження через портал). Детерміноване розгалуження не справлялося — документи одного типу часто вимагали різних дій. Ми впровадили hybrid-систему, де код обробляє структуровані поля (номери, дати), а LLM класифікує неоднозначні випадки. Результат: авто-обробка без ручного втручання — 71%, час маршрутизації скоротився з 45 хвилин до миттєвої, точність класифікації — 94%, помилки маршрутизації — 2,1%. Такий підхід дозволив клієнту суттєво скоротити витрати на ручну обробку.

Замовте розробку AI Workflow під ключ — ми підготуємо проєкт з урахуванням ваших вимог.

Типові помилки при розробці AI Workflow

Помилка Причина Рішення
Недостатнє тестування edge cases Ігнорування нестандартних входів Покрити тестами порожні документи, биті файли, неочікувані формати
Відсутність fallback-маршрутів Надія на постійну доступність моделі Налаштувати перемикання на резервну модель або ручний режим при збоях
Ігнорування latency Неврахування часу відповіді LLM Використовувати timeout та асинхронні виклики, відстежувати p99 latency
Нескінченні retry-цикли Відсутність обмеження кількості спроб Ввести MAX_RETRIES та умову виходу за якістю

Процес роботи

  1. Аналітика — вивчаємо вхідні дані, типи розгалужень, вимоги до latency та точності. Фіксуємо цільові метрики: accuracy, p99 latency, error rate.
  2. Проєктування графа — малюємо схему, визначаємо ноди та conditional edges. Обираємо тип розгалуження для кожного вузла.
  3. Реалізація — пишемо код на LangGraph, інтегруємо з LLM (GPT-4, Claude) та зовнішніми API. Додаємо логування та моніторинг.
  4. Тестування — покриваємо unit-тестами кожну ноду, перевіряємо edge cases (порожні входи, помилки моделей). Проводимо навантажувальне тестування на реальних даних.
  5. Деплой — розгортаємо під навантаженням, налаштовуємо алерти за метриками: accuracy, latency p99, throughput. Забезпечуємо hot-reload для швидких правок.

Що входить у розробку AI Workflow

  • Проєктна документація: опис графа, специфікація нод та conditional edges, сценарії використання.
  • Вихідний код на LangGraph з коментарями та інструкцією з розгортання.
  • Доступ до репозиторію з версіонуванням (Git) та CI/CD.
  • Навчання команди (до 2-х онлайн-сесій) з налаштування та модифікації workflow.
  • Технічна підтримка на 3 місяці після впровадження.

Гарантії та досвід

Наші інженери мають 10+ років досвіду в AI/ML, реалізували понад 50 проєктів AI-автоматизації. 5 років на ринку. Ми гарантуємо: точність класифікації не нижче 90%, автообробку 70%+ потоку, час відгуку системи — менше 1 секунди на документ. Результати фіксуємо в SLA з щомісячним аудитом.

Терміни

  • Проєктування: від 1 тижня.
  • Реалізація нод та розгалужень: 2–3 тижні.
  • Тестування edge cases: 1–2 тижні.
  • Разом під ключ: 4–6 тижнів.

Отримайте консультацію інженера — ми оцінимо ваш кейс та запропонуємо рішення. Зв'яжіться з нами для розрахунку вартості та термінів вашого проєкту.