единица 3 / 11

Поточно предаване и дълги отговори

Печалби:

  • Може да обясни какво е стрийминг, видове събития и защо е необходимо.
  • max_tokens обхваща времето за изчакване и 128K дълга изходна връзка
  • Може да направи правилния избор между стрийминг и нестрийминг заявки според работното натоварване

Може би сте забелязали, че в интерфейса за чат отговорът се "набира" дума по дума. Това не е визуален разцвет; Това е резултат от техника, наречена стрийминг, и често е задължителна за интегриране на LLM с производствено качество. В тази част ще научите какво е поток, от какви събития се състои, връзката му с дългия изход и изчакване и кога да използвате потока и кога не. Ще разгледаме темата чрез реалните задачи на професионалист — асистент на живо, генериране на дълги отчети, пакетна обработка.

Какво е Flow?

При непоточно (синхронно) искане изчаквате, докато моделът произведе целия отговор; Когато отговорът е готов, той пристига цял. В заявка за поточно предаване сървърът изпраща отговора част по част, докато моделът генерира. Технически това се прави със събития, изпратени от сървъра (SSE — Server-Sent Events, метод, при който сървърът изпраща малки събития последователно през отворена връзка).

Разликата става очевидна в потребителското изживяване: при отговор, който отнема 8 секунди, потребителят без поток се взира в празен екран за 8 секунди; Потребителят на стрийминг вижда първите думи след ~0,5 секунди и текстът започва да тече. Възприеманото забавяне – чакането, което потребителят чувства – е значително намалено, докато общото време остава непроменено.

Видове поток на събитията

Потокът е последователност от събития. Концептуално типичният поток върви така:

инцидент

Значение

съобщение_начало

Отговорът започна; Пристигна заглавна информация като модел и ID.

content_block_start

Стартиран е блок със съдържание (напр. текст).

съдържание_блок_делта

Пристигна малка част от текста (делта); събираш тези

content_block_stop

блокът е завършен

съобщение_делта

Актуализирана информация за края, като stop_reason и използване

съобщение_стоп

Отговорете повече

Вашият код последователно комбинира части от текст в събития content_block_delta; завършвате със същия точен текст като непоточно предавания отговор. използване (номера на токени) обикновено са ясни в края на потока — следите разходите, след като потокът приключи.

Съвет: Повечето официални SDK (Комплект за разработка на софтуер — готова библиотека на доставчика) предоставят помощник, който събира потока вместо вас (напр. stream.get_final_message()). Не е необходимо да управлявате всички песни ръчно; Използвайте този помощник, ако искате пълния текст, обработвайте отделни събития, но за печат на живо.

Дълги отговори, max_tokens и изчакване

Втората и по-техническа причина за стрийминг е времето за изчакване. Ако HTTP заявка не бъде завършена в рамките на определен период от време, клиентът прекъсва връзката. Когато поискате голям изход от модела (напр. отчет от 40 000 токена), повикването без поток може да надхвърли това ограничение и времето за изчакване — заявката ще бъде неуспешна и ще трябва да платите за генерираните токени.

Съвременните модели могат да извеждат до 128 000 токена в една заявка. Но основното правило е ясно: използвайте потоци, ако стойността на `max_tokens` е висока (приблизително над 16 000). Поточното предаване поддържа връзката жива и предотвратява изчакване; Също така ще видите напредък незабавно.

  • `max_tokens`: Максимални изходни токени, които моделът може да произведе; твърд таван. Ако възникне прекъсване, се връща stop_reason max_tokens.
  • Прозорец на контекста: Прозорецът, в който трябва да се побере сумата от вход + изход. max_tokens е таванът на изхода; Не смесвайте двете.
Внимание: Хвърлянето на заявки без поток с големи max_tokens е класическа грешка в производството. Без отговор връзката прекъсва, потребителят вижда грешка и цената на токена се губи. Дълъг изход = поток.

Кога да тече и кога не?

Статус

предпочитание

защо

Чат на живо / асистент

поток

Възприеманото забавяне спада, потребителят вижда напредъка

Производство на дълъг отчет / документ

поток

Предотвратява времето за изчакване, носи безопасно голям изход

Кратка класификация (напр. етикет с една дума)

няма поток

Резултатът вече е малък; ненужна допълнителна сложност

Пакетна обработка

безпоточен/партиден

Резултатите не се показват мигновено; Вижте единица 7

Стъпка на автоматизация (на заден план)

Обикновено няма поток

Прехвърляте резултата към следващата стъпка, без показване на живо

Подкана за копиране/шаблони

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

# Разделете дългия отчет на секции (така че напредъкът да се вижда в потока) Напишете отчета със следните заглавия в този точен ред. Започнете всяко заглавие с '##':## Резюме## Констатации## Препоръки## Следващи стъпки

# Дайте целева дължина, за да избегнете отрязване при дълго производство. Общият текст ще бъде приблизително 800 думи. Поддържайте порциите балансирани; Не оставяйте половин изречение в края.

# Дайте незабавно първото изречение за асистента за стрийминг. Първо дайте директен отговор с едно изречение, а след това навлизайте в подробности. Така потребителят вижда незабавен резултат, докато чака.

