Özel kod aracısının hatalarını ayıklama

Bu sayfa, Azure Databricks üzerinde dağıtılan özel kod aracılarında karşılaşılan yaygın sorunlarda nasıl hata ayıklanacağını ele alır.

Şuraya gidin:

Bu sayfadaki hata ayıklama bölümlerinin çoğu Databricks Uygulamalarına dağıtılan aracılar için geçerlidir. Ancak, sekme seçicilerini kullanarak Model Sunma 'da (eski) dağıtılan aracıların hata ayıklama bilgilerini de bulabilirsiniz.

En iyi yöntemleri kullanarak aracı oluşturma

Aracı oluştururken aşağıdaki en iyi yöntemleri kullanın:

  • MLflow izlemeyi etkinleştirme: Yapay zeka aracısı yazma ve databricks uygulamalarına dağıtma konusunda en iyi yöntemleri izleyin. Aracılarınızın hata ayıklamasını kolaylaştırmak için MLflow izleme otomatik kaydetmeyi etkinleştirin.
  • Belge araçlarını açıkça tanımlayın: Araç ve parametre açıklamalarını net bir şekilde belirtmek, ajanınızın araçlarınızı anlamasını ve bunları uygun şekilde kullanmasını sağlar. Bkz Açık belgelerle araç çağırmayı iyileştirin.
  • LLM çağrılarına zaman aşımları ve belirteç sınırları ekleme: Uzun süre çalışan adımlardan kaynaklanan gecikmeleri önlemek için kodunuzdaki LLM çağrılarına zaman aşımları ve belirteç sınırları ekleyin.
    • Aracınız Bir Azure Databricks LLM sunum uç noktasını sorgulamak için OpenAI istemcisini kullanıyorsa, hizmet veren uç nokta çağrılarında gerektiğinde özel zaman aşımları ayarlayın.
  • Dağıtımdan önce yapılandırmayı doğrulama: YAML yapılandırma sorunlarını erken yakalamak için dağıtmadan önce çalıştırın databricks bundle validate . Bu, eşleşmeyen kaynak başvurularını, geçersiz izinleri ve söz dizimi hatalarını tanımlamaya yardımcı olur.
  • Önce yerel olarak test edin: Dağıtmadan önce sorunları yakalamak için yerel geliştirmeyi kullanın. Aracı sunucunuzu yerel olarak başlatın, örnek isteklerle test edin ve Databricks Uygulamalarına dağıtmadan önce MLflow izlemelerinin doğru göründüğünü doğrulayın.

Yerel geliştirme sorunlarının hatalarını ayıklama

Dağıtımdan önce sorunları belirlemek için aracınızı yerel olarak test edin.

