Перейти к основному содержимому

Streaming APIs

Streaming APIs обеспечивают непрерывный поток данных по долгосрочному HTTP-соединению, позволяя осуществлять обновления в реальном времени для вашего приложения.

В отличие от REST API, которые предоставляют данные в ответ на конкретные запросы, streaming API разработаны для поддержания открытого соединения между клиентом и сервером, непрерывно отправляя данные по мере их получения. Это особенно полезно для приложений, требующих обновлений в реальном времени, таких как результаты спортивных матчей в прямом эфире, котировки фондового рынка, чат-приложения и уведомления в реальном времени.

Это уменьшает задержку и улучшает пользовательский опыт, предоставляя мгновенную обратную связь. Самым распространенным протоколом, используемым для streaming API, является Server Sent Events (SSE), но можно также использовать другие, например WebSockets, в зависимости от требований приложения.

Различие между REST API и Streaming API

Основное различие между REST API и Streaming API заключается в способах доставки данных:

  • REST API:

    • Модель Запроса/Ответа: Клиент отправляет запрос, и сервер отвечает данными.
    • Процесс соединения: Каждая пара запрос/ответ независима, и сервер закрывает соединение после отправки ответа.
    • Сфера применения: Подходит для приложений, где данные не изменяются часто, и обновления в реальном времени не являются критическими.
    • Пример ответа:
    {  
    "event": "match_score",
    "data": {
    "team1": "Красные Драконы",
    "team2": "Серебряные Акулы",
    "score": "2-1"
    }
    }
  • Streaming API (Server Sent Events):

    • Непрерывный поток данных: Сервер поддерживает открытое соединение и непрерывно отправляет данные клиенту по мере поступления.
    • Процесс соединения: Соединение остается открытым, позволяя серверу отправлять новые данные клиенту без необходимости запроса.
    • Сфера применения: Идеально подходит для приложений, требующих обновлений в реальном времени, таких как результаты спортивных матчей в прямом эфире, уведомления в реальном времени и приложения для обмена сообщениями в реальном времени.
    • Пример ответа:
    event: match_score
    data: {"team1": "Красные Драконы", "team2": "Серебряные Акулы", "score": "2-1"}

    event: match_score
    data: {"team1": "Красные Драконы", "team2": "Серебряные Акулы", "score": "3-1"}

    event: match_score
    data: {"team1": "Красные Драконы", "team2": "Серебряные Акулы", "score": "3-2"}

Пример: Обзор обзоров AI

Давайте посмотрим, как можно использовать streaming API в FlutterFlow, создав пример, который позволяет пользователям видеть AI-краткое содержание обзоров продуктов в реальном времени. При загрузке страницы приложение отображает AI-обзор в реальном времени, позволяя пользователям следить за анализом по мере его создания.

Окончательное приложение выглядит следующим образом:

Шаги по созданию приложения следующие:

  1. Построить пользовательский интерфейс
  2. Создать API
  3. Создать переменную состояния страницы
  4. Триггер и обработка ответа API
  5. Извлечение данных для диаграммы

1. Построить пользовательский интерфейс

Интерфейс пользователя включает раздел для средней оценки и количества обзоров, а также подробный обзор обзоров, включая плюсы, минусы и визуализацию распределения настроения. Вот ключевые виджеты для построения страницы:

  • Text Widget: Отображает AI-генерируемое краткое содержание обзоров и список положительных и отрицательных аспектов, упоминаемых в обзорах.
  • Chart (Bar chart) Widget: Визуальное представление распределения настроений (положительное, нейтральное, отрицательное) в виде столбчатой диаграммы.

streaming-api-example-demo.png

2. Создать API

Для создания этого приложения мы будем использовать OpenAI's Chat Completion API для генерации резюме на основе предоставленных обзоров. Прежде чем создавать что-либо, связанное с API в вашем приложении, важно создать и протестировать API, чтобы убедиться, что они работают корректно. Поэтому давайте создадим и протестируем API Chat Completion в нашем проекте.

После создания откройте Расширенные настройки и включите переключатель Process Streaming Response.

Вот как это сделать:

