Por que JSON Malformado?
LLMs frequentemente geram JSON invalido em seus argumentos de tool call. Isso acontece porque modelos de linguagem trabalham com tokens, não com validação de sintaxe:As 7 Estrategias de Recuperação
O sistemaNormalizeToolArgs aplica até 7 estrategias em sequencia, parando na primeira que produz JSON valido:
1. Parse JSON Padrão
1. Parse JSON Padrão
Tenta parsing direto com
json.Unmarshal. Se o JSON já e valido, retorna imediatamente sem modificacoes.2. Aspas Simples para Duplas
2. Aspas Simples para Duplas
Converte aspas simples para duplas com tratamento correto de escaping. Preserva aspas simples dentro de strings e escapa aspas duplas internas.
3. Chaves sem Aspas
3. Chaves sem Aspas
Adiciona aspas duplas a chaves que não estao entre aspas. Usa regex para detectar o padrão
{key: ou , key:.4. Combinado: Aspas + Chaves
4. Combinado: Aspas + Chaves
Aplica a correcao de aspas simples primeiro e depois a correcao de chaves sem aspas. Resolve casos onde ambos os problemas coexistem.
5. Virgulas Finais
5. Virgulas Finais
Remove virgulas antes de
} ou ] que tornam o JSON invalido.6. Plain String Wrapping
6. Plain String Wrapping
Quando o modelo envia apenas um valor puro em vez de um objeto JSON, o sistema o envolve no campo correto baseado no nome da ferramenta.O mapeamento cobre 30+ ferramentas e aliases, incluindo funções nativas (
read_file, write_file) e subcomandos do coder (read, exec, search).7. Fix Agressivo de Literais de Objeto
7. Fix Agressivo de Literais de Objeto
Para literais de objeto sem nenhum tipo de aspas, o sistema faz parse manual de pares Valores sao interpretados inteligentemente:
chave: valor e reconstroi JSON valido.true/false→ booleans- Numeros → numeros JSON
null/none→ null- Strings entre aspas → strings (aspas removidas)
- Tudo mais → string
Mapeamento Tool → Campo
O plain string wrapping usa um mapeamento extenso de nomes de ferramenta para o campo primário de entrada:- Ferramentas Nativas
- Subcomandos Coder
- Aliases Genericos
O wrapping so e aplicado quando o valor não se parece com argumentos CLI (sem
--flags) e não comeca com { ou [. Isso evita conflitos com o parser de argumentos CLI existente.Normalizacao de Aspas Unicode
Alem do JSON recovery, o ChatCLI normaliza aspas curvas (Unicode) para aspas retas (ASCII) automaticamente. LLMs frequentemente geram aspas tipograficas que causam erros de compilacao:
A normalizacao e aplicada automaticamente em arquivos de código (60+ extensoes reconhecidas) e sempre em argumentos de tool call.
Configuração
O sistema de recuperação funciona automaticamente sem configuração. Todas as estrategias sao aplicadas em ordem até que uma produza JSON valido.As estrategias de recuperação sao não-destrutivas: se nenhuma produzir JSON valido, o texto original e passado adiante para que o parser CLI tente interpretar como argumentos posicionais.
Próximos Passos
Plugin @coder
Referência completa das ferramentas que usam JSON recovery.
Tool Use Nativo
Com tool use nativo, o JSON vem validado pela API — menos necessidade de recovery.
Gerenciamento de Resultados
Como resultados de ferramentas sao gerenciados após execução.
Modo Coder
O fluxo completo de engenharia com tool calls.