# Поддържайте дългия изход структуриран (така че да може да бъде анализиран по-късно) Изведете изхода в тези секции и маркирайте всеки раздел с отделна заглавка '###', за да мога да го анализирам програмно: ### ВЪВЕДЕНИЕ ### ТЯЛО ### ИЗТОЧНИЦИ

Слаба подкана / Силна подкана (дълго производство)

# СЛАБ Напишете дълъг и подробен доклад по тази тема.

# СИЛНО Напишете доклад от приблизително 900 думи по тази тема. Заглавия: ## Резюме, ## Анализ, ## Рискове, ## Препоръки. Всяко заглавие трябва да съдържа максимум 3 абзаца. Не оставяйте половин изречение в края.

Мощна версия; Предварително определя дължината, структурата и качеството на покритието. Когато секциите идват в потока, потребителят вижда напредъка ясно и сам управлява дължината срещу риска от прекъсване на модела.

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

Случай 1 — Оплакване за празен екран. Клиентският асистент на консултантски екип отговаряше без поток; среден отговор отнема 7 секунди, потребителите питат "замръзва ли?" оплака се той. След като влязох в потока, първата дума дойде за ~0,6 секунди; Общото време остана същото, но "бавните" оплаквания почти изчезнаха.

Случай 2 — Остарял доклад. Финансов екип изготвя тримесечен отчет от 30 страници; С max_tokens: 30000, заявката за липса на поток ще остане в 60-секундно изчакване на клиента, заявката ще бъде неуспешна — и генерираните токени ще бъдат записани във фактурата. Те се пуснаха по течението; връзката остана активна, докладът беше доставен в пълен размер и напразните разходи бяха елиминирани.

Случай 3 — Ненужен поток. Оперативен екип маркира входящите имейли като „спешни/редовни“; Резултатът беше една дума, но те обикновено използваха поток. Потокът не предостави никаква полза в отговора с една дума, правейки кода ненужно сложен. Когато преминах към flowless, кодът се опрости и поведението остана същото. Урок: стриймингът е ценен при извеждане на дълго/на живо, не навсякъде.

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

  • Неизползване на потоци в дълъг изход: Време за изчакване и загуба на стойност на токена.
  • Използване на поточно предаване в кратък изход: Ненужна сложност, нулева полза.
  • Без проверка на `stop_reason` в края на потока: съкратеният отговор с max_tokens се счита за завършен.
  • Неправилно обединяване на делти: Ръчното сумиране с помощта на SDK създава грешка в последователност/липсващи части.
  • Опитвате се да прочетете „използване“ по средата на потока: номерата на токените обикновено стават ясни в края; Следете разходите в края.
  • Объркайте стрийминг с намаляване на разходите: Стриймингът подобрява опита и издръжливостта; Това не променя цената на токена.

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

Стриймингът е връзка на живо; Това е едновременно силата и уязвимостта му. Ако връзката прекъсне по средата (колебания в мрежата, изчакване на клиента), ще запазите текста, който сте натрупали досега, но отговорът ще бъде непълен. Клиент за стрийминг с производствено качество трябва да бъде подготвен за това: той не трябва да третира частичния текст като „завършен отговор“, нито трябва да счита отговора за завършен, докато не види събитието message_stop.

Втората тънкост е, че потокът не променя цената. Независимо дали получавате отговор със или без стрийминг, не се отразява на цената на токена; потокът само подобрява опита и издръжливостта. Така че „ако започнем стрийминг, ще бъдат ли по-евтини?“ Отговорът на въпроса е не — за цена вижте 5-ти и 6-ти модул (избор на модел, кеш).

Третият момент е да се постигне практически баланс: с асистентите на живо бързото пристигане на първата дума (възприемано забавяне) е високо ценено; Следователно, искането на модела да въведе отговора директно и първо да даде кратък резултат (чрез системния ред в 4-та единица) умножава ползата от потока. Ако потребителят види нещо смислено в първата секунда, той търпеливо чака подробностите, които следват. От друга страна, потокът няма принос към заданията, които се изпълняват във фонов режим, чийто изход отива към следващата стъпка на автоматизация; Единственият критерий там е работата да е изпълнена правилно и напълно.

В обобщение

Поточното предаване извлича отговора част по част, като намалява възприеманото забавяне и предотвратява изчакване при големи пропускателни способности. Почти задължително за асистент на живо и производство на дълги документи; Не е необходимо за кратка/фонова работа. При дълги производства, налагането на структурата и дължината отпред с подсказка повишава както качеството, така и проследимостта; Когато потокът приключи, stop_reason и usage определено се проверяват.

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

Изберете два сценария: един на живо/дълъг (напр. доклад на клиента), един кратък/на заден план (напр. маркиране). (1) Решете и обосновете дали ще използвате поток за всеки. (2) Напишете подкана, която налага структурата за дългия скрипт (заглавия + целева дължина). (3) Определете стойностите на max_tokens. (4) Избройте какви проверки ще извършите със stop_reason и използване в края на потока.

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

  • [ ] Мога да обясня какво е стрийминг и как намалява възприеманото забавяне.
  • [ ] Разбрах основните типове събития на потока и делта присъединяването.
  • [ ] Знам за необходимостта от поточно предаване с големи max_tokens и връзката за изчакване.
  • [ ] Мога да реша при кое работно натоварване ще използвам стрийминг и при кое не.
  • [ ] Мога да проверя stop_reason и използването в края на потока.