Потоковая выдача ответов

Урок 38 из 299 курса «OpenAI Cookbook»: официальный курс OpenAI Academy (ОпенАИ) на русском языке. Урок входит в платный доступ; первые уроки курса бесплатно.

О чём урок

По умолчанию, когда вы запрашиваете завершение у OpenAI, все завершение генерируется, прежде чем быть отправленным обратно в одном ответе. Если вы генерируете длинные завершения, ожидание ответа может занять много секунд. Чтобы получать ответы быстрее, вы можете выполнять 'потоковую передачу' завершения по мере его генерации. Это позволяет начать печать или обработку начала завершения до того, как полное завершение будет готово. Для потоковой передачи завершений установите stream=True при вызове конечных точек chat completions или completions. Это вернет объект, который передает ответ в виде событий, отправляемых сервером, содержащих только данные. Извлекайте chunks из поля delta, а не из поля message. Обратите внимание, что использование stream=True в production-приложении затрудняет модерацию содержимого завершений, поскольку частичные завершения может быть сложнее оценить. Это может иметь последствия для разрешенного использования. Ниже этот notebook демонстрирует: Как выглядит типичный ответ chat completion Как выглядит ответ streaming chat completion Сколько времени экономится при потоковой передаче chat completion Как получить данные об использовании token'ов для ответа streaming chat completion При типичном вызове ChatCompletions API ответ сначала вычисляется, а затем возвращается целиком. Ответ можно извлечь с помощью response.choices[0].message. Содержимое ответа можно извлечь с помощью response.choices[0].message.content. При вызове streaming API ответ отправляется обратно инкрементально, по chunks, через поток событий. В Python вы можете итерировать по этим событиям с помощью цикла for. Давайте посмотрим, как это выглядит: Как видно выше, streaming-ответы имеют поле delta, а не поле message. delta может содержать такие элементы, как: role token (например, {"role": "assistant"}) content token (например, {"content": "\n\n"}) ничего (например, {}), когда stream завершен Теперь давайте снова попросим gpt-4o-mini посчитать до 100 и посмотрим, сколько времени это займет. В приведенном выше примере оба запроса заняли около 4-5 секунд для полного завершения. Время выполнения запросов будет варьироваться в зависимости от нагрузки и других случайных факторов.

План урока

  1. Недостатки
  2. Пример кода
  3. 1. Как выглядит типичный ответ chat completion
  4. 2. Как выполнять потоковую передачу chat completion
  5. 3. Сколько времени экономится при потоковой передаче chat completion
  6. Сравнение времени
  7. 4. Как получить данные об использовании token'ов для ответа streaming chat completion

Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.

Урок входит в темы

Полезные гиды