Jednostka 7 / 11

Obciążenia wsadowe i asynchroniczne

Zyski:

  • Określa, dla jakich obciążeń odpowiednie jest przetwarzanie wsadowe
  • Rozumie kompromis koszt/opóźnienie pomiędzy przetwarzaniem synchronicznym, asynchronicznym i wsadowym
  • Projektuje solidny przepływ pracy wsadowy, który dopasowuje identyfikator_standardowy do wyników

Większość integracji LLM koncentruje się na scenariuszach „na żywo”, w których użytkownik czeka na odpowiedź przed ekranem. Jednak większość zadań zawodowych nie jest wykonywana w rzeczywistości: oznaczanie tysięcy dokumentów w ciągu jednego dnia, podsumowanie całego zestawu danych, klasyfikacja całych nagrań rozmów w archiwum. W tych sprawach nikt nie oczekuje natychmiastowej odpowiedzi; Ważne jest, aby zakończyć pracę tanio i solidnie. Batch jest dokładnie przeznaczony dla tych obciążeń. W tej części poznasz różnicę między przetwarzaniem synchronicznym, asynchronicznym i wsadowym, gdy właściwym wyborem będzie wsad, oraz solidnym przepływem, który z pewnością dopasuje identyfikator_niestandardowy i wyniki.

Trzy tryby pracy

tryb

Jak to działa?

opóźnienie

Typowy koszt

odpowiednia praca

synchroniczny

Składasz wniosek i czekasz na odpowiedź

sekundy

Standardowe

Czat na żywo, natychmiastowy asystent

asynchroniczny

Ustawiasz zadanie w kolejce i otrzymujesz powiadomienie, gdy zostanie ukończone.

Sekundy – minuty

Standardowe

Zadania w tle, kroki automatyzacji

Partia

Wysyła tysiące żądań w jednym pakiecie, a następnie otrzymuje wyniki

Minuty – godziny

Zwykle ze zniżką

Zadania o dużej objętości i odporne na opóźnienia

Przetwarzanie wsadowe polega na tym, że wysyłasz setki/tysiące żądań jako pojedyncze „zadanie” do dostawcy; Dostawca przetwarza je we własnym tempie i po zakończeniu zwraca wszystkie wyniki zbiorczo. W zamian otrzymujesz dwie rzeczy: (1) ogólnie niższy koszt jednostkowy, (2) możliwość przemieszczania dużych ilości towarów bez konieczności radzenia sobie z ograniczeniami prędkości. Ceną jest to, że rezultaty nie pojawiają się od razu, ale po pewnym czasie.

Kiedy grupować, kiedy nie?

Decyzja sprowadza się do jednego pytania: czy użytkownik czeka teraz na wynik?

  • Nie, mogę to potrzymać → kandydat wsadowy. Nocne tagowanie, podsumowanie partii, klasyfikacja archiwum, wzbogacanie danych, wykonanie oceny (eval).
  • Tak, czekam na ekranie → synchronizacja. Czat na żywo, błyskawiczne porady, pomoc przy wypełnianiu formularzy.
Wskazówka: w tym samym produkcie mogą współistnieć dwa tryby. Użytkownik pracuje synchronicznie na czacie na żywo; Wieczorem przekazujesz wszystkie rozmowy tego dnia grupie w celu analizy jakości. Oddzielenie „potrzeby życiowej” od „potrzeby zbiorowej” jest pierwszą decyzją architektury.

Anatomia solidnego przepływu wsadowego

Najważniejszą zasadą techniczną przetwarzania wsadowego jest dopasowywanie wyników.

  1. Nadaj każdemu żądaniu unikalny „custom_id”. To jest wygenerowany identyfikator identyfikujący żądanie (np. faktura-2026-07-18-000431).
  2. Prześlij pracę. Wszystkie wnioski trafiają w jednym pakiecie; każdy z własnym niestandardowym identyfikatorem.
  3. Sonduj sytuację. Co jakiś czas pytasz o status, aż zadanie zostanie „ukończone”.
  4. Dopasuj wyniki do „custom_id”. Wyniki mogą zostać przesłane w innej kolejności niż kolejność zgłoszeń; więc nigdy nie dopasowuj według pozycji, ale według niestandardowego identyfikatora, który przenosi każdy wynik.
  5. Sprawdź typ każdego wyniku. Jedno żądanie może się powieść, drugie może się nie udać, a jedno może wygasnąć. Proces oparty na sukcesie/porażce.