Aracınızı yerel olarak çalıştırmadan önce ortamınızın doğru yapılandırıldığını doğrulayın:

  1. Databricks CLI sürümünü denetleyin: 0.283.0 veya sonraki bir sürüme sahip olduğunuzu doğrulamak için komutunu çalıştırın databricks -v .

  2. CLI profillerini doğrulama: Yapılandırılan kimlik doğrulama profillerini görmek için komutunu çalıştırın databricks auth profiles .

  3. Ortam yapılandırmasını doğrulama: Dosyanızın, cli profilinizi .env dahil etmek için biçimini MLFLOW_TRACKING_URI kullanması gereken gerekli değişkenleri( özellikledatabricks://PROFILE_NAME) içerdiğini denetleyin.

Yaygın yerel geliştirme hataları

Error Cause Çözüm
The provided MLFLOW_EXPERIMENT_ID does not exist Yanlış izleme URL biçimi veya deney silindi CLI profil adınızın MLFLOW_TRACKING_URI formatını databricks://PROFILE_NAME kullandığını doğrulayın
Module not found Bağımlılıklar yüklenmemiş Bağımlılıkları yüklemek için komutunu çalıştırın uv sync
Port already in use Bağlantı noktasını kullanan başka bir işlem Farklı bir bağlantı noktası belirtmek için bayrağını kullanın --port (örn. uv run start-app --port 8001)
Yerel olarak çalışırken kimlik doğrulama hataları Ortam yapılandırılmadı Hızlı başlangıç betiğini çalıştırma veya dosyayı CLI profilinizle el ile yapılandırma .env

Ajanı yerel olarak test edin

Dağıtımdan önce aracınızı test etmek için:

  1. Aracı sunucusunu yerel olarak başlatın:

    uv run start-app
    
  2. Başka bir terminalde bir test isteği gönderin:

    curl -X POST http://localhost:8000/invocations \
      -H "Content-Type: application/json" \
      -d '{"input": [{"role": "user", "content": "hello"}]}'
    
  3. Aracınızın izlemeleri doğru şekilde günlüğe kaydetmesini doğrulamak için Azure Databricks kullanıcı arabiriminde MLflow izlemelerini görüntüleyin.

Hata ayıklama yapılandırma sorunları

ve databricks.yml içindeki app.yaml yapılandırma hataları, yaygın dağıtım hatalarının kaynaklarıdır.

Bildirim temelli Otomasyon Paketleri yapılandırmasını doğrulama

Uygulamayı dağıtmadan önce Bildirim temelli Otomasyon Paketleri yapılandırmasını doğrulayın:

databricks bundle validate

Bu komut yapılandırmanızı denetler:

  • YAML sözdizimi hataları
  • Eksik gerekli alanlar
  • Geçersiz kaynak başvuruları
  • İzin yapılandırma sorunları

Yaygın yapılandırma uyuşmazlıkları

Yapılandırma noktası Kural Hata ayıklama nasıl yapılır
valueFrom referansları app.yaml Belirli bir kaynak ile name tam olarak eşleşmelidir databricks.yml. Eşleştiklerini doğrulamak için her iki dosyada da tam dizeyi arayın
Uygulama adı Ön ek ile agent- başlamalıdır (örn. agent-data-analyst) name altındaki alanı resources.apps denetleyindatabricks.yml
Genie Temsilci Kimliği Genie URL'sinden alınan, 32 karakterlik bir onaltılık dize olmalıdır. URL yolundan ayıkla: https://workspace.cloud.databricks.com/genie/rooms/{SPACE_ID}
Unity Kataloğu işlev referansı Format catalog.schema.function_name kullanılmalıdır kullanarak işlevin var olduğunu doğrulayın databricks unity-catalog functions list
Lakebase örnek referansı Dosyada value (değilvalueFrom) kullanılmalıdır app.yaml Örnek adı, kaynak başvurusu değil, harfi harfine bir metin dizgesidir

Dağıtım sorunlarını ayıklama

Uygulamalara dağıtılan aracılar

Uygulama zaten var hatası

Uygulama zaten var hatası

Görürseniz Error: failed to create app - An app with the same name already exists, iki seçeneğiniz vardır:

Seçenek 1: Mevcut uygulamaya bağlama (önerilir)

# Get existing app configuration
databricks apps get <app-name> --output json

# Sync the configuration to your databricks.yml, then bind
databricks bundle deployment bind <bundle-name> <app-name> --auto-approve

# Deploy
databricks bundle deploy
databricks bundle run <bundle-name>

2. Seçenek: Silme ve yeniden oluşturma

databricks apps delete <app-name>
databricks bundle deploy
databricks bundle run <bundle-name>
Uygulama dağıtımdan sonra güncelleştirilmiyor

Uygulama dağıtıldıktan sonra güncelleştirilmiyor

databricks bundle deploy yalnızca dosyaları çalışma alanına yükler. Uygulamayı yeni kodla yeniden başlatmak için de komutunu çalıştırmanız databricks bundle run <bundle-name> gerekir.

Her zaman her iki komutu kullanarak dağıtın:

databricks bundle deploy && databricks bundle run <bundle-name>
Dağıtım durumunu ve günlüklerini görüntüleme

Dağıtım durumunu ve günlüklerini görüntüleme

Uygulamanızın dağıtım durumunu denetlemek için:

databricks apps get <app-name>

Uygulama günlüklerini gerçek zamanlı olarak görüntülemek için:

databricks apps logs <app-name> --follow

Model Servis Agent'leri (Eski)

Eğer aracınızı agents.deploy() kullanarak Model Sunma uç noktasına dağıttıysanız, dağıtıma özgü sorunlar için Model Sunma Hata Ayıklama kılavuzunu gözden geçirin.

Yavaş veya başarısız istekler gibi çalışma zamanı sorunlarını ayıklamak için bkz. Çalışma zamanı hatalarını ayıklama.

Çalışma zamanı hatalarını ayıklama

Uygulamalara dağıtılan aracılar

Dağıtılan aracınızla ilgili sorunları belirlemek için uygulama günlüklerini ve istek testini kullanın.

Uygulama günlüklerini analiz etme

Dağıtılan uygulamanızdan gerçek zamanlı günlükleri görüntüleyin:

databricks apps logs <app-name> --follow

Şunu arayın:

  • Kod hatalarını gösteren yığın izlemeleri
  • Kaynaklar için izin reddedildi iletileri
  • Dış hizmetlere bağlantı hataları
  • Zaman aşımı iletileri

Yaygın çalışma zamanı hataları

Error Sebep Solution
Uygulamayı sorgularken 302 yeniden yönlendirme OAuth yerine Kişisel Erişim Belirteci kullanma ile OAuth belirteci alma databricks auth token
Kullanılabilir araçları kullanmayan ajan/temsilci MCP istemcisinden döndürülmeyen araçlar MCP sunucusu URL'sinin doğru olduğundan ve kaynağın databricks.yml içinde uygun izinlere sahip olduğundan emin olun.
Akış yanıtı, yanıtın ortasında kesintiye uğruyor Bağlantı zaman aşımına uğradı CHAT_PROXY_TIMEOUT_SECONDS içindeki app.yaml ortam değişkenini artırın
"Bellek kullanılamıyor" ifadesini döndüren ajan İstekte user_id eksik İstek yüküne custom_inputs.user_id geç
200 durumuna rağmen boş veya hata yanıtları Akışı yapılan yanıtta hata oluştu Yalnızca HTTP durum kodunu değil gerçek akış içeriğini ve uygulama günlüklerini denetleyin

Model Servis Agent'leri (Eski)

Model Sunma uç noktalarına dağıtılan aracılarla ilgili sorunları belirlemek için çıkarım tablolarını ve MLflow izlemelerini kullanın.

Sorunlu istekleri tanımlama

Ajanınızı oluştururken MLflow iz otomatik kaydetmeyi etkinleştirdiyseniz, izler çıkarım tablolarına otomatik olarak kaydedilir. Yavaş veya başarısız olan aracı bileşenlerini tanımlamak için bu izlemeleri kullanın.

  1. Çalışma alanınızda , Sunum sekmesine gidin ve dağıtım adınızı seçin.
  2. Çıkarım tabloları bölümünde çıkarım tablosunun tam adını bulun. Örneğin, my-catalog.my-schema.my-table.
  3. Databricks not defterinde aşağıdakileri çalıştırın:
    %sql
    SELECT * FROM my-catalog.my-schema.my-table
    
  4. Ayrıntılı izleme bilgileri için Yanıt sütununu inceleyin.
  5. Sonuçları daraltmak için request_time, databricks_request_id veya status_code üzerinde filtreleyin.
    %sql
    SELECT * FROM my-catalog.my-schema.my-table
    WHERE status_code != 200
    

Kök neden sorunlarını analiz etme

Başarısız veya yavaş istekleri belirledikten sonra, başarısız giriş isteğine karşı aracınızı çağırmak için mlflow.models.validate_serving_input API'sini kullanın. Elde edilen iz sonucunu görüntüleyin ve başarısız yanıt üzerinde kök neden analizi gerçekleştirin.

Daha hızlı bir geliştirme döngüsü için aracı kodunuzu doğrudan güncelleştirin ve aracınızı başarısız giriş örneğine karşı çağırarak yineleyin.

Kimlik doğrulama hatalarını ayıklama

Uygulamalara dağıtılan aracılar

OAuth jetonu kimlik doğrulaması gerekiyor

OAuth jeton kimlik doğrulaması gerekli

Uygulamalara dağıtılan aracıları sorgulamak için Databricks OAuth belirteci kullanmanız gerekir. Kişisel Erişim Belirteci (PAT) kullanıldığında 302 yeniden yönlendirme hatası oluşur.

OAuth belirteci almak için:

databricks auth token

Dağıtılan uygulamanıza yönelik isteklerde belirteci kullanın:

TOKEN=$(databricks auth token | jq -r '.access_token')
curl -X POST <app-url>/invocations \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"input": [{"role": "user", "content": "hello"}]}'
Kaynak izni hataları

