Delen via


Verdichting

Naarmate gesprekken toenemen, kan het tokenaantal van de chatgeschiedenis de modelcontextvensters overschrijden of de kosten verhogen. Compressiestrategieën verminderen de grootte van de gespreksgeschiedenis met behoud van belangrijke context, zodat agents kunnen blijven functioneren via langdurige interacties.

Belangrijk

Het compressieframework is momenteel experimenteel. Als u deze wilt gebruiken, moet u toevoegen #pragma warning disable MAAI001.

Belangrijk

Het compressieframework is momenteel experimenteel in Python. Strategieën importeren uit agent_framework._compaction.

Waarom compressie belangrijk is

Elke oproep naar een LLM bevat de volledige gespreksgeschiedenis. Zonder compressie:

  • Tokenlimieten : gesprekken overschrijden uiteindelijk het contextvenster van het model, wat fouten veroorzaakt.
  • Kosten : grotere prompts verbruiken meer tokens, waardoor de API-kosten toenemen.
  • Latentie : meer invoertokens betekenen tragere reactietijden.

Compressie lost deze problemen op door selectief oudere delen van het gesprek te verwijderen, samen te vouwen of samen te vatten.

Basisconcepten

Toepasselijkheid: alleen voor in-memory geschiedenisagenten

Compressie is alleen van toepassing op agents die hun eigen gespreksgeschiedenis in het geheugen beheren. Agents die afhankelijk zijn van door de service beheerde context of gespreksstatus, profiteren niet van compressie omdat de service al contextbeheer afhandelt. Voorbeelden van door de service beheerde agents zijn:

  • Foundry Agents : context wordt beheerd aan de serverzijde van de Azure AI Foundry-service.
  • Antwoord-API waarvoor Store is ingeschakeld (de standaardinstelling): de gespreksstatus wordt opgeslagen en beheerd door de OpenAI-service.
  • Copilot Studio-agents : gesprekscontext wordt onderhouden door de Copilot Studio-service.

Voor deze agenttypen heeft het configureren van een compressiestrategie geen effect. Compressie is alleen relevant wanneer de agent een eigen berichtenlijst in het geheugen onderhoudt en de volledige geschiedenis doorgeeft aan het model voor elke aanroep.

Compressie werkt op een MessageIndex — een gestructureerde weergave van de platte berichtenlijst die berichten groepeert in atomische eenheden, genaamd MessageGroup exemplaren. Elke groep houdt het aantal berichten, het aantal byte en het geschatte aantal tokens bij.

Berichtgroepen

A MessageGroup vertegenwoordigt logisch gerelateerde berichten die samen moeten worden bewaard of verwijderd. Een assistentbericht met hulpprogrammaaanroepen en de bijbehorende berichten over het resultaat van het hulpprogramma vormen bijvoorbeeld een atomische groep. Als u een bericht verwijdert zonder de andere, zou dat fouten met de LLM-API veroorzaken.

Elke groep heeft een MessageGroupKind:

Kind Beschrijving
System Een of meer systeemberichten. Altijd behouden tijdens verdichting.
User Eén gebruikersbericht waarmee een nieuwe beurt wordt gestart.
AssistantText Een eenvoudig assistent-antwoord (geen hulpfunctie-oproepen).
ToolCall Een assistentbericht met hulpprogrammaaanroepen en de bijbehorende berichten over hulpprogrammaresultaten, behandeld als een atomische eenheid.
Summary Een verkort bericht dat wordt geproduceerd door samenvattingscompressie.

Triggers

A CompactionTrigger is een gemachtigde die evalueert of compressie moet worden voortgezet op basis van de huidige MessageIndex metrische gegevens:

public delegate bool CompactionTrigger(MessageIndex index);

De CompactionTriggers klasse biedt veelgebruikte factorymethoden:

Aanleiding Wordt geactiveerd wanneer
CompactionTriggers.Always Elke keer (onvoorwaardelijke)
CompactionTriggers.Never Nooit (schakelt compressie uit).
CompactionTriggers.TokensExceed(maxTokens) Het aantal opgenomen tokens overschrijdt de drempelwaarde.
CompactionTriggers.MessagesExceed(maxMessages) Het aantal opgenomen berichten overschrijdt de drempelwaarde.
CompactionTriggers.TurnsExceed(maxTurns) Het aantal gebruikersbeurten overschrijdt de drempelwaarde.
CompactionTriggers.GroupsExceed(maxGroups) Het opgenomen aantal groepen overschrijdt de drempelwaarde.
CompactionTriggers.HasToolCalls() Er bestaat ten minste één niet-uitgesloten groep voor het aanroepen van hulpprogramma's.

