Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn die Gespräche zunehmen, kann die Tokenanzahl des Chatverlaufs die Modell-Kontextfenster überschreiten oder die Kosten erhöhen. Komprimierungsstrategien verringern die Größe der Aufgezeichneten Unterhaltungen und behalten gleichzeitig einen wichtigen Kontext bei, sodass Agents weiterhin über langfristige Interaktionen funktionieren können.
Von Bedeutung
Das Komprimierungsframework ist derzeit experimentell. Um es zu verwenden, müssen Sie #pragma warning disable MAAI001hinzufügen.
Von Bedeutung
Das Komprimierungsframework ist derzeit in Python experimentell. Strategien aus agent_framework._compaction importieren.
Warum Komprimierung wichtig ist
Jeder Anruf an ein LLM umfasst den vollständigen Unterhaltungsverlauf. Ohne Komprimierung:
- Tokengrenzwerte – Unterhaltungen überschreiten schließlich das Kontextfenster des Modells und verursachen Fehler.
- Kosten – Größere Aufforderungen verbrauchen mehr Token und erhöhen die API-Kosten.
- Latenz – Mehr Eingabetoken bedeuten langsamere Reaktionszeiten.
Die Komprimierung löst diese Probleme durch selektives Entfernen, Reduzieren oder Zusammenfassen älterer Teile der Unterhaltung.
Kernkonzepte
Anwendbarkeit: Nur Speicherverlaufs-Agents
Komprimierung gilt nur für Agenten, die ihren eigenen Unterhaltungsverlauf im Speicher verwalten. Agenten, die auf vom Dienst verwaltetem Kontext und Konversationsstatus basieren, profitieren nicht von der Komprimierung, da der Dienst bereits die Kontextverwaltung übernimmt. Beispiele für vom Dienst verwaltete Agents sind:
- Foundry Agents – Kontext wird serverseitig vom Azure AI Foundry-Dienst verwaltet.
- Antwort-API mit aktiviertem Speicher (Standard) – Der Unterhaltungsstatus wird vom OpenAI-Dienst gespeichert und verwaltet.
- Copilot Studio-Agents – Gesprächskontext wird vom Copilot Studio-Dienst verwaltet.
Für diese Agenttypen hat die Konfiguration einer Komprimierungsstrategie keine Auswirkung. Komprimierung ist nur relevant, wenn der Agent eine eigene Nachrichtenliste im Arbeitsspeicher verwaltet und den vollständigen Verlauf an das Modell bei jedem Anruf weitergibt.
Die Komprimierung arbeitet auf einer MessageIndex strukturierten Ansicht der flachen Nachrichtenliste, die Nachrichten in atomare Einheiten gruppiert, die als MessageGroup-Instanzen bezeichnet werden. Jede Gruppe verfolgt die Nachrichtenanzahl, byteanzahl und die geschätzte Tokenanzahl nach.
Nachrichtengruppen
Ein MessageGroup stellt logisch zusammengehörige Nachrichten dar, die zusammen beibehalten oder entfernt werden müssen. Eine Assistentennachricht, die Toolaufrufe enthält, und die entsprechenden Toolergebnismeldungen bilden beispielsweise eine atomische Gruppe – das Entfernen eines Ohne den anderen würde ZU LLM-API-Fehlern führen.
Jede Gruppe hat ein MessageGroupKind:
| Kind | Beschreibung |
|---|---|
System |
Eine oder mehrere Systemmeldungen. Immer während der Komprimierung erhalten. |
User |
Eine einzelne Benutzernachricht, die eine neue Drehung startet. |
AssistantText |
Eine simple Textantwort des Assistenten (keine Toolaufrufe). |
ToolCall |
Eine Assistant-Nachricht mit Toolaufrufen und den entsprechenden Ergebnismeldungen des Tools, die als Atomeinheit behandelt werden. |
Summary |
Eine komprimierte Nachricht, die von der Zusammenfassungskomprimierung erzeugt wird. |
Auslöser
Ein CompactionTrigger ist ein Delegat, der auswertet, ob die Komprimierung auf Basis der aktuellen MessageIndex Metriken fortgesetzt werden soll.
public delegate bool CompactionTrigger(MessageIndex index);
Die CompactionTriggers Klasse stellt allgemeine Fabrikmethoden bereit:
| Auslöser | Wird ausgelöst, wenn |
|---|---|
CompactionTriggers.Always |
Jedes Mal (bedingungslos). |
CompactionTriggers.Never |
Nie (Komprimierung wird deaktiviert). |
CompactionTriggers.TokensExceed(maxTokens) |
Die Anzahl der enthaltenen Tokens überschreitet den Schwellenwert. |
CompactionTriggers.MessagesExceed(maxMessages) |
Die Anzahl der eingeschlossenen Nachrichten überschreitet den Schwellenwert. |
CompactionTriggers.TurnsExceed(maxTurns) |
Die Anzahl der eingeschlossenen Benutzerinteraktionen überschreitet den Schwellenwert. |
CompactionTriggers.GroupsExceed(maxGroups) |
Die eingeschlossene Gruppenanzahl überschreitet den Schwellenwert. |
CompactionTriggers.HasToolCalls() |
Mindestens eine nicht ausgeschlossene Werkzeugaufrufgruppe ist vorhanden. |
Kombinieren von Triggern mit CompactionTriggers.All(...) (logisches UND) oder CompactionTriggers.Any(...) (logisches ODER):
// Compact only when there are tool calls AND tokens exceed 2000
CompactionTrigger trigger = CompactionTriggers.All(
CompactionTriggers.HasToolCalls(),
CompactionTriggers.TokensExceed(2000));
Trigger im Vergleich zum Ziel
Jede Strategie hat zwei Prädikate:
-
Trigger – Steuerelemente , wenn die Komprimierung beginnt. Wenn der Trigger
falsezurückgibt, wird die gesamte Strategie übersprungen. -
Ziel – Steuert , wenn die Komprimierung beendet wird. Strategien schließen Gruppen schrittweise aus und bewerten das Ziel nach jedem Schritt neu, wobei der Prozess endet, sobald das Ziel zurückkehrt
true.
Wenn kein Ziel angegeben wird, wird standardmäßig das Gegenteil des Triggers verwendet: Die Verdichtung wird beendet, sobald die Triggerbedingung nicht mehr erfüllt ist.
Komprimierung wird auf einer flachen Liste von Message Objekten ausgeführt. Nachrichten werden mit einfachen Gruppenmetadaten versehen, und Strategien mutieren diese Anmerkungen, um Gruppen als ausgeschlossen zu markieren, bevor die Nachrichtenliste auf das Modell projiziert wird.
Nachrichtengruppen
Nachrichten werden in atome Einheiten gruppiert. Jedem Gruppe wird ein GroupKind zugewiesen.
| Kind | Beschreibung |
|---|---|
system |
Systemmeldungen. Immer während der Komprimierung erhalten. |
user |
Eine einzelne Benutzernachricht. |
assistant_text |
Eine einfache Assistenz-Textantwort (keine Funktionsaufrufe). |
tool_call |
Eine Assistentennachricht mit Funktionsaufrufen sowie den entsprechenden Ergebnismeldungen des Tools, die als atome Einheit behandelt werden. |
Komprimierungsstrategien
Ein CompactionStrategy ist ein Protokoll – jedes async aufrufbares Element, das es list[Message] annehmen und direkt verändern kann, zurückkehrt True, sobald etwas geändert wurde:
class CompactionStrategy(Protocol):
async def __call__(self, messages: list[Message]) -> bool: ...
Tokenisierer
Tokenfähige Strategien akzeptieren eine TokenizerProtocol Implementierung. Das integrierte System CharacterEstimatorTokenizer verwendet eine Heuristik mit 4 Zeichen pro Token:
from agent_framework._compaction import CharacterEstimatorTokenizer
tokenizer = CharacterEstimatorTokenizer()
Übergeben Sie einen benutzerdefinierten Tokenizer, wenn Sie genaue Tokenanzahlen für die Codierung eines bestimmten Modells benötigen.
Komprimierungsstrategien
Alle Strategien erben von der abstrakten CompactionStrategy Basisklasse. Jede Strategie behält Systemmeldungen bei und respektiert eine MinimumPreserved Schwelle, die die neuesten Nicht-System-Gruppen vor der Entfernung schützt.
Komprimierungsstrategien werden aus agent_framework._compactionimportiert.
Trunkierungs-Kompressionsstrategie
Abkürzungsstrategie
Der einfachste Ansatz: Entfernt die ältesten Nicht-System-Nachrichtengruppen, bis die Zielbedingung erfüllt ist.
- Respektiert atomische Gruppengrenzen (Toolaufrufe und Ergebnismeldungen werden zusammen entfernt).
- Am besten geeignet für feste Token-Budget-Sicherungen.
- Der Standardwert von
MinimumPreservedist32.
// Drop oldest groups when tokens exceed 32K, keeping at least 10 recent groups
TruncationCompactionStrategy truncation = new(
trigger: CompactionTriggers.TokensExceed(0x8000),
minimumPreserved: 10);
- Wenn ein
tokenizerWert angegeben wird, ist die Metrik die Tokenanzahl. Andernfalls wird die Nachrichtenanzahl eingeschlossen. - Der Standardwert von
preserve_systemistTrue.
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
Gleitfensterstrategie
Entfernt ältere Unterhaltungsinhalte, um nur das neueste Austauschfenster beizubehalten, wobei logische Unterhaltungseinheiten und nicht willkürliche Nachrichtenanzahl berücksichtigt werden. Systemnachrichten werden fortlaufend beibehalten.
- Am besten geeignet für die Begrenzung einer Unterhaltungslänge auf vorhersagbare Weise.
Entfernt die ältesten Benutzer turns und ihre zugehörigen Antwortgruppen, wobei logische Abgrenzungen der Turns verwendet werden und nicht auf einzelne Gruppen abgezielt wird.
- Ein Vorgang beginnt mit einer Benutzernachricht und umfasst alle nachfolgenden Assistenten- und Werkzeugaufrufgruppen bis zur nächsten Benutzernachricht.
-
MinimumPreservedwird standardmäßig auf1gesetzt (behält mindestens die neueste nicht-systemdefinierte Gruppe bei).
// Keep only the last 4 user turns
SlidingWindowCompactionStrategy slidingWindow = new(
trigger: CompactionTriggers.TurnsExceed(4));
Behält nur die neuesten keep_last_groups Nicht-Systemgruppen bei, mit Ausnahme aller älteren Gruppen.
- Der Standardwert von
preserve_systemistTrue.
from agent_framework._compaction import SlidingWindowStrategy
# Keep only the last 20 non-system groups
sliding_window = SlidingWindowStrategy(keep_last_groups=20)
WerkzeugsErgebnisVerdichtungsStrategie
Reduziert ältere Toolanrufgruppen in kompakte Zusammenfassungsmeldungen, wobei eine lesbare Ablaufverfolgung ohne den vollständigen Nachrichtenaufwand erhalten bleibt.
- Berührt keine Benutzernachrichten oder einfache Assistentenantworten.
- Am besten als Erstdurchlaufstrategie, um Platz aus ausführlichen Toolergebnissen zurückzufordern.
- Ersetzt Tool-Anrufgruppen mit mehreren Nachrichten (Assistentenanruf + Ergebnisse der Werkzeuge) durch eine kurze Zusammenfassung, wie
[Tool calls: get_weather, search_docs]. -
MinimumPreservedwird standardmäßig auf2zurückgesetzt, wodurch sichergestellt wird, dass die Toolinteraktionen des aktuellen Zuges sichtbar bleiben.
// Collapse old tool results when tokens exceed 512
ToolResultCompactionStrategy toolCompaction = new(
trigger: CompactionTriggers.TokensExceed(0x200));
- Reduziert sich in kompakte Zusammenfassungsmeldungen wie
[Tool results: get_weather: sunny, 18°C]z. B. . - Die neuesten
keep_last_tool_call_groupsToolanrufgruppen bleiben unberührt.
from agent_framework._compaction import ToolResultCompactionStrategy
# Collapse all but the newest tool-call group
tool_result = ToolResultCompactionStrategy(keep_last_tool_call_groups=1)
SummarizationCompactionStrategy
Strategie zur Zusammenfassung
Verwendet eine LLM, um ältere Teile der Unterhaltung zusammenzufassen und durch eine einzelne Zusammenfassungsnachricht zu ersetzen.
- Eine Standardaufforderung behält wichtige Fakten, Entscheidungen, Benutzereinstellungen und Ergebnisse von Toolanrufen bei.
- Erfordert einen separaten LLM-Client für die Zusammenfassung – ein kleineres, schnelleres Modell wird empfohlen.
- Am besten geeignet, um den Konversationskontext zu bewahren und gleichzeitig die Tokenanzahl erheblich zu erniedrigen.
- Sie können eine benutzerdefinierte Zusammenfassungsaufforderung bereitstellen.
- Schützt Systemmeldungen und die neuesten
MinimumPreservedNicht-Systemgruppen (Standard:4). - Sendet die älteren Nachrichten an separates
IChatClientmit einer Aufforderung zur Zusammenfassung und fügt dann die Zusammenfassung alsMessageGroupKind.SummaryGruppe ein.
// Summarize older messages when tokens exceed 1280, keeping the last 4 groups
SummarizationCompactionStrategy summarization = new(
chatClient: summarizerChatClient,
trigger: CompactionTriggers.TokensExceed(0x500),
minimumPreserved: 4);
Sie können eine benutzerdefinierte Zusammenfassungsaufforderung bereitstellen:
SummarizationCompactionStrategy summarization = new(
chatClient: summarizerChatClient,
trigger: CompactionTriggers.TokensExceed(0x500),
summarizationPrompt: "Summarize the key decisions and user preferences only.");
- Trigger, wenn die Anzahl der nicht systemfremden
target_count + thresholdNachrichten überschreitet. - Behält die neuesten
target_countNachrichten bei; fasst alles zusammen, was älter ist. - Erfordert einen
SupportsChatGetResponseClient.
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,
)
Geben Sie eine benutzerdefinierte Zusammenfassungsaufforderung an:
summarization = SummarizationStrategy(
client=summarizer_client,
target_count=4,
prompt="Summarize the key decisions and user preferences only.",
)
Pipeline-Verdichtungsstrategie
Kombiniert mehrere Strategieansätze zu einer sequenziellen Pipeline. Jede Strategie basiert auf dem Ergebnis der vorherigen, wodurch eine abgestufte Komprimierung von sanft bis aggressiv ermöglicht wird.
- Der eigene Trigger der Pipeline lautet
CompactionTriggers.Always– jede untergeordnete Strategie wertet ihren eigenen Trigger unabhängig aus. - Strategien werden in der Reihenfolge ausgeführt, also setzen Sie die sanftsten Strategien zuerst.
PipelineCompactionStrategy pipeline = new(
new ToolResultCompactionStrategy(CompactionTriggers.TokensExceed(0x200)),
new SummarizationCompactionStrategy(summarizerChatClient, CompactionTriggers.TokensExceed(0x500)),
new SlidingWindowCompactionStrategy(CompactionTriggers.TurnsExceed(4)),
new TruncationCompactionStrategy(CompactionTriggers.TokensExceed(0x8000)));
Diese Pipeline:
- Klappt alte Werkzeugergebnisse auf sanfte Weise zusammen.
- Fasst ältere Gesprächszeiträume (mäßig) zusammen.
- Behält nur die letzten 4 Benutzerwechsel bei (aggressiv).
- Entfernt älteste Gruppen, wenn das Budget noch überschritten ist (Notfall-Backstop).
Selektive Werkzeuganruf-Komprimierungsstrategie
Ältere Werkzeugaufrufgruppen werden vollständig ausgeschlossen, wobei nur die letzte keep_last_tool_call_groups beibehalten wird.
- Berührt weder Benutzer- noch einfache Assistenten-Nachrichten.
- Am besten, wenn Der Toolchatter die Tokenverwendung dominiert und der vollständige Toolverlauf nicht benötigt wird.
from agent_framework._compaction import SelectiveToolCallCompactionStrategy
# Keep only the most recent tool-call group
selective_tool = SelectiveToolCallCompactionStrategy(keep_last_tool_call_groups=1)
TokenBudgetVerbundStrategie
Kombiniert mehrere Strategien in einer von einem Token-Budget gesteuerten sequenziellen Pipeline. Jede untergeordnete Strategie wird in der Reihenfolge ausgeführt und frühzeitig beendet, sobald das Budget erfüllt ist. Ein integrierter Fallback schließt die ältesten Gruppen aus, wenn die Strategien allein das Ziel nicht erreichen können.
- Strategien werden in der Reihenfolge ausgeführt; platzieren Sie die sanftsten Strategien zuerst.
-
early_stop=True(Standardeinstellung) wird beendet, sobald das Tokenbudget erfüllt ist.
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),
],
)
Diese Pipeline:
- Klappt alte Werkzeugergebnisse zusammen (sanft).
- Fasst ältere Unterhaltungen (mäßig) zusammen.
- Speichert nur die letzten 20 Gruppen (aggressive Vorgehensweise).
- Fällt auf den ältesten Ausschluss zurück, wenn der Haushalt noch über dem Budget liegt (Notfall-Backstop).
Verwendung der Komprimierung mit einem Agent
Umschließen Sie eine Komprimierungsstrategie in einer CompactionProvider und registrieren Sie sie als eine AIContextProvider. Übergeben Sie entweder eine einzelne Strategie oder eine PipelineCompactionStrategy an den Konstruktor.
Registrieren mit der Generator-API
Registrieren Sie den Anbieter auf ChatClientBuilder mit UseAIContextProviders. Der Anbieter wird innerhalb der Werkzeugaufrufschleife ausgeführt und komprimiert Nachrichten vor jedem LLM-Aufruf.
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));
Tipp
Verwenden Sie ein kleineres, günstigeres Modell (wie gpt-4o-mini) für den Zusammenfassungs-Chat-Client, um Kosten zu senken und gleichzeitig die Zusammenfassungsqualität aufrechtzuerhalten.
Wenn nur eine Strategie benötigt wird, übergeben Sie sie direkt an CompactionProvider, ohne dass Sie sie in eine PipelineCompactionStrategy umschließen müssen.
agentChatClient
.AsBuilder()
.UseAIContextProviders(new CompactionProvider(
new SlidingWindowCompactionStrategy(CompactionTriggers.TurnsExceed(20))))
.BuildAIAgent(...);
Registrieren über ChatClientAgentOptions
Der Anbieter kann auch direkt bei ChatClientAgentOptions.AIContextProviders spezifiziert werden.
AIAgent agent = agentChatClient
.AsBuilder()
.BuildAIAgent(new ChatClientAgentOptions
{
AIContextProviders = [new CompactionProvider(compactionPipeline)]
});
Hinweis
Wenn die Registrierung durch ChatClientAgentOptions erfolgt, wird CompactionProvider während der Toolaufrufschleife nicht aktiviert. Kontextanbieter auf Agentenebene werden ausgeführt, bevor der Chatverlauf gespeichert wird, sodass alle synthetischen Zusammenfassungsnachrichten, die von CompactionProvider erzeugt werden, Teil des gespeicherten Verlaufs werden können, wenn Sie ChatHistoryProvider verwenden. Um nur den In-Flight-Anforderungskontext zu komprimieren und dabei den ursprünglichen gespeicherten Verlauf beizubehalten, registrieren Sie den Anbieter stattdessen über ChatClientBuilderUseAIContextProviders(...) .
Ad-hoc-Komprimierung
CompactionProvider.CompactAsync wendet eine Strategie auf eine beliebige Nachrichtenliste ohne aktive Agentsitzung an:
IEnumerable<ChatMessage> compacted = await CompactionProvider.CompactAsync(
new TruncationCompactionStrategy(CompactionTriggers.TokensExceed(8000)),
existingMessages);
CompactionProvider ist ein Kontextanbieter, der Komprimierungsstrategien vor und nach jeder Agentausführung anwendet. Fügen Sie ihn zusammen mit einem Historienanbieter in die Liste des context_providers-Agents hinzu.
-
before_strategy— wird vor dem Modellaufruf ausgeführt und komprimiert Nachrichten, die bereits in den Kontext geladen wurden. -
after_strategy— wird nach dem Modellaufruf ausgeführt und komprimiert die vom Verlaufsanbieter gespeicherten Nachrichten, so dass der nächste Durchlauf kleiner startet. -
history_source_id— dessource_idVerlaufsanbieters, dessen gespeicherte Nachrichtenafter_strategykomprimiert werden sollen (Standardeinstellung"in_memory").
Registrieren bei einem 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))
Tipp
Verwenden Sie ein kleineres, kostengünstigeres Modell (z. B. gpt-4o-mini) für den Zusammenfassungs-Client, um die Kosten zu senken und gleichzeitig die Qualität der Zusammenfassung beizubehalten.
Wenn nur eine Strategie benötigt wird, übergeben Sie sie direkt als before_strategy.
compaction = CompactionProvider(
before_strategy=SlidingWindowStrategy(keep_last_groups=20),
history_source_id=history.source_id,
)
Komprimieren des gespeicherten Verlaufs nach jeder Ausführung
Verwenden Sie after_strategy, um die vom Verlaufsanbieter gespeicherten Nachrichten zu komprimieren, damit zukünftige Schritte mit einem reduzierten Kontext beginnen.
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-Komprimierung
apply_compaction wendet eine Strategie auf eine beliebige Nachrichtenliste außerhalb einer aktiven Agentsitzung an:
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,
)
Auswählen einer Strategie
| Strategie | Aggressivität | Behält den Kontext bei | Erfordert LLM | Am besten geeignet für |
|---|---|---|---|---|
ToolResultCompactionStrategy |
Niedrig | Hoch – reduziert nur Toolergebnisse | No | Freigeben des Platzes aus ausführlicher Toolausgabe |
SummarizationCompactionStrategy |
Mittelstufe | Mittel – ersetzt den Verlauf durch eine Zusammenfassung. | Ja | Lange Unterhaltungen, bei denen Kontext wichtig ist |
SlidingWindowCompactionStrategy |
Hoch | Niedrig - verliert gesamte Umdrehungen | No | Einschränkungen für harte Turn-Count-Werte |
TruncationCompactionStrategy |
Hoch | Niedrig – entfernt älteste Gruppen | No | Notfall-Token-Budget-Absicherungen |
PipelineCompactionStrategy |
Konfigurierbar | Hängt von Kinderstrategien ab | Hängt | Mehrschichtige Komprimierung mit mehreren Fallbacks |
| Strategie | Aggressivität | Behält den Kontext bei | Erfordert LLM | Am besten geeignet für |
|---|---|---|---|---|
ToolResultCompactionStrategy |
Niedrig | Hoch – reduziert Die Ergebnisse des Tools in Zusammenfassungsmeldungen | No | Zurückgewinnung von Platz aus umfangreicher Tool-Ausgabe |
SelectiveToolCallCompactionStrategy |
Niedrig bis Mittel | Mittel – schließt alte Werkzeugaufrufgruppen völlig aus. | No | Entfernen des Toolverlaufs, wenn Ergebnisse nicht mehr benötigt werden |
SummarizationStrategy |
Mittelstufe | Medium – ersetzt die Verlaufsgeschichte durch eine Zusammenfassung. | Ja | Lange Unterhaltungen, bei denen Kontext wichtig ist |
SlidingWindowStrategy |
Hoch | Niedrig – entfernt die ältesten Gruppen | No | Strikte Gruppenanzahlgrenzen |
TruncationStrategy |
Hoch | Niedrig — löscht die ältesten Gruppen | No | Notfallnachrichten- oder Tokenbudget-Backstops |
TokenBudgetComposedStrategy |
Konfigurierbar | Hängt von Kinderstrategien ab | Hängt | Mehrschichtige Komprimierung mit dem Ziel eines Token-Budgets und mehreren Rückfalloptionen |