Estratégia de LLM
Papel do modelo
O LLM não deve ser responsável por descobrir tudo sozinho. Ele recebe evidências preparadas e sintetiza uma nota confiável e útil.
Regra principal
LLM na borda, não no centro.
A pipeline ideal é:
- análise determinística primeiro
- síntese probabilística depois
O que mandar para o modelo
Para cada arquivo:
- esqueleto do código (assinaturas exportadas com JSDoc, definições de tipos, comentários especiais)
- imports e exports com assinaturas tipadas
- dependências reversas mais relevantes
- sinais de git (churn, commits recentes, arquivos co-modificados)
- testes relacionados e cobertura
- comentários especiais:
DECISION,INVARIANT,WHY,HACK,TODO,FIXME - contexto do domínio
- score de criticidade
O que não fazer
- mandar o repo inteiro
- pedir inferência sem evidência
- pedir "resuma o arquivo" sem contexto
- usar as primeiras N linhas (geralmente só imports)
- misturar dezenas de arquivos sem necessidade
Regras de prompt
System prompt
Você é um analista de software gerando notas operacionais para arquivos individuais.
Regras por campo:
purpose: descreva o PAPEL do arquivo no sistema e POR QUE ele existe.
RUIM: "Exporta: buildBasicNote"
BOM: "Constrói o AiFileNote estático a partir de análise AST, sinais de grafo e git"
invariants: contratos específicos que chamadores ou o runtime devem manter.
RUIM: "Input deve ser válido"
BOM: "filePath deve ser um caminho absoluto — a função assume que o arquivo existe"
importantDecisions: preencha SOMENTE quando houver sinal concreto.
RUIM: "O desenvolvedor provavelmente escolheu esse padrão por performance"
BOM: "Commit: 'switched from axios to fetch because of bundle size'"
Quando language é diferente de inglês, uma instrução adicional é adicionada:
- Escreva todo o conteúdo de texto em <idioma>.
Regras de qualidade
- Evidência obrigatória para afirmações importantes
- Confiança numérica sempre presente
- Campos podem ficar vazios
importantDecisionsdeve ser conservadorknownPitfallspode usar sinais de churn e TODOsimpactValidationdeve priorizar consumidores reais e testes
Estratégia de custo
-
cache por hash de arquivo + sinais
-
limitar síntese a arquivos relevantes ou críticos (
criticalityScore >= llmThreshold) -
permitir execução incremental
-
modelos em tiers — gastar orçamento apenas nos arquivos mais arriscados:
llm: {
provider: 'claude-cli',
model: 'claude-sonnet-4-6', // tier padrão
highModel: 'claude-opus-4-6', // tier premium
highThreshold: 0.7, // roteia arquivos com score >= 0.7 para highModel
llmThreshold: 0.4, // abaixo disso, sem LLM
}Com essa config: arquivos com
score < 0.4recebem nota estática,0.4 ≤ score < 0.7usam o modelo padrão, escore ≥ 0.7usam o modelo premium. O log final mostra quantos arquivos foram atendidos por cada tier.
Referência de confiança
- 0.90+ quando há import, uso e teste claros
- 0.70–0.89 quando há boa evidência, mas alguma inferência
- 0.40–0.69 quando depende de heurística ou git parcial
- abaixo de 0.40 quando há pouca evidência