0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

録音・メタ情報・可観測性(あとから困らないための仕込み)

Last updated at Posted at 2025-12-22

12/22 は、タイムアウト/キャンセル/失敗時の作法(無言回避のポリシー)をまとめました。
今日はその続きとして、音声ボット開発で地味に効く 録音・メタ情報・可観測性(Observability) を草案として整理します。

SIP/RTP/AIは「その場で再現しにくい」不具合が多いので、後から追える仕組みをMVPの時点で入れておくと開発速度が上がります。


0. まず方針:録音は“機能”というより“デバッグ装置”

このプロジェクトでは録音を次の用途で使います。

  • RTPが本当に届いているか(無音/途切れ/歪み)
  • コーデックが想定通りか(PCMU/8000)
  • ASRの入力として使えるか(10秒バッファなど)
  • 問題が起きた通話を「証拠」として残せるか

つまり録音は、UIのためだけじゃなく 開発の武器 です。


1. 現行MVPの録音:何が生成されるか

MVPでは録音の実体はこの形です。

  • storage/recordings/<timestamp_callid>/mixed.wav
  • storage/recordings/<timestamp_callid>/meta.json

そして http モジュールが

  • /recordings/<timestamp_callid>/mixed.wav

を静的配信し、フロントには recordingUrl を渡します。


2. 役割分担(media と http を混ぜない)

ここは将来の拡張で壊れやすいので、最初に線を引きます。

  • media:生成・保存(wavを書き、meta.jsonを書く)
  • http:配信(ファイルを返すだけ、可能ならRange対応)

「生成と配信が混ざる」と、あとからS3等に逃がしにくくなるので、MVPのうちに分けておくのが正解です。


3. meta.json に何を入れるか(最小のおすすめ)

metaは「後から追える」ことが目的なので、最小でもこれがあると助かります。

  • callId
  • from / to(SIPの相手)
  • startedAt / endedAt(ISO8601)
  • durationSec
  • sampleRate / channels
  • files(mixed.wavなど)

余裕が出たら追加したい:

  • codec(PCMUなど)
  • rtp(pt/ssrc等を“参考値”で)
  • metrics(drop/missing/reorder、rtp_in bytes 等)

4. “時間同期”は今は割り切る(MVPの現実解)

録音とUtteranceの時間同期(startSec/endSec)を完璧にやるのは沼です。

MVPの現実解:

  • mixed.wav は「書いた順」でOK(多少のズレは許容)
  • meta.json に開始/終了時刻だけ残す
  • 厳密同期は後続(トラック分離/タイムライン設計)

この割り切りでも「再現とデバッグ」には十分効きます。


5. 可観測性(Observability):ログ相関が全て

音声ボット開発で一番効くのは、実はメトリクスより ログ相関 です。

最低限のルール

  • すべての重要ログに call_id を付ける
  • 可能なら remote_addr / sip_from / sip_to も付ける
  • 「いつ」「どの段階で」起きたか分かるようにする

例:

  • SIP:INVITE受信、200送信、ACK受信、BYE受信
  • RTP:受信開始、PT不一致、drop、timeout
  • media:録音開始、録音停止、meta書き出し
  • ingest:POST成功/失敗

6. レイテンシ計測ポイント(ボトルネックが見える)

LLMやTTSを繋ぐと、体感品質はレイテンシで決まります。
MVP+αで測りたい区間はこの3つ。

  1. RTP受信 → ASR確定
  2. ASR確定 → LLM応答
  3. LLM応答 → TTS最初のPCM送出(=喋り始め)

これが取れると、遅い原因が「ASR」「LLM」「TTS」「送信側」のどこかすぐ分かります。


7. ingest(フロント連携)も“観測”の一部

MVPでは通話終了時に ingest へ Call情報を送りますが、これも観測上重要です。

  • 「通話が正常終了したか」
  • 「recordingUrlが正しいか」
  • 「フロントに届いたか」

を追えるので、失敗時はログに必ず残すのがおすすめです(HTTPステータス、レスポンスなど)。


8. 12/24 に向けた“実測準備”メモ

24日は実際の通話で挙動を見せる想定なので、これを仕込んでおくと吉。

  • サンプル通話を1本録っておく:storage/recordings/<ts_callid>/mixed.wavmeta.json
  • 代表ログをまとめる:INVITE/200/ACK/BYE、RTP受信開始・drop、録音開始/停止、ingest送信結果
  • レイテンシの計測結果を拾う:RTP→ASR確定 / ASR→LLM / LLM→TTS開始
  • Wiresharkキャプチャ(pcap)が取れればベスト。難しければ RTP len/seq のログでも可。

9. 12/23時点の固定点

  • mediamixed.wav / meta.json を生成する(生成責務に閉じる)
  • http/recordings/... を配信する(配信責務に閉じる)
  • call_id を軸にログ相関できるようにする(SIP/RTP/録音/ingest)
  • レイテンシ計測点を最小3つ置く(ASR/LLM/TTS)

次回(12/24)は、実測ログ/録音/pcapを添えて テスト&デバッグの具体例 をまとめる予定です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?