リアルタイム動画理解
/v1/realtimeWebSocketで画像フレームを継続的に送信して質問すると、サーバーが増分テキストイベントを返します。このAPIは視覚理解のプロトコルであり、音声Realtimeとは互換性がなく、SSEでもありません。
接続と認証
HTTP GETでWebSocketにアップグレードします。接続先はwss://api.mosi.cn/v1/realtimeで、modelクエリパラメータでモデルを指定する必要があります。APIキーはAuthorizationリクエストヘッダーにのみ指定できます。
モデルID。安定版IDまたはスナップショットIDをWebSocket接続先のmodelクエリパラメータに指定します
Bearer <API Key>。クエリパラメータやWebSocketサブプロトコルによる指定には対応していません
セッションの流れ
| 段階 | クライアント | サーバー側の応答と判定 |
|---|---|---|
| 接続の確立 | WebSocketハンドシェイクを完了します | session.createdを受信します。接続時にセッションが自動作成されます |
| 設定 | session.configureを1回だけ送信します | session.configuredを受信し、session.readyを待ちます |
| 画像の送信 | まずinput.frame JSONを送信し、次に画像バイナリを送信します | input.frame.readyを待ってからバイナリを送信し、input.frame.acceptedを受信してから次の入力を送信します。画像だけでは回答は自動生成されません |
| 質問 | input.promptを単独で送信します | 質問に画像を再度添付する必要はありません。accepted / processedを受信し、テキスト、沈黙、割り込みのイベントを受信する場合があります |
| 継続または終了 | フレームの送信を続けるか、final=trueを設定する / session.abortを送信します | response.doneは1つの回答セグメントを終了するだけで、セッションを終了するのはsession.doneです |
クライアントイベント
接続の確立後に必ず1回送信し、session.created.configure_timeout_sの期限内に完了する必要があります。
画像フレームのメタデータを送信します。input.frame.readyを受信したら、続けて完全な画像バイナリを送信します。
質問テキストを単独で送信します。フィールド名はtextではなくpromptです。質問には直近に受信した画像が使われます。
セッション全体を能動的に終了します。seq_noを消費せず、その他のフィールドも受け付けません。
サーバーイベント
接続、設定、準備完了、セッションの終了状態の判定に使用します。
画像フレームや質問の受信準備、送信、処理完了を確認するために使用します。
増分テキストの読み取りと、1つの回答セグメントが沈黙、割り込み、正常終了のいずれであるかの判定に使用します。
処理中の使用量と、回答またはセッションの累計使用量の読み取りに使用します。
プロトコルやサービスの異常の処理に使用します。
プロトコルの制限
| 項目 | 現在のプロトコル値と説明 |
|---|---|
| 制御イベント | 1件あたりデフォルトで256 KiB以下で、画像バイナリのサイズとは別に計算します |
| 設定と送信 | サーバーが定める設定期限内に設定を完了します。input.frame.readyの受信後10秒以内にバイナリを送信してください。タイムアウトするとcode=session_timeoutのerrorイベントが返され、セッションが終了します |
| 入力キュー | デフォルトは4、設定可能な範囲は[1, 256]です。未処理入力の枠であり、セッションの同時実行数ではありません |
| コンテキストと時間 | サーバーが返すcontext_limitとセッション時間の制限のうち、先に達した方が適用されます |
エラーコード
接続確立時の認証、権限、レート制限、一般的なHTTPエラーについては、エラーコードを参照してください。以下では、リアルタイム動画理解API固有のプロトコルエラーのみを示します。
| エラーコード | 発生条件 | 対処方法 |
|---|---|---|
| invalid_request | クライアントのイベント/フィールド/順序が不正であるか、メッセージが大きすぎます | リクエストを修正して再送信してください。接続が切断された場合は再接続してください |
| context_exhausted | セッションがコンテキストの上限に達しました | 現在のセッションを終了し、新しいセッションを確立してください |
| session_timeout | セッションが時間またはアイドルの制限に達したか、input.frame.readyの受信後10秒以内にバイナリが送信されませんでした | セッションのアクティビティとサーバーの制限を確認し、必要に応じて再接続してください |
| response_failed | モデルの生成または処理に失敗しました | エラー情報を記録し、業務に応じて再試行するかどうかを判断してください |
| session_capacity_exceeded | リアルタイムセッションの容量が上限に達しました | 同時実行数を減らすか、しばらくしてから再試行してください |
接続のクローズ
| クローズコード | 意味 | クライアントの対応 |
|---|---|---|
| 1000 | サーバーがsession.doneを送信した後にクローズします。errorイベントで終了したセッションもこのクローズコードを使用します | 現在のセッションを終了し、再試行しないでください。成否はsession.done.reason(completed、aborted、errorなど)とそれ以前のerrorイベントで判断してください |
| 1001 | サービスの停止または接続の離脱 | 業務の必要に応じて再接続してください |
| 1002 | プロトコルエラー | イベントの形式と送信順序を確認してから再試行してください |
| 1009 | バイナリのサイズ超過、または制御イベントが大きすぎます。クローズ前にinvalid_requestのerrorイベントが返される場合があります。 | メッセージを小さくしてから再接続してください |
| 1011 | サーバーの障害 | しばらくしてから再試行し、エラーを記録してください |
| 1013 | サービスが一時的に処理できません | 同時実行数を減らし、しばらくしてから再試行してください |