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?

DatabricksとMLflowによる人間のフィードバック収集を通じた生成AIアプリの品質改善

Posted at

こちらのマニュアルのサンプルノートブックを実行しながら、人間フィードバック収集機能を説明します。

生成AIアプリケーションの品質向上には、実際のユーザーや専門家からのフィードバックが不可欠です。この記事では、MLflow 3の人間フィードバック収集機能を使って、エンドユーザーの反応、開発者の注釈、専門家のレビューを体系的に集め、それらを活用してアプリの品質を評価する方法を解説します。DatabricksやOpenAIのLLMを使った実践的なチュートリアル形式で、トレースの作成からフィードバック収集、評価までの一連の流れを学ぶことができます。

機能概要

MLflow 3の人間フィードバック収集機能は、生成AIアプリケーションの品質改善を支援する包括的なフィードバック管理システムです。この機能は以下の3つの主要なコンポーネントで構成されています。

主な機能コンポーネント

コンポーネント 役割 主な利用者
トレーシング LLMの実行履歴を記録 開発者
フィードバック収集 ユーザーや専門家の評価を記録 エンドユーザー、開発者、専門家
ラベリングセッション 体系的な専門家レビューを実施 ドメイン専門家
[生成AIアプリ]
    ↓
[MLflowトレース] ← ユーザーの質問・回答を記録
    ↓
[フィードバック収集]
    ├─ エンドユーザー(👍/👎)
    ├─ 開発者(注釈・スコア)
    └─ 専門家(詳細評価)
    ↓
[品質評価・改善]

この機能では、MLflowのトレース機能を使って、LLMとのやり取りを自動的に記録します。そして、記録されたトレースに対して、さまざまな立場の人々からフィードバックを収集し、最終的にそのフィードバックを基にアプリケーションの品質を定量的に評価できます。

メリット、嬉しさ

人間のフィードバック収集機能を導入することで、以下のような利点が得られます。

1. 多角的な品質評価が可能

従来は開発者の主観的な判断に頼りがちでしたが、エンドユーザー、開発者、ドメイン専門家という3つの視点からフィードバックを収集できます。これにより、実際の利用シーンにおける問題点を正確に把握できます。

2. フィードバックの一元管理

散在しがちなユーザーの声や専門家の意見を、MLflow上で一元的に管理できます。トレースIDを軸にすべてのフィードバックが紐付けられるため、特定の応答に対する評価を簡単に追跡できます。

3. 体系的な品質改善プロセス

収集したフィードバックをそのまま評価データセットとして活用できるため、改善のサイクルをスムーズに回せます。専門家が提供した「理想的な回答」を基準として、自動評価も実施できます。

4. 開発効率の向上

UIを通じたインタラクティブなフィードバック追加や、専門家レビュー用のリンク共有など、ワークフローが効率化されています。コードを書かずにフィードバックを追加できる点も便利です。

使い方の流れ

実際の導入から運用までの流れを、6つのステップで説明します。

ステップ1: アプリの作成とトレース設定

まず、MLflowのトレース機能を有効にして、生成AIアプリを作成します。

%pip install --upgrade "mlflow[databricks]>=3.1.0" openai "databricks-connect>=16.1"
dbutils.library.restartPython()
import mlflow
from openai import OpenAI

# すべてのOpenAI API呼び出しに対して自動トレーシングを有効化
mlflow.openai.autolog()

# MLflowと同じ認証情報を使ってOpenAI経由でDatabricks LLMに接続
# もちろん、ご自身のOpenAI認証情報も利用可能です
mlflow_creds = mlflow.utils.databricks_utils.get_databricks_host_creds()
client = OpenAI(
    api_key=mlflow_creds.token,
    base_url=f"{mlflow_creds.host}/serving-endpoints"
)

# トレーシング付きのRAGアプリを作成
@mlflow.trace
def my_chatbot(user_question: str) -> str:
    # 関連するコンテキストを取得
    context = retrieve_context(user_question)

    # 取得したコンテキストを使ってLLMで応答を生成
    response = client.chat.completions.create(
        model="databricks-claude-3-7-sonnet",  # OpenAIを直接使う場合は"gpt-4o"や"gpt-3.5-turbo"を指定
        messages=[
            {"role": "system", "content": "あなたは親切なアシスタントです。提供されたコンテキストを使って質問に答えてください。"},
            {"role": "user", "content": f"Context: {context}\n\nQuestion: {user_question}"}
        ],
        temperature=0.7,
        max_tokens=150
    )
    return response.choices[0].message.content

