Поделиться через


Логирование и регистрация агентов ИИ (сервис моделей)

Это важно

В новых вариантах использования Databricks рекомендует развертывать агенты в Databricks Apps для полного контроля над кодом агента, конфигурацией сервера и рабочим процессом развертывания. См . статью "Создание агента ИИ" и его развертывание в приложениях Databricks. Сведения о переносе существующего агента см. в статье "Миграция агента из службы моделей в приложения Databricks".

Логирование агентов ИИ с помощью Фреймворка Агент ИИ Мозаики. Логирование агента является основой процесса разработки. Ведение журнала фиксирует "точку во времени" кода и конфигурации агента, чтобы вы могли оценить качество конфигурации.

Requirements

Создайте ИИ-агент перед его регистрацией.

Databricks рекомендует установить последнюю версию databricks-sdk.

% pip install databricks-sdk

ведение журнала на основе кода

Databricks рекомендует использовать функциональность MLflow Models from Code при логировании агентов.

В этом подходе код агента записывается в виде файла Python, а среда Python записывается в виде списка пакетов. При развертывании агента среда Python восстанавливается, а код агента выполняется для загрузки агента в память, чтобы его можно было вызвать при вызове конечной точки.

Этот подход можно использовать с использованием API для предварительной проверки развертывания, таких как mlflow.models.predict(), чтобы убедиться, что агент работает надежно при развертывании для обслуживания.

Пример ведения журнала на основе кода см. в статье "Примеры записных книжек для разработки ResponsesAgent".

Определение сигнатуры модели во время логирования

Note

Databricks рекомендует создавать агент с помощью интерфейса ResponsesAgent. При использовании ResponsesAgent можно пропустить этот раздел; MLflow автоматически выводит допустимую подпись для агента.

Если вы не используете интерфейс ResponsesAgent, необходимо применить один из следующих методов, чтобы указать сигнатуру модели MLflow вашего агента при записи в журнал:

  1. Вручную определите сигнатуру
  2. Используйте возможности вывода подписи модели MLflow для автоматического создания подписи агента на основе предоставленного входного примера. Этот подход удобнее, чем вручную определение сигнатуры.

Подпись модели MLflow проверяет входные и выходные данные, чтобы агент правильно взаимодействовал с последующими инструментами, такими как AI Playground и приложение для обзора. Он также поможет другим приложениям эффективно использовать агент.

Примеры LangChain и PyFunc ниже используют вывод на основе сигнатуры модели.

Если вы предпочитаете сами явно определять подпись модели во время записи, обратитесь к документации MLflow, раздел - Как регистрировать модели с сигнатурами.

Ведение журнала на основе кода с помощью LangChain

В следующих инструкциях и примере кода показано, как регистрировать агент с помощью LangChain.

  1. Создайте записную книжку или файл Python с кодом. В этом примере записная книжка или файл именуется agent.py. Записная книжка или файл должны содержать агент LangChain, называемый здесь lc_agent.

  2. Включите mlflow.models.set_model(lc_agent) в записную книжку или файл.

  3. Создайте новую записную книжку, которую можно использовать в качестве управляющей записной книжки (называемой driver.py в этом примере).

  4. В записной книжке драйвера используйте следующий код, чтобы запустить agent.py и записать результаты в модель MLflow:

    mlflow.langchain.log_model(lc_model="/path/to/agent.py", resources=list_of_databricks_resources)
    

    Параметр resources объявляет управляемые Databricks ресурсы, необходимые для обслуживания агента, например индекс векторного поиска или конечную точку, которая служит базовой моделью. Детальную информацию можно найти в разделе Реализация автоматической сквозной аутентификации.

  5. Разверните модель. См . раздел "Развертывание агента для создания приложений ИИ (обслуживание моделей)".

  6. Когда загружается среда обслуживания, выполняется agent.py.

  7. При поступлении запроса на обслуживание вызывается lc_agent.invoke(...).


import mlflow

code_path = "/Workspace/Users/first.last/agent.py"
config_path = "/Workspace/Users/first.last/config.yml"

# Input example used by MLflow to infer Model Signature
input_example = {
  "messages": [
    {
      "role": "user",
      "content": "What is Retrieval-augmented Generation?",
    }
  ]
}

