管理生产评分器

Important

此功能在 Beta 版中。

设置生产环境监控后,可以在其整个生命周期内管理评分系统。 本页介绍如何列出、更新、停止、重启和删除记分器。

完整的API参数参考,请参见 管理生产评分器。

记分器生命周期

记分器生命周期以 MLflow 试验为中心。 记分器是不 可变的:每个生命周期操作返回新的记分器实例,而不是修改原始实例。

State Description API
未注册 评分器函数已定义,但服务器无法识别。
注册 记分器注册到活动的 MLflow 实验。 .register()
积极 记分器以采样率 > 0 运行。 .start()
已停止 计分器已注册但未运行(采样率 = 0)。 .stop()
已删除 记分器已从服务器中删除,不再与试验关联。 delete_scorer()

生命周期示例

以下示例演示一个在所有生命周期状态中移动的评分器:

from mlflow.genai.scorers import Safety, scorer, ScorerSamplingConfig, delete_scorer

# Register → Start → Update → Stop → Delete
safety_judge = Safety().register(name="safety_check")
safety_judge = safety_judge.start(
    sampling_config=ScorerSamplingConfig(sample_rate=1.0),
)
safety_judge = safety_judge.update(
    sampling_config=ScorerSamplingConfig(sample_rate=0.8),
)
safety_judge = safety_judge.stop()
delete_scorer(name="safety_check")

管理记分器

以下 API 可用于管理记分器。

API Description Example
list_scorers() 列出当前试验的所有已注册评分器。 列出得分者
get_scorer() 按名称检索已注册的记分器。 Scorer.update()
Scorer.update() 修改活动评分器的采样配置。 这是一个不可变的操作。 Scorer.update()
backfill_scorer() 追溯性地将新的或更新的指标应用于历史跟踪。
delete_scorer() 按名称删除已注册的记分器。 停止和删除评分器

列出评分器

若要查看实验的所有已注册的打分器,请执行以下步骤:

from mlflow.genai.scorers import list_scorers

# List all registered scorers
scorers = list_scorers()
for scorer in scorers:
    print(f"Name: {scorer.name}")
    print(f"Sample rate: {scorer.sample_rate}")
    print(f"Filter: {scorer.filter_string}")
    print("---")

获取和更新评分器

用于 get_scorer() 按名称检索记分器,然后 update() 修改其配置。 由于记分器不可变, update() 因此返回一个新实例。

from mlflow.genai.scorers import get_scorer, ScorerSamplingConfig

# Get existing scorer and update its configuration (immutable operation)
safety_judge = get_scorer(name="safety_monitor")
updated_judge = safety_judge.update(sampling_config=ScorerSamplingConfig(sample_rate=0.8))

# The original scorer remains unchanged; update() returns a new scorer instance
print(f"Original sample rate: {safety_judge.sample_rate}")  # Original rate
print(f"Updated sample rate: {updated_judge.sample_rate}")   # New rate

停止和删除评分器

停止评分器将其采样率设置为 0,但仍然保持注册。 删除记分器会完全将其从服务器中删除。

from mlflow.genai.scorers import get_scorer, delete_scorer, ScorerSamplingConfig

# Get existing scorer
databricks_scorer = get_scorer(name="databricks_mentions")

# Stop monitoring (sets sample_rate to 0, keeps scorer registered)
stopped_scorer = databricks_scorer.stop()
print(f"Sample rate after stop: {stopped_scorer.sample_rate}")  # 0

# Restart monitoring from a stopped scorer
restarted_scorer = stopped_scorer.start(sampling_config=ScorerSamplingConfig(sample_rate=0.5))

# Or remove scorer entirely from the server
delete_scorer(name=databricks_scorer.name)

不可变更新

评分员,包括 LLM 法官,是不可变的对象。 更新记分器时,将创建更新的副本,而不是修改原始副本。 这种不可变性有助于确保用于生产的记分器不会被意外修改。

from mlflow.genai.scorers import Safety, ScorerSamplingConfig

original_judge = Safety().register(name="safety")
original_judge = original_judge.start(
   sampling_config=ScorerSamplingConfig(sample_rate=0.3),
)

# Update returns new instance
updated_judge = original_judge.update(
    sampling_config=ScorerSamplingConfig(sample_rate=0.8),
)

# Original remains unchanged
print(f"Original: {original_judge.sample_rate}")  # 0.3
print(f"Updated: {updated_judge.sample_rate}")    # 0.8

最佳做法

  • 在使用 sample_rate 进行操作之前检查记分器状态。

  • 使用不可变模式。 将结果.start().update().stop()分配给变量。

  • 了解.stop()(保留注册)和delete_scorer()(完全删除)之间的差异。

记分器生命周期 API 参考

记分器实例方法

Scorer.register()

API 参考:Scorer.register

向服务器注册自定义记分器函数。 用于使用 @scorer 修饰器创建的记分器。

@scorer
def custom_scorer(outputs):
    return len(str(outputs.get("response", "")))

# Register the custom scorer
my_scorer = custom_scorer.register(name="response_length")

参数:

  • name (str):试验中记分器的唯一名称。 默认为评分器的现有名称。

返回: 已注册服务器的新Scorer 实例

Scorer.start()

API 参考:Scorer.start

使用指定的采样配置开始联机评估。

from mlflow.genai.scorers import ScorerSamplingConfig