@mlflow.trace(span_type="RETRIEVER")
def retrieve_context(query: str) -> str:
    # シミュレーションされた検索処理 - 本番環境ではベクターデータベースを検索します
    if "mlflow" in query.lower():
        return "MLflowは機械学習ライフサイクル全体を管理するためのオープンソースプラットフォームです。実験管理、モデルのパッケージ化、デプロイメントのためのツールを提供します。"
    return "機械学習やデータサイエンスに関する一般的な情報です。"

# アプリを実行してトレースを生成
response = my_chatbot("MLflowとは何ですか?")
print(f"Response: {response}")

# 次のステップで使うトレースIDを取得
trace_id = mlflow.get_last_active_trace_id()
print(f"Trace ID: {trace_id}")
Response: MLflowは機械学習ライフサイクル全体を管理するためのオープンソースプラットフォームです。このプラットフォームは、実験の追跡・管理、モデルのパッケージ化、そして最終的なデプロイメントのためのツールを提供しています。これにより、データサイエンティストやエンジニアは機械学習プロジェクトの各段階を効率的に管理することができます。
Trace ID: tr-7d22bd07d914591726b3df99125cbe15

Screenshot 2025-10-06 at 16.34.51.png

@mlflow.traceデコレータを付けることで、関数の実行履歴が自動的に記録されます。

ステップ2: エンドユーザーのフィードバック収集

ユーザーからの評価(👍/👎)を記録します。ユーザーがアプリを利用する際、サムズアップ/ダウンなどのUI要素を通じてフィードバックを提供できます。このクイックスタートでは、SDKを使ってエンドユーザーが否定的なフィードバックを送るシナリオをシミュレートします。

from mlflow.entities.assessment import AssessmentSource, AssessmentSourceType

# アプリからエンドユーザーのフィードバックをシミュレート
# 本番環境では、ユーザーがUIでサムズダウンをクリックしたときにトリガーされます
mlflow.log_feedback(
    trace_id=trace_id,
    name="user_feedback",
    value=False,  # Falseはサムズダウン(ユーザーが満足していない)
    rationale="MLflowの主な機能(ProjectsやModel Registryなど)の詳細が不足している",
    source=AssessmentSource(
        source_type=AssessmentSourceType.HUMAN,
        source_id="enduser_123",  # 本番環境では実際のユーザーIDを指定
    ),
)

print("✅ エンドユーザーのフィードバックが記録されました!")

# 実際のアプリでは、
# 1. trace_idを応答と一緒にフロントエンドへ返す
# 2. ユーザーがサムズアップ/ダウンをクリックしたらバックエンドAPIを呼ぶ
# 3. バックエンドでmlflow.log_feedback()をtrace_id付きで呼び出す
✅ エンドユーザーのフィードバックが記録されました!

ステップ3: UIでフィードバックの確認

MLflow UIで記録されたフィードバックを視覚的に確認できます。

  1. MLflowエクスペリメントページへ移動
  2. 「トレース」タブを開く
  3. 該当するトレースをクリック
  4. 右側の「評価」セクションでフィードバックを確認

Screenshot 2025-10-06 at 16.37.37.png

ステップ4: 開発者による注釈追加

UI上で直接、開発者がメモやスコアを追加できます。

  1. トレース詳細画面でスパンを選択
  2. 「評価」タブから「新しい評価を追加」をクリック
  3. タイプ(FeedbackまたはExpectation)、名前、値、根拠を入力
  4. 「作成」をクリック

Screenshot 2025-10-06 at 16.38.41.png

ステップ5: 専門家レビューセッションの作成

ステップ2で得られた否定的なエンドユーザーフィードバックは品質上の問題の可能性を示しますが、実際に問題があるかどうか、また正しい回答は何かを判断できるのはドメインの専門家だけです。次のセルでは、ラベリングセッションを作成し、専門家によるフィードバックを得る方法を示します。

この操作はUIからも可能です。エクスペリメントページで「ラベル付け」タブをクリックし、左側の「セッション」や「スキーマ」タブから新しいラベルスキーマの追加やセッションの作成ができます。

Screenshot 2025-10-06 at 16.46.09.png

ドメイン専門家による体系的なレビューを実施するためのセッションを作成します。

from mlflow.genai.label_schemas import create_label_schema, InputCategorical, InputText
from mlflow.genai.labeling import create_labeling_session

# 収集するフィードバックの定義
accuracy_schema = create_label_schema(
    name="response_accuracy",
    type="feedback",
    title="この応答は事実として正確ですか?",
    input=InputCategorical(options=["Accurate", "Partially Accurate", "Inaccurate"]),
    overwrite=True
)

ideal_response_schema = create_label_schema(
    name="expected_response",
    type="expectation",
    title="理想的な応答は何ですか?",
    input=InputText(),
    overwrite=True
)

