Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ajan sunucusu, ajan kodunuzu bir hizmete dönüştüren kütüphanedir. Ajan döngüsünü HTTP sunucusunda sarar, istemcilerin ajanı çalıştırmak için çağırdığı API'yi tanımlar, istemci bağlantılarını yönetir ve bir çalışma kesintiye uğradığında ne olacağını belirler. Ajan sunucusu, ajan çalışma zamanında çalışır. Katmanların nasıl birbirine uyduğunu öğrenmek için Azure Databricks'te aracıları dağıtma sayfasına bakınız.
Yeni ajanlar için Databricks, bu sayfada açıklanan ve AgentKit'in sağladığı ajan sunucusunu önerir. Eski ajan sunucularıyla karşılaştırmak için bkz. Azure Databricks'te ajan sunucularını karşılaştır.
Requirements
- Python 3.10 ve üzeri.
- AgentKit'i de içeren
databricks-agentbrickspaketi.agentbricks initile oluşturduğunuz projeler onu bir bağımlılık olarak tanımlar.
AgentKit
AgentKit, Agent Runtime üzerinde çalışan ajanlar oluşturmak için Agent Bricks kütüphanesidir. Ajanınıza hizmet veren ajan sunucusunu ve ajan belleği, ajan oturumları, izleme ve kimlik doğrulama için istemci ve yardımcıları sağlar. Agent Bricks CLI ile oluşturduğunuz projeler varsayılan olarak AgentKit kullanır.
Agent sunucusu
AgentKit, ajan sunucusunu DurableAgentServer sınıfı aracılığıyla sağlar. Ajan sunucusu, ajan döngünüzü çağırma API'sine hizmet veren bir HTTP sunucusu içinde çalıştırır, her çalışmayı takip eder ve bir çökme veya yeniden başlatma sırasında kesilen çalışmaları kurtarır. Şunları sağlar:
- Her istek modu için tek bir API: Senkron, akış ve arka plan çağrıları, ayrıca akışın yeniden bağlanması, hepsi aynı işleyici tarafından sunulur.
- Idempotent çağrılar: İstemci tarafından oluşturulan bir çağırma kimliği, yeniden denenen bir isteğin yinelenen bir çalıştırma başlatmamasını sağlar.
- Sıralı oturumlar: Aynı oturumdaki çağrılar birer birer sırayla çalıştırılır.
- Kalıcı çalıştırma durumu: Dağıtıldığında, çalıştırma durumu, olaylar ve sonuçlar işçi yeniden başlatmalarından sonra da korunur.
- Çökme kurtarma: Sunucu kesintiye uğramış çalıştırmaları algılar ve bir ikame denemesi başlatır.
- İstek-kullanıcı yetkilendirmesi: Araçlar, talebi gönderen kullanıcının izinleriyle hareket edebilir.
- Özel uç noktalar: Ajan sunucusu bir FastAPI uygulamasıdır, bu yüzden kendi rotalarınızı ekleyebilirsiniz.
AgentKit neler içeriyor
AgentKit, databricks_agentkit Python kütüphanesidir. Şunları dışa aktarır:
| Export | Description |
|---|---|
DurableAgentServer, InvocationContext |
Ajan sunucusu ve invoke ile recovery işleyicilerinize ilettiği bağlam. |
AgentKitClient |
Ajan belleği ve ajan oturum depoları için bir istemci. Mağazaları oluşturur ve alır, mağazaların belleklerini ve oturumlarını Memory, MemoryStore, MemorySearchResult, Session, SessionStore ve SessionItem nesneleri olarak sunar. |
configure_tracing, start_trace |
Ajan için MLflow izleme kur ve bir iş birimi etrafında bir iz başlat. |
workspace_client, workspace_headers |
Doğrulamalı bir Databricks SDK WorkspaceClientoluşturun veya ajanın ortamından doğrudan HTTP çağrıları için kimlik doğrulama başlıkları alın. |
list_ai_gateway_model_services |
Ajanın Unity Gateway üzerinden çağırabileceği model hizmetlerini listeleyin. |
Kütüphane ayrıca databricks_agentkit.openai ve databricks_agentkit.langgraph içinde çerçeve yardımcıları da içerir; oluşturulan şablonlar bunları her framework'ü oturum deposuna bağlamak için kullanır. Bellek ve oturum API'leri için bkz. Ajan belleği ve Ajan oturumları.
Temsilcinizi kaydedin
Bir proje oluşturduğunuzda agentbricks init, CLI bunu sizin için yapar. Oluşturulan runtime/main.py, sunucuyu oluşturur ve şablonun invoke ve recovery işleyicilerini kaydeder; böylece yalnızca agent/ içindeki aracı kodunu düzenlersiniz. Bu bölümdeki adımları izleyerek mevcut bir aracıyı içe aktarabilir veya kendi işleyicinizi yazabilirsiniz.
Bir DurableAgentServer oluşturun ve @app.invoke ile bir asenkron çağrı işleyicisi kaydedin. İşleyici isteğin input öğesini ve çağrı bağlamını alır ve JSON serileştirilebilir bir sonuç döndürür. İlerlemeleri etkinlik olarak yayınlayın.context.emit
from databricks_agentkit import DurableAgentServer, InvocationContext
app = DurableAgentServer()
@app.invoke
async def invoke(input, context: InvocationContext) -> dict:
await context.emit({"type": "status", "message": "Looking that up"})
answer = await run_my_agent(input, session_id=context.session_id)
return {"answer": answer}
Bir çağırma işleyicisi kaydedebilirsiniz ve sunucu onsuz başlamaz. İşleyici her istek modunu sunar: istemci sonucu beklemek, olayları akış olarak iletmek veya arka planda çalıştırmak arasında seçim yapar.
Sunucuyu yerel olarak çalıştırmak için onu agentbricks dev ile başlatın.
agentbricks init ile oluşturduğunuz projelerde, Uvicorn ile sunucuyu çalıştıran bir giriş noktası ve dağıtımdan sonra aynı giriş noktasını başlatan bir app.yaml dosyası bulunur.
Çağırma bağlamı
İşleyicinin ikinci argümanı şudur InvocationContext:
| Öznitelik | Description |
|---|---|
invocation_id |
Müşterinin bu çağrı için gönderdiği ID. |
session_id |
Çağrının ait olduğu oturum ya da istemci göndermediyse None |
attempt |
Deneme numarası. İlk deneme 1 mükemmeldir. |
is_recovery |
True kurtarma yöneticisi bir değiştirme girişimi çalıştırırken. |
emit(event) |
Bir JSON etkinliğini saklar, akış istemcilerine sunar ve etkinliğin akıştaki konumunu döndürür. |
request_auth |
Aracının istek-kullanıcı yetkilendirmesi gerektirdiği durumlarda kullanılan istek-kullanıcı kimlik bilgisi çözümleyicisi. Tersi durumda None. |
Çağrı API'si
DurableAgentServer Çağırma API'sine şu adreste /api/invocationshizmet verir:
-
POST /api/invocationsbir çağrı başlatır. Varsayılan olarak, istek sonucun gelmesini bekler. Olayları Server-Sent Olaylar olarak almak içinstreamolarak ayarlayın veya hemen bir durum URL'siyle döndürmek içinbackground. -
GET /api/invocations/<id>bir çağrının durumunu ve tamamlandıktan sonra çıktısını döndürür. -
GET /api/invocations/<id>/events?after=<event-id>, kaydedilen olayları akış olarak iletir, böylece bir istemci bağlantı kesildikten sonra yeniden bağlanabilir.
İstek alanları, örnekler ve yanıt formatları için bkz. Azure Databricks'te konuşlandırılan ajanları sorgulama.
İdemponentlik
Müşteriler her çağrıda bir UUID id gönderir. Sunucu, ID'yi bir idempotency anahtarı olarak ele alırken çağrı kaydını korur: aynı isteği tekrar göndermek, ajanı yeniden çalıştırmak yerine mevcut invocation'ı döndürür. Farklı bir istek için bir kimliği yeniden kullanmak 409 hatası veriyor.
Sessions
Müşteriler, çağrıları tek bir konuşmada gruplamak için bir session_id gönderebilir. Sunucu, oturum kimliğini input öğesinden ayrı olarak saklar, bunu işleyicinize context.session_id olarak verir ve aynı oturum kimliğini paylaşan çağrıları sırayla, birer birer çalıştırır. Sunucu, çağrı kimliğinden veya girdiden oturum çıkarmaz. Oturum kimliği olmadan, bir çağrı oturumsuzdur.
Çalışma durumu
DurableAgentServer her çağrının isteğini, durumunu, kalp atışlarını, olaylarını ve sonucunu Runtime Store içinde depolar.
-
Yerel geliştirme:
agentbricks devsüreç içi bir Runtime Store kullanır. Çağırma API'si de aynı şekilde davranır, ancak süreç durduğunda çalıştırma durumu kaybolur ve sunucu kesintiye uğramış işi yeniden başlatmaz. -
Dağıtılan aracılar:
agentbricks deploy, Azure Databricks tarafından yönetilen bir Lakebase projesinde her dağıtımın Runtime Store’u için özel bir veritabanı sağlar ve yeniden dağıttığınızda bunu yeniden kullanır. Kendi Lakebase projenizi Runtime Store için kullanamazsınız ve bunu kendiniz oluşturmaz veya bağlamazsınız. Sonuçlar ve olaylar işçi yeniden başlatmalarına dayanır ve ajanın herhangi bir örneği durum ve yeniden bağlantı taleplerini karşılayabilir.agentbricks deployments deleteDağıtımla birlikte Runtime Store'u kaldırır.
Çalışma Zamanı Deposu, sunucunun yürütme durumunu tutar. Bu, ajanınızın konuşma geçmişi ve uzun süreli hafıza için kullandığı oturum ve hafıza depolarından ayrıdır.
Çökme kurtarma
Bir worker çökmesi veya yeniden başlatmasının kesintiye uğrattığı çalıştırmaları kurtarmak için, @app.recover ile bir kurtarma işleyicisi kaydedin. Dağıtılan bir sunucu, bir çalışmanın kalp atışlarının durduğunu tespit ettiğinde, mevcut bir worker düğümünde bir değiştirme girişimi başlatır ve kurtarma işleyicisini orijinal girdiyi kullanarak çağırır.
@app.recover
async def recover(input, context: InvocationContext) -> dict:
# Resume from the agent's last checkpoint in the session store,
# or replay the input if that's safe for your agent.
return await resume_my_agent(input, session_id=context.session_id)
Bir kurtarma işleyicisi kaydetmezseniz, otomatik kurtarma kapalı olur ve sunucu başlatıldığında günlüğe bir uyarı yazar.
Kurtarma şu şekilde çalışır:
- İyileşme başladığında: Her koşu denemesi her birkaç saniyede bir kalp atışı gönderir. Örneğin, worker çöktüğü, yeniden başlatıldığı veya yeniden dağıtım sırasında değiştirildiği için kalp atışları durursa, sunucu duran çalıştırmayı saniyeler içinde tespit eder ve yerine geçecek yeni bir deneme başlatır.
- Kurtarma başlamadığında: İşleyiciniz bir istisna çıkarırsa, çağrı başarısız olur ve sunucu bunu yeniden denemez. Kurtarma, kesintiye uğrayan worker'ları kapsar, ajan kodunuzdaki hataları değil.
-
Deneme sayısı: Sunucu, kurtarma denemelerinin sayısını sınırlamaz. Her değiştirme denemesi
context.attemptdeğerini bir artırır. Birkaç denemeden sonra durdurmak için,context.attemptkurtarma işleyicisini kontrol edip hata oluştur. - Manuel kurtarma: Kurtarmayı manuel olarak tetikleyemezsiniz. Aynı çağırım kimliğiyle bir isteği yeniden göndermek, yeni bir deneme başlatmak yerine mevcut çağırımı döndürür.
Kurtarma, aynı çağrı için ajan kodunuzu birden fazla kez çalıştırabilir. Kesintiye uğramış bir girişim, değiştirme girişimi başlamadan önce harici sistemleri çağrımış olabilir, bu yüzden bu çağrıları idempotent yapın.
Kullanıcı yetkilendirmesi isteği
Varsayılan olarak, ajanınızın araçları uygulamanın service principal'ının izinleriyle çalışır. Talebi gönderen kullanıcının izinleriyle bir araç çalıştırmak için, kullanıcı yetkilendirmesini agent.toml içinde bildirin:
Yönetilen bir araç için, araç girişinde
auth = "user"ayarlayın.agentbricks tools addMCP sunucuları, sandboxlar ve Genie Agentleri için komutlar varsayılan olarakauth = "user"yazar. Bunun yerine uygulamanın kimliğini kullanmak için--auth appöğesini iletin.Kod içinde yazdığınız bir araç için, gereksinimi ve Agent Bricks'in çıkaramadığı API kapsamlarını belirtin:
[auth.user] required = true additional_api_scopes = ["sql"]
Bir ajan kullanıcı yetkilendirmesi gerektirdiğinde, DurableAgentServer kullanıcının kimlik bilgilerini güvenilir Databricks Apps istek başlıklarından okur ve sadece aktif deneme için hafızada tutar. Runtime Store kimlik bilgilerini depolamaz. Handler'ınızda, kullanıcı için bir workspace istemcisi alın:context.request_auth
@app.invoke
async def invoke(input, context: InvocationContext) -> dict:
user_client = context.request_auth.client_for("user")
me = user_client.current_user.me()
return {"answer": f"Hello, {me.user_name}"}
client_for("app") uygulamanın service principal'ını kullanan bir istemci geri döndürür. Resolver deneme bittiğinde kapanır, bu yüzden istemciyi depolamak yerine işleyicinin içinde çağırın. Aracıyı yerel ortamda çalıştırdığınızda agentbricks dev, client_for("user") yerel kimlik bilgilerinizi kullanır.
Dağıtım yaptığınızda, agentbricks deploy araçlarınızın ihtiyaç duyduğu Databricks Apps kullanıcı kapsamlarını talep eder. Mevcut bir uygulamaya eksik kapsamları eklemek için --allow-user-scope-update. Bkz . Databricks uygulamasında yetkilendirmeyi yapılandırma.
İstek-kullanıcı çağrıları aynı senkron, streaming, arka plan ve yeniden bağlantı API'lerini kullanır. Sunucu, kullanıcının kimlik bilgilerini saklamadığı için, kesintiye uğramış istek-kullanıcı çağrımını kurtaramaz. Değiştirme denemesi, işleyicileriniz çalışmadan önce MCP_USER_AUTH_RECOVERY_UNSUPPORTED hatasıyla başarısız oluyor.
Özel uç noktaları ekle
DurableAgentServer bir FastAPI uygulamasıdır. Rotaları, herhangi bir FastAPI uygulamasına eklediğiniz şekilde, çağrı API'siyle birlikte ekleyin:
@app.get("/status")
async def status() -> dict:
return {"ready": True}
Çerçeve şablonları
agentbricks init İki dizin oluşturur:
-
agent/Çerçeve kodunuzu içerir: model, istemler ve araçlar. -
runtime/, çerçeveyiDurableAgentServer’e bağlayan adaptörü ve adaptörün çağrı ve kurtarma işleyicilerini kaydeden giriş noktasını içerir.
Adaptör, her çağrıyı çerçevenin ajan döngüsüne çağrıya çevirir ve framework'ün çıktısını olaylara ve bir sonuca çevirir. Her iki şablon da bir kurtarma işleyicisi kaydeder. LangGraph şablonu, oturum deposundaki son kontrol noktasından devam eder ve OpenAI Agents SDK şablonu isteği aynı oturumda yeniden yürütür. Mevcut bir ajanı eklemek için bir adaptör ve bir DurableAgentServer giriş noktası ekleyin ve agent.toml içindeki [agent] bölümünde server = "agentbricks" ayarlayın.
Azure Databricks'te aracı sunucularını karşılaştırın
Azure Databricks, üç ajan sunucusu sağlar: AgentKit ajan sunucusu ve önceki uygulama şablonlarında kullanılan iki eski ajan sunucusu.
| Agent sunucusu | Package | İstemci API'si | Dayanıklı yürütme | Tarafından kullanılır |
|---|---|---|---|---|
AgentKit (DurableAgentServer, tavsiye edilir) |
databricks_agentkit, databricks-agentbricks paketinde |
Invocation API /api/invocations: senkron, akış ve arka plan çalıştırmaları, akış yeniden bağlantısıyla |
agentbricks deploy sağlayan ve ayrıca bir kurtarma işleyicisi aracılığıyla çökme kurtarma sunan bir Çalışma Zamanı Deposu |
Agent Bricks CLI ile oluşturduğunuz projeler |
LongRunningAgentServer (eski) |
databricks_ai_bridge.long_running, databricks-ai-bridge[agent-server] paketinde |
/responses konumunda, arka plan çalıştırmaları ve akış sürdürme ile OpenAI Responses API'si |
Yapılandırdığınız bir Lakebase veritabanındaki çalıştırma durumu Bir çökme sonrası, yeni bir deneme kesilen denemenin olay günlüğü kaydından çalışmaya devam eder. |
agent-openai-advanced ve agent-langgraph-advanceduygulama şablonları |
MLflow AgentServer (eski) |
mlflow.genai.agent_server, mlflow paketinde |
/responses konumunda OpenAI Responses API'de: senkron ve akışlı çalıştırmalar |
None | Temel uygulama şablonları, örneğin agent-openai-agents-sdk |
LongRunningAgentServer, MLflow AgentServer öğesini genişletir ve her ikisi de MLflow ResponsesAgent arayüzünü uygulayan ajanlara hizmet eder. Bunlardan birini kullanan bir ajanı dağıtmak ve sürdürmek için bkz. Legacy agent sunucusunu kullanarak Databricks Apps üzerinde ajan çalıştırma. Bu sunuculardan herhangi birinde bir aracıyı sorgulamak için bkz. Azure Databricks'te dağıtılan aracıları sorgulama.
Sınırlamalar
- Mevcut bir dağıtımın ajan sunucusunu değiştiremezsiniz.
DurableAgentServerile kendi sunucunuz arasında geçiş yapmak için, istediğinizagentbricks init --serverseçeneğiyle yeni bir proje oluşturun ve bunu yeni bir ad altında dağıtın. -
agent.tomliçindekiserveralanını değiştirmek mevcut sunucu kodunuDurableAgentServer'ye dönüştürmez. - İstek-kullanıcı yetkilendirmesi için
server = "agentbricks"gereklidir.