LLM-пайплайны без загадочных state machine
Шаги с отдельными повторами при сбое аккуратнее одного огромного промпта, когда инструменты трогают продакшен.
Обновлено: 2026-04-20
Кратко
Суть ответа
LLM-пайплайны без загадочных state machine. Каждый шаг можно обновлять отдельно и смотреть в логах; между шагами — пайплайны для асинхронных разрывов.
Когда подходит и когда нет
- Мульти-модельные потоки
- Human-in-the-loop
- Долгое обогащение
На что обратить внимание
- Ноутбуки хороши для исследования, не для дюрабельных прод-графов.
Ситуация: нагрузка и где обычно ломается
Почему один огромный промпт ломается
Нельзя повторить один шаг без переделки всего сценария.
Стоимость раздувается, когда каждая ветка заново втягивает тот же контекст.
Когда упрощённых рецептов мало
Почему ноутбуки и один длинный скрипт плохо переносятся в отказоустойчивый LLM-поток в продакшене
Ноутбуки хороши для исследования, не для дюрабельных прод-графов.
Как Inquir помогает в этом сценарии
Почему каждый этап LLM-сценария лучше оформить отдельной функцией или шагом пайплайна с своими журналами
Каждый шаг можно обновлять отдельно и смотреть в логах; между шагами — пайплайны для асинхронных разрывов.
Вызовы инструментов остаются HTTP-функциями с явной аутентификацией.
Что вы получаете на платформе
Шаги, которые стоит вынести
Поиск и подгрузка контекста (retrieve)
Изолировать embedding и поиск.
Модерация до дорогой генерации (moderate)
Дёшево отсечься до дорогой генерации.
Вызов инструментов и действий в продакшене
Инструменты со строгой проверкой входа.
Суммаризация и сжатие контекста (summarize)
Сжатие для хранения или ответа пользователю.
Что сделать дальше, по шагам
Как вести LLM-работу по шагам с пайплайнами Inquir
Нарисовать dataflow
Именованные входы/выходы каждого блока.
Кодифицировать
Каждый блок — функция или шаг пайплайна.
Мерить стоимость
Токены и время выполнения по шагам.
Пример кода
LLM-пайплайн анализа документов
Каждый шаг — отдельная serverless-функция: повтор поиска без повтора модерации, учёт токенов по шагу, кэш промежуточных результатов, трассировки при сбое одного вызова модели.
// Stage 1 — extract-text.mjs // Input: { documentUrl } // Output: { text, charCount } export async function handler(event) { const { documentUrl } = event.payload ?? JSON.parse(event.body || '{}'); const text = await extractText(documentUrl); // PDF/HTML/DOCX → plain text return { text, charCount: text.length }; } // Stage 2 — classify.mjs // Input: previousOutput.text // Output: { text, category } — 'invoice' | 'contract' | 'report' export async function handler(event) { const { text } = event.previousOutput; const category = await classifyWithLLM(text); return { ...event.previousOutput, category }; } // Stage 3 — retrieve.mjs // Retrying this stage does NOT re-run moderation or classification export async function handler(event) { const { text, category } = event.previousOutput; const related = await vectorSearch(text, { filter: { category } }); return { ...event.previousOutput, related }; } // Stage 4 — summarize.mjs export async function handler(event) { const { text, related } = event.previousOutput; const summary = await summarizeWithLLM(text, related); const tokens = summary.usage.total_tokens; return { summary: summary.text, tokens }; // tokens tracked per stage } // Stage 5 — store-and-notify.mjs export async function handler(event) { const { summary, tokens } = event.previousOutput; const doc = await db.documents.create({ summary, tokens }); await notify(doc.id); return { docId: doc.id }; }
Когда подходит и когда нет
Когда многошаговые LLM-пайплайны оправданы вместо одного большого промпта и одного вызова модели
Когда это уместно
- Мульти-модельные потоки
- Human-in-the-loop
- Долгое обогащение
Когда лучше не трогать
- Одноразовые демо с одним промптом
Вопросы и ответы
Вопросы и ответы
Зачем дробить LLM-workflow?
Повторы при сбое, учёт стоимости и отладка проще, когда поиск, модерация, инструменты и суммаризация — отдельные шаги с логами.
Stream токенов пользователю (SSE)?
SSE/stream наружу — на API-Gateway; между шагами пайплайна чаще JSON request/response, чтобы не усложнять retries.
Контроль стоимости?
Меряйте токены и время по шагам; бюджеты и ранний выход при провале модерации.