会話比較と限定導入の検証
cases.json は架空会話16ケース・37ターン。調整用4ケースと採用評価用12ケースを分ける。採用評価の入力・確認点を見て指示を調整した場合は、そのケースを調整用へ移し、新しい採用評価ケースを用意する。
モデル比較
- Unityで検証用キャラを読み込み、Play Modeにする。台本・Native/OBS配信・アプリ外の録音や送出を停止する。
AituberStudio → 会話の比較・音声検証を開く。対象と「検証端末・環境」を指定する。- 同じケースを
context_only_none(材料だけ)、planned_none(状況整理あり)、planned_low(状況整理+少量の推論)でそれぞれ3反復する。モデル・キャラ・履歴公開条件・音声条件を固定する。 - 文脈/訂正、継続性、キャラらしさ、初見への明瞭さ、見続けたい度を1〜5で評価する。0は未評価。期待結果はモデルへ送信しない。自発発話の見送りも状況に適しているか評価する。
この結果をキャラの声で確認で個別に再生し、声・間・表情を評価する。音量0、別の音声再生中、キャラや設定変更時は開始しない。生成と音声はサービスの利用枠を消費する。- 結果をJSONへ保存する。キャラ/設定/コード/ケースの指紋、モデル、環境、生成時間、実測できた初音声までの時間を保存する。開始通知がなく完了receiptだけ届いた場合、初音声はnullのままにする。
これは生成コンポーネントの比較。本物のCommentStock、Safety Filter、ResponseDirector、字幕ボードを通すE2Eではない。履歴は独立したSituation/CharacterExperienceに生成結果を仮想配送して構成し、実配信の履歴・質問受付・人物記憶を更新しない。音声再生の完了だけで面白さやアバターの同期を合格にはしない。
比較用の推論量は要求のAsyncLocal scopeだけへ設定し、キャラの設定値やクラウドへ保存しない。対応する会話モデル/ローカル推論だけを使用し、別モデルへ自動で切り替えない。推論量を扱えないローカルモデルではnoneの比較が可能で、lowは実行しない。
実経路での待ち時間・長時間運転
通常のコメント受付と台本・自発発話を使った検証配信は、上の生成比較とは別に実施する。AituberStudio → 会話体験モニター から、本文を含まない生成計測と単一コメントの配送計測をJSONへ出力できる。
- 生成はroute、scene、設定モデル、要求時に確認できたモデル/effort、予算、生成時間、結果を記録する。各要求は別のscopeに置く。
- 単一コメントはSnapshot IDで生成と配送を照合できる。コメント処理開始→初音声、Trace時刻→初音声、TTS依頼→初音声を別々に測る。
- Trace時刻はプラットフォーム投稿時刻、または取得できない場合の正規化時刻。両者の区別を現行Traceから復元できないため、すべてを「投稿から」と表示しない。視聴端末までの配信遅延は別途録画で測る。
- 初音声を観測できなかった値はnull。途中可聴はPartial、可聴完了後の後処理取消でも配送結果はCompleted。各台帳は最大256件、保存は手動。長時間検証では周期的に書き出して収集する。
- バッチ、自発発話の入力→初音声、受付前に破棄した入力の全件追跡は新しい配送台帳の対象外。既存の監査と別集計する。生成結果の成功と、実可聴の成功を混ぜない。
最低1時間、コメント混雑・回答待ち・ノード遷移・カンペ割込み・TTS遅延/失敗を含めて実施する。繰り返し、不要な沈黙、質問の未回収、初見への分かりやすさ、実音声と字幕/表情を確認する。10,000往復の自動テストはメモリ上限の検証であり、実時間の耐久試験の代用ではない。
限定導入の判断と設定復帰
release-evidence.template.json を別のローカルファイルへコピーし、実測した対象・設定指紋・モデル・音声条件を記録する。元のテンプレートは空欄のまま残す。指紋は次のコマンドで確認できる。
python3 scripts/conversation-quality/assess.py \
--release docs/analysis/character-response-20260922/evaluation/release-evidence.template.json \
--fingerprints
限定導入前に、検証用キャラの設定を保存 → 会話品質v2/lowへ変更 → 実効設定と実発話を確認 → 元設定へ戻す → 再取得した設定が一致することを確認し、記録する。対象キャラと環境を確定して行い、台本/配信を動かしたまま設定を切り替えない。設定は機密を含み得るためリポジトリへ追加しない。
録画、E2E報告、1時間以上の連続運転報告、設定復帰前後の記録、配布候補Playerのアーカイブには実ファイルのSHA-256を付ける。復帰前後は同じ形式に正規化した設定ファイルを比較する。各報告のpassed/restoredは実施者の確認結果であり、スクリプトが映像や会話の意味を自動判定するわけではない。
python3 scripts/conversation-quality/assess.py \
--release /path/to/release-evidence.json \
--report /path/to/comparison-results.json \
--output /path/to/rollout-readiness.json
--reportは複数回指定できる。初期の採用基準は、採用評価12ケース×3条件×3反復、全ターンの5評価軸が3以上、状況整理ありの平均評価が基準条件を下回らないこと。生成時間が場面予算+2秒を超えた結果は不合格とし、音声確認はplanned_lowの全採用評価ケースで少なくとも1件ずつ必要。これらはこの検証セットの暫定基準で、一般的な「面白い」の認定値ではない。
現在と異なるソース/ケース/対象条件、重複行、空欄、NaN、部分的なケース、未評価、欠落・改変された成果物は合格にしない。終了コード0は限定導入に必要な証拠が揃った状態、2は不足あり。このツールはデプロイや本番設定の変更を行わない。 合格後に検証済みPlayerを限定端末へ適用し、実効設定を再確認する。Admin/Functionsを変更する場合はリポジトリのstaging→production手順に従う。
自動テスト:
python3 -m unittest discover -s scripts/conversation-quality -p 'test_*.py'
タスク固有の評価、反復比較、人の評価との照合を採用する根拠: OpenAI Evaluation best practices(2026-09-22確認)。この指針は本システムの品質向上を証明したものではない。