единица 7 / 11

Пакетни и асинхронни натоварвания

Печалби:

  • Определя за кои натоварвания е подходяща пакетната обработка
  • Разбира компромиса цена/закъснение между синхронна, асинхронна и пакетна обработка
  • Проектира стабилен пакетен работен процес, който съответства на custom_id на резултатите

Повечето LLM интеграции се фокусират върху сценарии „на живо“, при които потребителят чака отговор пред екрана. Но по-голямата част от професионалните натоварвания всъщност не са активни: маркиране на хиляди документи за една нощ, обобщаване на цял набор от данни, класифициране на цели записи на разговори в архива. По тези въпроси никой не очаква незабавен отговор; Важното е да завършите работата евтино и надеждно. Партидата е точно за тези натоварвания. В този модул ще научите разликата между синхронна, асинхронна и групова обработка, когато партидата е правилният избор и стабилен поток, който уверено съответства на custom_id и резултатите.

Три режима на работа

режим

Как работи

забавяне

Типичен разход

подходяща работа

синхронен

Правите заявка и чакате отговор

секунди

Стандартен

Чат на живо, незабавен асистент

асинхронен

Поставяте заданието на опашка и получавате известие, когато приключи.

Секунди–минути

Стандартен

Фонови задачи, стъпки за автоматизация

Партида

Изпраща хиляди заявки в един пакет, след което получава резултатите

Минути–часове

Обикновено с отстъпка

Задачи с голям обем, толерантни към забавяне

Пакетната обработка е следната: изпращате стотици/хиляди заявки като едно „задание“ към доставчика; Доставчикът ги обработва със свое собствено темпо и връща всички резултати групово, след като бъдат завършени. В замяна получавате две неща: (1) като цяло по-ниска цена на единица, (2) възможност за преместване на голям обем, без да се налага да се справяте с ограниченията на скоростта. Цената е, че резултатите не идват моментално, а след известно време.

Кога да пакетирате, кога не?

Решението се свежда до един въпрос: Чака ли потребителят резултата сега?

  • Не, мога да го задържа → партиден кандидат. Нощно маркиране, групово обобщаване, архивна класификация, обогатяване на данни, оценка (eval) изпълнение.
  • Да, изчакване на екрана → синхронизиране. Чат на живо, мигновени съвети, помощ при попълване на формуляри.
Съвет: Два режима могат да съществуват едновременно в един и същи продукт. Потребителят работи синхронно в чат на живо; През нощта давате всички разговори от този ден на групата за качествен анализ. Разделянето на "жива нужда" от "колективна нужда" е първото решение на архитектурата.

Анатомия на стабилния партиден поток

Най-важното техническо правило на пакетната обработка е съпоставянето на резултатите.

  1. Дайте на всяка заявка уникален `custom_id`. Това е вашият генериран идентификатор, който идентифицира заявката (напр. invoice-2026-07-18-000431).
  2. Изпратете работата. Всички заявки са в един пакет; всеки със собствен custom_id.
  3. Проучете ситуацията. Питате за статус на интервали, докато работата бъде „свършена“.
  4. Свържете резултатите с „custom_id“. Резултатите могат да бъдат върнати в ред, различен от реда за изпращане; така че никога не съвпадайте по позиция, а по custom_id, който носи всеки резултат.
  5. Проверете типа на всеки резултат. Една заявка може да успее, друга може да се провали, една може да изтече. Процес, базиран на успех/неуспех.

{ "requests": [ { "custom_id": "invoice-000431", "params": { "model": "claude-haiku-4-5", "max_tokens": 128, "system": "Класифицирайте фактурата. Върнете само JSON.", "messages": [{ "role": "user", "content": "{{invoice_text}}" }] } }, { "custom_id": "invoice-000432", "params": { "model": "claude-haiku-4-5", "max_tokens": 128, "system": "Класифицирайте фактурата. Върнете само JSON.", "messages": [{ "role": "user", "content": „{{invoice_text_2}}“ }] } } ]}

Внимание: Съпоставянето на резултатите въз основа на реда на подаване е грешка номер едно при групирането. Опашката не е запазена. Без custom_id не можете да знаете със сигурност кой резултат към кой документ принадлежи — грешното съвпадение тихо води до грешни данни.

Копируеми шаблони

# правило за генериране на custom_id (уникално и проследимо) Формат: <isture>-<date>-<sequence>. Пример: request-20260718-000431Правило: никога не се повтаря в работата; Вградете ID на записа на ресурса в него.

# Карта за партидна работа (шаблон за планиране) Име на работа: .............Брой записи: .............Модел: ............. (проста работа → бърз модел) Макс_токени за заявка: .............Очакван толеранс на времето за доставка: ......... часа Ключ за съвпадение на резултата: custom_id В случай на грешка: повторен опит / опашка / отчет

# Подкана за единична заявка в пакет (кратко и схематично) Класифицирайте този документ. Просто върнете този JSON, като коментирате:{"category":"...","urency":"low|medium|high"}Документ: """{{document}}"""

# Псевдокод за обработка на резултат за всеки резултат: if result.status == "success": record = find(custom_id) save(record, result.output) в противен случай: add_to_fail(custom_id, result.error) # след това опитайте отново

Слаба подкана/Силна подкана (дизайн на пакетно задание)

# СЛАБ (крехък дизайн) Изпратете 10 000 документа в ред със силния модел, запазете върнатите резултати в реда, в който пристигнат.

