20 lines
1.5 KiB
Markdown
20 lines
1.5 KiB
Markdown
# Correção: compactação de contexto LLM
|
|
|
|
## Problema
|
|
O estado operacional preserva resultados completos de MCP/workflows para auditoria e continuidade. Esses objetos podem conter cópias recursivas de `state`, `input`, `session`, `agent_profile`, `business_events`, `trace`, `nodes` e outros dados técnicos. Quando `build_messages()` serializava diretamente `mcp_results` e `transaction_evidence`, o prompt podia ultrapassar a janela do modelo.
|
|
|
|
Caso observado: `Input length (134212) exceeds model's maximum context length (131072)` no `ContestacaoAgent`.
|
|
|
|
## Correção
|
|
- `build_messages()` passa a renderizar business context, MCP results, transaction evidence, RAG metadata e extra sections por um compactador genérico com orçamento de caracteres.
|
|
- Objetos técnicos recursivos permanecem no estado/checkpoint para auditoria, mas não são reenviados integralmente ao LLM.
|
|
- Fatos de negócio (tool, subject, status, valores, protocolos e resultados úteis) são preservados dentro do orçamento.
|
|
- Se o provider ainda rejeitar por limite de contexto, `_invoke_llm_cached()` executa uma única segunda tentativa com orçamento emergencial de mensagens.
|
|
- Não há loop de retries; qualquer outra exceção continua propagando normalmente.
|
|
|
|
## Invariantes
|
|
1. Estado operacional completo != contexto de prompt.
|
|
2. Compactação não altera a execução das tools/workflows.
|
|
3. Context-limit error recebe no máximo um retry compactado.
|
|
4. A correção é genérica e não contém regra específica do Contas/TIM.
|