リアルタイム対話の作成
/v1/realtimeWebSocketで継続的な双方向のリアルタイムセッションを確立し、音声、カメラまたは画面の映像を連続して入力して、テキストと音声のレスポンスをストリーミングで受信します。
接続と認証
HTTP GETでWebSocketにアップグレードします。接続先はwss://api.mosi.cn/v1/realtimeで、modelクエリパラメータでモデルを指定する必要があります。APIキーはAuthorizationリクエストヘッダーにのみ指定できます。
モデルIDです。moss-live-1.0で固定され、WebSocket URLのmodelクエリパラメータで渡します。
呼び出し側が管理する安定したエンドユーザーIDで、URLエンコードが必要です。memory_scope=userを使用する場合は必須で、再接続時は同じuserを使用します。例:wss://api.mosi.cn/v1/realtime?model=moss-live-1.0&user=customer_001。
Bearer <API Key>。WebSocketハンドシェイクのAuthorizationリクエストヘッダーに指定します。
セッションの流れ
| 段階 | クライアント | サーバー側の応答と判定 |
|---|---|---|
| 接続の確立 | WebSocketハンドシェイクを完了します | 接続が開いた後にセッションに参加します |
| 設定 | attach_sessionを送信し、次にsession.updateを送信します | session_attached、session.updatedを順に待ち、data.errorが空文字列であることを確認します |
| 音声と動画の送信 | マイクを有効にします。映像を送る場合はmedia.modeとvideo.stateを有効にします | 同じ接続で音声とJPEG映像を受信します |
| 回答 | テキストを表示し、音声を再生して、再生確認を送信します | input.transcript.done、output.transcript.done、response.endedを受信します |
| 継続または終了 | 入力を続けるか、WebSocketを閉じます | このターンが完了すれば継続できます。接続を閉じるとセッションが終了します |
クライアントイベント
セッションに参加します。session_attachedを受信した時点から、オンライン時間に応じた課金が始まります。
ペルソナと業務ルールを設定します。session.updatedを受信したらdata.errorを確認してください。空でない場合、設定は反映されません。
マイク入力をオンまたはオフにします。
動画または画面共有の前にtagged-v1を有効にします。
カメラまたは画面の映像を制御します。映像をオフにしてもセッションは終了しません。
各音声チャンクの再生が実際に完了した後に送信します。フィールドはメッセージのトップレベルに置き、dataで囲みません。実際に再生が完了した音声のみを確認し、回答テキストの終了を待ってから確認しないでください。
response.audio.doneを受信し、このターンの音声がすべて再生し終わった後に送信します。
主に注目する映像ソースを設定します。
response.audio.stopを受信した後、対応する再生を停止して返送します。
サーバーイベント
セッションに参加しました。受信してからペルソナと業務ルールを設定します。
設定の結果。data.errorが空文字列の場合に、メディアとマイクを有効にします。
ユーザーの認識テキストの更新。data.textは現時点の全文のため、表示を置き換えてください。1件ずつ追記しないでください。
ユーザーの認識テキストの完了。
モデルの回答テキストの更新。data.textは現時点の全文のため、表示を置き換えてください。1件ずつ追記しないでください。
モデルの回答テキストの完了。
回答が割り込まれました。run_id、turn_idに基づいて、対応する回答を割り込み済みとしてマークします。
音声コンテキストを保存し、後続のバイナリ音声と順番に対応付けます。
このターンの音声の送信が完了しました。実際の再生がすべて完了した後にplayback.completedを送信します。
このターンの状態通知。セッションの終了を意味するものではありません。
エラーイベント。原因を記録し、接続とメディアのリソースを解放します。
対応する音声の再生を停止し、playback.stoppedを送信します。
プロトコルの制限
| 項目 | 現在のプロトコル値と説明 |
|---|---|
| 音声 | 上り16 kHz、下り48 kHz、モノラルのPCM S16LE。WAVヘッダーは付けません。発話の終了後も無音を送信し続けます。 |
| メディアのカプセル化 | tagged-v1:音声は0x00、カメラのJPEGは0x01、画面のJPEGは0x02。映像をオフにした後も音声のプレフィックスは残ります。 |
| 映像 | JPEGは1枚につき1件のバイナリメッセージで送信します。Base64は使用せず、MP4ファイル全体やH.264ストリームは受け付けません。 |
| 転送 | 音声と映像は同じWebSocketを共用します。 |
| 映像の処理 | 過負荷時は最新の映像を保持し、処理待ちの古いフレームを破棄することがあるため、フレーム単位の解析は保証されません。1 FPS、JPEG quality 0.8、カメラの長辺640 px、画面の長辺1024 pxはクライアントのデフォルト値であり、ハードリミットではありません。 |
エラーコード
接続確立時の認証、権限、レート制限、一般的なHTTPエラーについては、エラーコードを参照してください。以下では、MOSS-LIVE API固有のプロトコルエラーのみを示します。
| エラーコード | 発生条件 | 対処方法 |
|---|---|---|
| memory_scope_requires_user | user記憶範囲でエンドユーザーの識別情報がありません | 安定したuserを渡すか、session範囲を使用してください。 |
| memory_scope_immutable | 再接続時に作成時のオプションを変更しました | 作成時のオプションで再接続してください。オプションを変更するには新しいセッションを作成してください。 |
| invalid_memory_scope | パラメータの値が不正です | 列挙値を確認してください。 |