Журнал и регистрация агентов ИИ
Внимание
Эта функция предоставляется в режиме общедоступной предварительной версии.
Журнал агентов ИИ с помощью Платформы агента ИИ Мозаики. Ведение журнала агента является основой процесса разработки. Ведение журнала фиксирует "точку во времени" кода и конфигурации агента, чтобы вы могли оценить качество конфигурации.
Требования
Создайте агент ИИ перед ведением журнала.
Ведение журнала на основе кода
Databricks рекомендует использовать модели MLflow из функционала кода при ведении журналов агентов.
В этом подходе код агента фиксируется как файл Python, а среда Python фиксируется как list пакетов. При развертывании агента среда Python восстанавливается, а код агента выполняется для загрузки агента в память, чтобы его можно было вызвать при вызове конечной точки.
Этот подход можно использовать с использованием API для предварительной проверки развертывания, таких как mlflow.models.predict(), чтобы убедиться, что агент работает надежно при развертывании для обслуживания.
Код, регистрируемый агентом или агентом, должен находиться в отдельной записной книжке из кода агента. Эта записная книжка называется записной книжкой драйвера. Пример записной книжки см. в разделе "Примеры записных книжек".
Определение сигнатуры модели во время ведения журнала
Во время ведения журнала необходимо определитьподписи модели MLflow
Databricks рекомендует использовать возможности вывода подписи модели MLflow для автоматического generate подписи агента на основе предоставленного входного примера. Этот подход удобнее, чем вручную определение сигнатуры.
Примеры LangChain и PyFunc ниже используют вывод на основе сигнатуры модели.
Если вы предпочитаете сами явно определять подпись модели во время записи, обратитесь к документации MLflow, раздел - Как регистрировать модели с сигнатурами.
Ведение журнала на основе кода с помощью LangChain
В следующих инструкциях и примере кода показано, как регистрировать агент с помощью LangChain.
Создайте записную книжку или файл Python с кодом. В этом примере записная книжка или файл именуется
agent.py
. Записная книжка или файл должны содержать агент LangChain, называемый здесьlc_agent
.Включите mlflow.models.set_model(lc_agent) в записную книжку или файл.
Создайте записную книжку для работы в качестве записной книжки драйвера (вызываемой
driver.py
в этом примере).В записной книжке драйвера используйте следующий код, чтобы запустить
agent.py
и записать результаты в модель MLflow:mlflow.langchain.log_model(lc_model="/path/to/agent.py", resources=list_of_databricks_resources)
Параметр
resources
объявляет управляемые Databricks ресурсы, необходимые для обслуживания агента, например индекс векторного поиска или конечную точку, которая служит базовой моделью. Дополнительную информацию см. в разделе Задание ресурсов для автоматической передачи аутентификационных данных.Развертывание модели. См. раздел "Развертывание агента для создания приложения ИИ".
При загрузке
agent.py
среды обслуживания выполняется.При появлении
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.
Создайте записную книжку или файл Python с кодом. В этом примере записная книжка или файл именуется
agent.py
. Записная книжка или файл должны содержать класс PyFunc с именемPyFuncClass
.Включите
mlflow.models.set_model(PyFuncClass)
в записную книжку или файл.Создайте записную книжку для работы в качестве записной книжки драйвера (вызываемой
driver.py
в этом примере).В записной книжке драйвера используйте следующий код, чтобы запустить
agent.py
и записать результаты в модель MLflow:mlflow.pyfunc.log_model(python_model="/path/to/agent.py", resources=list_of_databricks_resources)
Параметр
resources
объявляет управляемые Databricks ресурсы, необходимые для обслуживания агента, например индекс векторного поиска или конечную точку, которая служит базовой моделью. Дополнительную информацию см. в разделе Задание ресурсов для автоматической передачи аутентификационных данных.Развертывание модели. См. раздел "Развертывание агента для создания приложения ИИ".
При загрузке
agent.py
среды обслуживания выполняется.При появлении
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-mixtral-8x7b-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)
Укажите ресурсы для автоматической сквозной аутентификации
Агенты ИИ часто должны проходить проверку подлинности в других ресурсах для выполнения задач. Например, агенту может потребоваться доступ к индексу векторного поиска для запроса неструктурированных данных.
Как описано в процессе аутентификации для зависимых ресурсов, Model Serving поддерживает аутентификацию как для ресурсов, управляемых Databricks, так и для внешних ресурсов при развертывании агента.
Для наиболее распространенных типов ресурсов Databricks Databricks поддерживает и рекомендует объявлять зависимости ресурсов для агента заранее во время ведения журнала. Это позволяет сквозное автоматической проверки подлинности при развертывании агента — Databricks автоматически подготавливает, поворачивает и управляет кратковременными credentials для безопасного доступа к этим зависимостям ресурсов из конечной точки агента.
Чтобы включить автоматический сквозной процесс проверки подлинности, укажите зависимые ресурсы с помощью параметра resources
API log_model(), как это показано в следующем коде.
import mlflow
from mlflow.models.resources import (
DatabricksVectorSearchIndex,
DatabricksServingEndpoint,
DatabricksSQLWarehouse,
DatabricksFunction,
DatabricksGenieSpace,
DatabricksTable,
)
with mlflow.start_run():
logged_agent_info = mlflow.pyfunc.log_model(
python_model=agent_notebook_path,
artifact_path="agent",
input_example=input_example,
example_no_conversion=True,
# Specify resources for automatic authentication passthrough
resources=[
DatabricksVectorSearchIndex(index_name="prod.agents.databricks_docs_index"),
DatabricksServingEndpoint(endpoint_name="databricks-mixtral-8x7b-instruct"),
DatabricksServingEndpoint(endpoint_name="databricks-bge-large-en"),
DatabricksSQLWarehouse(warehouse_id="your_warehouse_id"),
DatabricksFunction(function_name="ml.tools.python_exec"),
DatabricksGenieSpace(genie_space_id="your_genie_space_id"),
DatabricksTable(table_name="your_table_name"),
]
)
Databricks рекомендует вручную указать resources
для всех вариантов агента.
Примечание.
Если вы не указываете ресурсы при логировании агентов LangChain с помощью mlflow.langchain.log_model(...)
, MLflow выполняет автоматическое определение ресурсов по мере возможности. Однако это может не записывать все зависимости, что приводит к ошибкам авторизации при обслуживании или запросе агента.
В следующем table перечислены ресурсы Databricks, поддерживающие автоматическую передачу аутентификации, и минимальная версия mlflow
, необходимая для ведения журнала ресурса.
Тип ресурса | Минимальная версия mlflow , необходимая для регистрации ресурса |
---|---|
Индекс векторного поиска | Требуется mlflow 2.13.1 или более поздняя версия |
Сервисная конечная точка модели | Требуется mlflow 2.13.1 или более поздняя версия |
Хранилище SQL | Требуется mlflow 2.16.1 или более поздняя версия |
Функция Unity Catalog | Требуется mlflow 2.16.1 или более поздняя версия |
Пространство Genie | Требуется mlflow 2.17.1 или более поздняя версия |
Unity Catalogtable | Требуется mlflow 2.18.0 или выше |
Регистрация агента в Unity Catalog
Перед развертыванием агента необходимо зарегистрировать его в Unity Catalog. При регистрации агент упаковывается как модель в Unity Catalog. В результате можно использовать разрешения Unity Catalog для авторизации ресурсов в агенте.
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)