Старые туториалы про support agent обычно выглядели так: одна модель, самодельный ChromaDB, один промпт "ответь клиенту" и надежда, что всё как-нибудь заработает. В 2026 это уже слабый baseline.
Нормальный AI-агент поддержки сейчас строят как workflow:
То есть не "чат-бот по FAQ", а управляемый service workflow.
Customer support плохо переносит "свободную" агентность. Здесь важнее не автономность, а предсказуемость.
Поэтому support workflow почти всегда должен отделять:
Это уменьшает риск hallucination, data leakage и неверных side effects.
file_search вместо самодельной базы по умолчаниюСамый частый сдвиг по сравнению со старыми туториалами: больше не обязательно начинать с самописной векторной базы только ради первого support-агента.
Для многих команд быстрее стартовать с hosted file_search:
Этого достаточно, чтобы support agent отвечал не "из головы", а по реальной документной базе.
Хороший baseline инструментов:
get_customer_profile;check_order_status;get_subscription_state;create_escalation_case.Плохой baseline:
Support agent должен начинать с read-only инструментов. Write-action tools стоит включать только после явного approval layer.
Ниже skeleton, который показывает current baseline:
file_search;import json
from openai import OpenAI
client = OpenAI()
VECTOR_STORE_ID = "vs_support_kb"
def get_customer_profile(email: str) -> str:
return json.dumps({
"email": email,
"plan": "Pro",
"account_status": "active",
"region": "EU",
})
def check_order_status(order_id: str) -> str:
return json.dumps({
"order_id": order_id,
"payment_status": "pending_settlement",
"eta_minutes": 90,
})
def create_escalation_case(reason: str, priority: str) -> str:
return json.dumps({
"status": "queued_for_human",
"reason": reason,
"priority": priority,
})
TOOLS = [
{
"type": "file_search",
"vector_store_ids": [VECTOR_STORE_ID],
"max_num_results": 4,
},
{
"type": "function",
"name": "get_customer_profile",
"description": "Read-only lookup of customer plan and account state.",
"parameters": {
"type": "object",
"properties": {"email": {"type": "string"}},
"required": ["email"],
"additionalProperties": False,
},
"strict": True,
},
{
"type": "function",
"name": "check_order_status",
"description": "Read-only lookup of an order or payment state.",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string"}},
"required": ["order_id"],
"additionalProperties": False,
},
"strict": True,
},
{
"type": "function",
"name": "create_escalation_case",
"description": "Escalate the case to a human support queue.",
"parameters": {
"type": "object",
"properties": {
"reason": {"type": "string"},
"priority": {"type": "string"},
},
"required": ["reason", "priority"],
"additionalProperties": False,
},
"strict": True,
},
]
TOOL_IMPL = {
"get_customer_profile": get_customer_profile,
"check_order_status": check_order_status,
"create_escalation_case": create_escalation_case,
}
def handle_ticket(ticket_text: str) -> str:
first = client.responses.create(
model="gpt-5-mini",
input=(
"Вы - support workflow.\n"
"Сначала поймите intent, затем используйте KB и read-only tools.\n"
"Если есть высокий риск, неуверенность, refund, abuse, legal issue или жалоба на сотрудника - эскалируйте.\n\n"
f"Тикет:\n{ticket_text}"
),
tools=TOOLS,
include=["file_search_call.results"],
)
tool_outputs = []
for item in first.output:
if item.type != "function_call":
continue
args = json.loads(item.arguments)
result = TOOL_IMPL[item.name](**args)
tool_outputs.append({
"type": "function_call_output",
"call_id": item.call_id,
"output": result,
})
if not tool_outputs:
return first.output_text
final = client.responses.create(
model="gpt-5.4",
previous_response_id=first.id,
input=tool_outputs,
)
return final.output_text
print(handle_ticket(
"Оплатил подписку Pro вчера, но доступ не появился. Почта user@example.com, заказ #45892."
))
Этот skeleton уже лучше старого "бота по FAQ", потому что:
file_search;Минимальный набор escalation triggers:
Это хороший момент для handoff pattern из LangGraph или для отдельного approval node в вашем agent workflow.
Полезный support KB:
Плохой support KB:
Retrieval quality у support-агента чаще ломается не на модели, а на плохой документной гигиене.
Минимальный observability baseline:
file_search;Без этого support automation почти невозможно улучшать итеративно.
Хороший support agent в 2026 - это не "умный чат на базе FAQ", а workflow с triage, retrieval, read-only tools и handoff.
Для большинства команд лучший старт:
file_search для KB и policies;gpt-5-mini для triage;gpt-5.4 для финального ответа;Именно это даёт реальную автоматизацию, а не красивое демо.
1. Почему support-агента лучше строить как workflow?
2. Что лучше давать support-агенту по умолчанию?
3. Какой источник чаще всего делает support automation слабой?