Triggers combineren met CompactionTriggers.All(...) (logische AND) of CompactionTriggers.Any(...) (logische OF):

// Compact only when there are tool calls AND tokens exceed 2000
CompactionTrigger trigger = CompactionTriggers.All(
    CompactionTriggers.HasToolCalls(),
    CompactionTriggers.TokensExceed(2000));

Trigger versus doel

Elke strategie heeft twee predicaten:

  • Trigger : hiermee bepaalt u wanneer de compressie begint. Als de trigger false retourneert, wordt de strategie volledig overgeslagen.
  • Doel — Regelt wanneer compacte stopt. Strategieën sluiten incrementeel groepen uit en evalueren het doel na elke stap opnieuw, stoppen zodra het doel retourneert true.

Wanneer er geen doel is opgegeven, wordt standaard de inverse van de triggerconditie gebruikt. Compactie stopt zodra de triggervoorwaarde niet meer wordt geactiveerd.

Compressie werkt op een platte lijst Message met objecten. Berichten worden geannoteerd met lichtgewicht groepsmetagegevens en strategieën muteren deze aantekeningen om groepen te markeren als uitgesloten voordat de berichtenlijst naar het model wordt geprojecteerd.

Berichtgroepen

Berichten worden gegroepeerd in atomische eenheden. Aan elke groep wordt een GroupKind:

Kind Beschrijving
system Systeemberichten. Altijd behouden tijdens compactie.
user Eén gebruikersbericht.
assistant_text Een eenvoudige assistent tekstreactie (geen functie-aanroepen).
tool_call Een assistentbericht met functieaanroepen plus de bijbehorende berichten van het resultaat van de tool, behandeld als een ondeelbare eenheid.

Compressiestrategieën

A CompactionStrategy is een protocol: elk async aanroepbaar dat een list[Message] accepteert en het ter plekke muteert, retourneert True wanneer het iets wijzigt:

class CompactionStrategy(Protocol):
    async def __call__(self, messages: list[Message]) -> bool: ...

Tokenizer

Tokenbewuste strategieën accepteren een TokenizerProtocol implementatie. De ingebouwde CharacterEstimatorTokenizer maakt gebruik van een heuristiek van 4 tekens per token:

from agent_framework._compaction import CharacterEstimatorTokenizer

tokenizer = CharacterEstimatorTokenizer()

Geef een aangepaste tokenizer door wanneer u nauwkeurige tokenaantallen nodig hebt voor de codering van een specifiek model.

Compressiestrategieën

Alle strategieën nemen over van de abstracte CompactionStrategy basisklasse. Elke strategie behoudt systeemberichten en respecteert een MinimumPreserved vloer die de meest recente niet-systeemgroepen beschermt tegen verwijdering.

Compressiestrategieën worden geïmporteerd uit agent_framework._compaction.

TruncationCompactionStrategy

TruncationStrategy

De eenvoudigste aanpak: verwijdert de oudste niet-systeemberichtgroepen totdat aan de doelvoorwaarde wordt voldaan.

  • Respecteert de grenzen van atomische groepen (hulpprogramma-aanroep- en resultaatberichten worden samen verwijderd).
  • Het beste voor harde tokenbudget backstops.
  • MinimumPreserved wordt standaard ingesteld op 32.
// Drop oldest groups when tokens exceed 32K, keeping at least 10 recent groups
TruncationCompactionStrategy truncation = new(
    trigger: CompactionTriggers.TokensExceed(0x8000),
    minimumPreserved: 10);
  • Wanneer er een tokenizer wordt opgegeven, wordt het aantal tokens als metriek gebruikt; anders wordt het aantal berichten meegeteld.
  • preserve_system wordt standaard ingesteld op True.
from agent_framework._compaction import CharacterEstimatorTokenizer, TruncationStrategy

# Exclude oldest groups when tokens exceed 32 000, trimming to 16 000
truncation = TruncationStrategy(
    max_n=32_000,
    compact_to=16_000,
    tokenizer=CharacterEstimatorTokenizer(),
)

SlidingWindowCompactionStrategy

SlidingWindowStrategy

