Сначала сузьте границу задачи
Название "ассистент магазина" звучит солидно, но для агента оно бесполезно - оно не говорит, что агент делает, а главное, чего не делает. Рабочий контракт перечисляет поддержанные намерения, допустимые данные, возможные исходы и действия, которые агент принципиально не выполняет. Это не бюрократия, а граница, внутри которой систему можно проверить.
Для нашего примера контракт умещается в короткий YAML, и его стоит написать раньше любого кода.
agent: commerce_support_v1
goal: решить вопрос о политике или конкретном заказе
supports:
- ответ по действующим правилам магазина
- проверка статуса заказа текущего пользователя
- подготовка расчета возврата
- подготовка передачи оператору
never:
- читать чужой заказ
- менять адрес, платеж или заказ
- выполнять возврат без явного подтверждения
done_when:
- answer
- clarification_required
- approval_required
- handoff_required
- blockedОбратите внимание на две вещи. Список never - это не пожелание модели, а то, что физически не должно быть ей доступно: читать чужой заказ, менять платёж, выполнять возврат без подтверждения. А done_when перечисляет ВСЕ допустимые финалы, включая безопасные выходы - уточнение, запрос подтверждения, передачу оператору, блокировку. Агент всегда заканчивает одним из них, а не "свободным текстом".
За этим стоит простая экономика ошибки. Там, где цена ошибки высока - деньги, персональные данные, договорные обещания, необратимые изменения - нужны код, audit trail и явное подтверждение. Там, где низка, лишний вопрос или передача оператору почти всегда дешевле уверенной выдумки; поэтому безопасные выходы должны быть частью контракта, а не аварийным случаем.
Чтобы почувствовать, какой уровень системы под задачу вообще нужен, прогоните её через конструктор - он подскажет, хватит ли одного вызова, workflow или нужен полноценный loop.
Выберите минимальную архитектуру
Один model call со structured output. Дорогое действие вынесите в отдельный approval и commit service.
Контракт сужен - теперь стоит увидеть, куда он ложится целиком. Вся архитектура помещается в несколько блоков.
Что означает список never в контракте агента?