# СИЛ (издръжлив дизайн) Изпратете 10 000 документа в една партида с бърз модел. Дайте на всеки документ уникален custom_id, съдържащ ID на източника на запис. Сравнете резултатите с custom_id; подредете неуспешните и опитайте отново. Стартирайте в нощния прозорец; Толерантност на доставката 6 часа.

Мощна версия; Той предварително дефинира избор на модел, съвпадащ ключ, обработка на грешки и време. Това е разликата в сигурната обработка на десетки хиляди записи.

Три мини калъфа

Случай 1 — Нощно маркиране. Екип за електронна търговия би сортирал 200 000 продуктови отзива в етикети за мнение. Синхронното предаване на живо беше обект на ограничения на скоростта и беше скъпо. Те пренесоха работата през нощта като партида с бърз модел; Единичната цена падна, целият комплект беше готов сутринта и нямаше проблеми с ограничението на скоростта.

Случай 2 — Объркване на поръчката. Партида от изследователски екип абстрахира 5000 статии, но записва резултатите във файлове в реда, в който са пристигнали. Тъй като резултатите бяха върнати в различен ред, приблизително 900 от 5000 резюмета бяха свързани с грешната статия. Те го пренасочиха към custom_id; проблемът е решен и този опит се превърна в постоянно правило: „Винаги custom_id в партида.“

Случай 3 — Режим на готовност на живо в грешен режим. Екип за поддръжка се опита да даде пакетни отговори на живо, които потребителят очакваше на екрана; Потребителите са изоставени, защото резултатите са пристигнали минути по-късно. Те преместиха работата на живо обратно към синхронизация, оставяйки само нощния анализ на качеството в пакета. Урок: пакетът не е за режим на готовност на живо.

Често срещани грешки

  • Съпоставяне на резултатите по позиция: Редът не се запазва; Използвайте custom_id.
  • Прехвърляне на работа на живо към партида: Потребителят не може да чака минути; партидата е за задания, устойчиви на забавяне.
  • Не се обработват случаи на грешка: Някои заявки може да върнат неуспешни/изтекли; Поставете го в отделна опашка и опитайте отново.
  • Силен рефлекс за използване на модел в партида: Бързият модел + партида е най-евтината комбинация при прости задачи.
  • Невъзможност за проследяване на custom_id: Ако в идентификатора не е вграден запис на източник, става трудно да се свърже резултатът обратно.
  • Забравяне да се проучи ситуацията: Очакване на резултати преди работата да е приключила; Проверете състоянието на завършване.

По-дълбоко: Мониторинг на партида и управление на частичен отказ

Най-зрелият аспект на груповата обработка е, че тя изисква различно мислене от индивидуалните повиквания: пакетната работа е „процес“, а не „събитие“. Да приемем, че десетки хиляди заявки ще успеят, е крехко; Реалистичният дизайн приема частичен отказ от самото начало. Статусът на всеки резултат може да бъде различен: успешен, неуспешен (напр. невалидно въвеждане), отменен или изтекъл. Стабилният поток обработва състоянието на всеки резултат поотделно, докато преминава през него, поставя грешките в отделна „опашка за повторен опит“ и изпълнява тази опашка отделно.

Втората практика е да се проектира за идемпотентност (че изпълняването на една и съща работа два пъти не причинява никаква вреда). Ако пакетът бъде прекъснат и го рестартирате, не трябва да обработвате повторно и да записвате два пъти вече обработените записи. Свързването на custom_id към вашия изходен запис работи и тук: "този запис обработен ли е вече?" преди да запазите резултата. Проверката предотвратява двойното въвеждане.

Третата точка е да залитате потоци на живо с партида. Някои задания имат както живи, така и партидни измерения: когато потребителят зареди документ, вие му давате бързо предварително резюме (синхронно) и повторно обработвате същия документ за по-задълбочен анализ през нощта (партида). Съзнателното разделяне на двата режима оптимизира както потребителското изживяване, така и разходите.

И накрая, групирането също е начин за справяне с ограниченията на скоростта (единица 8). Изпращането на голям обем в синхронен поток на живо създава постоянен 429, докато изпращането на същия обем към пакетни трансфери ограничава натиска върху собствения график на доставчика и прави работата по-предсказуема.

В обобщение

Пакетната обработка обикновено е по-евтин и по-стабилен режим за толерантни към забавяне и големи обеми натоварвания. Неговото решение беше "потребителят чака ли резултата сега?" определя въпроса. Най-критичното техническо правило е да се даде на всяка заявка уникален custom_id, да се съпоставят резултатите по ID, а не по местоположение, и да се третира успехът/неуспехът на всеки резултат отделно.

Задача за приложение

Изберете работа с голям обем (напр. класифициране на архив). (1) Решете дали това произведение е на живо или колективно и го обосновете. (2) Проектирайте формат custom_id (включете записа на ресурса). (3) Попълнете картата на партидното задание (модел, max_tokens, толеранс, политика за грешки). (4) Напишете псевдокода за обработка на резултата, за да включите неуспешни заявки.

контролен списък

  • [ ] Мога да различавам синхронен, асинхронен и пакетен режим на оста цена/закъснение.
  • [ ] Мога да реша дали дадена работа е подходяща за партида или не, като задам правилния въпрос.
  • [ ] Давам на всяка заявка уникален custom_id и съпоставям резултатите по ID.
  • [ ] Мога да обработвам неуспешни/изтекли резултати отделно.
  • [ ] Знам предимствата от избора на бърз модел при прости партидни задачи.