Kaynak izni hataları

Etmeniniz çalışma alanı kaynaklarına erişemediğinde, kaynağın databricks.yml içinde düzgün yapılandırıldığını doğrulayın. Her kaynak türü için belirli izinler gerekir:

Error Sebep Solution
Genie Aracısı'nda izin reddedildi Eksik genie_space kaynak genie_space kaynağı permission: 'CAN_RUN' ile ekle
AI Search dizini erişilebilir değil Dizin için eksik uc_securable kaynak uc_securable kaynağını securable_type: 'TABLE' ve permission: 'SELECT' ile ekleyin
Unity Kataloğu işlevi yürütme reddedildi İşlev için eksik uc_securable kaynak uc_securable kaynağını securable_type: 'FUNCTION' ve permission: 'EXECUTE' ile ekleyin
Uç nokta erişimi sunma reddedildi Eksik serving_endpoint kaynak serving_endpoint kaynağı permission: 'CAN_QUERY' ile ekle
SQL ambarı erişimi reddedildi Eksik sql_warehouse kaynak sql_warehouse kaynağı permission: 'CAN_USE' ile ekle

databricks.yml içinde örnek kaynak yapılandırması:

resources:
  apps:
    my_agent:
      name: 'agent-my-app'
      resources:
        - name: 'my_genie_space'
          genie_space:
            space_id: '01234567890abcdef01234567890abcd'
            permission: 'CAN_RUN'
        - name: 'my_vector_index'
          uc_securable:
            securable_full_name: 'catalog.schema.index_name'
            securable_type: 'TABLE'
            permission: 'SELECT'
