Звернень багато, оператори втомлюються, CSAT падає. L1 підтримка завалена однотипними запитами: скидання пароля, перевірка статусу сервісу, «де завантажити?». Інженери L2 витрачають час на те, що міг би вирішити AI. Ми спроєктували AI-агента, який бере на себе 60–80% звернень L1 і асистує L2. Впровадження займає 8–11 тижнів під ключ. Порівняно зі звичайним чат-ботом на правилах, AI-агент ефективніший у 3 рази за відсотком вирішених проблем L1 і скорочує витрати на техпідтримку до 40%.
Використовуємо RAG (retrieval-augmented generation) — метод, що комбінує пошук і генерацію, відомий за дослідженнями.
Які проблеми вирішує AI-агент?
Галюцинації моделей — RAG із верифікацією джерел. Кожна відповідь посилається на документ із бази знань. Якщо впевненість низька — агент уточнює або ескалює. Контекстне перевантаження — сегментація діалогу та agent memory. Агент пам'ятає історію в межах сесії, але не перевантажує контекстне вікно. Інтеграції з legacy системами — модульний шар адаптерів для Active Directory, Jira, Zabbix, CRM (наприклад, Salesforce) і будь-якого REST API. Не потрібно переписувати інфраструктуру. Верифікація особи — трифакторна перевірка перед скиданням пароля або доступом до чутливих даних. Агент задає контрольні запитання, перевіряє за базою.
Як AI-агент вирішує неоднозначні запити?
Агент використовує діагностичне дерево рішень із методологією IDENTIFY–ISOLATE–DIAGNOSE–RESOLVE–ESCALATE. Послідовно уточнює симптоми, перевіряє статуси через API, шукає рішення в базі знань. Якщо два кроки не допомогли — створює тікет L2 із повним контекстом. Ось приклад коду інструментів:
from langchain_openai import ChatOpenAI
from langchain_community.vectorstores import Qdrant
from langchain.tools import Tool
import json
class TechSupportAgent:
def __init__(self, kb_retriever, integrations: dict):
self.llm = ChatOpenAI(model="gpt-4o", temperature=0)
self.kb = kb_retriever # Векторна база знань
self.integrations = integrations # Словник інтеграцій
self.tools = self._build_tools()
def _build_tools(self) -> list:
return [
{
"type": "function",
"function": {
"name": "search_knowledge_base",
"description": "Пошук рішень у базі знань за описом проблеми",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string"},
"product": {"type": "string"},
},
"required": ["query"]
}
}
},
{
"type": "function",
"function": {
"name": "check_service_status",
"description": "Перевірити статус сервісу або системи",
"parameters": {
"type": "object",
"properties": {
"service_name": {"type": "string"}
},
"required": ["service_name"]
}
}
},
{
"type": "function",
"function": {
"name": "reset_user_password",
"description": "Скинути пароль користувача (вимагає підтвердження особи)",
"parameters": {
"type": "object",
"properties": {
"user_email": {"type": "string"},
"verified": {"type": "boolean", "description": "Особа користувача підтверджена"}
},
"required": ["user_email", "verified"]
}
}
},
{
"type": "function",
"function": {
"name": "escalate_to_l2",
"description": "Ескалювати задачу інженеру L2",
"parameters": {
"type": "object",
"properties": {
"issue_summary": {"type": "string"},
"steps_tried": {"type": "array", "items": {"type": "string"}},
"priority": {"type": "string", "enum": ["normal", "high", "critical"]}
},
"required": ["issue_summary", "steps_tried"]
}
}
},
]
def execute_tool(self, tool_name: str, args: dict) -> str:
if tool_name == "search_knowledge_base":
docs = self.kb.similarity_search(args["query"], k=3,
filter={"product": args.get("product")})
return "\n".join([d.page_content for d in docs])
elif tool_name == "check_service_status":
return self.integrations["monitoring"].get_service_status(args["service_name"])
elif tool_name == "reset_user_password":
if not args.get("verified"):
return "ERROR: Необхідно підтвердити особу користувача перед скиданням пароля"
return self.integrations["active_directory"].reset_password(args["user_email"])
elif tool_name == "escalate_to_l2":
ticket_id = self.integrations["jira"].create_ticket(
summary=args["issue_summary"],
description=f"Кроки виконано: {args['steps_tried']}",
priority=args.get("priority", "normal"),
component="L2",
)
return f"Задача створена: {ticket_id}"
return "Tool not found"
Що гарантує точність відповідей?
Точність забезпечується комбінацією RAG і донавчання (LoRA). Ми використовуємо RAG для пошуку актуальних документів, а model card фіксує версію та параметри. Після впровадження запускаємо A/B-тест: порівнюємо метрики точності на контрольній вибірці. Помилки агента (неправильне рішення) на практиці не перевищують 3.1%, і кожна аналізується для покращення. Для порівняння підходів:
| Критерій | Чат-бот на правилах | AI-агент |
|---|---|---|
| Гнучкість | Тільки строгі сценарії | Адаптація до нестандартних запитів |
| Підтримка мов | Обмежена | Мульти-мова (LLM) |
| Час налаштування | Тижні | 8–11 тижнів, пілот за 2 тижні |
| Відсоток вирішених L1 | 10–20% | 60–80% |
«Впровадження AI-агента дозволило скоротити час відповіді з 4 годин до 15 хвилин» — зі звіту клієнта.
Практичний кейс: L1 підтримка SaaS платформи
З нашої практики: SaaS-платформа з 2400 звернень на місяць, команда 6 операторів L1 + 3 інженери L2. Топ-5 тематик: авторизація (31%), завантаження даних (22%), звіти (18%), інтеграції (15%), інше (14%). Після впровадження агента результати за 6 місяців:
| Метрика | До агента | З агентом |
|---|---|---|
| L1 авто-вирішення | 0% | 58% |
| Середній час закриття L1 | 4.2 год | 0.3 год (авто) / 3.1 год (ескалація) |
| CSAT | 3.7 | 4.2 |
| Навантаження на інженерів L2 | 100% | 71% |
| Помилки агента (неправильне рішення) | — | 3.1% |
Економія часу операторів L1 склала 780 годин на місяць, що еквівалентно середньорічній економії бюджету понад 1.2 млн грн. Середня економія бюджету на техпідтримку становить 1.2 млн грн на рік при 2000 тікетів на місяць. CSAT зріс завдяки миттєвим відповідям на прості питання.
Агент ескалює лише ті запити, які не може вирішити після двох спроб або коли впевненість низька. У пілотному проєкті рівень ескалації склав 42%, з яких 19% вирішив L2 без повторної ескалації.
Як проходить верифікація особи перед діями?
def verify_user_identity(session_id: str, claimed_email: str) -> bool:
"""Багатофакторна верифікація перед привілейованими діями"""
user = user_service.get_by_email(claimed_email)
if not user:
return False
# Верифікаційні питання
verification_questions = [
f"Назвіть останні 4 цифри номера телефону, прив'язаного до акаунту",
f"Який відділ компанії ви представляєте?",
f"Назвіть дату створення акаунту (місяць і рік)",
]
for question in verification_questions[:2]:
answer = get_user_answer(session_id, question)
if not verify_answer(user, question, answer):
return False
return True
Процес роботи та терміни
| Етап | Тривалість |
|---|---|
| Аналіз: аудит тікетів, побудова таксономії проблем | 1–2 тижні |
| Проєктування: RAG pipeline, інтеграції, дерево рішень | 2 тижні |
| Реалізація: донавчання моделі (LoRA), розробка агента з інструментами | 2–3 тижні |
| Тестування: A/B тест на реальних кейсах, коригування | 2 тижні |
| Деплой: контейнеризація, CI/CD, моніторинг | 1–2 тижні |
Разом: 8–11 тижнів. Вартість розраховується індивідуально — залежить від обсягу бази знань та кількості інтеграцій.
Архітектура AI-агента
Основні компоненти:
- LLM-ядро: GPT-4o або LLaMA 3, донавчене через LoRA на вашій базі знань (fine-tuning для підтримки).
- RAG-модуль: векторна БД Qdrant для пошуку релевантних документів (embeddings 1536-dim).
- Agent-фреймворк: LangChain з динамічним вибором інструментів на основі function calling.
- Шар інтеграцій: адаптери для AD, Jira, Zabbix, CRM (REST API).
- Моніторинг та логування: MLflow для відстеження метрик та помилок.
Що входить у роботу
- Документація: опис архітектури, API endpoints, інструкція для операторів.
- Доступи: векторна БД, моніторинг, логи.
- Навчання: воркшоп для команди підтримки (2 години).
- Підтримка: 2 тижні post-deploy з SLA на виправлення помилок.
Отримайте консультацію щодо впровадження AI-агента. Замовте попередній аналіз ваших тікетів та пілотний запуск за 2 тижні.







