为生成式 AI 应用程序部署代理

本页演示如何使用 Agent Framework Python API 中的deploy()函数将 AI 代理部署到马赛克 AI 模型服务。

在马赛克 AI 模型服务上部署代理具有以下优势:

  • 模型服务管理自动缩放、日志记录、版本控制和访问控制,使你能够专注于开发质量代理。
  • 主题专家可以使用评审应用与部署的代理交互,并提供反馈,你可以将其纳入监视和评估。
  • 可以通过评估实时流量来监视代理。 尽管用户流量不包括基本情况,但 LLM 评委(和你创建的自定义指标)执行无监督评估。

Requirements

  • 使用来自deploy()databricks.agents API 部署代理时,需使用 MLflow 2.13.1 或更高版本。

  • 将 AI 代理注册到 Unity Catalog。 请参阅将代理注册到 Unity Catalog

  • 从 Databricks 笔记本外部部署代理需要 databricks-agents SDK 版本 0.12.0 或更高版本。

  • 终结点创建者(部署代理的用户)必须在选中的 Unity Catalog 架构上拥有权限,以便在部署时存储推理表。 这可确保可以在架构中创建相关的评估和日志记录表。 请参阅 “启用和禁用推理表”。

  • 安装databricks-agents SDK。

    %pip install databricks-agents
    dbutils.library.restartPython()
    

使用 deploy() 部署代理

使用 deploy() 将代理部署到模型服务终结点。

from databricks import agents

deployment = agents.deploy(uc_model_name, uc_model_info.version)

# Retrieve the query endpoint URL for making API requests
deployment.query_endpoint

警告

如果要从存储在 Databricks Git 文件夹中的笔记本部署代理,则默认情况下,MLflow 3 实时跟踪将不起作用。

若要启用实时跟踪,请先将试验设置为非 Git 关联的试验 mlflow.set_experiment() ,然后再运行 agents.deploy()

默认情况下,deploy() 函数执行以下作:

deploy() 操作 Description
创建 CPU 模型服务终结点 通过模型服务终结点为应用程序提供服务,使面向用户的应用程序可以访问代理。
预配生存期较短的服务主体凭据 Databricks 自动提供具有最低权限的短期凭据,以访问记录模型时定义的 Databricks 管理的资源
Databricks 检查终结点所有者在颁发凭据之前是否具有必要的权限,以防止特权升级和未经授权的访问。 请参阅 AI 代理的身份验证
如果您的代理依赖于非 Databricks 管理的资源,则可以将包含机密的环境变量传递给 deploy()。 请参阅配置从模型服务终结点对资源的访问权限
启用审阅应用 允许利益干系人与代理交互并提供反馈。 请参阅 “使用评审应用程序进行生成式 AI 应用的人工评审 (MLflow 2)”
启用推理表 通过记录请求输入和响应来监视和调试代理。
记录 REST API 请求并查看应用反馈 将 API 请求和反馈记录到推理表。
  • 创建反馈模型 以接受和记录来自“审阅应用”的反馈。
  • 此模型在与您已部署代理相同的 CPU 型号服务端点中进行服务。
使用 MLflow 3 启用实时跟踪 需要使用 MLflow 3.0 或更高版本。
除了记录从部署的代理到推理表的跟踪以进行长期存储外,Databricks 还记录从部署代理到 MLflow 试验的跟踪以实现实时可见性。 这可以减少监视和调试延迟。
  • 通过agents.deploy() 创建新终端节点时,配置的监视和跟踪功能会从当前活动的 MLflow 实验中进行读取和写入。
  • 终结点中所有服务代理的跟踪(包括通过对 agents.deploy() 的后续调用添加到终结点的代理)被写入此试验。
为 Gen AI 启用生产监视(beta 版) 需要注册 GenAI 生产监控 Beta版
  • 在本试验中,监视计算跟踪上的质量指标。
  • 默认情况下,仅配置基本监视指标。 若要添加 LLM 法官及其他功能,请参阅 GenAI 的生产环境监控

Note

部署可能需要长达 15 分钟才能完成。 原始 JSON 有效负载需要 10 到 30 分钟才能到达,大约每隔一小时从原始有效负载处理带格式的日志。

自定义部署

若要自定义部署,可以将其他参数传递给 deploy()。 例如,可以通过传递 scale_to_zero_enabled=True,为空闲终结点启用缩放到零功能。 这降低了成本,但增加了为初始查询提供服务的时间。

