Yapay zeka aracılarını günlüğe kaydetme ve kayıt etme (Model Sunumu)

Important

Yeni kullanım örnekleri için Databricks aracı kodu, sunucu yapılandırması ve dağıtım iş akışı üzerinde tam denetim için Databricks Uygulamalarına aracı dağıtmanızı önerir. Bkz. Bir yapay zeka aracısı yazma ve Databricks Uygulamalarında dağıtma. Mevcut bir ajanı taşımak için Model Sunumu'ndan Databricks Uygulamalarına ajan göç ettirme bölümüne bakın.

Özel Ajanları kullanarak yapay zeka ajanlarını kaydedin. Bir ajanı kaydetmek, geliştirme sürecinin temelini oluşturur. Günlük kaydı, aracının kodunun ve yapılandırmasının zamandaki "bir anlık görüntüsünü" yakalar; böylece kalitesini değerlendirebilirsiniz.

Gereksinimler

Bir yapay zeka ajanı oluşturun ve ardından günlüğe kaydedin.

Databricks, databricks-sdken son sürümünün yüklenmesini önerir.

% pip install databricks-sdk

Kod Tabanlı Günlükleme

Databricks, aracıları günlüğe kaydederken MLflow'un Koddan Modeller işlevinin kullanılmasını önerir.

Bu yaklaşımda aracının kodu python dosyası olarak, Python ortamı ise paket listesi olarak yakalanır. Aracı dağıtıldığında, Python ortamı geri yüklenir. Ardından, aracın kodu yürütülerek belleğe yüklenir. Böylelikle, uç nokta çağrıldığında aracı çağırmak mümkün olur.

Bu yaklaşımı mlflow.models.predict() gibi dağıtım öncesi doğrulama API'lerinin kullanımıyla ilişkilendirerek aracının sunum için dağıtıldığında güvenilir bir şekilde çalıştığından emin olabilirsiniz.

Kod tabanlı günlük kaydı örneğini görmek için ResponsesAgent yazma örneği defterlerine bakın.

Günlüğe kaydetme sırasında Model İmzasını Belirleme

Note

Databricks , ResponsesAgent arabirimini kullanarak bir aracı yazmanızı önerir. ResponsesAgent kullanıyorsanız bu bölümü atlayabilirsiniz; MLflow, aracınız için otomatik olarak geçerli bir imza çıkartır.

ResponsesAgent arabirimini kullanmıyorsanız, kayıt sırasında aracınızın MLflow Model İmzasını belirlemek için aşağıdaki yöntemlerden birini kullanmanız gerekir.

  1. İmzayı el ile tanımlama
  2. Sağladığınız bir giriş örneğine göre aracı imzasını otomatik olarak oluşturmak için MLflow'un Model İmzası çıkarım özelliklerini kullanın. Bu yaklaşım, imzayı el ile tanımlamaktan daha kullanışlıdır.

MLflow modeli imzası, aracının AI Playground ve inceleme uygulaması gibi aşağı akış araçlarıyla doğru etkileşimde olduğundan emin olmak için girişleri ve çıkışları doğrular. Ayrıca aracıyı etkili bir şekilde kullanma konusunda diğer uygulamalara yol gösterir.

Aşağıdaki LangChain ve PyFunc örnekleri Model İmzası çıkarımını kullanır.

Model İmzasını günlükleme sırasında açıkça tanımlamayı tercih ediyorsanız bakınız: MLflow belgeleri - İmzalı modelleri nasıl günlüğe kaydedeceğiniz.

LangChain ile kod tabanlı günlük kaydı

Aşağıdaki yönergeler ve kod örneği, LangChain ile bir aracıyı nasıl kaydedeceğinizi gösterir.

  1. Kodunuzla bir not defteri veya Python dosyası oluşturun. Bu örnekte, not defteri veya dosya agent.pyolarak adlandırılır. Not defteri veya dosya, burada lc_agentolarak adlandırılan bir LangChain aracısı içermelidir.

  2. not defterine veya dosyaya mlflow.models.set_model(lc_agent) ekleyin.

  3. Sürücü not defteri olarak görev yapmak için yeni bir not defteri oluşturun (bu örnekte adı verilir driver.py ).

  4. Sürücü defterinde, agent.py'ı çalıştırmak ve sonuçları bir MLflow modeline kaydetmek için aşağıdaki kodu kullanın:

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

    resources parametresi, aracıya hizmet vermek için gereken Databricks tarafından yönetilen kaynakları bildirir. Örneğin, yapay zeka Arama dizini veya temel modele hizmet veren bir hizmet uç noktası. Daha fazla bilgi için bkz. Otomatik kimlik doğrulama geçişi uygulama.

  5. Modeli dağıtın. Bkz. Oluşturucu yapay zeka uygulamaları (Model Sunma) için aracı dağıtma.

  6. Sunum ortamı yüklendiğinde, agent.py çalıştırılır.

  7. lc_agent.invoke(...) bir sunum isteği geldiğinde çağrılır.


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 ile kod tabanlı loglama

Aşağıdaki yönergeler ve kod örneği, PyFunc ile bir aracıyı loglamayı nasıl yapacağınızı gösterir.

  1. Kodunuzla bir not defteri veya Python dosyası oluşturun. Bu örnekte, not defteri veya dosya agent.pyolarak adlandırılır. Not defteri veya dosya PyFuncClassadlı bir PyFunc sınıfı içermelidir.

  2. Not defterine veya dosyaya ekleyin mlflow.models.set_model(PyFuncClass) .

  3. Sürücü not defteri olarak görev yapmak için yeni bir not defteri oluşturun (bu örnekte adı verilir driver.py ).

  4. Sürücü not defterinde, agent.py kodunu çalıştırmak ve sonuçları bir MLflow modeline kaydetmek için log_model() kullanın.

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

    resources parametresi, aracıya hizmet vermek için gereken Databricks tarafından yönetilen kaynakları bildirir. Örneğin, yapay zeka Arama dizini veya temel modele hizmet veren bir hizmet uç noktası. Daha fazla bilgi için bkz. Otomatik kimlik doğrulama geçişi uygulama.

  5. Modeli dağıtın. Bkz. Oluşturucu yapay zeka uygulamaları (Model Sunma) için aracı dağıtma.

  6. Sunum ortamı yüklendiğinde, agent.py çalıştırılır.

  7. PyFuncClass.predict(...) bir sunum isteği geldiğinde çağrılır.

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 kaynakları için kimlik doğrulaması

Yapay zeka aracılarının görevleri tamamlamak için genellikle diğer kaynaklarda kimlik doğrulaması gerçekleştirmesi gerekir. Örneğin, dağıtılan bir aracının yapılandırılmamış verileri sorgulamak için bir AI Search dizinine erişmesi veya dinamik istemleri yüklemek için Prompt Registry'ye erişmesi gerekebilir.

Otomatik kimlik doğrulama geçişi ve adına kimlik doğrulaması, ajan günlükleme sırasında yapılandırma gerektirir.

Aracıyı Unity Kataloğu'na kaydetme

Aracıyı dağıtmadan önce, aracıyı Unity Kataloğu'na kaydetmeniz gerekir. Bir ajanı kaydetmek, onun Unity Kataloğu'nda model olarak paketlenmesini sağlar. Sonuç olarak, aracıdaki kaynaklar için yetkilendirme için Unity Kataloğu izinlerini kullanabilirsiniz.

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)

Bkz. mlflow.register_model().

Ek kaynaklar