Freigeben über


KI Agenten protokollieren und registrieren

Protokollieren Sie KI-Agents mithilfe von Mosaik AI Agent Framework. Das Protokollieren eines Agents ist die Grundlage des Entwicklungsprozesses. Die Protokollierung erfasst einen "Zeitpunkt" des Codes und der Konfiguration des Agents, damit Sie die Qualität der Konfiguration auswerten können.

Requirements

Erstellen Sie einen KI-Agenten, bevor Sie ihn protokollieren.

Databricks empfiehlt, die neueste Version des databricks-sdkzu installieren.

% pip install databricks-sdk

Codebasierte Protokollierung

Databricks empfiehlt, bei der Protokollierung von Agenten die MLflow-Funktionalität Models from Code zu verwenden.

Bei diesem Ansatz wird der Code des Agents als Python-Datei erfasst, und die Python-Umgebung wird als Liste der Pakete erfasst. Wenn der Agent bereitgestellt wird, wird die Python-Umgebung wiederhergestellt, und der Code des Agents wird ausgeführt, um den Agent in den Arbeitsspeicher zu laden, damit er aufgerufen werden kann, wenn der Endpunkt aufgerufen wird.

Sie können diesen Ansatz mit der Verwendung von Validierungs-APIs vor der Bereitstellung wie mlflow.models.predict() koppeln, um sicherzustellen, dass der Agent zuverlässig ausgeführt wird, wenn er im Einsatz ist.

Ein Beispiel für die codebasierte Protokollierung finden Sie unter "ResponsesAgent authoring example notebooks".

Ableiten der Modellsignatur während der Protokollierung.

Note

Databricks empfiehlt, einen Agent mithilfe der ResponsesAgent-Schnittstelle zu erstellen. Wenn Sie ResponsesAgent verwenden, können Sie diesen Abschnitt überspringen. MLflow leitet automatisch eine gültige Signatur für Ihren Agent ab.

Wenn die ResponsesAgent Schnittstelle nicht verwendet wird, müssen Sie eine der folgenden Methoden verwenden, um die MLflow-Modellsignatur ihres Agents zur Protokollierungszeit anzugeben:

  1. Manuelles Definieren der Signatur
  2. Verwenden Sie die Modellsignatur-Inferencing-Funktionen von MLflow, um die Signatur des Agents basierend auf einem von Ihnen bereitgestellten Eingabebeispiel automatisch zu generieren. Dieser Ansatz ist praktischer als die manuelle Definition der Signatur.

Die MLflow-Modellsignatur überprüft Eingaben und Ausgaben, um sicherzustellen, dass der Agent ordnungsgemäß mit downstream-Tools wie AI Playground und der Prüf-App interagiert. Es führt auch andere Anwendungen dazu, wie der Agent effektiv verwendet werden kann.

Die LangChain und PyFunc Beispiele unten verwenden Modellsignatur-Ableitungen.

Wenn Sie zum Zeitpunkt der Protokollierung lieber selbst eine Modell-Signatur explizit definieren möchten, finden Sie Informationen dazu in MLflow-Dokumentation – So geht's: Modelle mit Signaturen protokollieren.

Code-basierte Protokollierung mit LangChain

Die folgenden Anweisungen und codebeispiele zeigen Ihnen, wie Sie einen Agent mit LangChain protokollieren.

  1. Erstellen Sie ein Notizbuch oder eine Python-Datei mit Ihrem Code. In diesem Beispiel wird das Notizbuch oder die Datei agent.pybenannt. Das Notizbuch oder die Datei muss einen LangChain-Agent enthalten, der hier als lc_agentbezeichnet wird.

  2. Schließen Sie mlflow.models.set_model(lc_agent) in das Notizbuch oder die Datei ein.

  3. Erstellen Sie ein neues Notizbuch, das als Treibernotizbuch dienen soll (in diesem Beispiel driver.py genannt).

  4. Verwenden Sie im Treibernotizbuch den folgenden Code, um agent.py auszuführen und die Ergebnisse in einem MLflow-Modell zu protokollieren:

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

    Der resources-Parameter deklariert databricks-verwaltete Ressourcen, die erforderlich sind, um den Agent zu bedienen, z. B. einen Vektorsuchindex oder einen Endpunkt, der einem Foundation-Modell dient. Weitere Informationen finden Sie unter Implementierung der automatischen Authentifizierungs-Pass-Through.

  5. Bereitstellen des Modells. Siehe Bereitstellen eines Agents für generative KI-Anwendungen.

  6. Wenn die Bereitstellungsumgebung geladen wird, agent.py wird sie ausgeführt.

  7. Wenn eine Dienstanforderung erhalten wird, wird lc_agent.invoke(...) aufgerufen.


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)

Codebasierte Protokollierung mit PyFunc

Die folgenden Anweisungen und Codebeispiele zeigen Ihnen, wie Sie einen Agent mit PyFunc protokollieren.

  1. Erstellen Sie ein Notizbuch oder eine Python-Datei mit Ihrem Code. In diesem Beispiel wird das Notizbuch oder die Datei agent.pybenannt. Das Notizbuch oder die Datei muss eine PyFunc-Klasse mit dem Namen PyFuncClassenthalten.

  2. Fügen Sie mlflow.models.set_model(PyFuncClass) zum Notizbuch oder zur Datei hinzu.

  3. Erstellen Sie ein neues Notizbuch, das als Treibernotizbuch dienen soll (in diesem Beispiel driver.py genannt).

  4. Verwenden Sie im Treibernotizbuch den folgenden Code, um agent.py auszuführen und log_model() zu verwenden, um die Ergebnisse in einem MLflow-Modell zu protokollieren.

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

    Der resources-Parameter deklariert databricks-verwaltete Ressourcen, die erforderlich sind, um den Agent zu bedienen, z. B. einen Vektorsuchindex oder einen Endpunkt, der einem Foundation-Modell dient. Weitere Informationen finden Sie unter Implementierung der automatischen Authentifizierungs-Pass-Through.

  5. Bereitstellen des Modells. Siehe Bereitstellen eines Agents für generative KI-Anwendungen.

  6. Wenn die Bereitstellungsumgebung geladen wird, agent.py wird sie ausgeführt.

  7. Wenn eine Dienstanforderung erhalten wird, wird PyFuncClass.predict(...) aufgerufen.

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)

Authentifizierung für Databricks-Ressourcen

KI-Agents müssen sich häufig bei anderen Ressourcen authentifizieren, um Aufgaben auszuführen. Beispielsweise muss ein bereitgestellter Agent möglicherweise auf einen Vektorsuchindex zugreifen, um unstrukturierte Daten abzufragen, oder auf die Aufforderungsregistrierung zugreifen, um dynamische Eingabeaufforderungen zu laden.

Die automatische Authentifizierungsdurchreichung und die Authentifizierung im Auftrag erfordern eine Konfiguration während der Protokollierung des Agents.

Registrieren des Agents im Unity-Katalog

Bevor Sie den Agent bereitstellen, müssen Sie den Agent im Unity-Katalog registrieren. Das Registrieren des Agents packt ihn als Modell in Unity Catalog. Daher können Sie Unity-Katalogberechtigungen für die Autorisierung für Ressourcen im Agent verwenden.

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)

Siehe mlflow.register_model().

Nächste Schritte