Разработка AI-агента для автоматизации бизнес-процессов
Представьте: бухгалтер тратит 3.5 часа в день на сверку счетов, а менеджер по персоналу — 2 часа на онбординг каждого новичка. Эти процессы съедают время, но их можно автоматизировать. Мы, команда AI/ML инженеров с 10-летним опытом, разрабатываем умных AI-агентов на базе больших языковых моделей (LLM), которые берут на себя рутину. В отличие от классической RPA, наш агент понимает неструктурированный контент (PDF, фото, email) и адаптируется к вариациям данных без перепрограммирования. За нашими плечами 30+ проектов по автоматизации — от обработки счетов до онбординга сотрудников.
Первое, что мы делаем на проекте — разбираемся с вашим бизнес-процессом. Выявляем узкие места, собираем типовые кейсы и проектируем архитектуру будущего агента.
Почему AI-агент эффективнее RPA?
RPA работает по жёстким сценариям: любое отклонение в структуре письма или PDF — и процесс ломается. AI-агент на LLM (GPT-4o, Claude 3.5) справляется с вариативностью: он извлекает данные из произвольного текста, использует Large language model (LLM) для классификации и принимает решения по правилам. В таблице — ключевые различия.
| Характеристика | RPA | AI-агент |
|---|---|---|
| Обработка неструктурированных данных | Нет | Да (PDF, фото, email) |
| Адаптация к изменениям | Нет | Да (few-shot, RAG) |
| Human-in-the-loop | Сложно | Встроенная поддержка |
| Стоимость внедрения | Средняя | Выше, но окупается за 6–12 мес. |
| Точность при отклонениях | Низкая | Высокая (96%+) |
Как мы строим AI-агента: пошаговый план
Наш подход к разработке агента состоит из четырёх этапов:
- Анализ и проектирование (1–2 недели): изучаем бизнес-процесс, собираем данные, рисуем схему AS-IS и TO-BE.
- Разработка ядра (2–3 недели): реализуем граф состояний на LangGraph, подключаем LLM (GPT-4o или Claude 3.5) и векторную базу (ChromaDB/pgvector).
- Интеграция с системами (1–2 недели): настраиваем адаптеры для 1С, Jira, Bitrix24, почты. Ниже таблица типовых интеграций.
- Тестирование и HITL (1–2 недели): проверяем на реальных данных, настраиваем точки принятия решений человеком.
| Система | Тип интеграции | Сложность |
|---|---|---|
| 1С (бухгалтерия, управление) | REST API / ODBC | Средняя |
| Jira / Trello | REST API | Низкая |
| Bitrix24 | REST API / вебхуки | Средняя |
| Почтовый сервер (IMAP) | SMTP/IMAP | Низкая |
| Файловый обмен (SFTP) | Протокол | Низкая |
Типовые бизнес-процессы для AI-агента
Обработка входящих заявок: агент разбирает email/форму, классифицирует, проверяет данные, маршрутизирует нужному исполнителю, создаёт задачу в трекере. Остальные процессы — онбординг, обработка счетов, отчётность — автоматизируются по тому же принципу.
Архитектура агента для обработки заявок
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
from typing import TypedDict, Optional
class ApplicationState(TypedDict):
raw_input: str # Входящий текст заявки
applicant_name: str
application_type: str # тип заявки
extracted_data: dict # извлечённые данные
validation_result: dict # результат проверки
routing_decision: str # куда направить
task_id: Optional[str] # ID созданной задачи
notification_sent: bool
llm = ChatOpenAI(model="gpt-4o", temperature=0)
def classify_and_extract(state: ApplicationState) -> ApplicationState:
"""Классификация заявки и извлечение данных"""
response = llm.invoke(f"""Проанализируй входящую заявку и извлеки структурированные данные.
Заявка:
{state['raw_input']}
Верни JSON:
{{
"application_type": "vacation|expense|equipment|access|other",
"applicant_name": "...",
"department": "...",
"details": {{}}, // специфичные поля по типу
"urgency": "normal|urgent|critical",
"missing_info": [] // чего не хватает
}}""")
import json
data = json.loads(response.content)
return {
**state,
"application_type": data["application_type"],
"applicant_name": data.get("applicant_name", ""),
"extracted_data": data,
}
def validate_application(state: ApplicationState) -> ApplicationState:
"""Проверка полноты и соответствия политикам"""
app_type = state["application_type"]
extracted = state["extracted_data"]
validation = {"valid": True, "errors": [], "warnings": []}
if app_type == "vacation":
# Проверяем остаток отпуска
days = extracted["details"].get("days", 0)
balance = hr_api.get_vacation_balance(state["applicant_name"])
if days > balance:
validation["valid"] = False
validation["errors"].append(f"Недостаточно дней отпуска: запрошено {days}, доступно {balance}")
elif app_type == "expense":
amount = extracted["details"].get("amount", 0)
if amount > 50000: # Лимит самостоятельного согласования
validation["warnings"].append("Требует согласования руководителя")
return {**state, "validation_result": validation}
def route_application(state: ApplicationState) -> ApplicationState:
"""Определение маршрута обработки"""
app_type = state["application_type"]
validation = state["validation_result"]
urgency = state["extracted_data"].get("urgency", "normal")
if not validation["valid"]:
routing = "reject_with_explanation"
elif app_type == "vacation":
routing = "hr_manager"
elif app_type == "expense" and state["extracted_data"]["details"].get("amount", 0) > 50000:
routing = "director_approval"
elif app_type == "access":
routing = "it_department"
else:
routing = "auto_approve"
return {**state, "routing_decision": routing}
def execute_routing(state: ApplicationState) -> ApplicationState:
"""Выполнение маршрутизации"""
routing = state["routing_decision"]
if routing == "auto_approve":
task_id = jira_api.create_task(
title=f"Авто-одобрено: {state['application_type']} от {state['applicant_name']}",
status="Done",
assignee="system",
)
elif routing in ["hr_manager", "director_approval", "it_department"]:
assignee_map = {
"hr_manager": "[email protected]",
"director_approval": "[email protected]",
"it_department": "[email protected]",
}
task_id = jira_api.create_task(
title=f"Заявка на {state['application_type']} от {state['applicant_name']}",
assignee=assignee_map[routing],
description=json.dumps(state["extracted_data"], ensure_ascii=False),
priority="High" if state["extracted_data"].get("urgency") == "urgent" else "Normal",
)
else:
task_id = None
notification_service.send(
to=state["applicant_name"],
message=f"Ваша заявка принята. Routing: {routing}. ID: {task_id}"
)
return {**state, "task_id": task_id, "notification_sent": True}
# Построение графа процесса
graph = StateGraph(ApplicationState)
graph.add_node("classify_and_extract", classify_and_extract)
graph.add_node("validate", validate_application)
graph.add_node("route", route_application)
graph.add_node("execute", execute_routing)
graph.set_entry_point("classify_and_extract")
graph.add_edge("classify_and_extract", "validate")
graph.add_edge("validate", "route")
graph.add_edge("route", "execute")
graph.add_edge("execute", END)
application_agent = graph.compile()
Практический кейс: обработка входящих счетов
Задача: 180+ счетов на оплату в месяц. До автоматизации — 3.5 часа в день главного бухгалтера. Из практики нашего клиента: мы внедрили агента за 6 недель.
Пайплайн агента:
- Извлечение текста из PDF (pdfplumber / LlamaParse)
- LLM извлекает: поставщик, ИНН, сумма, НДС, дата, номер, договор
- Сверка с реестром договоров (векторный поиск)
- Проверка в 1С: остаток по договору, бюджет статьи
- При OK — создание платёжного поручения в 1С
- При расхождении — задача бухгалтеру с объяснением
Метрики после 3 месяцев:
- Автоматически обработано без вмешательства: 73%
- Точность извлечения реквизитов: 96%
- Ошибки (неправильная привязка к договору): 1.2%
- Экономия времени: 2.5 часа/день
Как происходит интеграция с корпоративными системами?
Мы подключаем агента к вашим системам через REST API, ODBC или файловый обмен. Типовые интеграции: 1С, Jira, Bitrix24, почтовые серверы. Для каждой настраиваем адаптер, который транслирует данные в формат, понятный агенту. Векторная база (ChromaDB, pgvector) хранит эталонные документы для RAG.
Human-in-the-loop: когда агент запрашивает подтверждение
def requires_human_approval(state: ApplicationState) -> bool:
"""Определяет, нужно ли вмешательство человека"""
return (
not state["validation_result"]["valid"] or
state["extracted_data"].get("amount", 0) > 100000 or
state["application_type"] == "termination" or
state["extracted_data"].get("urgency") == "critical"
)
# В LangGraph: interrupt_before для HITL
agent = graph.compile(
interrupt_before=["execute"], # Прерывание перед выполнением
checkpointer=MemorySaver(),
)
Что входит в работу
- Анализ бизнес-процесса (схема AS-IS и TO-BE)
- Проектирование архитектуры агента (LangGraph, LLM, vector DB)
- Разработка и интеграция с вашими системами
- Тестирование с human-in-the-loop
- Документация (model card, инструкция)
- Обучение сотрудников (2 часа)
- Гарантия 3 месяца и поддержка
Сроки ориентировочно
- Анализ и проектирование: 1–2 недели
- Разработка с интеграциями: 3–5 недель
- Тестирование и HITL-настройка: 1–2 недели
- Итого: 5–9 недель в зависимости от сложности
Закажите внедрение AI-агента для вашего бизнеса — напишите нам, и мы предложим архитектуру и сроки. Получите консультацию и расчёт стоимости проекта.







