top of page

LLMアプリの評価データをバージョン管理する - Langfuseのデータセットバージョニングで実験の再現性を確保する

  • 執筆者の写真: 太郎 山内
    太郎 山内
  • 14 時間前
  • 読了時間: 6分

LLMアプリケーションの開発で、こんな経験はないでしょうか。


「先週と同じ条件で実験したいのに、データセットを更新したから再現できない…」

「評価データを改善したいけど、過去の結果と比較できなくなるのが怖い…」

「チームメンバーがデータセットを変更して、自分の実験の前提が変わってしまった…」

「実験後にデータを1件修正したら、あの実験で何を入力していたか確認できなくなった…」


評価データセットを更新すると、過去の実験結果との比較が難しくなります。同じプロンプトで精度が変わったとき、それがモデル改善によるものか、データセットの変更によるものかを切り分けられなくなるのです。特にチーム開発では、誰かがデータセットを更新することで、実行中の実験の前提が変わってしまう可能性もあります。


Langfuseのデータセットバージョニング機能は、この課題を解決します。この機能により、評価データの変更とモデルの変更を分離して管理し、実験の再現性を確保できるようになりました。



本記事でわかること

  • データセットバージョニングが必要になる具体的な場面

  • Langfuseのタイムスタンプベースバージョニングの仕組み

  • 実験の再現性確保・チーム開発での活用方法


なぜデータセットバージョニングが必要か


「先週のデータセットで再度実験したいのに、もう戻せない」

「精度が下がったけど、データが変わったせいなのか、モデルのせいなのか分からない」

「他のメンバーがデータセットを更新して、自分の実験が意図しない影響を受けた」


LLMアプリの評価では、評価データセットは「固定されたもの」ではなく、継続的に改善されるべきものです。エッジケースを発見したら追加し、不適切なテストケースを修正し、より実践的なシナリオを反映するよう更新していく。しかし、従来のデータセット管理では、更新のたびに過去のバージョンが上書きされてしまいます。これにより、以下のような問題が発生します:


  • 再現性の欠如: 実験結果のRun Itemを開いても「今の最新データ」が表示されるため、実験を実行した当時の入力が何だったか確認できない。実験後にデータを1件でも修正すると、「当時の入力で動いていたのか、修正後の入力で動いていたのか」が永久に不明になる

  • 比較の困難: データセット更新前後で精度が変わったとき、データの変化によるものか、モデルの変化によるものか判断できない

  • チーム開発での衝突: 複数人で開発していると、データセット更新が他のメンバーの実験に意図せず影響を与える


LLMOpsの観点では、データのバージョン管理はモデルのバージョン管理と同じくらい重要です。MLOpsでは学習データのバージョン管理は一般的ですが、LLMアプリの評価データも同様に管理すべきなのです。


Langfuseのデータセットバージョニング機能


Langfuse v3.151.0で、実験向けのデータセットバージョニング機能が強化されました。データセットアイテムの各更新が履歴として保持され、ISO 8601形式のタイムスタンプ(例: `2026-01-21T14:35:42Z`)で特定の時点のデータセットを参照できます。


この仕組みにより、実験実行時に「どのバージョンのデータセットを使うか」を明示的に指定でき、実験結果には使用したバージョンが自動的に記録されます。後から実験結果を見たときに、「この実験は当時のどのデータで実行されたか」が正確に追跡できるのです。


実現できること


データセットバージョニングにより、以下のような運用が可能になります。


1. 実験の完全な再現性


「先週のプロンプト改善で精度が5%向上したはずなのに、今日試したら再現できない…」


こんな経験はないでしょうか。バージョニング機能があれば、実験実行時のデータセットバージョンが自動記録されるため、数週間後でも当時と全く同じ条件で実験を再現できます。実験結果の画面には使用したバージョンが記録されており、クリックするだけで当時のデータ一覧に遷移できます。「あの実験はどのデータで動かしたっけ?」で悩む必要はありません。


2. 安全なデータセット改善


データセットを改善・修正しても、過去のバージョンは保持されます。「新しいケースを追加したら精度が下がった。元のデータセットで再確認したい」といった場合に、更新前のバージョンで再実験できるため、安心してデータセットを継続的に改善できます。


3. データ変更とモデル変更の分離


同じプロンプトで2回実験を実行して結果が異なった場合、バージョンを確認することで原因を切り分けられます:

- 同じバージョン → モデル側の問題(APIの非決定性など)

- 異なるバージョン → データが変わったため


この切り分けができることで、デバッグや改善の方向性を正しく判断できます。CI/CDパイプラインに組み込む際も、バージョン指定によって特定の評価データセットに対する回帰テストが可能になります。


4. チーム開発での安心感


実験を作成するとき、バージョンを指定して「先週時点のデータだけで実験する」という条件を固定できます。チームメンバーがその後ケースを追加・修正しても、自分の実験には影響しません。各メンバーが独立して作業しながら、必要に応じて最新版を取り込むという柔軟な運用ができます。


使い方


データセットバージョニングは、LangfuseのUIとSDK/APIの両方から利用できます。


UIでの操作


バージョン履歴の確認


データセット詳細画面から、過去のバージョンを一覧で確認できます。各バージョンには「Copy version timestamp (UTC)」ボタンがあり、SDKやAPIで使用するタイムスタンプをそのままコピーできます。


バージョン一覧から過去時点のデータセット状態を確認できる
バージョン一覧から過去時点のデータセット状態を確認できる

実験実行時のバージョン指定


実験を作成する際、バージョン選択ドロップダウンからデータセットのバージョンを指定できます。デフォルトは最新版ですが、過去のバージョンを選択することも可能です。


実験作成時に使用するデータセットのバージョンを指定できる
実験作成時に使用するデータセットのバージョンを指定できる

選択したバージョンで実験が実行され、使用したバージョンは実験結果のメタデータに自動記録されます。


実験結果でのバージョン確認


実験Run詳細画面には、使用したデータセットのバージョンが表示されます。このバージョン日時はリンクになっており、クリックすると当時のデータセットアイテム一覧に遷移できます。


Run詳細からワンクリックで当時のデータ一覧に遷移できる
Run詳細からワンクリックで当時のデータ一覧に遷移できる

SDKでの使用


SDKを使って実験を自動化している場合も、バージョニングを活用できます。`

`get_dataset()`の `version` パラメータに日時オブジェクトを渡すことで、特定時点のデータセットを取得できます。


from datetime import datetime, timezone
from langfuse import get_client

langfuse = get_client()

# 特定バージョン(2026年1月21日時点)のデータセットを取得
version = datetime(2026, 1, 21, 14, 35, 42, tzinfo=timezone.utc)
dataset = langfuse.get_dataset(name="my-dataset", version=version)



# 取得したバージョンのアイテムで実験を実行
def my_task(*, item, **kwargs):
   return my_llm_function(item.input)

result = dataset.run_experiment(
   name="experiment-v1",
   task=my_task,
)


まとめ


LLMアプリの開発において、評価データのバージョン管理は実験の再現性と正確な分析のために不可欠です。Langfuseのデータセットバージョニング機能を使えば、データの変化とモデルの変化を分離して管理でき、チームでの並行開発も安心して進められます。


データセットを更新するたびに「過去の結果と比較できなくなる」不安から解放され、自信を持ってLLMアプリの品質を改善できるようになります。ぜひ実際の開発フローに取り入れてみてください。


参考リンク



 
 
 

コメント


bottom of page