Hiermee verwijdert u oudere gespreksinhoud om alleen het meest recente venster van uitwisselingen te behouden, waarbij logische gesprekseenheden worden gerespecteerd in plaats van willekeurige aantallen berichten. Systeemberichten worden gehandhaafd.

  • Het beste voor het voorspelbaar begrenzen van gesprekslengte.

Verwijdert de oudste dialoogbeurten en de bijbehorende antwoordgroepen, die werken op logische grenzen van beurten in plaats van afzonderlijke groepen.

  • Een beurt begint met een gebruikersbericht en bevat alle volgende assistent- en hulpprogrammaoproepgroepen tot het volgende gebruikersbericht.
  • MinimumPreserved standaard op 1 (behoudt ten minste de meest recente niet-systeemgroep).
// Keep only the last 4 user turns
SlidingWindowCompactionStrategy slidingWindow = new(
    trigger: CompactionTriggers.TurnsExceed(4));

Bewaart alleen de meest recente keep_last_groups niet-systeemgroepen, met uitzondering van alles wat ouder is.

  • preserve_system wordt standaard ingesteld op True.
from agent_framework._compaction import SlidingWindowStrategy

# Keep only the last 20 non-system groups
sliding_window = SlidingWindowStrategy(keep_last_groups=20)

ToolResultCompactionStrategy

Hiermee worden oudere groepen voor het aanroepen van hulpprogramma's gecomprimeerd tot compacte overzichtsberichten, waarbij leesbare sporen behouden blijven zonder onnodige berichtoverlast.

  • Raakt geen gebruikersberichten of eenvoudige assistentantwoorden aan.
  • Het beste als een first-pass-strategie om ruimte vrij te maken van uitgebreide toolresultaten.
  • Vervangt oproepgroepen met meerdere berichten (assistentgesprek + resultaten) door een korte samenvatting zoals [Tool calls: get_weather, search_docs].
  • MinimumPreserved is standaard ingesteld op 2, zodat de interacties van de huidige beurt zichtbaar blijven.
// Collapse old tool results when tokens exceed 512
ToolResultCompactionStrategy toolCompaction = new(
    trigger: CompactionTriggers.TokensExceed(0x200));
  • Wordt samengevouwen tot compacte samenvattingsberichten zoals [Tool results: get_weather: sunny, 18°C].
  • De meest recente keep_last_tool_call_groups groepen voor het aanroepen van hulpprogramma's blijven ongewijzigd.
from agent_framework._compaction import ToolResultCompactionStrategy

# Collapse all but the newest tool-call group
tool_result = ToolResultCompactionStrategy(keep_last_tool_call_groups=1)

SummarizationCompactionStrategie

Samenvattingsstrategie

Hiermee wordt een LLM gebruikt om oudere gedeelten van het gesprek samen te vatten en deze te vervangen door één samenvattingsbericht.

  • Een standaardprompt behoudt belangrijke feiten, beslissingen, gebruikersvoorkeuren en resultaten van de aanroep van hulpprogramma's.
  • Vereist een afzonderlijke LLM-client voor samenvatting: een kleiner, sneller model wordt aanbevolen.
  • Het meest geschikt voor het behouden van gesprekscontext, terwijl het aantal tokens aanzienlijk wordt verminderd.
  • U kunt een aangepaste samenvattingsprompt opgeven.
  • Beveiligt systeemberichten en de meest recente MinimumPreserved niet-systeemgroepen (standaard: 4).
  • Verzendt de oudere berichten naar een afzonderlijk IChatClient met een samenvattingsprompt en voegt vervolgens de samenvatting in als groep MessageGroupKind.Summary .
// Summarize older messages when tokens exceed 1280, keeping the last 4 groups
SummarizationCompactionStrategy summarization = new(
    chatClient: summarizerChatClient,
    trigger: CompactionTriggers.TokensExceed(0x500),
    minimumPreserved: 4);

U kunt een aangepaste samenvattingsprompt opgeven:

SummarizationCompactionStrategy summarization = new(
    chatClient: summarizerChatClient,
    trigger: CompactionTriggers.TokensExceed(0x500),
    summarizationPrompt: "Summarize the key decisions and user preferences only.");
  • Wordt geactiveerd wanneer het aantal niet-systeemberichten groter is dan target_count + threshold.
  • Behoudt de nieuwste target_count berichten; geeft een overzicht van alle oudere berichten.
  • Hiervoor is een SupportsChatGetResponse client vereist.