{ "requests": [ { "custom_id": "invoice-000431", "params": { "model": "claude-haiku-4-5", "max_tokens": 128, "system": "Klasyfikuj fakturę. Zwróć tylko JSON.", "messages": [{ "role": "user", "content": "{{invoice_text}}" }] } }, { "custom_id": "invoice-000432", "params": { "model": "claude-haiku-4-5", "max_tokens": 128, "system": "Klasyfikuj fakturę. Zwróć tylko JSON.", "messages": [{ "role": "user", "content": "{{invoice_text_2}}" }] } } ]}

Uwaga: dopasowywanie wyników na podstawie kolejności zgłoszeń jest błędem numer jeden podczas grupowania. Kolejka nie jest zachowana. Bez niestandardowego identyfikatora nie możesz mieć pewności, który wynik należy do którego dokumentu — nieprawidłowe dopasowanie po cichu prowadzi do błędnych danych.

Szablony do kopiowania

# reguła generowania niestandardowego identyfikatora (unikalna i identyfikowalna)Format: <istura>-<data>-<sekwencja>. Przykład: request-20260718-000431Reguła: nigdy nie powtarzaj w pracy; Osadź w nim identyfikator rekordu zasobu.

# Karta pracy wsadowej (szablon harmonogramu)Nazwa zadania: .............Ilość rekordów: .............Model: ............. (zlecenie proste → model szybki)Max_tokens na żądanie: .............Oczekiwana tolerancja czasu dostawy: ..............godzinKlucz dopasowania wyniku: niestandardowy_idW przypadku błędu: ponowna próba / kolejka / raport

# Pojedynczy monit o żądanie wsadowo (krótki i schematyczny) Klasyfikuj ten dokument. Po prostu zwróć ten JSON, komentując:{"category":"...""urgency":"low|medium|high"}Dokument: """{{document}}"""

# Pseudokod przetwarzania wyników dla każdego wyniku: ifresult.status == "success": record = find(custom_id) save(record,result.output) w przeciwnym razie: add_to_fail(custom_id,result.error) # następnie spróbuj ponownie

Słaby monit/silny monit (projekt zadania wsadowego)

# SŁABY (delikatny projekt) Wyślij 10 000 dokumentów w kolejności z mocnym modelem, zapisz zwrócone wyniki w kolejności, w jakiej przychodzą.

# STRONG (trwała konstrukcja) Szybki model umożliwia wysyłanie 10 000 dokumentów w jednej partii. Nadaj każdemu dokumentowi unikalny identyfikator_niestandardowy zawierający identyfikator rekordu źródłowego. Dopasuj wyniki do niestandardowego identyfikatora; ustaw w kolejce te, które się nie powiodły i spróbuj ponownie. Uruchom w nocnym oknie; Tolerancja dostawy 6 godzin.

Potężna wersja; Wstępnie definiuje wybór modelu, pasujący klucz, obsługę błędów i synchronizację. Na tym polega różnica w bezpiecznym przetwarzaniu dziesiątek tysięcy rekordów.

Trzy mini etui

Przypadek 1 – Nocne znakowanie. Zespół ds. handlu elektronicznego posortowałby 200 000 recenzji produktów na znaczniki nastrojów. Synchroniczne przesyłanie strumieniowe na żywo podlegało ograniczeniom prędkości i było kosztowne. Pracę przenieśli w nocy w partii z szybkim modelem; Koszt jednostkowy spadł, rano cały zestaw był gotowy i nie było problemów z ograniczeniami prędkości.

Przypadek 2 – Zamieszanie porządkowe. Partia zespołu badawczego zebrała 5000 artykułów, ale wyniki zapisał w plikach w kolejności, w jakiej nadeszły. Ponieważ wyniki zostały przesłane w innej kolejności, około 900 z 5000 streszczeń zostało powiązanych z niewłaściwym artykułem. Zmapowali go na custom_id; problem został rozwiązany i to doświadczenie stało się stałą zasadą: „Zawsze niestandardowe_id wsadowo”.

Przypadek 3 — Tryb gotowości na żywo w złym trybie. Zespół wsparcia próbował przekazać wsadowo odpowiedzi na żywo, jakich użytkownik oczekiwał na ekranie; Użytkownicy porzucili, ponieważ wyniki pojawiły się kilka minut później. Przesunęli zadanie na żywo z powrotem do synchronizacji, pozostawiając w partii jedynie nocną analizę jakości. Lekcja: partia nie jest przeznaczona do trybu gotowości na żywo.

