Разработка 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 недель