# ラベリングセッションの作成
labeling_session = create_labeling_session(
    name="quickstart_review",
    label_schemas=[accuracy_schema.name, ideal_response_schema.name],
)

# セッションにトレースを追加
# 現在の実験から最新のトレースを取得
traces = mlflow.search_traces(
    max_results=1  # 最新のトレースを取得
)
labeling_session.add_traces(traces)

# レビュワーと共有
print(f"✅ トレースをレビュー用に送信しました!")
print(f"このリンクをレビュワーと共有してください: {labeling_session.url}")
✅ トレースをレビュー用に送信しました!
このリンクをレビュワーと共有してください: https://xxxx.cloud.databricks.com/ml/review-v2/4af8c33414fd49ada1f99a9cf0779de0/tasks/labeling/041d5429-8051-4ebd-933e-4be59ef0f1bf

専門家にはlabeling_session.urlを共有することで、レビューアプリにアクセスしてもらえます。

Screenshot 2025-10-06 at 15.49.07.png
Screenshot 2025-10-06 at 15.49.23.png

ステップ6: フィードバックを使った評価

前のセルの結果には、専門家が正しい回答を入力できるリンクが含まれています。専門家がそのリンクからフィードバックを提供した後、このステップに進みます。このステップでは、専門家が入力したexpected_responseを使って、MLflowのCorrectnessスコアラーでアプリを評価します。専門家が提供した「理想的な回答」を基準に、アプリを自動評価します。

from mlflow.genai.scorers import Correctness

# ラベリングセッションからトレースを取得
labeled_traces = mlflow.search_traces(
    run_id=labeling_session.mlflow_run_id,  # ラベリングセッションはMLflowのRunです
)

# 専門家の期待値と比較してアプリを評価
eval_results = mlflow.genai.evaluate(
    data=labeled_traces,
    predict_fn=my_chatbot,  # ステップ1で作成したアプリ
    scorers=[Correctness()]  # 出力とexpected_responseを比較
)

Correctnessスコアラーが、アプリの出力と専門家の期待値を比較し、定量的なスコアを算出します。

Screenshot 2025-10-06 at 15.50.09.png
Screenshot 2025-10-06 at 15.50.27.png

全体のワークフロー図

① アプリ作成・トレース
    ↓
② エンドユーザーフィードバック(SDK経由)
    ↓
③ UIで確認
    ↓
④ 開発者注釈(UI経由)
    ↓
⑤ 専門家レビューセッション
    ↓
⑥ 自動評価・改善

注意点

この機能を使用する際には、以下の点に注意が必要です。

環境設定について

  • MLflow 3.1.0以降が必要です。%pip install -q --upgrade "mlflow[databricks]>=3.1.0"で最新版をインストールしてください
  • Databricksノートブックを使わない場合は、事前にMLflowエクスペリメントを作成し、トラッキングサーバーへの接続設定が必要です
  • OpenAIを使用する場合は、環境変数OPENAI_API_KEYを設定してください

フィードバック収集の設計

  • エンドユーザーフィードバックを収集する際は、フロントエンドからtrace_idを返す仕組みを実装する必要があります
  • source_idには実際のユーザーIDを設定することで、誰からのフィードバックかを追跡できます
  • 過度に複雑な評価項目は専門家の負担になるため、必要最小限のスキーマ設計を心がけましょう

ラベリングセッションの運用

  • 専門家レビューは時間がかかるため、レビュー対象のトレースを適切に絞り込むことが重要です
  • 評価データセットとして長期的に活用する場合は、Evaluation データセットへの追加を推奨します(バージョン管理とリネージの追跡が可能)
  • レビューアプリのURLは関係者のみに共有してください

評価について

  • Correctnessスコアラーは、専門家がexpected_responseを提供していることが前提です
  • 評価結果は相対的な指標として活用し、絶対的な品質保証とは考えないようにしましょう

まとめ

MLflow 3の人間フィードバック収集機能は、生成AIアプリケーションの品質向上に必要な多角的な評価を実現します。エンドユーザーの直感的な反応、開発者の専門的な注釈、ドメイン専門家の詳細なレビューを体系的に収集し、それらを基にした定量的な評価まで一貫して行えます。

導入のハードルも比較的低く、@mlflow.traceデコレータを追加するだけでトレース機能が利用でき、UIを通じたインタラクティブな操作も可能です。まずは小規模なプロジェクトで試してみて、フィードバック収集のプロセスを確立することから始めるとよいでしょう。

収集したフィードバックは、単なる記録に留まらず、評価データセットとして継続的な品質改善のサイクルに活用できます。ぜひこの機能を活用して、ユーザーにとってより価値のある生成AIアプリケーションを構築してください。

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

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?