Typowe błędy

  • Dopasowywanie wyników według pozycji: Kolejność nie jest zachowana; Użyj niestandardowego id.
  • Przesyłanie bieżącego zadania do partii: użytkownik nie może czekać minut; partia jest przeznaczona do zadań tolerujących opóźnienia.
  • Brak obsługi przypadków błędów: niektóre żądania mogą zwrócić błąd/wygasnąć; Umieść go w osobnej kolejce i spróbuj ponownie.
  • Silny odruch użycia modelu w trybie wsadowym: Szybki model + wsad to najtańsza kombinacja w prostych zadaniach.
  • Brak możliwości śledzenia niestandardowego identyfikatora: jeśli w identyfikatorze nie jest osadzony żaden rekord źródłowy, trudno jest ponownie powiązać wynik.
  • Zapominanie o zbadaniu sytuacji: Oczekiwanie wyników przed zakończeniem pracy; Sprawdź status ukończenia.

Deeper: Monitorowanie partii i zarządzanie częściowymi awariami

Najbardziej dojrzałym aspektem przetwarzania wsadowego jest to, że wymaga ono innego sposobu myślenia niż wywołania indywidualne: zadanie wsadowe to „proces”, a nie „zdarzenie”. Założenie, że dziesiątki tysięcy żądań zakończy się sukcesem, jest kruche; Realistyczny projekt od początku akceptuje częściową awarię. Status każdego wyniku może być inny: udany, nieudany (np. nieprawidłowe dane wejściowe), anulowany lub wygasły. Solidny przepływ przetwarza status każdego wyniku oddzielnie podczas jego przejścia, umieszcza błędy w osobnej „kolejce ponawiania prób” i uruchamia tę kolejkę osobno.

Drugą praktyką jest projektowanie pod kątem idempotencji (dwukrotne uruchomienie tego samego zadania nie powoduje żadnych szkód). Jeśli partia zostanie przerwana i wznowisz ją, nie powinieneś ponownie przetwarzać i zapisywać dwukrotnie już przetworzonych rekordów. Powiązanie niestandardowego identyfikatora z rekordem źródłowym działa również tutaj: „czy ten rekord został już przetworzony?” przed zapisaniem wyniku. Sprawdzanie zapobiega podwójnemu wpisywaniu.

Trzeci punkt polega na rozłożeniu transmisji na żywo w trybie wsadowym. Niektóre zadania mają zarówno wymiary bieżące, jak i wsadowe: gdy użytkownik ładuje dokument, przesyłasz mu szybkie wstępne podsumowanie (synchronicznie) i ponownie przetwarzasz ten sam dokument w celu głębszej analizy w nocy (wsadowo). Świadome oddzielenie tych dwóch trybów optymalizuje zarówno wygodę użytkownika, jak i koszty.

Wreszcie, grupowanie jest również sposobem radzenia sobie z ograniczeniami prędkości (część 8). Wysyłanie dużych wolumenów w synchronicznym przepływie na żywo generuje stałą liczbę 429, podczas gdy wysyłanie tego samego wolumenu do transferów wsadowych ogranicza presję na własny harmonogram dostawcy i sprawia, że ​​zadanie jest bardziej przewidywalne.

Podsumowując

Przetwarzanie wsadowe jest na ogół tańszym i bardziej niezawodnym trybem w przypadku obciążeń odpornych na opóźnienia i dużych objętości. Jego decyzja brzmiała: „Czy użytkownik czeka teraz na wynik?” określa pytanie. Najważniejszą zasadą techniczną jest nadanie każdemu żądaniu unikalnego identyfikatora niestandardowego, dopasowywanie wyników według identyfikatora, a nie lokalizacji, i oddzielne traktowanie każdego wyniku.

Zadanie aplikacji

Wybierz zadanie o dużej objętości (np. klasyfikacja archiwalna). (1) Zdecyduj, czy jest to utwór na żywo czy zbiorowy, i uzasadnij to. (2) Zaprojektuj format niestandardowego identyfikatora (uwzględnij rekord zasobu). (3) Wypełnij kartę zadania wsadowego (model, max_tokens, tolerancja, polityka błędów). (4) Zapisz pseudokod przetwarzania wyniku, aby uwzględnić nieudane żądania.

lista kontrolna

  • [ ] Potrafię rozróżnić tryby synchroniczny, asynchroniczny i wsadowy na osi koszt/opóźnienie.
  • [ ] Mogę zdecydować, czy stanowisko nadaje się do wykonania wsadowego, czy nie, zadając właściwe pytanie.
  • [ ] Każdemu żądaniu nadaję unikalny identyfikator niestandardowy i dopasowuję wyniki według identyfikatora.
  • [ ] Mogę oddzielnie obsługiwać nieudane/wygasłe wyniki.
  • [ ] Znam korzyści wynikające z wyboru szybkiego modelu w prostych zadaniach wsadowych.