Özel MCP sunucusu izinleri

Özel MCP sunucusu izinleri

Aracınız Databricks uygulaması olarak çalışan özel bir MCP sunucusuna bağlanıyorsa, uygulamalar henüz içinde databricks.ymlkaynak bağımlılıkları olarak desteklenmediğinden el ile izin vermelisiniz.

# Get your agent app's service principal
AGENT_SP=$(databricks apps get <agent-app-name> --output json | jq -r '.service_principal_name')

# Grant permission on the MCP server app
databricks apps update-permissions <mcp-server-app-name> \
  --json "{\"access_control_list\": [{\"service_principal_name\": \"$AGENT_SP\", \"permission_level\": \"CAN_USE\"}]}"

Model Servis Agent'leri (Eski)

Dağıtılan aracınız AI Search dizinleri veya LLM uç noktaları gibi kaynaklara erişirken kimlik doğrulama hatalarıyla karşılaşıyorsa, kimlik doğrulamasının otomatik olarak aktarılabilmesi için gerekli kaynaklarla ilişkilendirildiğini doğrulayın. Bkz. Otomatik kimlik doğrulaması geçişi.

Günlüğe kaydedilen kaynakları incelemek için not defterinde aşağıdakileri çalıştırın:

%pip install -U mlflow[databricks]==2.20.2
%restart_python

import mlflow
mlflow.set_registry_uri("databricks-uc")

# Replace with the model name and version of your deployed agent
agent_registered_model_name = ...
agent_model_version = ...

model_uri = f"models:/{agent_registered_model_name}/{agent_model_version}"
agent_info = mlflow.models.Model.load(model_uri)
print(f"Resources logged for agent model {model_uri}:", agent_info.resources)

Eksik veya yanlış kaynakları yeniden eklemek için aracı sisteme kaydedin ve yeniden dağıtın.

Kaynaklar için el ile kimlik doğrulaması kullanıyorsanız ortam değişkenlerinin doğru ayarlandığını doğrulayın. El ile yapılan ayarlar tüm otomatik kimlik doğrulama yapılandırmalarını geçersiz kılar. Bkz. El ile kimlik doğrulaması.

Bellek ve depolama sorunlarının hatalarını ayıklama

Bellek depolaması için Lakebase kullanan aracılar için aşağıdaki sorunlar yaygındır:

Error Sebep Solution
relation 'store' does not exist Bellek tabloları başlatılmadı Gerekli tabloları oluşturmak için dağıtmadan önce yerel olarak çalıştırma await store.setup()
Unable to resolve :re[LKB] instance Yanlış örnek adı veya yanlış yapılandırma LAKEBASE_INSTANCE_NAME kullanımlarının value olduğunu doğrulayın ve valueFrom içindekilerle app.yaml değerinin instance_name içindekilerle eşleştiğini kontrol edin.
permission denied for table store Eksik Lakebase izinleri database içinde databricks.yml ile bir permission: 'CAN_CONNECT_AND_CREATE' kaynağı ekleyin
Konuşmalar arasında bellek kalıcı değil İstek başına farklı user_id Her kullanıcı için tutarlı user_idcustom_inputs bir geçiş yaptığınızdan emin olun

Örnek Lakebase kaynak yapılandırması:

resources:
  apps:
    my_agent:
      resources:
        - name: 'memory_database'
          database:
            instance_name: '<lakebase-instance-name>'
            database_name: 'postgres'
            permission: 'CAN_CONNECT_AND_CREATE'

Bir aracıyı bellekle dağıtmadan önce tabloları yerel olarak başlatın:

import asyncio
from databricks_langchain import AsyncDatabricksStore

async def setup_memory():
    async with AsyncDatabricksStore(
        instance_name='your-lakebase-instance',
        embedding_endpoint='databricks-gte-large-en',
        embedding_dims=1024,
    ) as store:
        await store.setup()

asyncio.run(setup_memory())