from agent_framework._compaction import SummarizationStrategy

# Summarize when non-system message count exceeds 6, retaining the 4 newest
summarization = SummarizationStrategy(
    client=summarizer_client,
    target_count=4,
    threshold=2,
)

Geef een aangepaste samenvattingsprompt op:

summarization = SummarizationStrategy(
    client=summarizer_client,
    target_count=4,
    prompt="Summarize the key decisions and user preferences only.",
)

PipelineCompactionStrategy

Stelt meerdere strategieën samen in een sequentiële pijplijn. Elke strategie werkt op het resultaat van de vorige strategie, waardoor gelaagde compressie van zacht tot agressief mogelijk is.

  • De eigen trigger van de pijplijn is CompactionTriggers.Always : elke onderliggende strategie evalueert een eigen trigger onafhankelijk.
  • Strategieën worden op volgorde uitgevoerd, dus plaats eerst de zachtste strategieën.
PipelineCompactionStrategy pipeline = new(
    new ToolResultCompactionStrategy(CompactionTriggers.TokensExceed(0x200)),
    new SummarizationCompactionStrategy(summarizerChatClient, CompactionTriggers.TokensExceed(0x500)),
    new SlidingWindowCompactionStrategy(CompactionTriggers.TurnsExceed(4)),
    new TruncationCompactionStrategy(CompactionTriggers.TokensExceed(0x8000)));

Deze pijplijn:

  1. Hiermee worden oude toolresultaten samengevouwen (zacht).
  2. Geeft een overzicht van oudere gesprekken (gemiddeld).
  3. Houdt alleen de laatste vier gebruikersbeurten bij (agressief).
  4. De oudste groepen worden verwijderd als ze nog steeds boven het budget zijn (noodmaatregel).

SelectieveGereedschapsAanroepCompactieStrategie

Sluit volledig oudere tool-aanroepgroepen uit en houdt alleen de laatste keep_last_tool_call_groups.

  • Raakt geen berichten van de gebruiker of platte assistent aan.
  • Het beste wanneer toolchatter het tokengebruik overheerst en de volledige hulpprogrammageschiedenis niet nodig is.
from agent_framework._compaction import SelectiveToolCallCompactionStrategy

# Keep only the most recent tool-call group
selective_tool = SelectiveToolCallCompactionStrategy(keep_last_tool_call_groups=1)

TokenBudgetComposedStrategy

Stelt meerdere strategieën samen in een sequentiële pijplijn die wordt aangestuurd door een tokenbudget. Elke kindstrategie wordt in volgorde uitgevoerd en stopt vroeg zodra het budget is gevuld. Een ingebouwde terugval sluit de oudste groepen uit als de strategieën alleen het doel niet kunnen bereiken.

  • Strategieën worden op volgorde uitgevoerd; plaats eerst de zachtste strategieën.
  • early_stop=True (de standaardinstelling) stopt zodra aan het tokenbudget is voldaan.
from agent_framework._compaction import (
    CharacterEstimatorTokenizer,
    SelectiveToolCallCompactionStrategy,
    SlidingWindowStrategy,
    SummarizationStrategy,
    TokenBudgetComposedStrategy,
    ToolResultCompactionStrategy,
)

tokenizer = CharacterEstimatorTokenizer()

pipeline = TokenBudgetComposedStrategy(
    token_budget=16_000,
    tokenizer=tokenizer,
    strategies=[
        ToolResultCompactionStrategy(keep_last_tool_call_groups=1),
        SummarizationStrategy(client=summarizer_client, target_count=4, threshold=2),
        SlidingWindowStrategy(keep_last_groups=20),
    ],
)

Deze pijplijn:

  1. Hiermee worden oude toolresultaten samengevouwen (zacht).
  2. Geeft een overzicht van oudere gesprekken (gemiddeld).
  3. Houdt alleen de laatste 20 groepen (agressief).
  4. Valt terug op oudste uitsluiting als het budget nog steeds is overschreden (noodstop).

Compressie gebruiken met een agent

Verpakt een compressiestrategie in een CompactionProvider en registreer deze als een AIContextProvider. Geef één strategie of een PipelineCompactionStrategy door aan de constructor.

Registreren bij de builder-API