# example using langchain
with mlflow.start_run():
  logged_agent_info = mlflow.langchain.log_model(
    lc_model=code_path,
    model_config=config_path, # If you specify this parameter, this configuration is used by agent code. The development_config is overwritten.
    artifact_path="agent", # This string is used as the path inside the MLflow model where artifacts are stored
    input_example=input_example, # Must be a valid input to the agent
    example_no_conversion=True, # Required
  )

print(f"MLflow Run: {logged_agent_info.run_id}")
print(f"Model URI: {logged_agent_info.model_uri}")

# To verify that the model has been logged correctly, load the agent and call `invoke`:
model = mlflow.langchain.load_model(logged_agent_info.model_uri)
model.invoke(example)

Ведение журнала на основе кода с использованием PyFunc ()

В следующих инструкциях и примере кода показано, как регистрировать агент с помощью PyFunc.

  1. Создайте записную книжку или файл Python с кодом. В этом примере записная книжка или файл именуется agent.py. Записная книжка или файл должны содержать класс PyFunc с именем PyFuncClass.

  2. Включите mlflow.models.set_model(PyFuncClass) в записную книжку или файл.

  3. Создайте новую записную книжку, которую можно использовать в качестве управляющей записной книжки (называемой driver.py в этом примере).

  4. В записной книжке драйвера используйте следующий код для выполнения agent.py и использования log_model() для записи результатов в модель MLflow:

    mlflow.pyfunc.log_model(python_model="/path/to/agent.py", resources=list_of_databricks_resources)
    

    Параметр resources объявляет управляемые Databricks ресурсы, необходимые для обслуживания агента, например индекс векторного поиска или конечную точку, которая служит базовой моделью. Детальную информацию можно найти в разделе Реализация автоматической сквозной аутентификации.

  5. Разверните модель. См . раздел "Развертывание агента для создания приложений ИИ (обслуживание моделей)".

  6. Когда загружается среда обслуживания, выполняется agent.py.

  7. При поступлении запроса на обслуживание вызывается PyFuncClass.predict(...).

import mlflow
from mlflow.models.resources import (
    DatabricksServingEndpoint,
    DatabricksVectorSearchIndex,
)

code_path = "/Workspace/Users/first.last/agent.py"
config_path = "/Workspace/Users/first.last/config.yml"

# Input example used by MLflow to infer Model Signature
input_example = {
  "messages": [
    {
      "role": "user",
      "content": "What is Retrieval-augmented Generation?",
    }
  ]
}

with mlflow.start_run():
  logged_agent_info = mlflow.pyfunc.log_model(
    python_model=agent_notebook_path,
    artifact_path="agent",
    input_example=input_example,
    resources=resources_path,
    example_no_conversion=True,
    resources=[
      DatabricksServingEndpoint(endpoint_name="databricks-meta-llama-3-3-70b-instruct"),
      DatabricksVectorSearchIndex(index_name="prod.agents.databricks_docs_index"),
    ]
  )

print(f"MLflow Run: {logged_agent_info.run_id}")
print(f"Model URI: {logged_agent_info.model_uri}")

# To verify that the model has been logged correctly, load the agent and call `invoke`:
model = mlflow.pyfunc.load_model(logged_agent_info.model_uri)
model.invoke(example)

Проверка подлинности для ресурсов Databricks

Агенты ИИ часто должны проходить проверку подлинности в других ресурсах для выполнения задач. Например, развернутому агенту, возможно, потребуется получить доступ к индексу векторного поиска для запроса неструктурированных данных или доступ к реестру подсказок для загрузки динамических подсказок.

Для автоматической сквозной аутентификации и аутентификации от имени требуется настройка во время авторизации агента.

регистрация агента в каталоге Unity

Перед развертыванием агента необходимо зарегистрировать агент в каталоге Unity. Регистрация агента оформляет его как модель в каталоге Unity. В результате можно использовать разрешения каталога Unity для авторизации ресурсов в агенте.

import mlflow

mlflow.set_registry_uri("databricks-uc")

catalog_name = "test_catalog"
schema_name = "schema"
model_name = "agent_name"

model_name = catalog_name + "." + schema_name + "." + model_name
uc_model_info = mlflow.register_model(model_uri=logged_agent_info.model_uri, name=model_name)

См. mlflow.register_model().

Дальнейшие шаги