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.
Important
Ez a funkció bétaverzióban érhető el.
Az ügynökmemória hosszú távú memóriát ad az ügynököknek, amely a beszélgetések között is megmarad. Az Azure Databricks tárolja a memóriát a Lakebase-ben, és kezeli a tárolást, indexelést és keresést, így az ügynökök megjegyezhetik a felhasználói preferenciákat, korábbi döntéseket és felhalmozódott kontextust anélkül, hogy adatbázist kellene üzemeltetnie.
Note
Az előnézeti időszak alatt díjat számítunk fel a memóriabejegyzéseket tároló alapul szolgáló Lakebase-példány után. Magára az ügynök memóriájára nem számítunk fel további díjat. Az árak változhatnak az előzetes előzmény előrehaladtával.
Használd az ügynök memóriáját, amikor azt szeretnéd, hogy az ügynökök a következőket csinálják:
- Emlékezz a felhasználói preferenciákra, tényekre és döntésekre külön beszélgetések során.
- Szabd személyre a válaszokat az alapján, amit az ügynök a korábbi munkamenetekben megtanult.
- Oszd meg a felhalmozott tudást ügynökök és projektek között.
- Javítani kell a pontosságot és a hatékonyságot az idő függvényében.
Az ügynökmemória bármely keretrendszerre épülő ügynökökkel működik. Rövid távú beszélgetési előzményekhez egyetlen interakción belül használd a agentmunkameneteket.
Requirements
- Telepítsd a Python 3.10-et vagy annál magasabb, hogy használd az AgentKit SDK-t. Az AgentKit SDK a Databricks Python-kliense az ügynök-API-khoz, amelyet az alábbi példák használnak. A REST API-t bármelyik nyelvről közvetlenül hívhatod, Python nélkül.
- A
memory_store.put()vagymemory_store.list(path=...)használatához telepítsd adatabricks-agentbricks0.6.0-s vagy újabb verzióját.
Hogyan működik az ügynökmemória
Az ügynök memóriájának két szintje van:
- A memóriatároló az ügynök memóriáinak munkaterületi konténerje. A tároló létrehozása automatikusan biztosítja a háttér Lakebase tárolót. Az üzletet a boltazonosítója alapján címezed, amit az üzlet létrehozásakor választasz ki.
- A memóriabejegyzés egy önálló tartalmi elem egy tárolóban. Minden bejegyzésnek van egy szabad formátumú szövege
content, egy rövidítésedescriptiona lekéréshez, valamint egy mezőhalmaz, amely rendszerezi és partizálja azt:-
actor_id(kötelező): kié az emlék, például végfelhasználónak vagy más ügynöknek. -
session_id(nem kötelező): az a munkamenet, amelyhez a memória tartozik. Hagyd beállítatlanul, hogy a memória érvényes a szereplő munkamenetei között. -
path(szükséges): egy fájlrendszer-szerű út, amely egy aktoron belüli bejegyzéseket szervezi, például/preferences/response-style.md.
-
Egy bejegyzés egyedileg azonosítható a(z) actor_id, session_id és path kombinációja alapján. Ugyanaz az út két különböző munkamenetben, vagy egy munkamenetben és anélkül, két külön bejegyzésként szerepel.
A bejegyzések kétféleképpen jutnak be egy tárolóba: az ügynököd vagy az alkalmazás közvetlenül írja őket, vagy egy memóriacsatorna a session store-ban lévő beszélgetésekből nyeri ki őket.
Visszakeresés
Kétféleképpen szerezzük meg a memóriát:
-
Lista egy művelethez tartozó bejegyzésekről, opcionálisan a következők szerint szűrve:
session_id,pathelőtag vagy pontospath. Ezt használhatod arra, hogy böngészd vagy megjelenítsd az ügynök által tud információk indexét. - Keress bejegyzéseket egy természetes nyelvű lekérdezéssel rendelkező aktorról. A keresés a relevancia pontszám szerint rangsorolt legrelevánsabb bejegyzéseket adja vissza.
Bármelyik műveletnél egy session_id szűrő csak az adott munkamenethez mentett bejegyzéseket adja vissza. Nem adja vissza a munkamenet nélkül mentett bejegyzéseket.
Első lépések
Az AgentKit SDK és a REST API példák beállítják az ügyfélszolgálati ügynök memóriáját: létrehoznak egy memóriatárolót, elmentik a felhasználó preferenciáját, és felidézik azt egy későbbi beszélgetésben. Az Agent Bricks CLI példája egy memóriatárolót köt egy olyan ügynökhöz, amelyet a CLI-vel építesz és telepítesz. Válaszd ki azt az ügyfelet, amely illik a projektedhez. A memóriatároló azonosítónak 3-56 karakterből kell állnia, kisbetűvel kell kezdődnie, betűvel vagy számmal kell végződnie, és csak kisbetűket, számokat és kötőjeleket tartalmazhat.
AgentKit SDK
A AgentKit SDK a Databricks Python-kliense az ügynök-API-khoz, amelyet a databricks-agentbricks csomagban terjesztenek. A Databricks SDK-kkal WorkspaceClientautentikál.
Telepítse az AgentKit SDK-t:
pip install databricks-agentbricksHozz létre egy memóriatárolót az ügynöködnek.
AgentKitClientaz ÖnWorkspaceClientbejelentkezési adataival hitelesíti magát:from databricks.sdk import WorkspaceClient from databricks_agentkit import AgentKitClient client = AgentKitClient(WorkspaceClient()) memory_store = client.memory_stores.create("support-agent-memory")Ments meg egy emléket, miután az ügynök megtud valami tartós információt a felhasználóról.
actor_idkié ez az emlék,pathrendszerezi azt azon az aktoron belül, ésdescriptionjavítja a visszakeresést:memory_store.add( actor_id="user-123", path="/preferences/communication.md", content="Prefers email over phone. Timezone: PST. Enterprise subscription.", description="User 123 communication preferences", )add()akkor bukik el,ALREADY_EXISTSha már létezik bejegyzés azon az elérési úton. A bejegyzés létrehozásához vagy a meglévő frissítéséhez ugyanazokkal az argumentumokkal hívja meg a(z)memory_store.put()elemet.Emlékezzünk fel a felhasználó emlékeire egy későbbi beszélgetésben egy természetes nyelvi kereséssel:
results = memory_store.search(actor_id="user-123", query="communication preferences", limit=10)
REST API
A kliensek a /api/2.0/agents/memory-stores alatt hívják meg a REST API-t. Hívd közvetlenül más nyelvekre is, mint a Python.
Generálj egy OAuth tokent a Databricks CLI-val:
databricks auth login --host ${DATABRICKS_HOST} export DATABRICKS_TOKEN=$(databricks auth token | jq -r .access_token)Hozz létre memóriatárt az ügynöködnek:
curl -X POST "https://${DATABRICKS_HOST}/api/2.0/agents/memory-stores?managed_memory_store_id=support-agent-memory" \ -H "Authorization: Bearer ${DATABRICKS_TOKEN}" -H "Content-Type: application/json" \ -d '{"description": "Support agent memory"}'Ments el egy memóriabejegyzést egy felhasználó számára.
actor_idaz, hogy kié ez az emlék,pathrendszerezi, ésdescriptionhatékonyabbá teszi a visszakeresést:curl -X POST "https://${DATABRICKS_HOST}/api/2.0/agents/memory-stores/support-agent-memory/entries" \ -H "Authorization: Bearer ${DATABRICKS_TOKEN}" -H "Content-Type: application/json" \ -d '{"actor_id": "user-123", "path": "/preferences/communication.md", "content": "Prefers email over phone.", "description": "Communication preferences"}'Ha már létezik bejegyzés ezen az úton, a kérés
ALREADY_EXISTS(HTTP 409) hibával meghiúsul. A meglévő bejegyzés frissítéséhez inkább keresd meg az útvonala alapján. A keresés minden munkamenethez visszaadja az útvonal bejegyzéseit, ezért válaszd azt, amelynek a(z)session_idértéke egyezik. A(z)nameutolsó szegmense a bejegyzésazonosító:curl -G "https://${DATABRICKS_HOST}/api/2.0/agents/memory-stores/support-agent-memory/entries" \ -H "Authorization: Bearer ${DATABRICKS_TOKEN}" \ --data-urlencode "actor_id=user-123" --data-urlencode "path=/preferences/communication.md"Ezután frissítse a bejegyzés tartalmát azonosítója alapján:
curl -X PATCH "https://${DATABRICKS_HOST}/api/2.0/agents/memory-stores/support-agent-memory/entries/<entry-id>?update_mask=content" \ -H "Authorization: Bearer ${DATABRICKS_TOKEN}" -H "Content-Type: application/json" \ -d '{"content": "Prefers email over phone. Timezone: PST."}'Idézze fel a felhasználó emlékeit egy természetes nyelvi kereséssel:
curl -X POST "https://${DATABRICKS_HOST}/api/2.0/agents/memory-stores/support-agent-memory/entries:search" \ -H "Authorization: Bearer ${DATABRICKS_TOKEN}" -H "Content-Type: application/json" \ -d '{"actor_id": "user-123", "query": "communication preferences"}'
Bricks Ügynök
Ha az ügynököt a Agent Bricks CLI segítségével építed, a agentbricks init egy memóriatárolót deklarál a agent.toml-ban.
agentbricks deploy létrehozza a tárolóhelyet, ha még nem létezik, és hozzáférést ad a telepített ügynöknek hozzá.
Válasszon egy útvonalat:
Indítás üresen (a legtöbb ügynens): Telepítsd az ügynenst.
agentbricks deploylétrehozza a memóriatárolót, amelyetagentbricks initdeklarált. A(z)my-agentnevű ügynök telepítéséhez a következőket kell futtatni:agentbricks deploy my-agentKezdj a tárban már meglévő memóriákkal: Először hozd létre a tárat, adj hozzá bejegyzéseket, majd rendeld a tárat az ügynökhöz, és telepítsd.
Egy
my-agent-memorynevű áruház létrehozásához futtassuk a következőket. A kimenet tartalmazza az áruházazonosítót, egy generált azonosítót, amely különálló az áruház nevétől:agentbricks memory stores create --name my-agent-memoryBejegyzés hozzáadásához futtassa a következőket,
<store-id>helyettesítve az előző lépés store ID-jével:agentbricks memory entries create --store <store-id> --actor-id you@example.com \ --path /preferences/style.md --content "Prefers Python and concise answers with code examples."A tároló társításához és az ügynök telepítéséhez futtassa a következőt.
agentbricks memory bindlecseréli az üzlet nevét a(z)agent.tomlelemben, és a(z)agentbricks deploymegkeresi a meglévő üzletet név alapján, és azt használja új létrehozása helyett:agentbricks memory bind my-agent-memory agentbricks deploy my-agent
--path a bejegyzés kulcsa a tárolón belül, nem egy fájl a gépeden.
--actor-id az a felhasználó, akihez a memória tartozik. A telepített ügynök a bejelentkezett felhasználó e-mail-címét használja aktorazonosítóként, így minden bejegyzést a felhasználó e-mail-címével tölts fel, aki az ügynökkel beszél.
Az Agent Bricks CLI-ben memory bind és agentbricks deploy egy üzletre a neve alapján hivatkozik. A parancsok, amelyek egyetlen tárolóra hatnak, például memory entries create, a generált tárolóazonosítót veszik igénybe.
Adj ügynöködnek memóriaeszközöket
Ahhoz, hogy egy ügynök el tudja dönteni, mikor mentse el és mikor hívja elő a memóriát, csomagold a kliensműveleteket eszközökké, és a rendszerutasításban add meg az ügynöknek, mikor használja őket. Állítsa be a actor_id elemet a megbízható alkalmazáskódban a hitelesített végfelhasználói személyazonosság alapján. Soha ne hagyd, hogy a modell válassza el, kinek az emlékét olvassa vagy kiírja.
A következő példa az AgentKit SDK-t memory_store a Get started menüből az OpenAI Agents SDK eszközeiként csomagolja.
from agents import Agent, function_tool
def make_memory_tools(memory_store, actor_id: str):
@function_tool
def search_memory(query: str) -> str:
"""Search long-term memory for relevant facts about the user."""
results = memory_store.search(actor_id=actor_id, query=query, limit=10)
return "\n\n".join(f"{r.memory.path}: {r.memory.content}" for r in results) or "No memory found."
@function_tool
def save_memory(path: str, content: str, description: str = "") -> str:
"""Save a durable, long-term memory about the user, replacing any memory at the same path."""
memory_store.put(actor_id=actor_id, path=path, content=content, description=description or None)
return f"Saved memory at {path}"
@function_tool
def list_memories() -> str:
"""List the paths and descriptions of the user's long-term memories."""
memories = memory_store.list(actor_id=actor_id)
return "\n".join(f"{m.path}: {m.description}" if m.description else m.path for m in memories) or "No memory found."
@function_tool
def forget_memory(path: str) -> str:
"""Delete the long-term memory at a path, such as when the user asks you to forget it."""
memories = list(memory_store.list(actor_id=actor_id, path=path))
for memory in memories:
memory.delete()
return f"Forgot memory at {path}" if memories else f"No memory at {path}"
return [search_memory, save_memory, list_memories, forget_memory]
agent = Agent(
name="Support agent",
instructions="Save durable user preferences, recall them when relevant, and forget them when the user asks.",
tools=make_memory_tools(memory_store, actor_id="user-123"),
)
put() létrehozza a bejegyzést, vagy helyettesíti a már azon az elérési úton lévő bejegyzés tartalmát. Ha új sorként add hozzá a tartalmat, add meg a(z) append=True-t.
put() nem atomikus, így az egyidejű írások ugyanarra az útvonalra írhatják felül egymást.
list(path=...) minden munkamenetben visszaadja a bejegyzéseket pontosan ezen a pontos elérési úton, így forget_memory törli az összes olyan bejegyzést is, amelyet egy munkameneten belül ezen az elérési úton mentettek.
Ugyanez a minta működik a Claude Agent SDK-val és más keretrendszerekkel is: a tároló keresési, put, listázási és törlési műveleteit csomagoljuk be a keretrendszer eszköztípusaként.
Ha ugyanazon a memória tárolón is futtatsz memóriafolyamatot, a folyamat újraírhatja, összevonhatja, szétoszthatja vagy törölheti azokat a bejegyzéseket, amelyeket az ügynök bármely aktorhoz ment, amelyet feldolgoz.
Partíció és biztonságos memória
Egy tárolón belül a actor_id segít elkülöníteni, hogy mely emlékek kihez tartoznak. Minden lista és keresés egyetlen actor_idegységre van beosztva, ezért válaszd ki azt a stratégiát, amely megfelel annak, amit az ügynöködnek meg kell észbenhagynia:
-
Magánmemória minden felhasználó számára: Állítsuk
actor_idbe a hitelesített végfelhasználói azonosítóra. Minden felhasználó saját partíciót kap, és az ügynök csak az adott felhasználó bejegyzéseit hívja vissza.- Példa: Egy ügyfélszolgálati ügynök megjegyzi az egyik felhasználó kommunikációs beállításait és a korábbi jegyeket.
-
Megosztott memória egy csoport számára: Állíts
actor_idbe egy fix kulcsot, amit te választasz, például egy csapat, projekt vagy szervezeti azonosító. Mindenki ugyanazokat az emlékeket olvassa és írja.- Példa: Egy csapatügynök megjegyzi a közös szószótárt a vállalati kifejezésekről és a belső konvenciókról.
-
A memória felosztása egyéb szempont szerint: Hozz létre
actor_ida saját értékeidből, például egy bérlőazonosítóból vagy egyuser:projectösszetett azonosítóból.-
Példa: Egy több-bérlős alkalmazás úgy állítja be a(z)
actor_idértékét{tenant}:{user}értékre, hogy az egyes ügyfelek felhasználói el legyenek különítve egymástól.
-
Példa: Egy több-bérlős alkalmazás úgy állítja be a(z)
Állítsa be a actor_id értékét az alkalmazáskódban megbízható hívói kontextusból: felhasználónkénti memóriához az ellenőrzött végfelhasználói identitást, illetve megosztott memóriához egy megbízható csapat- vagy projektkulcsot. Sose hagyd, hogy a modell válassza ki. Ha a stratégiád a végfelhasználói identitáson alapul, utasítsd el azokat a kéréseket, amelyek nem tartalmaznak ilyen, inkább visszatérj egy megosztott actor_ididentitáshoz.
Warning
actor_id elválasztja a memóriát, de nem jelent hozzáférés-szabályozást. A memóriatárolók munkaterülethez kötöttek, így bármely jogalany, amely elér egy tárolót, minden bejegyzést olvasni és írni tud az összes aktorban. A bolt, nem a színész, a biztonsági határ. A bérlők vagy felhasználók közötti szigorú elkülönítéshez hozz létre külön memóriatárolót minden határonként.
Ahhoz, hogy egy másik megbízó, például az ügynököd szolgáltatási főnöke használja, adj hozzá hozzáférést a bolt engedélyezési műveletével (memory_store.grant_permission(principal_id) az AgentKit SDK-ban). Csak az áruház alkotója vagy egy munkaterület adminisztrátora adthat hozzáférést.
Limitations
- Az ügynökmemória csak hosszú távú memóriát biztosít. A rövid távú beszélgetési előzményekért lásd: ügynök-munkamenetek.
- A keresés relevancia szerint rangsorolja a bejegyzéseket, kombinálva a teljes szöveges (BM25) és a szemantikai egyezést minden bejegyzés tartalma és leírása alapján. Akár 100 bejegyzést is visszaad, és nem támogatja az oldalozást.
- A hozzáférés-ellenőrzést az üzlet szintjén érvényesítik. A bejegyzésenkénti és felhasználónkénti hozzáférés-ellenőrzés nem érhető el.
- Az áruház hozzáférés-ellenőrzése az üzlet bejárataira vonatkozik. Bármely munkaterületi felhasználó felsorolhatja és lekérheti a memóriatárolókat, beleértve azok azonosítóit és leírásait.
- Nem lehet megváltoztatni egy bolt azonosítóját, miután létrehoztad. Csak
descriptionfrissíthető.