Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az agent server az a könyvtár, amely az ügynökkódot szolgáltatássá alakítja. Az ügynök ciklusát egy HTTP-szerverbe csomagolja, meghatározza az API-t, amelyet az ügyfelek az ügynök futtatásához hívnak, kezeli az ügyfélkapcsolatokat, és meghatározza, mi történik, ha egy futást megszakítanak. Az ügynökszerver az ügynök-futtatókörnyezeten fut. A rétegek összeilleszkedésének megismeréséhez lásd: Ügynökök üzembe helyezése az Azure Databricksben.
Új ügynökök esetén a Databricks azt az agentkiszolgálót ajánlja, amelyet az AgentKit biztosít, és amelyet ez az oldal is leír. Az örökölt ügynökkiszolgálókkal való összehasonlításhoz lásd: Ügynökkiszolgálók összehasonlítása az Azure Databricksben.
Requirements
- Python 3.10 és annál magasabb.
- A
databricks-agentbrickscsomag, beleértve az AgentKitet. Azok a projektek, amelyeket a(z)agentbricks inithasználatával hozol létre, függőségként deklarálják azt.
AgentKit
Az AgentKit az Agent Bricks könyvtára, amely az Agent Runtime-on futó ügynökök építésére szolgál. Biztosítja az ügynökkiszolgálót, amely kiszolgálja az ügynököt, valamint a klienseket és segítőket az ügynök memóriájához, ügynök-munkamenetekhez, nyomon követéshez és hitelesítéshez. Az Agent Bricks CLI-val létrehozott projektek alapértelmezetten az AgentKit-et használják.
agentszerver
Az AgentKit az ügynök szerverét az DurableAgentServer osztályon keresztül biztosítja. Az agent server HTTP-szerverben futtatja az ügynök hurkot, amely az invocation API-t szolgálja, nyomon követi az egyes futásokat, és helyreállítja azokat a futásokat, amelyeket egy összeomlás vagy újraindítás megszakít. A következő lehetőségeket biztosítja:
- Minden kérésmódhoz egy API: szinkron, streaminges és háttérhívások, valamint stream újrakapcsolódás, amelyeket ugyanaz a kezelő szolgál ki.
- Idempotens hívások: Egy kliens által generált hívásazonosító biztosítja, hogy egy újrapróbált kérés ne indítson el duplikált végrehajtást.
- Rendezett munkamenetek: A hívások ugyanabban a munkamenetben egyenként, sorrendben futnak.
- Állandó futási állapot: Telepítéskor a futtatás státusza, az események és az eredmények túlélik a feldolgozó újraindításait.
- Helyreállítás összeomlás után: A szerver észleli a megszakított futásokat, és helyreállítási kísérletet indít.
- A kérést küldő felhasználó jogosultsága: Az eszközök a kérést küldő felhasználó jogosultságaival működhetnek.
- Egyedi végpontok: Az ügynökszerver egy FastAPI-alkalmazás, így saját végpontokat adhatsz hozzá.
Mit tartalmaz az AgentKit.
Az AgentKit a databricks_agentkit Python könyvtár. Exportálja a következőket:
| Export | Description |
|---|---|
DurableAgentServer, InvocationContext |
Az ügynök szerver és a kontextus, amelyet az invoke és recovery kezelőinek továbbít. |
AgentKitClient |
Kliens ügynökmemória- és ügynöksession-tárolókhoz. Létrehoz és lekér tárolókat, és a tárolók memóriáit és munkameneteit Memory, MemoryStore, MemorySearchResult, SessionStore, Session és SessionItem objektumokként elérhetővé teszi. |
configure_tracing, start_trace |
Állítsd be az MLflow követést az agent számára, és indítsd el a nyomkövetést egy munkaegység körül. |
workspace_client, workspace_headers |
Hozz létre egy hitelesített Databricks SDK-t WorkspaceClient, vagy szerezz hitelesítési fejléceket közvetlen HTTP hívásokhoz az ügynök környezetéből. |
list_ai_gateway_model_services |
Sorold fel azokat a modellszolgáltatásokat, amelyeket az ügynök a Unity Gateway-en keresztül hívhat. |
A könyvtár a databricks_agentkit.langgraph és databricks_agentkit.openai keretrendszer-segítőit is tartalmazza, amelyeket a generált sablonok arra használnak, hogy az egyes keretrendszereket a munkamenettárhoz kapcsolják. A memória- és munkamenet-API-król lásd: Ügynök memória és Ügynökmunkamenetek.
Regisztrálja az agentet
Ha a(z) agentbricks init használatával hozol létre egy projektet, a CLI ezt megteszi helyetted. A generált runtime/main.py létrehozza a szervert, és regisztrálja a sablon meghívási és helyreállítási kezelőit, így csak az ügynökkódot szerkeszted a(z) agent/ fájlban. Kövesd az ebben a szakaszban szereplő lépéseket, hogy meglévő agentet hozzáadj, vagy saját handlert írj.
Hozz létre egy DurableAgentServer-t, és regisztrálj egy aszinkron invocation handler-t @app.invoke-vel. A kezelő megkapja a kérés input-ját és a meghívási kontextust, majd visszaadja a JSON-szerializálható eredményt. Tedd közzé az előrehaladást eseményként.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}
Regisztrálhatsz egy invocation handlert, és a szerver nem indul el nélküle. A kezelő minden kérési módot kiszolgál: az ügyfél eldönti, hogy megvárja-e az eredményt, streameli-e az eseményeket, vagy a háttérben futtatja.
A szerver helyi futtatásához indítsd el a(z) agentbricks dev paranccsal. Azok a projektek, amelyeket a(z) agentbricks init használatával hoz létre, tartalmaznak egy belépőpontot, amely az Uvicornnal futtatja a szervert, valamint egy app.yaml fájlt, amely ugyanazt a belépési pontot indítja el a telepítés után.
Meghívási környezet
A kezelő második argumentuma egy InvocationContext:
| Attribute | Description |
|---|---|
invocation_id |
Az azonosító, amit az ügyfél küldött ehhez a meghíváshoz. |
session_id |
Az a munkamenet, amelyhez az invocation tartozik, vagy None, ha az ügyfél nem küldött egyet. |
attempt |
A próbálkozás száma. Az első próbálkozás a következő: 1 |
is_recovery |
True amikor a helyreállítási kezelő cserekísérletet futtat |
emit(event) |
Tárolja a JSON eseményt, továbbítja a streaming klienseknek, és visszaadja az esemény helyét a streamben. |
request_auth |
A kérésfelhasználói hitelesítés feloldó modulja, amikor az ügynök kérésfelhasználói hitelesítést igényel. Ellenkező esetben None. |
Invocation API
DurableAgentServer a(z) /api/invocations helyen szolgálja ki a meghívási API-t:
-
POST /api/invocationsindít egy invokációt. Alapértelmezés szerint a kérés vár az eredményre. Állítsdstreamúgy, hogy az eseményeket Server-Sent Eventsként fogadja, vagybackgroundazonnal visszatérjen egy állapot-URL-lel. -
GET /api/invocations/<id>visszaadja egy hívás állapotát, és miután a hívás befejeződött, a kimenetét is. -
GET /api/invocations/<id>/events?after=<event-id>közvetíti a tárolt eseményeket, így a kliens újra csatlakozhat egy megszakadt kapcsolat után.
A kérésmezőket, példákat és válaszformátumokat lásd itt: Az Azure Databricksben üzembe helyezett lekérdezési ügynökök.
Idempotencia
Az ügyfelek minden invokációval küldenek egy UUID-t id. A szerver az ID-t idempotenciakulcsként kezeli, miközben megőrzi a hívási rekordot: ugyanazon kérés újbóli elküldése a meglévő hívási rekordot adja vissza ahelyett, hogy újra futtatná az ügynököt. Egy azonosító másik kéréshez való újrafelhasználása 409 hibát ad vissza.
Sessions
Az ügyfelek küldhetnek egy session_id elemet, hogy az invokációkat egy beszélgetésbe csoportosítsák. A szerver a session ID-t a(z) input elemétől külön tárolja, átadja azt a kezelőnek context.session_id néven, és az azonos session ID-val rendelkező invokációkat sorrendben, egyszerre egyet futtatja. A szerver nem következteti a munkamenetet sem az invocation ID-ből, sem a bemenetből. Sessionazonosító nélkül a meghívás munkamenet nélküli.
Futási állapot
DurableAgentServer minden egyes invocation kérését, állapotát, heartbeatjeit, eseményeit és eredményét a Runtime Store-ban tárolja.
-
Helyi fejlesztés:
agentbricks devfolyamaton belüli Runtime Store-t használ. Az invocation API ugyanígy viselkedik, de a futtatási állapot elveszik, amikor a folyamat leáll, és a szerver nem indítja újra a megszakított munkát. -
Telepített ügynökök:
agentbricks deploydedikált adatbázist biztosít minden telepítés Runtime Store-jához egy Azure Databricks által kezelt Lakebase projektben, és újrahasznosítja azt újratelepítéskor. Nem használhatod a saját Lakebase projektedet a Runtime Store-hoz, és nem te hozod létre vagy csatolod magad. Az eredmények és események túlélik a worker újraindításait, és az ügynök bármely példánya kezelheti a státusz- és újracsatlakozási kéréseket.agentbricks deployments deleteeltávolítja a Runtime Store-t a telepítéssel együtt.
A Runtime Store tárolja a szerver végrehajtási állapotát. Ez különálló a beszélgetési előzményekhez és hosszú távú memóriához használt munkamenet- és memóriatárolóktól.
Összeomlás utáni helyreállítás
Ahhoz, hogy helyreállítsuk azokat a futásokat, amelyeket egy feldolgozó összeomlása vagy újraindítása megszakít, regisztráljunk egy helyreállítási kezelőt a @app.recover-val. Amikor egy telepített szerver észleli, hogy a futás heartbeatjei leálltak, egy elérhető workerön helyettesítési kísérletet indít, és az eredeti bemenettel hívja a helyreállítási kezelőt.
@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)
Ha nem regisztrálsz egy helyreállítási kezelőt, az automatikus helyreállítás ki van kapcsolva, és a szerver figyelmeztetést naplóz az indításkor.
A helyreállítás a következőképpen működik:
- Amikor a helyreállítás elkezdődik: Minden futó kísérlet néhány másodpercenként életjelet küld. Ha a heartbeat-ek leállnak, például mert a worker összeomlik, újraindul vagy lecserélik egy újratelepítés során, a szerver másodperceken belül észleli a beragadt futást, és helyettesítési kísérletet indít.
- Amikor a helyreállítás nem indul el: Ha a kezelő kivételt jelez, a hívás sikertelen lesz, és a szerver nem próbálja újra. A helyreállítás a megszakított workerfolyamatokat fedi, nem az agent kódjában lévő hibákat.
-
A próbálkozások száma: A szerver nem korlátozza a helyreállítási kísérletek számát. Minden cserekísérlet eggyel növeli a(z)
context.attemptértékét. A folyamat több próbálkozás utáni leállításához ellenőrizd a(z)context.attemptelemet a helyreállításkezelőben, és jelezz hibát. - Kézi helyreállítás: Nem lehet manuálisan elindítani a helyreállítást. Ha ugyanazzal az invokációazonosítóval újra küld egy kérést, akkor a meglévő invokáció jelenik meg, ahelyett, hogy új próbálkozás indulna.
A helyreállítás több alkalommal is futtathatja az ügynök kódját ugyanazon hívás esetén. Egy megszakított próbálkozás már hívhatott külső rendszereket, mielőtt a pótlólagos próbálkozás elkezdődik, ezért tedd ezeket a hívásokat idempotenssé.
Felhasználó-hitelesítés kérése
Alapértelmezés szerint az ügynök eszközei az alkalmazás szolgáltatásnevének jogosultságaival futnak. Egy olyan eszköz futtatásához, amely a kérést küldő felhasználó jogosultságaival rendelkezik, adja meg a felhasználói jogosultságot a következőkben: agent.toml
Kezelt eszköz esetén állítsd be a(z)
auth = "user"elemet az eszközbejegyzésen. Azagentbricks tools addMCP-szerverek, sandboxok és Genie Agents parancsai alapértelmezés szerint a(z)auth = "user"fájlba írnak. Adja át a(z)--auth appértéket, hogy helyette az alkalmazás azonosítóját használja.Egy kódban írt eszköznél adja meg a követelményt és azokat az API hatótávokat, amelyeket az Agent Bricks nem tud kikövetkeztetni:
[auth.user] required = true additional_api_scopes = ["sql"]
Amikor egy ügynök felhasználói hitelesítést igényel, DurableAgentServer a felhasználó hitelesítési adatait a megbízható Databricks Apps kérésfejléceiből olvassa ki, és csak az aktív próbálkozás idejére tartja a memóriában. A Runtime Store nem tárolja a hitelesítő adatokat. A kezelőben szerezz egy workspace klienst a felhasználó számára a(z) context.request_auth használatával:
@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") egy klienst ad vissza, amely az alkalmazás szolgáltatásnevét használja. A resolver akkor zárul le, amikor a kísérlet véget ér, ezért hívd meg a kezelőn belül a kliens tárolása helyett. Amikor helyben futtatod az ügynököt agentbricks dev, client_for("user") a helyi hitelesítő adataidat használja.
Telepítéskor a Databricks Apps kéri azokat a felhasználói hatóköröket agentbricks deploy, amelyekre az eszközeidnek szükségük van. Ha hiányzó hatóköröket szeretnél hozzáadni egy meglévő alkalmazáshoz, add meg a(z) --allow-user-scope-update paramétert. Lásd: Engedélyezés konfigurálása Databricks-alkalmazásokban.
A Request-user invokációk ugyanazokat a szinkron, streaming, háttér- és újrakapcsolási API-kat használják. Mivel a szerver nem tárolja a felhasználó hitelesítő adatait, nem tud helyreállítani egy megszakított kérés–felhasználó meghívást. A cserekísérlet hibával MCP_USER_AUTH_RECOVERY_UNSUPPORTED megbukik, mielőtt a kezelőid lefutnának.
Egyedi végpontok hozzáadása
DurableAgentServer egy FastAPI alkalmazás. Útvonalakat adj hozzá az invocation API mellé, ugyanúgy, ahogy bármelyik FastAPI alkalmazáshoz is hozzáadod őket:
@app.get("/status")
async def status() -> dict:
return {"ready": True}
Framework-sablonok
agentbricks init két könyvtárat generál:
-
agent/tartalmazza a keretrendszered kódját: a modellt, a promptokat és eszközöket. -
runtime/tartalmazza azt az adaptert, amely összekapcsolja a keretrendszert a(z)DurableAgentServerelemmel, valamint a belépési pontot, amely regisztrálja az adapter invoke és recovery handlereit.
Az adapter minden meghívást a keretrendszer ügynök ciklusára való hívássá fordítja, és a keretrendszer kimenetét eseményekké és eredménnyé alakítja. Mindkét sablon regisztrál egy helyreállításkezelőt. A LangGraph sablon az utolsó checkpointjáról folytatódik a session store-ben, és az OpenAI Agents SDK sablon ugyanabban a munkamenetben ismétli a kérést. Egy meglévő ügynök beemeléséhez adj hozzá egy adaptert és egy DurableAgentServer entrypointot, és állítsd be a(z) server = "agentbricks" értéket a agent.toml[agent] szakaszában.
Az ügynökkiszolgálók összehasonlítása az Azure Databricksben
Az Azure Databricks három ügynökkiszolgálót biztosít: az AgentKit ügynökkiszolgálót és két régi ügynökkiszolgálót, amelyeket korábbi alkalmazássablonok használnak.
| Agent-kiszolgáló | Package | Ügyfél API-címe | Tartós megvalósítás | Használta: |
|---|---|---|---|---|
AgentKit (DurableAgentServer, ajánlott) |
databricks_agentkit, a databricks-agentbricks csomagban |
Invocation API a /api/invocations: szinkron, streaminges és háttérben futó műveletek, stream újracsatlakozással |
Egy Runtime Store, amely agentbricks deploy kiépít, plusz összeomlás utáni helyreállítás egy helyreállítási kezelőn keresztül |
Projektek, amelyeket az Agent Bricks CLI-val hozol létre |
LongRunningAgentServer (örökölt) |
databricks_ai_bridge.long_running, a databricks-ai-bridge[agent-server] csomagban |
OpenAI Responses API a /responses oldalon, háttérfuttatásokkal és a stream folytatásával |
Futási állapot egy Ön által konfigurált Lakebase adatbázisban. Egy összeomlás után egy új próbálkozás onnan folytatja a futást, a megszakított próbálkozás eseménynaplója alapján. | Az agent-openai-advanced és agent-langgraph-advancedalkalmazás sablonok |
MLflow AgentServer (régi) |
mlflow.genai.agent_server, a mlflow csomagban |
OpenAI Responses API itt: /responses szinkron és streamelt futások |
None | Az alap alkalmazás sablonok, például agent-openai-agents-sdk |
LongRunningAgentServer kiterjeszti az MLflow-t AgentServer, és mindkettő olyan ügynököket szolgál ki, amelyek az MLflow ResponsesAgent interfészt valósítják meg. Az egyiküket használó ügynök üzembe helyezéséhez és karbantartásához lásd: Ügynökök futtatása Databricks Appsben a régi ügynökkiszolgáló használatával. Ha ügynököt szeretnél lekérdezni e kiszolgálók bármelyikén, lásd: Azure Databricksen üzembe helyezett ügynökök lekérdezése.
Limitations
- Nem lehet megváltoztatni egy meglévő telepítés ügynökkiszolgálóját. A(z)
DurableAgentServerés a saját szervered közötti váltáshoz hozz létre egy új projektet a kívántagentbricks init --serverbeállítással, és telepítsd új néven. - A(z)
servermező módosítása itt:agent.tomlnem alakítja át a meglévő szerverkódot erre:DurableAgentServer. - A kérelmező felhasználó hitelesítéséhez
server = "agentbricks"szükséges.