Розвиток AI-агента для техпідтримки (L1/L2)
AI-агент технічної підтримки L1/L2 обробляє типові звернення користувачів: діагностику проблем, покрокове керівництво по усуненню, скидання паролів, перевірку статусів — без участі інженера. L2-завдання включають складнішу діагностику з доступом до логів та внутрішніх систем.
Ієрархія техпідтримки та роль AI
L0 (самообслуговування): FAQ, документація — повністю AI L1 (перша лінія): типові проблеми, стандартні рішення — AI обробляє 60–80% L2 (друга лінія): нестандартні випадки, аналіз логів — AI асистує інженеру L3 (експертний рівень): розробники, спеціалісти — поза межами AI-агента
Архітектура L1/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"
Діагностичне дерево рішень
Для складних технічних проблем агент дотримується структурованого процесу:
DIAGNOSTIC_SYSTEM_PROMPT = """Ти — технічний спеціаліст підтримки. Дотримуйся методології:
1. ІДЕНТИФІКАЦІЯ: уточни точні симптоми, повідомлення про помилки, версію ПО/ОС
2. ІЗОЛЯЦІЯ: визнач, коли почалася проблема, що змінилося
3. ДІАГНОСТИКА: перевір можливі причини від простих до складних
4. РІШЕННЯ: запропонуй покроковий розв'язок, перевір результат
5. ЕСКА ЛЮВАННЯ: якщо 2 спроби не допомогли — створи тикет L2 з повним контекстом
Під час роботи:
- Запитуй максимум 2 запитання за раз
- Перевіряй результат після кожного кроку
- Документуй усі виконані кроки
- При скиданні пароля — обов'язково підтверди особу через 3 контрольних запитання"""
Практичний кейс: L1 підтримка 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% |
Верифікація особи перед діями
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
Графік
- База знань + RAG: 2–3 тижні
- Агент з діагностичним деревом: 2–3 тижні
- Інтеграції (AD, моніторинг, тикети): 2–3 тижні
- Тестування на реальних кейсах: 2 тижні
- Всього: 8–11 тижнів