# Start monitoring with sampling
active_scorer = registered_scorer.start(
    sampling_config=ScorerSamplingConfig(
        sample_rate=0.5,
        filter_string="trace.status = 'OK'"
    ),
)

参数:

  • name (str):记分器的名称。 如果未提供,则默认为评分器的当前名称。

  • sampling_config (ScorerSamplingConfig):跟踪采样配置

    • sample_rate (float):要评估的跟踪比例(0.0-1.0)。 默认值:1.0
    • filter_string (str,可选):用于跟踪选择的 MLflow 兼容筛选器

返回: 处于活动状态的新 Scorer 实例

Scorer.update()

API 参考:Scorer.update

修改活动评分器的采样配置。 这是一个不可变的操作。

# Update sampling rate (returns new scorer instance)
updated_scorer = active_scorer.update(
    sampling_config=ScorerSamplingConfig(
        sample_rate=0.8,
    ),
)

# Original scorer remains unchanged
print(f"Original: {active_scorer.sample_rate}")  # 0.5
print(f"Updated: {updated_scorer.sample_rate}")   # 0.8

参数:

  • name (str):记分器的名称。 如果未提供,则默认为评分器的当前名称。

  • sampling_config (ScorerSamplingConfig):跟踪采样配置

    • sample_rate (float):要评估的跟踪比例(0.0-1.0)。 默认值:1.0
    • filter_string (str,可选):用于跟踪选择的 MLflow 兼容筛选器

返回: 具有更新配置的新 Scorer 实例

Scorer.stop()

API 参考:Scorer.stop

通过将采样率设置为 0 来停止联机评估。 使记分器保持注册状态。

# Stop monitoring but keep scorer registered
stopped_scorer = active_scorer.stop()
print(f"Sample rate: {stopped_scorer.sample_rate}")  # 0

参数:

  • name (str):记分器的名称。 如果未提供,则默认为评分器的当前名称。

返回: 具有 sample_rate=0 的新 Scorer 实例

记分器注册表函数

mlflow.genai.scorers.get_scorer()

API 参考:get_scorer

按名称检索已注册的记分器。

from mlflow.genai.scorers import get_scorer

# Get existing scorer by name
existing_scorer = get_scorer(name="safety_monitor")
print(f"Current sample rate: {existing_scorer.sample_rate}")

参数:

  • name (str):已注册的记分器的名称

返回:Scorer 实例

mlflow.genai.scorers.list_scorers()

API 参考:list_scorers

列出当前试验的所有已注册评分器。

from mlflow.genai.scorers import list_scorers

# List all registered scorers
all_scorers = list_scorers()
for scorer in all_scorers:
    print(f"Name: {scorer._server_name}")
    print(f"Sample rate: {scorer.sample_rate}")
    print(f"Filter: {scorer.filter_string}")

返回:Scorer实例列表

mlflow.genai.scorers.delete_scorer()

API 参考:delete_scorer

按名称删除已注册的记分器。

from mlflow.genai.scorers import delete_scorer

# Delete existing scorer by name
delete_scorer(name="safety_monitor")

参数:

  • name (str):已注册的记分器的名称

返回: 没有

记分器属性

Scorer.sample_rate

当前采样率(0.0-1.0)。 返回已停止的记分器的 0。

print(f"Sampling {scorer.sample_rate * 100}% of traces")

Scorer.filter_string

MLflow 跟踪选择的当前跟踪筛选器字符串。

print(f"Filter: {scorer.filter_string}")

配置类

ScorerSamplingConfig

API 参考:ScorerSamplingConfig

保存评分器的采样配置的数据类。

from mlflow.genai.scorers import ScorerSamplingConfig

config = ScorerSamplingConfig(
    sample_rate=0.5,
    filter_string="trace.status = 'OK'"
)

属性:

  • sample_rate (浮点数,可选):采样率介于 0.0 和 1.0 之间

  • filter_string (str,可选):MLflow 跟踪筛选器

指标回填

backfill_scorers()

from databricks.agents.scorers import backfill_scorers, BackfillScorerConfig

job_id = backfill_scorers(
    experiment_id="your-experiment-id",
    scorers=[
        BackfillScorerConfig(scorer=safety_scorer, sample_rate=0.8),
        BackfillScorerConfig(scorer=response_length, sample_rate=0.9)
    ],
    start_time=datetime(2024, 1, 1),
    end_time=datetime(2024, 1, 31)
)

参数:

所有参数都是关键字参数。

  • experiment_id (str, optional):要回填的试验的 ID。 如果未提供,请使用当前的试验上下文

  • scorers (Union[List[BackfillScorerConfig], List[str]], required):具有自定义采样率的对象列表 BackfillScorerConfig (如果 BackfillScorerConfig 中未提供sample_rate,则默认为已注册的记分器的采样率)、或记分器名称列表(字符串)以使用试验计划评分器中的当前采样率。 不能为空。

  • start_time (日期时间,可选):回填评估的开始时间。 如果你省略此参数,但传入了 end_time,回填将从 end_time 之前一天开始

  • end_time (日期时间,可选):回填评估的结束时间。 如果你省略此项但传入 start_time,回填会一直运行到当前时间

Important

如果你同时省略 start_time 和 end_time,回填将只覆盖最近七天,而不是完整的跟踪历史记录。 只省略一个界限则会使用不同的默认值,如上所述。 要评估较旧的跟踪,请显式传入 start_time。

返回: 为状态跟踪创建的回填作业的作业 ID (str)