स्मृति
अपने agents को ऐसी स्मृति दें जो एकल वार्तालाप से परे बनी रहे। Session state इस वार्तालाप को संभालती है; स्मृति वह दीर्घकालिक संग्रह है जिसे agent किसी turn की शुरुआत में पढ़ता है और सीखने के साथ उसमें वापस लिखता है — ताकि अगला session उपयोगकर्ता को पहले से जानता हो।
यह अनुभाग आपको इसे शुरुआत से समझाता है: ADK-Rust द्वारा दी जाने वाली स्मृति के दो प्रकार, मुख्य प्रकार, backends, द्वि-कालिक knowledge graph, और इन सभी को agent में जोड़ने का तरीका।
ADK-Rust में नए हैं? पहले परिचय और Sessions और State पढ़ें — memory, ephemeral session का persistent समकक्ष है।
स्मृति के दो प्रकार
ADK-Rust एक ही MemoryService trait के पीछे दो परस्पर पूरक memory models उपलब्ध कराता है, ताकि कोई agent एक ही interface के माध्यम से इनमें से किसी का उपयोग कर सके:
| सिमैंटिक स्टोर | नॉलेज ग्राफ़ | |
|---|---|---|
| संरचना | खोजे जा सकने वाले टेक्स्ट प्रविष्टियों का ढेर | इकाइयाँ, अवलोकन और टाइप किए गए संबंध |
| पुनर्प्राप्ति | प्रविष्टियों पर समानता / कीवर्ड खोज | प्रोफ़ाइल कार्ड + टोकन-स्कोर किए गए नोड की खोज |
| इसके लिए सर्वोत्तम | "हमने X के बारे में क्या चर्चा की?" | "इस उपयोगकर्ता के बारे में अब क्या सत्य है?" |
| बैकएंड | InMemory, SQLite, Postgres, Redis, MongoDB, Neo4j | GraphMemoryService (SQLite, द्वि-कालिक) |
| पृष्ठ | अवधारणाएँ · बैकएंड | नॉलेज ग्राफ़ |
आपको वैश्विक रूप से चयन करने की आवश्यकता नहीं है — प्रत्येक agent के लिए इस आधार पर चुनें कि आपको ट्रांसक्रिप्ट-शैली की पुनर्प्राप्ति चाहिए या उपयोगकर्ता के एक स्वच्छ, क्वेरी योग्य मॉडल की।
मानसिक मॉडल
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)
- एक
MemoryServiceस्टोरेज बैकएंड है: यह प्रविष्टियाँ (या ग्राफ़ नोड) संग्रहीत करता है औरsearchका उत्तर देता है। - एक
MemoryServiceAdapterइसे एकadk_core::Memoryके रूप में रैप करता है, जो एक(app_name, user_id, project_id?)के दायरे में होता है और जिसे agent काsearch_memoryवास्तव में कॉल करता है। - Runner
Memoryको रखता है और उसे agent के लिए उपलब्ध कराता है; memory tools agent को जानबूझकर memory खोजने और व्यवस्थित करने देते हैं।
इंस्टॉल करें
# 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"] }
| सुविधा | जोड़ता है |
|---|---|
| (डिफ़ॉल्ट) | InMemoryMemoryService — बिना सेटअप के, विकास के लिए |
sqlite-memory | SqliteMemoryService — फ़ाइल-आधारित सिमेंटिक स्टोर |
graph-memory | GraphMemoryService — द्वि-कालिक ज्ञान ग्राफ (SQLite) |
database-memory | PostgresMemoryService के साथ pgvector |
redis-memory | RedisMemoryService |
mongodb-memory | MongoMemoryService |
neo4j-memory | Neo4jMemoryService |
60-सेकंड की त्वरित शुरुआत
कुछ स्मृतियाँ संग्रहीत करें और उन्हें फिर से खोजें:
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(()) }
वास्तविक एजेंट में आप search को हाथ से कॉल नहीं करते — आप सेवा को
Runner से जोड़ते हैं और एजेंट को स्वयं स्मृति याद करने तथा व्यवस्थित करने देते हैं।
आगे कहाँ जाएँ
- अवधारणाएँ —
MemoryEntry,MemoryServiceट्रेट, खोज, प्रोजेक्ट का दायरा, GDPR के अंतर्गत विलोपन। - बैकएंड — छह स्टोर, फीचर फ़्लैग और चुनाव करने का तरीका।
- ज्ञान ग्राफ़ —
GraphMemoryServiceऔर द्वि-कालिकता क्यों महत्वपूर्ण है। - टूल और एजेंट — एजेंट में मेमोरी को जोड़ना;
remember/relateऔर मेमोरी टूल।