В твоей системе будет несколько LLM-задач: парсинг заявки, BOM-генератор, ревьюер сметы, ассистент мастера. Эти задачи можно организовывать по-разному: как жёсткий workflow (каждый шаг определён в коде) или как «агента» (LLM сама решает, что делать дальше). Эта статья — карта паттернов Anthropic. Она поможет выбрать нужный уровень сложности.
Это модель + доступ к инструментам + «память». В твоём случае инструменты — функции из статьи про tool use (get_material_price, calculate_cuts, save_order). Память — данные из Postgres, которые ты явно подставляешь в промпт.
LLM-вызов → результат → следующий LLM-вызов, использующий результат. Пример: заявка → парсер извлёк структуру → генератор BOM → ревьюер сметы.
Короткий классификатор определяет тип запроса, затем специализированный промпт обрабатывает его:
val type = classifyOrder(orderText) // marshevaya | povorotnaya | vintovaya
val prompt = when (type) {
"marshevaya" -> MARSH_PROMPT
"povorotnaya" -> POVOROT_PROMPT
"vintovaya" -> VINTOVAYA_PROMPT
else -> GENERAL_PROMPT
}
Что здесь происходит: дешёвая модель-классификатор за 100 мс, основная обработка — специализированным промптом. Такой промпт всегда точнее, чем один универсальный «на всё».
Задача разбивается на независимые части — каждая в отдельном coroutine. Kotlin это делает хорошо. Пример: параллельно считать BOM и запрашивать «похожие прошлые заказы» для оценки, потом свести.
Центральная LLM-модель динамически разбивает задачу и делегирует подзадачи «воркерам». Сложная схема, пригодится когда масштаб вырастет (сотни вариантов материалов, гибкий прайс).
Один промпт генерирует смету, второй — ревьюит («проверь, всё ли учтено, нет ли очевидных ошибок»), третий — исправляет. Три API-вызова, но качество заметно выше разовой генерации. Хорошо подходит для клиентских документов.
Модель работает в цикле: план → вызов инструмента → результат → решение «что дальше» → … → финальный ответ. Для твоих задач на старте это overkill. Но держи в голове — когда workflow станет слишком громоздким (20+ шагов с условной логикой), агент может оказаться чище.