Langfuse v4: up to 165× faster · Read more
AcademyExamples%2Fmusic Streaming Dj
英語版 2026年8月19日 時点の翻訳です。最新の内容は 英語版 をご参照ください。

音楽ストリーミングの DJ

これは Langfuse Academy の概念を説明するための例です。

背景

ある音楽ストリーミングアプリが、DJ 機能をベータとして追加します。 DJ は、ユーザーがこれまでに再生した曲と、アルゴリズムがユーザーの好みだと判断したものをもとに、キューを途切れさせずに回し続けます。 数曲おきに、次にかかる曲とその選曲理由について短くコメントします。 リスナーはマイクボタンを押して話しかけることで、DJ に方向性を指示することもできます。

9:41
こんばんは
山田 太郎
あなたの DJ
今夜のための
選曲中

曲を選び、その理由を語りかけ、
こちらの声にも耳を傾けます。

DJ を始める
最近再生した曲
曲名1
アーティストA
曲名2
アーティストB
曲名3
アーティストC
あなたへのおすすめ
すべて見る
デイリーミックス
プレイリスト1
デイリーミックス
プレイリスト2
ホーム
検索
ライブラリ
9:41
再生中
DJ · この曲を選んだ理由

先週リピートしていたあのアルバムの流れで、少しマニアックな 1 曲を。ペースを上げる前に、ゆっくり入っていきましょう。

曲名3
アーティストC
0:483:36
9:41
DJ に話しかける
聞き取り中…
もう少し元気な曲をかけて
話しかけてみる
これは誰? この曲をスキップ こういう曲をもっと
タップして停止
画面はイメージです。登場する人名・アーティスト名・曲名はすべて架空のものです。

AI エンジニアリングの構成をどう組むかは、2 つの特徴から決まります。

  1. 出力が悪かったときのリスクが低い。 最悪でも曲がスキップされるか、DJ のコメントがぎこちない程度で、機能はベータと明示されています。
  2. 新機能なので 出発点となる過去データがない。 チームはリスナーの実際の行動から学んでいく必要があります。

このため、できるだけ早く本番に出し、最初からライブのフィードバックをもとに反復する のが理にかなっています。

DJ のトレーシング

2 種類の トレース があり、これらが合わさって 1 つのセッションを構成 します。

トレース名詳細
plan-next-set次にかける曲のセットを組み立て、コメントを書きます。数曲おきに DJ 自身が開始するか、DJ への依頼をきっかけに開始します。
入力: 視聴コンテキストと、あれば指示
出力: キューに入れた次の曲と、コメント 1 行
handle-dj-requestリスナーからの音声依頼を処理します。マイクボタンで開始します。
入力: 音声クリップと現在のキュー
出力: 短い返答と、これが起動する plan-next-set への指示

視聴セッションと、2 種類のトレースを近くで見てみます。

セッション listen_7f3e · ユーザー u_8841
Traceplan-next-set「今週よく聴いた 2 曲から始めます。」2.8s
Traceplan-next-set「この流れのまま、少し落ち着いたエレクトロニカで。」2.4s
Tracehandle-dj-request「もう少し落ち着いた曲をかけて。」1.6s
Traceplan-next-set「少し落ち着いた流れにします。アンビエントピアノをどうぞ。」dj-request 起点1.5s
Traceplan-next-setsession: listen_7f3euser: u_88411.5s
入力好み: エレクトロニカ, ダウンテンポ · 直近の再生: アーティストA「曲名1」, アーティストB「曲名2」 · 指示: "もっと落ち着いた曲"
出力4 曲をキューに追加 · コメント: 「少し落ち着いた流れにします。アンビエントピアノをどうぞ。」
Toolselect-tracks0.6s
入力好み: エレクトロニカ, ダウンテンポ · 直近の再生: アーティストA「曲名1」, アーティストB「曲名2」 · 指示: "もっと落ち着いた曲"
出力アーティストD「曲名4」· アーティストE「曲名5」· アーティストF「曲名6」· アーティストG「曲名7」
Genwrite-commentarygpt-4.1-mini120 tok$0.00020.9s
入力選ばれた 4 曲 · 指示: "もっと落ち着いた曲"
出力「少し落ち着いた流れにします。アンビエントピアノをどうぞ。」
Tracehandle-dj-requestsession: listen_7f3euser: u_88411.6s
入力音声クリップ (2 秒)
出力返答: 「了解です、落ち着いた流れにしますね。」 · 指示: "もっと落ち着いた曲"
Tooltranscribe-request0.4s
入力音声クリップ (2 秒)
出力「もう少し落ち着いた曲をかけて。」
Geninterpret-requestgpt-4.1-mini210 tok$0.00041.2s
入力「もう少し落ち着いた曲をかけて。」 · 現在のキュー
出力返答: 「了解です、落ち着いた流れにしますね。」 · 指示: "もっと落ち着いた曲"
Eventtrigger-plan-next-set@ 1.6s
入力指示: "もっと落ち着いた曲"

ユーザーの行動を捕捉する

ユーザーから学ぶために、注目すべき行動 を該当するトレースに記録します。

評価器

原理的には、これだけあればチームはもう反復を始められます。 トレーシングと モニタリング だけで、それ自体が小さなループを形成するからです。 最初のうちは、DJ 機能をすばやく改善していくにはおそらくこれで十分です。

デプロイ
トレース
すべてのセットとすべての依頼
モニタリング
スキップ、dj_replaced、message_type
データセット 構築
まだ使わない
実験
まだ使わない
評価
まだ使わない

構成が成熟し、より体系的なテストを整えたくなったら、これらのシグナルの上にデータセットと実験を組み立てていけます。

体系的なテスト

ライブのシグナルだけの状態では、変更をテストするということはリリースしてスコアを見ることを意味します。 チームはさらに 2 つの意図的なテスト方法を追加できます。データセットに対する実験 と、実ユーザーに対する A/B テストです。

データセットに対する実験

このユースケースでは、エンドツーエンドをオフラインでテストするのは非常に困難です。 セッションが良かったかどうかは実際の視聴行動にしか現れず、好みはユーザーごとに違うため、全員に当てはまる期待出力が存在しないからです。 一方で select-tracks のような 単一のステップ はテストできます。期待値として、正確な曲目ではなくセットの方向性を記述します。

データセット
評価器

実ユーザーに対する A/B テスト

コメントのトーンのように、オフラインでは採点しにくい変更もあります。 リスクが低いので、チームは一部のリスナーに新バージョンを提供し、スキップ率や message_type の分布といったシグナルのスコアをグループ間で比較できます。 新バージョンのほうが良ければ、全体に展開します。

ここまでそろうと、ループ全体が回っている状態になります。

デプロイ
トレース
すべてのセットとすべての依頼
モニタリング
スキップ、dj_replaced、message_type、A/B 比較
データセット 構築
本番のモニタリングで見えたものから
実験
選曲アルゴリズム、DJ のプロンプト、…
評価
ステップの出力を期待値に照らして採点

まとめ

これは、リスクが低く、学習に使える過去データもない機能の例です。 こうした場合に取れる最善の手は、できるだけ早くトレースを取り始め、それをモニタリングすることです。 データセット、実験、A/B テストといった残りは、その上に時間をかけて積み上げていけます。

他の例Academy も参照してみてください。


Was this page helpful?

Last edited