有关更多参数,请参阅 Databricks Agents Python API

检索和删除代理部署

检索或管理现有代理部署:

from databricks.agents import list_deployments, get_deployments, delete_deployment

# Print all current deployments
deployments = list_deployments()
print(deployments)

# Get the deployment for a specific agent model name and version
agent_model_name = ""  # Set to your Unity Catalog model name
agent_model_version = 1  # Set to your agent model version
deployment = get_deployments(model_name=agent_model_name, model_version=agent_model_version)

# Delete an agent deployment
delete_deployment(model_name=agent_model_name, model_version=agent_model_version)

依赖资源的身份验证

AI 代理通常需要向其他资源进行身份验证才能完成任务。 例如,代理可能需要访问矢量搜索索引来查询非结构化数据。

有关所有身份验证方法以及何时使用它们的综合信息,请参阅 AI 代理的身份验证

监视已部署的代理

将代理部署到 Databricks 模型服务后,可以使用 AI 网关推理表监视已部署的代理。 推理表包含来自评审应用的请求、响应、代理跟踪和代理反馈的详细日志。 利用此信息,可以调试问题、监视性能,并创建黄金数据集进行脱机评估。

Important

如果在调用 agents.deploy()时在开发环境中安装了 MLflow 3,终结点会将 MLflow 跟踪 实时记录到调用 agents.deploy()时激活的 MLflow 实验。 可以在部署之前调用 mlflow.set_experiment() 更改活动试验。

有关更多详细信息 ,请参阅 MLflow 文档

请参阅使用跟踪调试和观察应用

获取已部署的应用程序

下面介绍如何获取已部署的代理。

from databricks.agents import list_deployments, get_deployments

# Get the deployment for specific model_fqn and version
deployment = get_deployments(model_name=model_fqn, model_version=model_version.version)

deployments = list_deployments()
# Print all the current deployments
deployments

请参阅 Databricks 代理 Python API

提供有关已部署代理人的反馈(实验性)

部署代理时,代理框架还会在同一端点中创建并部署一个“反馈”模型版本,你可以查询该版本以提供有关代理应用程序的反馈。 反馈条目显示为与代理服务终结点关联的推理表中的请求行。

请注意,此行为是 实验性的:Databricks 可能会提供一流的 API,以便将来提供有关已部署代理的反馈,将来的功能可能需要迁移到此 API。

此 API 的限制包括:

  • 反馈 API 缺少输入验证 - 即使传递了无效的输入,它始终会成功响应。
  • 反馈 API 要求传入由 Databricks 生成的用于您要提供反馈的代理终结点请求的 request_id。 若要获取 databricks_request_id,请在对代理服务终结点的原始请求中包含 {"databricks_options": {"return_trace": True}}。 然后,代理终结点响应包含与 databricks_request_id 请求关联的请求,以便在提供有关代理响应的反馈时将请求 ID 传递回反馈 API。
  • 使用推理表收集反馈。 请参阅 推理表限制

以下示例请求提供有关名为“your-agent-endpoint-name”的代理终结点的反馈,并假定 DATABRICKS_TOKEN 环境变量设置为 Databricks REST API 令牌。

curl \
  -u token:$DATABRICKS_TOKEN \
  -X POST \
  -H "Content-Type: application/json" \
  -d '
      {
          "dataframe_records": [
              {
                  "source": {
                      "id": "user@company.com",
                      "type": "human"
                  },
                  "request_id": "573d4a61-4adb-41bd-96db-0ec8cebc3744",
                  "text_assessments": [
                      {
                          "ratings": {
                              "answer_correct": {
                                  "value": "positive"
                              },
                              "accurate": {
                                  "value": "positive"
                              }
                          },
                          "free_text_comment": "The answer used the provided context to talk about Lakeflow Declarative Pipelines"
                      }
                  ],
                  "retrieval_assessments": [
                      {
                          "ratings": {
                              "groundedness": {
                                  "value": "positive"
                              }
                          }
                      }
                  ]
              }
          ]
      }' \
https://<workspace-host>.databricks.com/serving-endpoints/<your-agent-endpoint-name>/served-models/feedback/invocations

可以在text_assessments.ratingsretrieval_assessments.ratings字段中传递附加或不同的键值对,以提供不同类型的反馈。 在此示例中,反馈有效负载指示代理对 ID 为 573d4a61-4adb-41bd-96db-0ec8cebc3744 的请求的响应正确无误,且位于检索器工具提取的上下文中。

其他资源