संदर्भ संक्षेपण
जैसे-जैसे एक ADK एजेंट चलता है, यह संदर्भ एकत्र करता जाता है — उपयोगकर्ता संदेश, टूल प्रतिक्रियाएँ और जनरेट की गई सामग्री। जैसे-जैसे यह संदर्भ बढ़ता है, LLM के प्रसंस्करण समय में वृद्धि होती है, क्योंकि प्रत्येक अनुरोध के साथ अधिक डेटा भेजा जाता है। संदर्भ संक्षेपण पुराने इवेंट का सारांश बनाने के लिए स्लाइडिंग विंडो दृष्टिकोण का उपयोग करके इस समस्या का समाधान करता है।
यह कैसे काम करता है
संदर्भ संक्षेपण किसी सत्र के भीतर पुराने वार्तालाप इवेंट का समय-समय पर सारांश बनाने के लिए स्लाइडिंग विंडो का उपयोग करता है। जब पूर्ण किए गए इनवोकेशन की संख्या कॉन्फ़िगर किए गए अंतराल तक पहुँच जाती है, तो सारांशकर्ता पुराने इवेंट को एकल सारांश इवेंट में संक्षिप्त कर देता है।
Invocations 1-3: [event1, event2, event3] → Summarized into "Summary A"
Invocations 4-6: [Summary A, event3, event4, event5, event6] → Summarized into "Summary B"
overlap_size पैरामीटर नियंत्रित करता है कि पिछले विंडो से कितने इवेंट अगले सारांश में शामिल किए जाएँ, ताकि निरंतरता बनी रहे।
कॉन्फ़िगरेशन
अपने रनर कॉन्फ़िगरेशन में संक्षेपण जोड़ें:
use adk_agent::LlmEventSummarizer;
use adk_runner::{Runner, RunnerConfig, EventsCompactionConfig};
use std::sync::Arc;
// Use any LLM for summarization (a fast, cheap model works well)
let summarizer_llm = Arc::new(my_model);
let summarizer = Arc::new(LlmEventSummarizer::new(summarizer_llm));
let runner = Runner::new(RunnerConfig {
app_name: "my_app".to_string(),
agent: root_agent,
session_service: sessions,
artifact_service: None,
memory_service: None,
plugin_manager: None,
run_config: None,
compaction_config: Some(EventsCompactionConfig {
compaction_interval: 3, // Compact every 3 invocations
overlap_size: 1, // Keep 1 prior invocation for context
summarizer,
}),
})?;
कॉन्फ़िगरेशन पैरामीटर
| पैरामीटर | प्रकार | विवरण |
|---|---|---|
compaction_interval | u32 | पूर्ण किए गए इनवोकेशन की वह संख्या जो संक्षिप्तीकरण को ट्रिगर करती है |
overlap_size | u32 | पिछले विंडो की वे घटनाएँ जिन्हें अगले सारांश में शामिल किया गया है |
summarizer | Arc<dyn BaseEventsSummarizer> | सारांश बनाने की रणनीति |
कस्टम सारांशकार
आप सारांश बनाने वाले प्रॉम्प्ट को कस्टमाइज़ कर सकते हैं:
let summarizer = LlmEventSummarizer::new(llm)
.with_prompt_template(
"Summarize this conversation focusing on action items \
and decisions:\n\n{conversation_history}"
);
या पूर्ण नियंत्रण के लिए BaseEventsSummarizer लागू करें:
use adk_core::{BaseEventsSummarizer, Event, Result};
use async_trait::async_trait;
struct MySummarizer;
#[async_trait]
impl BaseEventsSummarizer for MySummarizer {
async fn summarize_events(&self, events: &[Event]) -> Result<Option<Event>> {
// Custom summarization logic
// Return None to skip compaction for this window
todo!()
}
}
संक्षिप्तीकरण इतिहास को कैसे प्रभावित करता है
जब संक्षिप्तीकरण घटनाओं वाले सत्र पर conversation_history() को कॉल किया जाता है:
- सबसे हाल की संक्षिप्तीकरण घटना खोजी जाती है
- उसका सारांश संक्षिप्तीकरण सीमा तक की सभी घटनाओं को प्रतिस्थापित करता है
- सीमा के बाद की केवल घटनाएँ अलग-अलग शामिल की जाती हैं
यह एजेंटों के लिए पारदर्शी होता है — उन्हें एक सुसंगत वार्तालाप इतिहास प्राप्त होता है, जिसमें सारांश के बाद हाल की घटनाएँ शामिल होती हैं।
उदाहरण समयरेखा
compaction_interval: 3 और overlap_size: 1 के साथ:
| आह्वान | घटनाएँ | कार्रवाई |
|---|---|---|
| 1 | उपयोगकर्ता→एजेंट | — |
| 2 | उपयोगकर्ता→एजेंट | — |
| 3 | उपयोगकर्ता→एजेंट | घटनाओं 1-3 को सारांश A में संक्षिप्त करें |
| 4 | उपयोगकर्ता→एजेंट | — |
| 5 | उपयोगकर्ता→एजेंट | — |
| 6 | उपयोगकर्ता→एजेंट | घटनाओं 3-6 (overlap=1) को सारांश B में संक्षिप्त करें |
Invocation 6 के बाद, एजेंट देखता है: [Summary B, event 6 overlap events, event 7+]
टिप्पणियाँ
- कॉम्पैक्शन विफलता गैर-घातक है — रनर एक चेतावनी लॉग करता है और जारी रहता है
- कॉम्पैक्शन invocation स्ट्रीम पूरी होने के बाद चलता है, उसके दौरान नहीं
- टिकाऊपन के लिए कॉम्पैक्शन इवेंट session service में स्थायी रूप से संग्रहीत किया जाता है
- सारांश के लिए तेज़ और कम लागत वाले मॉडल का उपयोग करें (उदाहरण के लिए,
gemini-3.5-flash-lite)