Compactage du contexte

Lorsqu’un agent ADK s’exĂ©cute, il accumule du contexte — messages utilisateur, rĂ©ponses des outils, contenu gĂ©nĂ©rĂ©. À mesure que ce contexte augmente, les temps de traitement de LLM augmentent, car davantage de donnĂ©es sont envoyĂ©es avec chaque requĂȘte. Le compactage du contexte remĂ©die Ă  ce problĂšme en rĂ©sumant les Ă©vĂ©nements plus anciens selon une approche Ă  fenĂȘtre glissante.

Fonctionnement

Le compactage du contexte utilise une fenĂȘtre glissante pour rĂ©sumer pĂ©riodiquement les anciens Ă©vĂ©nements de conversation au sein d’une session. Lorsque le nombre d’invocations terminĂ©es atteint l’intervalle configurĂ©, le rĂ©sumeur compresse les anciens Ă©vĂ©nements en un seul Ă©vĂ©nement de rĂ©sumĂ©.

Invocations 1-3: [event1, event2, event3] → Summarized into "Summary A"
Invocations 4-6: [Summary A, event3, event4, event5, event6] → Summarized into "Summary B"

Le paramĂštre overlap_size contrĂŽle le nombre d’évĂ©nements de la fenĂȘtre prĂ©cĂ©dente reportĂ©s dans le rĂ©sumĂ© suivant, afin de prĂ©server la continuitĂ©.

Configuration

Ajoutez le compactage à la configuration de votre exécuteur :

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,
    }),
})?;

ParamĂštres de configuration

ParamĂštreTypeDescription
compaction_intervalu32Nombre d’invocations terminĂ©es qui dĂ©clenche la compaction
overlap_sizeu32ÉvĂ©nements de la fenĂȘtre prĂ©cĂ©dente inclus dans le rĂ©sumĂ© suivant
summarizerArc<dyn BaseEventsSummarizer>La stratégie de synthÚse

Résumeur personnalisé

Vous pouvez personnaliser l’invite de rĂ©sumĂ© :

let summarizer = LlmEventSummarizer::new(llm)
    .with_prompt_template(
        "Summarize this conversation focusing on action items \
         and decisions:\n\n{conversation_history}"
    );

Ou implémenter BaseEventsSummarizer pour un contrÎle total :

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!()
    }
}

Impact de la compaction sur l’historique

Lorsque conversation_history() est appelé sur une session comportant des événements de compaction :

  1. L’évĂ©nement de compaction le plus rĂ©cent est identifiĂ©
  2. Son rĂ©sumĂ© remplace tous les Ă©vĂ©nements jusqu’à la limite de compaction
  3. Seuls les événements postérieurs à la limite sont inclus individuellement

Cette opération est transparente pour les agents : ils reçoivent un historique de conversation cohérent qui comprend le résumé, suivi des événements récents.

Chronologie d’exemple

Avec compaction_interval: 3 et overlap_size: 1 :

InvocationÉvĂ©nementsAction
1utilisateur→agent—
2utilisateur→agent—
3utilisateur→agentRegrouper les Ă©vĂ©nements 1 Ă  3 dans le rĂ©sumĂ© A
4utilisateur→agent—
5utilisateur→agent—
6utilisateur→agentRegrouper les Ă©vĂ©nements 3 Ă  6 (chevauchement=1) dans le rĂ©sumĂ© B

Aprùs l’invocation 6, l’agent voit : [Summary B, event 6 overlap events, event 7+]

Notes

  • L’échec de la compaction n’est pas fatal — le runner consigne un avertissement et continue
  • La compaction s’exĂ©cute aprĂšs la fin du flux d’invocations, et non pendant celui-ci
  • L’évĂ©nement de compaction est conservĂ© dans le service de session pour assurer sa durabilitĂ©
  • Utilisez un modĂšle rapide et peu coĂ»teux pour le rĂ©sumĂ© (par exemple, gemini-3.5-flash-lite)
Compactage du contexte - Documentation ADK-Rust | ADK-Rust