Розвиток AI-агента для обробки запитів
AI-агент для обробки запитів автоматизує первинну обробку вхідних запитів: класифікацію, валідацію, збір недостаючих даних та маршрутизацію потрібному спеціалісту або автоматичне виконання. Застосовується у службах підтримки, закупках, HR, юридичних відділах.
Компоненти агента обробки запитів
from pydantic import BaseModel
from typing import Optional, Literal
from openai import OpenAI
import json
client = OpenAI()
class RequestClassification(BaseModel):
category: Literal["billing", "technical", "account", "shipping", "legal", "other"]
subcategory: str
priority: Literal["low", "normal", "high", "critical"]
requires_human: bool
missing_fields: list[str]
confidence: float # 0-1
def classify_request(request_text: str) -> RequestClassification:
"""Класифікація запиту через Structured Outputs"""
response = client.beta.chat.completions.parse(
model="gpt-4o",
messages=[
{"role": "system", "content": "Класифікуй вхідний запит."},
{"role": "user", "content": request_text},
],
response_format=RequestClassification,
temperature=0,
)
return response.choices[0].message.parsed
def collect_missing_info(request_text: str, missing_fields: list[str]) -> str:
"""Формує уточнюючи запитання для збору недостаючих даних"""
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{
"role": "system",
"content": "Сформулюй ввічливе запитання для уточнення інформації по запиту."
}, {
"role": "user",
"content": f"Запит: {request_text}\nНедостаючи поля: {missing_fields}"
}],
)
return response.choices[0].message.content
Діалоговий агент для збору даних
class RequestProcessor:
"""Діалоговий агент для повного збору даних запиту"""
TEMPLATES = {
"billing": ["invoice_number", "amount", "payment_date"],
"technical": ["product_name", "version", "error_description", "steps_to_reproduce"],
"account": ["user_email", "account_id", "issue_description"],
}
def __init__(self):
self.conversations: dict[str, list] = {}
self.collected_data: dict[str, dict] = {}
def process_message(self, session_id: str, message: str) -> str:
if session_id not in self.conversations:
self.conversations[session_id] = []
self.collected_data[session_id] = {}
self.conversations[session_id].append({"role": "user", "content": message})
# Оновлюємо зібрані дані
self._extract_and_update(session_id, message)
# Перевіряємо повноту
required = self._get_required_fields(session_id)
missing = [f for f in required if f not in self.collected_data[session_id]]
if not missing:
return self._finalize_request(session_id)
# Запитуємо наступне поле
return self._ask_for_field(session_id, missing[0])
def _ask_for_field(self, session_id: str, field: str) -> str:
field_questions = {
"invoice_number": "Укажіть номер рахунку або інвойса",
"amount": "Яка сума вказана у рахунку?",
"error_description": "Опишіть помилку докладніше",
}
return field_questions.get(field, f"Уточніть: {field}")
def _finalize_request(self, session_id: str) -> str:
data = self.collected_data[session_id]
ticket_id = create_ticket(data)
return f"Запит створено: #{ticket_id}. Ми зв'яжемося з вами протягом 24 годин."
Практичний кейс: агент обробки запитів IT-підтримки
Завдання: первинна обробка IT-запитів у компанії 800 працівників.
Категорії: доступ до систем (34%), обладнання (22%), ПО (18%), мережа (14%), інше (12%).
Агент обробляє:
- Класифікує запит та пріоритет (SLA залежить від priority)
- Запитує недостаючу інформацію (версія ОС, скриншот помилки)
- Пробує автоматичне вирішення по базі знань (RAG по runbooks)
- При невдачі — створює тикет з повними даними та призначає виконавця
Метрики:
- Авто-вирішення L1 (відповідь без участі інженера): 41%
- Час до першої відповіді: 4ч → миттєво
- Коректність класифікації: 93%
- Повнота даних у створених тикетах: 78% → 96%
Графік
- Розвиток агента класифікації + routing: 2–3 тижні
- Інтеграція з тикетною системою (Jira/Zendesk): 1–2 тижні
- База знань (RAG): 2–3 тижні
- Тестування та налаштування: 1–2 тижні
- Всього: 6–10 тижнів







