Rejestrowanie i rejestrowanie agentów sztucznej inteligencji
Ważne
Ta funkcja jest dostępna w publicznej wersji zapoznawczej.
Rejestrowanie agentów sztucznej inteligencji przy użyciu struktury agenta Mozaika AI. Rejestrowanie agenta jest podstawą procesu programowania. Rejestrowanie przechwytuje "punkt w czasie" kodu i konfiguracji agenta, dzięki czemu można ocenić jakość konfiguracji.
Wymagania
Przed zalogowaniem utwórz agenta sztucznej inteligencji.
Rejestrowanie oparte na kodzie a rejestrowanie oparte na serializacji
Możesz użyć rejestrowania MLflow opartego na kodzie lub rejestrowania opartego na serializacji MLflow. Usługa Databricks zaleca używanie rejestrowania opartego na kodzie.
Rejestrowanie MLflow oparte na kodzie: Kod agenta jest zapisywany jako plik Pythona. Środowisko języka Python jest przechwytywane jako lista pakietów. Po wdrożeniu agenta środowisko języka Python zostanie przywrócone, a kod agenta zostanie wykonany w celu załadowania agenta do pamięci, aby można go było wywołać po wywołaniu punktu końcowego.
logowanie oparte na serializacji MLflow: kod agenta i bieżący stan w środowisku języka Python są serializowane na dysk, często używając bibliotek, takich jak pickle
lub joblib
. Po wdrożeniu agenta środowisko języka Python zostanie przywrócone, a serializowany obiekt zostanie załadowany do pamięci, aby można go było wywołać po wywołaniu punktu końcowego.
W tabeli przedstawiono zalety i wady każdej metody.
Method | Zalety | Wady |
---|---|---|
Rejestrowanie MLflow oparte na kodzie | — Pozwala przezwyciężyć nieodłączne ograniczenia serializacji, które nie są obsługiwane przez wiele popularnych bibliotek GenAI. — Zapisuje kopię oryginalnego kodu do późniejszego odwołania. — Nie trzeba restrukturyzacji kodu w pojedynczy obiekt, który można serializować. |
log_model(...) muszą być wywoływane z innego notesu niż kod agenta (nazywany notesem sterownika). |
Rejestrowanie MLflow oparte na serializacji |
log_model(...) można wywołać z tego samego notesu, w którym zdefiniowany jest model. |
- Oryginalny kod jest niedostępny. — Wszystkie biblioteki i obiekty używane w agencie muszą obsługiwać serializacji. |
W przypadku rejestrowania opartego na kodzie, kod logujący agenta musi znajdować się w osobnym notesie niż kod agenta. Ten notes jest nazywany notesem sterownika. Przykładowy notes można znaleźć w temacie Przykładowe notesy.
Wnioskowanie podpisu modelu podczas rejestrowania
Aby zarejestrować i wdrożyć agenta, należy zarejestrować go przy użyciusygnatury modelu MLflow
Databricks zaleca używanie możliwości wnioskowania sygnatury modelu MLflow w celu automatycznego określenia podpisu agenta, poprzez podanie przykładu danych wejściowych. Takie podejście jest wygodniejsze niż ręczne definiowanie podpisu.
Poniższe przykłady LangChain i PyFunc wykorzystują inferencję sygnatury modelu.
Jeśli wolisz jawnie zdefiniować podpis modelu w czasie rejestrowania, zobacz dokumentacji platformy MLflow — jak rejestrować modele z podpisami.
Rejestrowanie oparte na kodzie za pomocą usługi LangChain
Instrukcje i przykład kodu w tej sekcji pokazują, jak zarejestrować agenta za pomocą biblioteki LangChain.
Utwórz notes lub plik w języku Python przy użyciu kodu. W tym przykładzie notes lub plik ma nazwę
agent.py
. Notatnik lub plik musi zawierać agenta LangChain, określanego tutaj jakolc_agent
.Uwzględnij mlflow.models.set_model (lc_agent) w notesie lub pliku.
Utwórz nowy notes, który będzie służył jako notes sterownika (nazywany
driver.py
w tym przykładzie).W notesie sterownika użyj następującego kodu, aby uruchomić
agent.py
i zarejestrować wyniki w modelu MLflow:mlflow.langchain.log_model(lc_model="/path/to/agent.py", resources=list_of_databricks_resources)
Parametr
resources
deklaruje zasoby zarządzane przez usługę Databricks potrzebne do obsługi agenta, takie jak indeks wyszukiwania wektorowego lub obsługujący punkt końcowy obsługujący model podstawowy. Aby uzyskać więcej informacji, zobacz Określanie zasobów na potrzeby przekazywania automatycznego uwierzytelniania.Wdróż model. Zobacz Wdrażanie agenta na potrzeby generowania aplikacji sztucznej inteligencji.
Po załadowaniu
agent.py
środowiska obsługującego jest wykonywane.Gdy pojawia się żądanie obsługi,
lc_agent.invoke(...)
jest wywoływane.
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 your 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)
rejestrowanie oparte na kodzie za pomocą funkcji PyFunc
Instrukcje i przykład kodu w tej sekcji pokazują, jak zarejestrować agenta za pomocą funkcji PyFunc.
Utwórz notes lub plik w języku Python przy użyciu kodu. W tym przykładzie notes lub plik ma nazwę
agent.py
. Notatnik lub plik musi zawierać klasę PyFunc, nazywanąPyFuncClass
.Dołącz
mlflow.models.set_model(PyFuncClass)
do notesu lub pliku.Utwórz nowy notes, który będzie służył jako notes sterownika (nazywany
driver.py
w tym przykładzie).W notesie sterownika użyj następującego kodu, aby uruchomić
agent.py
i zarejestrować wyniki w modelu MLflow:mlflow.pyfunc.log_model(python_model="/path/to/agent.py", resources=list_of_databricks_resources)
Parametr
resources
deklaruje zasoby zarządzane przez usługę Databricks potrzebne do obsługi agenta, takie jak indeks wyszukiwania wektorowego lub obsługujący punkt końcowy obsługujący model podstawowy. Aby uzyskać więcej informacji, zobacz Określanie zasobów na potrzeby przekazywania automatycznego uwierzytelniania.Wdróż model. Zobacz Wdrażanie agenta na potrzeby generowania aplikacji sztucznej inteligencji.
Po załadowaniu
agent.py
środowiska obsługującego jest wykonywane.Gdy pojawia się żądanie obsługi,
PyFuncClass.predict(...)
jest wywoływane.
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)
Specyfikuj zasoby do automatycznego przekazywania uwierzytelniania
Agenci sztucznej inteligencji często muszą uwierzytelniać się w innych zasobach, aby wykonywać zadania. Na przykład agent może potrzebować dostępu do indeksu wyszukiwania wektorowego w celu wykonywania zapytań dotyczących danych bez struktury.
Zgodnie z opisem w artykule Authentication for dependent resources, Model Serving obsługuje uwierzytelnianie zarówno w zasobach zarządzanych przez Databricks, jak i zasobach zewnętrznych podczas wdrażania agenta.
W przypadku najbardziej typowych typów zasobów usługa Databricks obsługuje i zaleca z góry deklarowanie zależności zasobów dla agenta podczas logowania. To umożliwia automatyczne przekazywanie uwierzytelniania podczas wdrażania agenta — platforma Databricks automatycznie przydziela, aktualizuje i zarządza krótkotrwałymi poświadczeniami, aby bezpiecznie uzyskać dostęp do tych zależności zasobów z punktu końcowego agenta.
Aby włączyć automatyczne przekazywanie uwierzytelniania, określ zasoby zależne przy użyciu parametru resources
API log_model(), jak pokazano w poniższym kodzie.
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"),
]
)
Usługa Databricks zaleca ręczne określenie resources
dla wszystkich wersji agentów.
Uwaga
Jeśli nie określisz zasobów podczas rejestrowania agentów LangChain przy użyciu mlflow.langchain.log_model(...)
, narzędzie MLflow wykonuje najlepsze wysiłki podczas automatycznego wnioskowania zasobów. Może to jednak nie przechwytywać wszystkich zależności, co powoduje błędy autoryzacji podczas obsługi lub wykonywania zapytań dotyczących agenta.
W poniższej tabeli wymieniono zasoby usługi Databricks, które obsługują automatyczne przekazywanie uwierzytelniania, oraz minimalną wersję mlflow
wymaganą do logowania zasobu.
Typ zasobu | Minimalna wersja mlflow wymagana do zarejestrowania zasobu |
---|---|
Indeks wyszukiwania wektorowego | Wymaga mlflow 2.13.1 lub wyższej |
Punkt końcowy obsługujący model | Wymaga mlflow 2.13.1 lub nowszej |
SQL Warehouse | Wymaga mlflow 2.16.1 lub nowszego |
Unity Catalog, funkcja | Wymaga mlflow 2.16.1 lub nowszy |
Przestrzeń Genie | Wymaga mlflow 2.17.1 lub nowszej |
Tabela katalogu Unity | Wymaga mlflow 2.18.0 lub nowszego |
Zarejestrować agenta w Unity Catalog
Przed wdrożeniem agenta należy go zarejestrować w Unity Catalog. Podczas rejestrowania agenta, jest on pakietowany jako model w Katalogu Unity, i można użyć uprawnień Katalogu Unity do autoryzacji zasobów w agencie.
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)
Następne kroki
- Dodawanie śladów do agenta sztucznej inteligencji.
- Wdrażanie agenta sztucznej inteligencji.