LlamaIndex Workflows превращают RAG и агентов в явный граф событий но большинство инцидентов по-прежнему упирается в цикл asyncio завышенные батчи retrieval на unified memory и таймауты инструментов не согласованные с финансовыми порогами стоимости. Ниже статья плюс HowTo с одной лестницей приёмки которую можно повторить на арендованном удалённом Mac без сна ноутбука и конкуренции с IDE за память.

Оглавление: боли · конфигурация цикла событий · батчи retrieval и память · таблица таймаутов и предохранителя · наблюдаемость и метрики · пороги стоимости · матрица решений · шаги HowTo · краткие ответы

Сверьте имена атрибутов спанов с матрицей OpenTelemetry GenAI бюджеты чанков с локальным RAG на Mac и пики индекса с материалом USearch FAISS и sqlite-vec до заморозки ingest. Для смешанных пайплайнов на Haystack см. гайд Haystack на удалённом Mac.

Три типичные боли стека агента на M4

Блокировка цикла. Синхронный HTTP инструмент или тяжёлый парсер на основном asyncio цикле стопорит каждый шаг workflow и в метриках это выглядит как рост хвоста задержки без явной ошибки инструмента.

Скачок памяти. Рост батча retrieval или слишком широкий веер дочерних узлов без замера резидентной памяти съедает unified memory которую ещё должен занимать растущий KV у LLM.

Оптимизм по деньгам. Команды цитируют прайс API модели игнорируя почасовую аренду минуты простоя GPU при ожидании инструментов и окна cooldown предохранителя которые удлиняют календарные часы прогона.

Конфигурация цикла событий

Зафиксируйте одну политику asyncio на процесс и опишите её в runbook. Шаги LlamaIndex Workflows должны оставаться неблокирующими файловый ввод подпроцессы и CPU парсеры выносите в executor ограничьте число одновременных workflow семафором чтобы всплеск retrieval не голодал оркестратор. Вызовы эмбеддинга к GPU сериализуйте общим шлюзом с LLM. Эксперименты с nest_asyncio в ноутбуке не копируйте в продовую точку входа.

Размер батча retrieval и память

Просеивайте вместе батч эмбеддингов батч узлов и top_k каждый параметр сдвигает пик RSS на Apple Silicon. Наращивайте батчи пока не появится swap или давление компрессии откатитесь на шаг и заморозьте кортеж как контракт для всех окружений.

  • Держите около пятнадцати процентов запаса unified memory под ОС токенайзер и метаданные workflow.
  • Индексы с дружественным mmap на быстром SSD логируйте пик RSS на каждом шаге просева для сравнения неделя к неделе с финансами.
  • Политику очередей на шлюзе согласуйте с мультимодельным роутингом и стоимостью чтобы ретраи не устраивали шторм на общей памяти.

Таблица таймаутов и предохранителя цепи

Опубликуйте таблицу предохранителей рядом с графом workflow. Клиентские дедлайны держите чуть выше серверных потолков чтобы вызывающий код получал структурированный отказ а не зависание.

Этап Стартовый предохранитель Правило breaker
Вызов HTTP инструмента Восемь двенадцать секунд для чтения тяжёлых ответов. Открыть после трёх таймаутов cooldown тридцать секунд.
Подпроцесс инструмента Лимит дерева плюс двадцать секунд сторожевого таймера. Закрытый отказ при ненулевом коде выхода без скрытых повторов.
Первый токен LLM Отдельный бюджет prefill отличный от полного потолка ответа. Нарушение prefill сигнализирует об инфраструктуре а не о промпте.
Векторный запрос Два четыре раза медианная задержка шарда. Полуоткрытый режим если p95 ушёл за согласованный порог.

Наблюдаемость и метрики

На спаны выносите workflow_name step_id tool_name retrieval_batch cache_hit токены queue_depth breaker_state. Считайте таймауты по инструментам минуты в открытом breaker и переходы состояний. Ключи атрибутов держите стабильными чтобы дашборды стыковались с офлайн оценками по идентификатору среза.

Пороги стоимости

До масштабирования трафика зафиксируйте потолки долларов за миллион токенов почасовой аренды исходящего трафика и минут простоя GPU пока инструменты отвечают медленно.

  • Провалите soak если p95 сквозной задержки нарушает гейт без новой цели подписанной продуктом.
  • В пакете приёмки укажите часы аренды умноженные на ставку рядом с расходом API.
  • Пропускную способность сравните с матрицей llama.cpp и Ollama на M4 если модель общая с другими сервисами.

Матрица решений

Профиль Локальный M4 ноутбук Аренда удалённого узла Mac mini класса
Интерактивный дизайн Короткие трейсы и низкий параллелизм. Опционально для стабильной демонстрации мощности.
Ночные просевы Сон и GUI искажают хвосты. Предпочтительный unattended soak для финансов.
Параллельная оценка Общее давление на unified memory. Выделенные ядра изолируют очереди.
# иллюстративные переменные окружения секреты вне git export WORKFLOW_MAX_CONCURRENCY=2 export RETRIEVAL_BATCH_SIZE=32 export EMBED_BATCH_SIZE=16 export HTTP_TOOL_TIMEOUT_S=10 export VECTOR_QUERY_TIMEOUT_S=4 export BREAKER_THRESHOLD=3 export BREAKER_COOLDOWN_S=30 export P95_LATENCY_MS_MAX=4500 export REMOTE_SOAK_MIN_HOURS=4

Шаги HowTo

  1. Контракт цикла. Задокументируйте политику asyncio executor и максимум одновременных workflow.
  2. Просев батчей. Пройдите батчи retrieval и эмбеддингов на M4 до последнего устойчивого кортежа RSS.
  3. Предохранители. Сопоставьте таблицу таймаутов с HTTP подпроцессами ожиданием первого токена и вектором согласуйте клиентов.
  4. Инструментирование. Отправляйте стабильные ключи для breaker таймаутов и токенов.
  5. Гейты стоимости. Сложите доллары за миллион токенов аренду и egress провал при нарушении.
  6. Удалённый soak. Скопируйте окружение на арендованный Mac не меньше четырёх часов непрерывной нагрузки приложите хеши манифеста.

Опыт эксплуатации аренды см. заметки фрилансера про Mac mini M4. Когда ночные просевы retrieval и репетиции таймаутов требуют стабильной термики и отсутствия сна машины арендуйте удалённый Mac через LlmMac и повторите тот же манифест что на локальном M4.

Краткие ответы

Один цикл для эмбеддингов? Да один asyncio цикл на процесс сериализуйте вызовы к GPU избегайте блокирующих SDK на цикле.

Есть ли универсальный батч? Нет измеряйте веса индекс и параллелизм в прод передавайте последний зелёный кортеж на удалённый хост.

Публичные страницы без входа: главная, блог, помощь, тарифы, покупка.

Итог: стабилизируйте asyncio подберите батчи retrieval к unified memory опубликуйте лестницу таймаутов и breaker инструментируйте GenAI спаны зафиксируйте пороги аренды и токенов затем подпишите приёмку после soak на удалённом Mac для честной долгой эксплуатации.