Цель урока
Собрать переносимый prototype без привязки к конкретному vendor.
1. Почему structured output
Если следующий шаг должен читать результат модели, свободный текст неудобен. Используйте схему с обязательными полями и enum-значениями.
Пример state:
{
"run_id": "demo-001",
"request": {"text": "..."},
"classification": null,
"tool_results": [],
"draft": null,
"approval_status": "not_requested",
"status": "received"
}2. Mock tools
На курсе инструменты можно симулировать файлами/функциями:
search_knowledge(query)возвращает только учебные записи;create_draft(context)возвращает черновик;create_task_preview(payload)возвращает preview и ничего реально не создаёт.
3. Псевдокод loop
while status not in DONE:
validate state
choose next allowed transition
if tool needed:
call approved tool
validate result
if write would be needed:
set requires_human = true
stop for approval
update log4. Переносимость
Эта схема может быть реализована в коде, orchestration framework или no-code agent builder. Важно не название платформы, а сохранение contracts/permissions/states.
Практика
Прогоните 5 запросов и сохраните state после каждого шага. Один запрос должен привести к missing_data, один — к tool_error.
Ключевая мысль
Prototype должен доказывать логику и контроль, а не зависеть от одного интерфейса.