3. Создать переменные состояния страницы

В этом примере, чтобы сохранить и отобразить результат созданного AI-краткого содержания, вам понадобятся две переменные.

  1. summary: Эта переменная будет хранить полный текст резюме, который включает общее настроение обзоров, ключевые моменты, упоминаемые клиентами, а также списки плюсов и минусов. Она инициализируется пустой строкой и затем будет обновлена текстом, созданным AI.
  2. sentimentValues: Эта переменная будет хранить значения распределения настроений. Это список double, представляющий количество положительных, нейтральных и отрицательных обзоров. Обратите внимание, эти значения будут использованы для предоставления Значений столбцов в столбчатой диаграмме. Они инициализированы тремя нулями и затем будут обновлены фактическими значениями положительных, нейтральных и отрицательных обзоров. streaming-page-state.png

4. Триггер и извлечение данных из ответа API

Вы можете триггерить streaming API так же, как любой другой обычный API. Безусловно, метод извлечения и разбора данных отличается от стандартного API. В отличие от непрерывных API, где вы получаете ответ в переменной вывода действия, streaming API предоставляет данные через следующие действия ответа:

  • onMessage: Это действие срабатывает каждый раз, когда получается новая порция данных от streaming API. Вы можете использовать это действие для обновления вашего интерфейса или выполнения любой логики с поступающими данными в реальном времени.
  • onError: Это действие срабатывает, когда есть ошибка в потоковом соединении. Можно использовать это действие для грациозной обработки ошибок, такой как отображение сообщения об ошибке пользователю или попытки повторного подключения.
  • onClose: Это действие срабатывает, когда потоковое соединение закрывается. Можно использовать это действие для выполнения завершающих задач или уведомления пользователя о завершении потока.

Каждый раз, когда данные поступают, вы можете получить доступ к телу ответа через OnMessage > ->Выбрать переменную->Параметры действия->OnMessageInput. а затем использовать Параметры сообщения потока ответа для извлечения данных.

Для этого конкретного примера мы используем опцию Server Sent Event Stream Data JSON и затем используем этот JSON путь $['choices'][0]['delta']['content'] для извлечения данных истории.

Вот как это делается:

5. Извлечение данных для диаграммы

API возвращает подробное резюме в виде текста, но для отображения количества положительных, нейтральных и отрицательных обзоров на диаграмме, вам нужно извлечь эти данные из текста. Для этого можно написать простую пользовательскую функцию. По завершении потока передайте полный текст в пользовательскую функцию для извлечения необходимых данных и сохраните вывод в переменной состояния страницы sentimentValues, которую мы создали ранее.

Вот как это делается:

подсказка
  • После сохранения sentimentValues, хорошей практикой будет удалить одинаковые данные из сгенерированного текста обзора, чтобы избежать избыточности.
  • Подобным образом, можно извлечь другие данные, такие как 'плюсы' и 'минусы', и отобразить их по своему усмотрению.

Параметры сообщения потока ответа

При работе с Server Sent Events (SSE) в FlutterFlow важно понимать, как обрабатывать и обрабатывать различные компоненты сообщений событий. FlutterFlow предоставляет несколько опций для захвата различных частей сообщений SSE. Вот они:

Данные JSON Server Sent Event (Тип: JSON)

Это поле захватывает результат разбора JSON. Например:

event: chat

data: {"response": "hello", "version": 7}

id: 2

В поле Данные JSON Server Sent Event будет:

{
"response": "hello",
"version": 7
}

Обратите внимание, если данные не в формате JSON, они будут равны null:

event: ping

data: Server time is 2024-06-28T11:52:56+00:00

id: 2

Данные JSON Server Sent Event будут null.

Текстовые данные Server Sent Event (Тип: Строка)

Это поле содержит только текст поля "data" из SSE. Если есть несколько записей "data", они объединяются с новой строкой. Например, из события:

event: ping

data: Server time is 2024-06-28T11:52:56+00:00

id: 2

Текстовые данные Server Sent Event будут: Server time is 2024-06-28T11:52:56+00:00

Из события:

event: journalEntry

data: Today I went to the