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

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アプリの品質を改善できるようになります。ぜひ実際の開発フローに取り入れてみてください。



コメント