Registreer de provider op de ChatClientBuilder met behulp van UseAIContextProviders. De provider wordt uitgevoerd in de lus voor het aanroepen van hulpprogramma's, waarbij berichten vóór elke LLM-aanroep worden gecomprimeerd.

IChatClient agentChatClient = openAIClient.GetChatClient(deploymentName).AsIChatClient();
IChatClient summarizerChatClient = openAIClient.GetChatClient(deploymentName).AsIChatClient();

PipelineCompactionStrategy compactionPipeline =
    new(
        new ToolResultCompactionStrategy(CompactionTriggers.TokensExceed(0x200)),
        new SummarizationCompactionStrategy(summarizerChatClient, CompactionTriggers.TokensExceed(0x500)),
        new SlidingWindowCompactionStrategy(CompactionTriggers.TurnsExceed(4)),
        new TruncationCompactionStrategy(CompactionTriggers.TokensExceed(0x8000)));

AIAgent agent =
    agentChatClient
        .AsBuilder()
        .UseAIContextProviders(new CompactionProvider(compactionPipeline))
        .BuildAIAgent(
            new ChatClientAgentOptions
            {
                Name = "ShoppingAssistant",
                ChatOptions = new()
                {
                    Instructions = "You are a helpful shopping assistant.",
                    Tools = [AIFunctionFactory.Create(LookupPrice)],
                },
            });

AgentSession session = await agent.CreateSessionAsync();
Console.WriteLine(await agent.RunAsync("What's the price of a laptop?", session));

Aanbeveling

Gebruik een kleiner, goedkoper model (zoals gpt-4o-mini) voor de samenvattingschatclient om de kosten te verlagen terwijl de kwaliteit van de samenvatting behouden blijft.

Als er slechts één strategie nodig is, kunt u deze rechtstreeks aan CompactionProvider doorgeven zonder deze in een PipelineCompactionStrategy:

agentChatClient
    .AsBuilder()
    .UseAIContextProviders(new CompactionProvider(
        new SlidingWindowCompactionStrategy(CompactionTriggers.TurnsExceed(20))))
    .BuildAIAgent(...);

Registreren via ChatClientAgentOptions

De provider kan ook rechtstreeks worden opgegeven op ChatClientAgentOptions.AIContextProviders:

AIAgent agent = agentChatClient
    .AsBuilder()
    .BuildAIAgent(new ChatClientAgentOptions
    {
        AIContextProviders = [new CompactionProvider(compactionPipeline)]
    });

Opmerking

Wanneer geregistreerd via ChatClientAgentOptions, wordt de CompactionProviderniet geactiveerd tijdens de lus voor het aanroepen van hulpprogramma's. Contextproviders op agentniveau worden uitgevoerd voordat de chatgeschiedenis wordt opgeslagen, zodat eventuele synthetische samenvattingsberichten die worden geproduceerd door CompactionProvider , deel kunnen uitmaken van de permanente geschiedenis bij gebruik ChatHistoryProvider. Als u alleen de context van de aanvraag tijdens de vlucht wilt comprimeren terwijl de oorspronkelijke opgeslagen geschiedenis behouden blijft, registreert u de provider op de ChatClientBuilder via UseAIContextProviders(...) .

Ad-hoc compressie

CompactionProvider.CompactAsync past een strategie toe op een willekeurige berichtenlijst zonder een actieve agentsessie:

IEnumerable<ChatMessage> compacted = await CompactionProvider.CompactAsync(
    new TruncationCompactionStrategy(CompactionTriggers.TokensExceed(8000)),
    existingMessages);

CompactionProvider is een contextprovider die compressiestrategieën toepast voor en na elke agentuitvoering. Voeg deze toe naast een geschiedenisprovider in de lijst van context_providers de agent.

  • before_strategy — wordt uitgevoerd vóór de modeloproep, waarbij berichten die al in de context zijn geladen, worden gecomprimeerd.
  • after_strategy — wordt uitgevoerd na de modelaanroep, waarbij de berichten die zijn opgeslagen door de geschiedenisprovider worden gecomprimeerd, zodat de volgende beurt kleiner wordt gestart.
  • history_source_id — de source_id geschiedenisprovider waarvan de opgeslagen berichten after_strategy moeten worden gecomprimeerd (standaard ingesteld op "in_memory").

Registreren bij een agent

from agent_framework import Agent, CompactionProvider, InMemoryHistoryProvider
from agent_framework._compaction import (
    CharacterEstimatorTokenizer,
    SlidingWindowStrategy,
    SummarizationStrategy,
    TokenBudgetComposedStrategy,
    ToolResultCompactionStrategy,
)

