대화가 증가함에 따라 채팅 기록의 토큰 수가 모델 컨텍스트 창을 초과하거나 비용을 늘릴 수 있습니다. 압축 전략은 중요한 컨텍스트를 유지하면서 대화 기록의 크기를 줄여 에이전트가 장기 실행 상호 작용을 통해 계속 작동할 수 있도록 합니다.
중요합니다
압축 프레임워크는 현재 실험적입니다. 이 기능을 사용하려면 #pragma warning disable MAAI001추가해야 합니다.
중요합니다
압축 프레임워크는 현재 Python에서 실험적입니다.
agent_framework._compaction에서 전략을 가져옵니다.
압축이 중요한 이유
LLM에 대한 모든 호출에는 전체 대화 기록이 포함됩니다. 압축하지 않고 다음을 수행합니다.
- 토큰 제한 - 대화가 결국 모델의 컨텍스트 창을 초과하여 오류가 발생합니다.
- 비용 - 더 큰 프롬프트는 더 많은 토큰을 사용하므로 API 비용이 증가합니다.
- 대기 시간 - 입력 토큰이 많을수록 응답 시간이 느려집니다.
압축은 대화의 이전 부분을 선택적으로 제거, 축소 또는 요약하여 이러한 문제를 해결합니다.
핵심 개념
적용 가능성: 인메모리 히스토리 에이전트만
압축은 메모리에서 자신의 대화 기록을 관리하는 에이전트에만 적용됩니다. 서비스가 이미 컨텍스트 관리를 처리하므로 서비스 관리 컨텍스트 또는 대화 상태를 사용하는 에이전트는 압축을 활용하지 않습니다. 서비스 관리 에이전트의 예는 다음과 같습니다.
- Foundry 에이전트 — 컨텍스트는 Azure AI Foundry 서비스에 의해 서버 측에서 관리됩니다.
- 저장소를 사용하도록 설정된 응답 API (기본값) - 대화 상태는 OpenAI 서비스에서 저장 및 관리됩니다.
- Copilot Studio 에이전트 - 대화 컨텍스트는 Copilot Studio 서비스에서 유지 관리됩니다.
이러한 에이전트 유형의 경우 압축 전략을 구성하는 데 아무런 영향을 주지 않습니다. 압축은 에이전트가 자체 메모리 내 메시지 목록을 유지하고 각 호출 시 모델에 전체 기록을 전달하는 경우에만 관련이 있습니다.
압축은 MessageIndex 메시지를 인스턴스라는 MessageGroup 원자 단위로 그룹화한 플랫 메시지 목록의 구조화된 보기에서 작동합니다. 각 그룹은 메시지 수, 바이트 수 및 예상 토큰 수를 추적합니다.
메시지 그룹
A MessageGroup 는 함께 유지하거나 제거해야 하는 논리적으로 관련된 메시지를 나타냅니다. 예를 들어 도구 호출 및 해당 도구 결과 메시지가 포함된 도우미 메시지는 원자성 그룹을 형성합니다. 다른 메시지 없이 제거하면 LLM API 오류가 발생합니다.
각 그룹에는 MessageGroupKind이 있습니다.
| Kind | 설명 |
|---|---|
System |
하나 이상의 시스템 메시지. 압축하는 동안 항상 유지됩니다. |
User |
새 턴을 시작하는 단일 사용자 메시지입니다. |
AssistantText |
일반 도우미 텍스트 응답(도구 호출 없음) |
ToolCall |
원자 단위로 처리되는 도구 호출 및 해당 도구 결과 메시지가 포함된 도우미 메시지입니다. |
Summary |
요약 압축을 통해 생성된 압축된 메시지입니다. |
유발 요소
A CompactionTrigger 는 현재 MessageIndex 메트릭에 따라 압축을 진행할지 여부를 평가하는 대리자입니다.
public delegate bool CompactionTrigger(MessageIndex index);
클래스는 CompactionTriggers 일반적인 팩터리 메서드를 제공합니다.
| Trigger | 발생하는 경우 |
|---|---|
CompactionTriggers.Always |
매번(무조건) |
CompactionTriggers.Never |
안 함(압축을 사용하지 않도록 설정). |
CompactionTriggers.TokensExceed(maxTokens) |
포함된 토큰 수가 임계값을 초과합니다. |
CompactionTriggers.MessagesExceed(maxMessages) |
포함된 메시지 수가 임계값을 초과합니다. |
CompactionTriggers.TurnsExceed(maxTurns) |
포함된 사용자 턴 수가 임계값을 초과합니다. |
CompactionTriggers.GroupsExceed(maxGroups) |
포함된 그룹 수가 임계값을 초과합니다. |
CompactionTriggers.HasToolCalls() |
제외하지 않은 도구 호출 그룹이 하나 이상 있습니다. |
트리거를 CompactionTriggers.All(...) (논리적 AND) 또는 CompactionTriggers.Any(...) (논리적 OR)과 결합합니다.
// Compact only when there are tool calls AND tokens exceed 2000
CompactionTrigger trigger = CompactionTriggers.All(
CompactionTriggers.HasToolCalls(),
CompactionTriggers.TokensExceed(2000));
트리거 및 대상
모든 전략에는 다음 두 가지 조건자가 있습니다.
-
트리거 - 압축이 시작되는 시기를 제어합니다. 트리거가
false를 반환하면 전략은 완전히 건너뜁니다. -
대상 - 압축이 중지되는 시기를 제어합니다. 전략은 그룹을 증분 방식으로 제외하고 각 단계 후에 대상을 다시 평가하여 대상이 반환되는 즉시 중지합니다
true.
대상이 지정되지 않으면 기본값으로 트리거의 반대로 설정됩니다. 즉, 트리거 조건이 더 이상 발동하지 않으면 즉시 압축이 중지됩니다.
압축은 개체의 Message 플랫 목록에서 작동합니다. 메시지는 간단한 그룹 메타데이터로 주석을 달고, 전략은 메시지 목록이 모델에 프로젝션되기 전에 그룹을 제외된 것으로 표시하기 위해 해당 주석을 변경합니다.
메시지 그룹
메시지는 원자 단위로 그룹화됩니다. 각 그룹에는 GroupKind가 할당됩니다.
| Kind | 설명 |
|---|---|
system |
시스템 메시지. 압축하는 동안 항상 유지됩니다. |
user |
단일 사용자 메시지입니다. |
assistant_text |
일반 도우미 텍스트 응답(함수 호출 없음) |
tool_call |
함수 호출이 있는 도우미 메시지와 원자 단위로 처리되는 해당 도구 결과 메시지. |
압축 전략
CompactionStrategy은 프로토콜로서, list[Message]를 받아들여 바꿀 수 있는 모든 async 호출 가능 단위로, 만약 변경된 내용이 있을 경우 True을 반환합니다.
class CompactionStrategy(Protocol):
async def __call__(self, messages: list[Message]) -> bool: ...
토큰화기
토큰 인식 전략은 TokenizerProtocol 구현을 허용합니다. 기본 제공 CharacterEstimatorTokenizer 에서는 토큰당 4자 추론을 사용합니다.
from agent_framework._compaction import CharacterEstimatorTokenizer
tokenizer = CharacterEstimatorTokenizer()
특정 모델의 인코딩에 대한 정확한 토큰 수가 필요한 경우 사용자 지정 토큰 변환기를 전달합니다.
압축 전략
모든 전략은 추상 CompactionStrategy 기본 클래스에서 상속됩니다. 각 전략은 시스템 메시지를 유지하고, MinimumPreserved 가장 최근의 비 시스템 그룹을 제거로부터 보호하는 바닥을 준수합니다.
압축 전략은 agent_framework._compaction에서 가져옵니다.
TruncationCompactionStrategy
잘림 전략 (TruncationStrategy)
가장 간단한 방법: 대상 조건이 충족될 때까지 가장 오래된 비 시스템 메시지 그룹을 제거합니다.
- 원자성 그룹 경계를 존중합니다(도구 호출 및 결과 메시지가 함께 제거됨).
- 하드 토큰 예산 백스톱에 가장 적합합니다.
-
MinimumPreserved기본값은32입니다.
// Drop oldest groups when tokens exceed 32K, keeping at least 10 recent groups
TruncationCompactionStrategy truncation = new(
trigger: CompactionTriggers.TokensExceed(0x8000),
minimumPreserved: 10);
-
tokenizer가 제공되면 메트릭은 토큰 수이고, 그렇지 않으면 메시지 수가 사용됩니다. -
preserve_system기본값은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
슬라이딩 윈도우 전략
이전 대화 콘텐츠를 제거하여 임의의 메시지 수가 아닌 논리적 대화 단위를 존중하여 가장 최근의 교환 창만 유지합니다. 시스템 메시지는 전체에서 유지됩니다.
- 대화 길이를 예측 가능하게 관리하기에 가장 적합합니다.
개별 그룹이 아닌 논리적 턴 경계에서 작동하는 가장 오래된 사용자 턴 및 관련 응답 그룹을 제거합니다.
- 순서는 사용자 메시지로 시작하고 다음 사용자 메시지까지 모든 후속 도우미 및 도구 호출 그룹을 포함합니다.
-
MinimumPreserved의 기본값은1이며, 적어도 가장 최근의 비시스템 그룹을 유지합니다.
// Keep only the last 4 user turns
SlidingWindowCompactionStrategy slidingWindow = new(
trigger: CompactionTriggers.TurnsExceed(4));
이전의 모든 항목을 제외하고 가장 최근의 keep_last_groups 비시스템 그룹만 유지합니다.
-
preserve_system기본값은True입니다.
from agent_framework._compaction import SlidingWindowStrategy
# Keep only the last 20 non-system groups
sliding_window = SlidingWindowStrategy(keep_last_groups=20)
툴결과압축전략
이전 도구 호출 그룹을 압축 요약 메시지로 축소하여 전체 메시지 오버헤드 없이 읽을 수 있는 추적을 유지합니다.
- 사용자 메시지 또는 일반 도우미 응답을 건드리지 않습니다.
- 자세한 도구 결과에서 공간을 회수하는 첫 번째 패스 전략으로 가장 적합합니다.
- 다중 메시지 도구 호출 그룹(도우미 호출 + 도구 결과)을 다음과 같은
[Tool calls: get_weather, search_docs]간단한 요약으로 대체합니다. -
MinimumPreserved기본값으로2, 현재 턴의 도구 상호 작용이 계속 표시되도록 합니다.
// Collapse old tool results when tokens exceed 512
ToolResultCompactionStrategy toolCompaction = new(
trigger: CompactionTriggers.TokensExceed(0x200));
-
[Tool results: get_weather: sunny, 18°C]과 같은 형태로 압축된 요약 메시지로 축소됩니다. - 가장 최근의
keep_last_tool_call_groups도구 호출 그룹은 그대로 유지됩니다.
from agent_framework._compaction import ToolResultCompactionStrategy
# Collapse all but the newest tool-call group
tool_result = ToolResultCompactionStrategy(keep_last_tool_call_groups=1)
요약 압축 전략 (SummarizationCompactionStrategy)
요약 전략
LLM을 사용하여 대화의 이전 부분을 요약하여 단일 요약 메시지로 바꿔줍니다.
- 기본 프롬프트는 주요 사실, 의사 결정, 사용자 기본 설정 및 도구 호출 결과를 유지합니다.
- 요약을 위해 별도의 LLM 클라이언트가 필요합니다. 더 작고 빠른 모델을 사용하는 것이 좋습니다.
- 토큰 수를 크게 줄이면서 대화형 컨텍스트를 유지하는 데 가장 적합합니다.
- 사용자 지정 요약 프롬프트를 제공할 수 있습니다.
- 시스템 메시지와 가장 최근의
MinimumPreserved비시스템 그룹(기본값:4)을 보호합니다. - 요약 프롬프트를 사용하여 이전 메시지를 별도의
IChatClient메시지로 보낸 다음 요약을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);
사용자 지정 요약 프롬프트를 제공할 수 있습니다.
SummarizationCompactionStrategy summarization = new(
chatClient: summarizerChatClient,
trigger: CompactionTriggers.TokensExceed(0x500),
summarizationPrompt: "Summarize the key decisions and user preferences only.");
- 포함된 비 시스템 메시지 수가 초과되면 트리거됩니다
target_count + threshold. - 최신
target_count메시지를 유지하며 이전의 모든 메시지를 요약합니다. - 클라이언트가
SupportsChatGetResponse필요합니다.
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,
)
사용자 지정 요약 프롬프트를 제공합니다.
summarization = SummarizationStrategy(
client=summarizer_client,
target_count=4,
prompt="Summarize the key decisions and user preferences only.",
)
PipelineCompactionStrategy
여러 전략을 순차적 파이프라인으로 구성합니다. 각 전략은 이전 전략의 결과를 기반으로 작동하여, 순한 압축에서 공격적인 압축으로 계층화된 방식을 구현할 수 있습니다.
- 파이프라인의 자체 트리거는
CompactionTriggers.Always이고, 각 자식 전략은 자신의 트리거를 독립적으로 평가합니다. - 전략은 순서대로 실행되므로 가장 부드러운 전략을 최우선으로 하십시오.
PipelineCompactionStrategy pipeline = new(
new ToolResultCompactionStrategy(CompactionTriggers.TokensExceed(0x200)),
new SummarizationCompactionStrategy(summarizerChatClient, CompactionTriggers.TokensExceed(0x500)),
new SlidingWindowCompactionStrategy(CompactionTriggers.TurnsExceed(4)),
new TruncationCompactionStrategy(CompactionTriggers.TokensExceed(0x8000)));
이 파이프라인:
- 이전 도구 결과를 축소합니다(부드러운).
- 이전 대화 범위(보통)를 요약합니다.
- 마지막 4개 사용자 턴만 유지합니다(공격적).
- 예산을 초과하면 가장 오래된 그룹을 삭제합니다(비상 백스톱).
선택적 도구 호출 압축 전략
이전 도구 호출 그룹을 완전히 제외하고 마지막 keep_last_tool_call_groups도구 호출 그룹만 유지합니다.
- 사용자 또는 일반 도우미 메시지를 건드리지 않습니다.
- 도구 대화가 토큰 사용을 지배하고 전체 도구 기록이 필요하지 않은 경우에 가장 좋습니다.
from agent_framework._compaction import SelectiveToolCallCompactionStrategy
# Keep only the most recent tool-call group
selective_tool = SelectiveToolCallCompactionStrategy(keep_last_tool_call_groups=1)
톤버짓컴포즈드전략 (TokenBudgetComposedStrategy)
토큰 예산으로 구동되는 순차적 파이프라인으로 여러 전략을 구성합니다. 각 자식 전략은 순서에 따라 실행되며, 예산이 만족될 때 즉시 중단됩니다. 전략만으로는 목표에 도달할 수 없는 경우, 내장 대체 메커니즘은 가장 오래된 그룹을 제외합니다.
- 전략은 순서대로 실행됩니다. 가장 부드러운 전략을 먼저 배치합니다.
-
early_stop=True(기본값)은 토큰 예산이 충족되는 즉시 중지됩니다.
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),
],
)
이 파이프라인:
- 이전 도구 결과를 부드럽게 축소합니다.
- 이전 대화 범위를 요약합니다 (중간 수준).
- 마지막 20개 그룹만 유지합니다(공격적).
- 예산(긴급 백스톱)을 초과하면 가장 오래된 첫 번째 제외로 돌아갑니다.
에이전트를 사용한 압축
압축 전략을 CompactionProvider에 랩핑하고 AIContextProvider로 등록합니다. 단일 전략 또는 PipelineCompactionStrategy를 생성자에 전달하십시오.
작성기 API에 등록
공급자를 ChatClientBuilder에 등록하고 UseAIContextProviders을 사용합니다. 공급자는 도구 호출 루프 내에서 실행되며, 각 LLM 호출 전에 메시지를 압축합니다.
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));
팁 (조언)
요약 채팅 클라이언트에 더 작고 저렴한 모델(예: gpt-4o-mini)을 사용하여 요약 품질을 유지하면서 비용을 절감합니다.
단일 전략이 필요한 경우 CompactionProvider에 PipelineCompactionStrategy으로 래핑하지 않고 직접 전달하십시오.
agentChatClient
.AsBuilder()
.UseAIContextProviders(new CompactionProvider(
new SlidingWindowCompactionStrategy(CompactionTriggers.TurnsExceed(20))))
.BuildAIAgent(...);
ChatClientAgentOptions을(를) 통해 등록하기
공급자는 다음에 직접 지정할 수도 있습니다 :ChatClientAgentOptions.AIContextProviders
AIAgent agent = agentChatClient
.AsBuilder()
.BuildAIAgent(new ChatClientAgentOptions
{
AIContextProviders = [new CompactionProvider(compactionPipeline)]
});
메모
등록이 ChatClientAgentOptions를 통해 이루어질 때, CompactionProvider는 도구 호출 루프에서 사용되지 않습니다. 에이전트 수준 컨텍스트 공급자는 채팅 기록이 저장되기 전에 실행되므로 생성된 모든 합성 요약 메시지는 CompactionProvider 사용할 ChatHistoryProvider때 지속된 기록의 일부가 될 수 있습니다. 원래 저장된 기록을 유지하면서 진행 중인 요청 컨텍스트만 압축하려면 UseAIContextProviders(...)을 통해 ChatClientBuilder에 공급자를 등록하십시오.
임시 압축
CompactionProvider.CompactAsync 는 활성 에이전트 세션이 없는 임의의 메시지 목록에 전략을 적용합니다.
IEnumerable<ChatMessage> compacted = await CompactionProvider.CompactAsync(
new TruncationCompactionStrategy(CompactionTriggers.TokensExceed(8000)),
existingMessages);
CompactionProvider 는 각 에이전트 실행 전후에 압축 전략을 적용하는 컨텍스트 공급자입니다. 에이전트 context_providers 목록에 기록 공급자와 함께 추가합니다.
-
before_strategy- 모델 호출 전에 실행되며, 컨텍스트에 이미 로드된 메시지를 압축합니다. -
after_strategy- 모델 호출 후에 실행되어 기록 공급자가 저장한 메시지를 압축하여 다음 턴이 더 작게 시작되도록 합니다. -
history_source_idsource_id— 저장된 메시지가 압축되어야 하는 히스토리 제공자(기본값:"in_memory")입니다.
에이전트에 등록
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))
팁 (조언)
요약 클라이언트에 더 작고 저렴한 모델(예: gpt-4o-mini)을 사용하여 요약 품질을 유지하면서 비용을 절감합니다.
하나의 전략만 필요한 경우 다음과 같이 before_strategy직접 전달합니다.
compaction = CompactionProvider(
before_strategy=SlidingWindowStrategy(keep_last_groups=20),
history_source_id=history.source_id,
)
각 실행 후 지속된 기록 압축
이후 전환이 축소된 컨텍스트로 시작되도록 기록 공급자가 저장한 메시지를 압축하는 데 사용합니다 after_strategy .
compaction = CompactionProvider(
before_strategy=SlidingWindowStrategy(keep_last_groups=20),
after_strategy=ToolResultCompactionStrategy(keep_last_tool_call_groups=1),
history_source_id=history.source_id,
)
임시 압축
apply_compaction 는 활성 에이전트 세션 외부의 임의의 메시지 목록에 전략을 적용합니다.
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,
)
전략 선택
| 전략 | 강도 | 컨텍스트 유지 | LLM 필요 | 적합한 대상 |
|---|---|---|---|---|
ToolResultCompactionStrategy |
낮음 | 높은 - 도구의 결과만 축소됨 | No | 장황한 도구 출력에서 공간 절약 |
SummarizationCompactionStrategy |
중간 | 보통 - 기록을 요약으로 대체합니다. | 예 | 컨텍스트가 중요한 긴 대화 |
SlidingWindowCompactionStrategy |
높음 | 낮음 - 전체 회전 삭제 | No | 고정된 턴 카운트 제한 |
TruncationCompactionStrategy |
높음 | 낮음 - 가장 오래된 그룹을 삭제합니다. | No | 긴급 토큰 예산 백스톱 |
PipelineCompactionStrategy |
Configurable | 자식 전략에 따라 다름 | 다릅니다 | 여러 대안 방법을 사용하여 계층화된 압축 |
| 전략 | 강도 | 컨텍스트 유지 | LLM 필요 | 적합한 대상 |
|---|---|---|---|---|
ToolResultCompactionStrategy |
낮음 | 높음 - 도구 결과를 요약 메시지로 축소 | No | 장황한 도구 출력에서 공간 복구 |
SelectiveToolCallCompactionStrategy |
낮음-보통 | 중간 - 이전 도구 호출 그룹을 완전히 제외합니다. | No | 결과가 더 이상 필요하지 않은 경우 도구 기록 제거 |
SummarizationStrategy |
중간 | 보통 - 기록을 요약으로 대체합니다. | 예 | 컨텍스트가 중요한 긴 대화 |
SlidingWindowStrategy |
높음 | 낮음 - 가장 오래된 그룹을 삭제합니다. | No | 고정 그룹 수 제한 |
TruncationStrategy |
높음 | 낮음 - 가장 오래된 그룹을 삭제합니다. | No | 긴급 메시지 백업 시스템과 토큰 예산 안전장치 |
TokenBudgetComposedStrategy |
Configurable | 자식 전략에 따라 다름 | 다릅니다 | 계층화된 압축을 위한 토큰 예산 목표와 여러 대안 |