监控生成式人工智能应用(旧版)

重要

此功能以 Beta 版本提供。

重要

本页介绍<0.22 与 MLflow <2.x 的代理评估。 Databricks 建议使用与代理评估 >1.0集成的 MLflow 3。 代理评估 SDK 方法现在通过 mlflow SDK 公开。

有关本主题的信息,请参阅 生产质量监视(自动运行评分器)。

本页介绍如何使用适用于生成式 AI 的 Lakehouse Monitoring 的各种功能。 若要启用监视功能,请按照监视概述上链接的步骤进行操作。

查看监视结果

在查看监视结果之前,你必须具备以下各项:

满足这些先决条件后,可以按照以下步骤查看汇总监视器生成的结果的页面:

  1. AI/ML 部分下的边栏中单击“试验”。

  2. 单击与监视器关联的 MLflow 试验。

    如果不确定如何查找相关试验的名称,请按照获取监视器元数据中的说明检索试验 ID,然后在笔记本中运行 mlflow.get_experiment(experiment_id=$YOUR_EXPERIMENT_ID) 以查找试验名称。

  3. 单击“监视”选项卡

  4. 使用“选择 SQL 仓库”下拉列表选择你的 SQL 仓库

  5. 该页面将更新以显示监视结果。 结果可能需要几分钟才能完成加载。

使用监视界面

监视界面中的所有数据(同时包括“图表”和“日志”选项卡)都受限于时间范围。 若要更改该范围,请使用“时间范围”下拉列表。

“图表”选项卡

“图表”选项卡由四个部分组成:请求、指标、延迟和错误。

汇总监视结果的页面的屏幕截图。

“请求”部分显示跟踪量随时间的变化。

“请求”部分的屏幕截图。

“指标”部分显示 LLM 评判所评估的回答计数。 绿色表示通过的回答,而红色表示失败的回答。 本部分列出的指标应与创建监视器时定义的指标以及总体通过/失败质量得分相对应。

“指标”部分的屏幕截图。

“延迟”部分显示跟踪执行延迟随时间的变化,数据取自 MLflow 报告的延迟。

“延迟”部分的屏幕截图。

“错误”部分显示任何模型错误随时间的变化。 如果未发生错误,你将看到“无数据”指示信息,如下所示:

“错误”部分的屏幕截图。

“日志”选项卡

“日志”选项卡的屏幕截图。

“日志”选项卡列出了发送到所选模型的请求以及 LLM 评估的结果(如果有)。 该界面中最多可显示来自所选时间段的 10,000 个请求。 如果请求计数超过此阈值,将以与监视器配置中指定的采样率不同的速率对请求进行采样。

若要根据提交的请求中包含的文本筛选请求日志,请使用搜索框。 还可以使用“筛选器”下拉菜单按关联评估的结果来筛选日志。

日志筛选器的屏幕截图。

将光标悬停在请求上,然后单击复选框以选择请求。 然后,可以单击“导出跟踪”以将这些请求添加到评估数据集。 该数据集必须是使用与监视器相同的 MLflow 试验记录的。

“导出跟踪”对话框的屏幕截图。

单击请求以查看其详细信息。 该模式对话框将显示评估结果、输入、回答以及为回应请求而检索的文档(如果有)。 有关请求的更多详细信息(包括计时信息),请单击该模式对话框右上角的“查看详细跟踪视图”

请求详细信息模式对话框的屏幕截图。

请求的详细跟踪视图的屏幕截图。

添加警报

使用 Databricks SQL 警报在评估的跟踪表不符合预期时(例如,当标记为有害的请求数超过阈值时)通知用户。

更新或暂停监视器

若要更新监视器的配置,请调用 update_monitor,该命令将接受以下输入:

  • endpoint_name: str - 正在监视的终结点的名称
  • monitoring_config: dict - 监视器的配置。 请参阅设置监视,了解支持的参数。

例如:

from databricks.agents.evals.monitors import update_monitor

monitor = update_monitor(
    endpoint_name = "model-serving-endpoint-name",
    monitoring_config = {
        "sample": 0.1,  # Change sampling rate to 10%
    }
)

同样,若要暂停监视器:

from databricks.agents.evals.monitors import update_monitor

monitor = update_monitor(
    endpoint_name = "model-serving-endpoint-name",
    monitoring_config = {
        "paused": True,
    }
)

获取监视器元数据

使用 get_monitor 函数检索针对所部署智能体的监视器的当前配置。

from databricks.agents.evals.monitors import get_monitor

get_monitor('model-serving-endpoint-name')

该函数将返回 Monitor 对象,其中包括以下属性:

  • endpoint_name - 正在监视的终结点的名称。
  • monitoring_config - 监视器的配置。 请参阅设置监视,了解配置参数。
  • experiment_id - 显示监视结果的 MLflow 试验。 请参阅查看监视结果
  • evaluated_traces_table - 包含监视评估结果的 Unity Catalog 表。

删除监视器

若要从终结点中移除监视器,请调用 delete_monitor

from databricks.agents.evals.monitors import delete_monitor

monitor = delete_monitor(
    endpoint_name = "model-serving-endpoint-name",
)

调用 delete_monitor 不会删除由监视器生成的评估跟踪表。

智能体监视中的自定义指标

这一在监视中启用自定义指标的方法将来可能会发生更改。 如有疑问,请联系 Databricks 代表。

按照以下步骤在代理监视器中启用针对自定义指标的评估。

  1. 在工作区中创建 Python (.py) 文件并定义自定义指标。 这应该是一个 Python 文件,而不是 Databricks 笔记本。 有关在 Databricks 工作区中创建 Python 文件的说明,请参阅工作区文件的基本用法

  2. 在此文件中定义一个名为 CUSTOM_METRICS 的包含指标函数的列表。 使用 mlflow.evaluate 时,可联机或脱机使用相同的自定义指标。 请参阅自定义指标(旧版)。

    下面是一个示例文件:

    # custom_metrics.py
    
    import mlflow
    import pandas as pd
    from databricks.agents.evals import metric
    
    @metric
    def response_mentions_llm(response):
      return "LLM" in response
    
    @metric
    def request_too_long(request):
      return len(request) > 1000
    
    
    CUSTOM_METRICS = [response_mentions_llm, request_too_long]
    
  3. 导航到“工作流”选项卡。

    • 如果智能体托管在 Databricks 上,请找到标题为 [<your agent name>] Agent Monitoring Job 的工作流。
    • 如果智能体托管在 Databricks 外部,请找到标题为 monitor_<monitoring table name> 的工作流(将表名中的 . 字符替换为 -)。
  4. 编辑该工作流以添加作业参数。 请参阅配置作业参数

  5. 创建名为 CUSTOM_METRICS_NOTEBOOK_PATH 的参数。 此参数的值应该是自定义指标 python 文件的完整路径。

将在监视器的后续运行中评估自定义指标。

若要在将自定义指标包含在监视器中之前对其进行迭代,请在跟踪的子集上运行 mlflow.evaluate

如果智能体托管在 Databricks 上:

import mlflow
import pandas as pd
from databricks.agents.evals import metric

@metric
def response_mentions_llm(response):
  return "LLM" in response

df = spark.table("<your-monitoring-table>")
pdf = df.toPandas()[['request','response','trace']]

import mlflow
result = mlflow.evaluate(
  data = pdf,
  model_type="databricks-agent",
  extra_metrics=[response_mentions_llm]
)
display(result)