tokenizer = CharacterEstimatorTokenizer()

pipeline = TokenBudgetComposedStrategy(
    token_budget=16_000,
    tokenizer=tokenizer,
    strategies=[
        ToolResultCompactionStrategy(keep_last_tool_call_groups=1),
        SummarizationStrategy(client=summarizer_client, target_count=4, threshold=2),
        SlidingWindowStrategy(keep_last_groups=20),
    ],
)

history = InMemoryHistoryProvider()
compaction = CompactionProvider(
    before_strategy=pipeline,
    history_source_id=history.source_id,
)

agent = Agent(
    client=client,
    name="ShoppingAssistant",
    instructions="You are a helpful shopping assistant.",
    context_providers=[history, compaction],
)

session = agent.create_session()
print(await agent.run("What's the price of a laptop?", session=session))

Aanbeveling

Gebruik een kleiner, goedkoper model (zoals gpt-4o-mini) voor de samenvattingsclient om de kosten te verlagen terwijl de kwaliteit van de samenvatting behouden blijft.

Als er slechts één strategie nodig is, geeft u deze rechtstreeks door als before_strategy:

compaction = CompactionProvider(
    before_strategy=SlidingWindowStrategy(keep_last_groups=20),
    history_source_id=history.source_id,
)

Opgeslagen geschiedenis comprimeren na elke uitvoering

Gebruik after_strategy dit om de berichten die zijn opgeslagen door de geschiedenisprovider te comprimeren, zodat toekomstige beurten beginnen met een beperkte context:

compaction = CompactionProvider(
    before_strategy=SlidingWindowStrategy(keep_last_groups=20),
    after_strategy=ToolResultCompactionStrategy(keep_last_tool_call_groups=1),
    history_source_id=history.source_id,
)

Ad-hoc compressie

apply_compaction past een strategie toe op een willekeurige berichtenlijst buiten een actieve agentsessie:

from agent_framework._compaction import apply_compaction, TruncationStrategy, CharacterEstimatorTokenizer

tokenizer = CharacterEstimatorTokenizer()

compacted = await apply_compaction(
    messages,
    strategy=TruncationStrategy(
        max_n=8_000,
        compact_to=4_000,
        tokenizer=tokenizer,
    ),
    tokenizer=tokenizer,
)

Een strategie kiezen

Strategie Agressiviteit Context behouden Vereist LLM Het beste voor
ToolResultCompactionStrategy Laag Hoog: alleen de uitkomsten van hulpprogramma's samenvouwen No Ruimte vrijmaken van uitgebreide tooluitvoer
SummarizationCompactionStrategy Gemiddeld Gemiddeld : vervangt de geschiedenis door een samenvatting Ja Lange gesprekken waarbij context belangrijk is
SlidingWindowCompactionStrategy Hoog Laag — slaat volledige beurten over No Vaste limieten voor het aantal draaiingen
TruncationCompactionStrategy Hoog Laag — laat oudste groepen vallen No Backstops voor noodtokenbudget
PipelineCompactionStrategy Configurable Afhankelijk van onderliggende strategieën Dat hangt ervan af. Gelaagde verdichting met meerdere terugvallen
Strategie Agressiviteit Context behouden Vereist LLM Het beste voor
ToolResultCompactionStrategy Laag Hoog - vat de resultaten van het tool samen in overzichtsberichten No Ruimte vrijmaken van uitgebreide tooluitvoer
SelectiveToolCallCompactionStrategy Laag-gemiddeld Gemiddeld — sluit volledig oude 'tool-call groepen' uit No Hulpprogrammageschiedenis verwijderen wanneer resultaten niet meer nodig zijn
SummarizationStrategy Gemiddeld Gemiddeld : vervangt de geschiedenis door een samenvatting Ja Lange gesprekken waarbij context belangrijk is
SlidingWindowStrategy Hoog Laag — laat oudste groepen vallen No Strikte limieten voor het aantal groepen
TruncationStrategy Hoog Laag — laat oudste groepen vallen No Noodbericht- of tokenbudget-achtervang
TokenBudgetComposedStrategy Configurable Afhankelijk van kindstrategieën Dat hangt ervan af. Gelaagde compactie met een tokenbudgetdoel en meerdere terugvalopties

Volgende stappen