Compactación del contexto

A medida que un agente ADK se ejecuta, acumula contexto: mensajes del usuario, respuestas de herramientas y contenido generado. A medida que este contexto crece, los tiempos de procesamiento de LLM aumentan porque se envían más datos con cada solicitud. La compactación del contexto aborda este problema mediante el resumen de eventos antiguos usando un enfoque de ventana deslizante.

Cómo funciona

La compactación del contexto utiliza una ventana deslizante para resumir periódicamente eventos antiguos de la conversación dentro de una sesión. Cuando el número de invocaciones completadas alcanza el intervalo configurado, el resumidor comprime los eventos antiguos en un único evento de resumen.

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

El parámetro overlap_size controla cuántos eventos de la ventana anterior se transfieren al siguiente resumen, preservando la continuidad.

Configuración

Añade la compactación a la configuración de tu ejecutor:

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

Parámetros de configuración

ParámetroTipoDescripción
compaction_intervalu32Número de invocaciones completadas que activa la compactación
overlap_sizeu32Eventos de la ventana anterior incluidos en el siguiente resumen
summarizerArc<dyn BaseEventsSummarizer>La estrategia de resumen

Resumidor personalizado

Puedes personalizar el prompt de resumen:

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

O implementar BaseEventsSummarizer para obtener un control 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!()
    }
}

Cómo afecta la compactación al historial

Cuando se llama a conversation_history() en una sesión con eventos de compactación:

  1. Se encuentra el evento de compactación más reciente
  2. Su resumen reemplaza todos los eventos hasta el límite de compactación
  3. Solo los eventos posteriores al límite se incluyen individualmente

Esto es transparente para los agentes: reciben un historial de conversación coherente que incluye el resumen seguido de los eventos recientes.

Línea de tiempo de ejemplo

Con compaction_interval: 3 y overlap_size: 1:

InvocaciónEventosAcción
1usuario→agente
2usuario→agente
3usuario→agenteCompactar eventos 1-3 en el resumen A
4usuario→agente
5usuario→agente
6usuario→agenteCompactar eventos 3-6 (superposición=1) en el resumen B

Después de la invocación 6, el agente ve: [Summary B, event 6 overlap events, event 7+]

Notas

  • El fallo de compactación no es fatal: el ejecutor registra una advertencia y continúa
  • La compactación se ejecuta después de que se completa el flujo de invocaciones, no durante este
  • El evento de compactación se conserva en el servicio de sesiones para garantizar su durabilidad
  • Usa un modelo rápido y económico para la generación del resumen (p. ej., gemini-3.5-flash-lite)
Compactación del contexto - Documentación ADK-Rust | ADK-Rust