Mémoire
Donnez à vos agents une mémoire qui survit à une seule conversation. L’état de session contient cette conversation ; la mémoire est le stockage à long terme qu’un agent consulte au début d’un tour et auquel il écrit au fur et à mesure qu’il apprend — ainsi, la session suivante connaît déjà l’utilisateur.
Cette section vous guide depuis le début : les deux types de mémoire que ADK-Rust propose, les types fondamentaux, les backends, le graphe de connaissances bi-temporel et la manière de tout connecter à un agent.
Vous découvrez ADK-Rust ? Lisez d’abord l’Introduction et Sessions et état — la mémoire est le pendant persistant de la session éphémère.
Deux types de mémoire
ADK-Rust fournit deux modèles de mémoire complémentaires derrière le même
trait MemoryService, afin qu’un agent puisse utiliser l’un ou l’autre via une seule interface :
| Magasin sémantique | Graphe de connaissances | |
|---|---|---|
| Structure | Un ensemble consultable d’entrées textuelles | Entités, observations et relations typées |
| Rappel | Recherche par similarité / mots-clés dans les entrées | Fiche de profil + recherche de nœuds avec score par jetons |
| Idéal pour | « De quoi avons-nous discuté à propos de X ? » | « Qu’est-ce qui est vrai à propos de cet utilisateur maintenant ? » |
| Backends | InMemory, SQLite, Postgres, Redis, MongoDB, Neo4j | GraphMemoryService (SQLite, bitemporel) |
| Page | Concepts · Backends | Graphe de connaissances |
Vous n'avez pas besoin de choisir globalement — choisissez pour chaque agent selon que vous avez besoin d'un rappel de type transcription ou d'un modèle propre et interrogeable de l'utilisateur.
Modèle mental
Agent turn
│ search_memory(query) ← recall relevant context at turn start
▼
adk_core::Memory ← the interface the agent sees
│ (MemoryServiceAdapter bridges to…)
▼
MemoryService ← add_session / search / delete_user …
├─ InMemoryMemoryService (dev)
├─ Sqlite/Postgres/Redis/… (semantic store)
└─ GraphMemoryService (bi-temporal knowledge graph)
- Un
MemoryServiceest le backend de stockage : il stocke des entrées (ou des nœuds de graphe) et répond auxsearch. - Un
MemoryServiceAdapterl'enveloppe comme unadk_core::Memory, limité à un(app_name, user_id, project_id?), qui est ce que lesearch_memoryd'un agent appelle réellement. - Le Runner contient le
Memoryet le met à la disposition de l'agent ; les outils de mémoire permettent à l'agent de rechercher et de gérer délibérément la mémoire.
Installation
# Semantic store — pick the backend you need
adk-memory = { version = "2.1.0", features = ["sqlite-memory"] }
# Bi-temporal knowledge graph
adk-memory = { version = "2.1.0", features = ["graph-memory"] }
| Fonctionnalité | Ajouts |
|---|---|
| (par défaut) | InMemoryMemoryService — sans configuration, pour le développement |
sqlite-memory | SqliteMemoryService — magasin sémantique basé sur des fichiers |
graph-memory | GraphMemoryService — graphe de connaissances bitemporel (SQLite) |
database-memory | PostgresMemoryService avec pgvector |
redis-memory | RedisMemoryService |
mongodb-memory | MongoMemoryService |
neo4j-memory | Neo4jMemoryService |
Démarrage rapide en 60 secondes
Stockez quelques souvenirs et recherchez-les ensuite :
use adk_memory::{InMemoryMemoryService, MemoryService, MemoryEntry, SearchRequest};
use adk_core::Content;
use chrono::Utc;
# async fn run() -> anyhow::Result<()> {
let memory = InMemoryMemoryService::new();
memory.add_session("support", "alice", "s1", vec![
MemoryEntry { content: Content::new("user").with_text("I prefer email over phone"),
author: "user".into(), timestamp: Utc::now() },
]).await?;
let hits = memory.search(SearchRequest {
app_name: "support".into(), user_id: "alice".into(),
query: "how should we contact this customer?".into(),
..Default::default()
}).await?;
for entry in hits.entries { println!("{:?}", entry.content); }
# Ok(()) }
Dans un véritable agent, vous n’appelez pas search manuellement — vous rattachez le service au
Runner et laissez l’agent se rappeler et organiser les souvenirs lui-même.
Où aller ensuite
- Concepts —
MemoryEntry, le traitMemoryService, la recherche, le périmètre du projet et l’effacement conforme au RGPD. - Backends — les six magasins, les indicateurs de fonctionnalités et la manière de choisir.
- Graphe de connaissances —
GraphMemoryServiceet pourquoi la temporalité bitemporelle est importante. - Outils et agents — intégrer la mémoire aux agents ;
remember/relateet les outils de mémoire.