Esta funcionalidade permite que prompts grandes sejam automaticamente quebrados em partes menores e enviados sequencialmente para a API do Gemini, com as respostas sendo combinadas em uma resposta final consolidada.
- O sistema verifica se o prompt excede o tamanho máximo configurado (padrão: 30.000 caracteres)
- Se for menor, é enviado diretamente
- Se for maior, é processado em partes
- O prompt é dividido em partes menores respeitando:
- Tamanho máximo configurável por parte
- Pontos naturais de quebra (pontos finais, quebras de linha, etc.)
- Sobreposição entre partes para manter contexto
- Cada parte é enviada individualmente para o Gemini
- Contexto é adicionado a cada parte para manter coerência
- Pausa configurável entre chamadas para evitar rate limiting
- Todas as respostas são combinadas
- Uma chamada final é feita para consolidar e organizar o resultado
- Fallback em caso de erro na consolidação
gemini:
max-prompt-size: 30000 # Tamanho máximo por parte
overlap-size: 1000 # Sobreposição entre partes
delay-between-chunks: 200 # Delay entre chamadas (ms)
model: gemini-2.0-flash # Modelo do Gemini| Parâmetro | Descrição | Padrão |
|---|---|---|
max-prompt-size |
Tamanho máximo de cada parte do prompt | 30000 |
overlap-size |
Tamanho da sobreposição entre partes | 1000 |
delay-between-chunks |
Delay entre chamadas (milissegundos) | 200 |
model |
Modelo do Gemini a ser usado | gemini-2.0-flash |
- Permite processar prompts que excedem os limites da API
- Mantém a qualidade da resposta mesmo com conteúdo extenso
- Tratamento de erros em cada parte
- Fallback em caso de falha na consolidação
- Logging detalhado para debugging
- Pausas configuráveis para evitar rate limiting
- Processamento paralelo possível (futuro)
- Cache de respostas intermediárias
- Configuração via arquivo de propriedades
- Fácil ajuste de parâmetros
- Suporte a diferentes modelos
A funcionalidade é transparente para os serviços que usam o APIService. Não há mudanças necessárias no código existente:
// Funciona normalmente para prompts pequenos
GenerateContentResponse response = apiService.geminiAPI("Prompt pequeno");
// Automaticamente quebra prompts grandes
GenerateContentResponse response = apiService.geminiAPI("Prompt muito grande...");O sistema fornece logs detalhados:
INFO - Processando prompt com 50000 caracteres
INFO - Prompt grande detectado, quebrando em partes
INFO - Processando 3 partes do prompt
DEBUG - Processando parte 1/3 com 30000 caracteres
DEBUG - Parte 1/3 processada com sucesso
...
INFO - Respostas combinadas com sucesso, total de 15000 caracteres
GeminiApiException: Para erros específicos da API- Tratamento global via
GlobalExceptionHandler - Status HTTP apropriado (503 Service Unavailable)
- Se uma parte falhar, continua com as outras
- Se a consolidação falhar, tenta resumo simplificado
- Se tudo falhar, lança exceção com detalhes
Testes unitários cobrem:
- Divisão de prompts pequenos e grandes
- Encontros de pontos naturais de quebra
- Combinação de respostas
- Configuração de parâmetros
- Processamento Paralelo: Enviar partes em paralelo
- Cache Inteligente: Cache de partes processadas
- Retry Automático: Tentativas automáticas em caso de falha
- Métricas: Monitoramento de performance
- Streaming: Respostas em tempo real
- Processamento sequencial (não paralelo)
- Sem cache de partes
- Sem retry automático
- Sem métricas detalhadas
@Service
public class MeuService {
@Autowired
private APIService apiService;
public String processarConteudoGrande(String conteudo) {
// O prompt será automaticamente quebrado se for muito grande
GenerateContentResponse response = apiService.geminiAPI(conteudo);
return apiService.extractResponse(response);
}
}Para monitorar o uso da funcionalidade, observe os logs:
- Prompts que são quebrados
- Número de partes criadas
- Tempo de processamento
- Erros em partes individuais
- Rate Limiting: Aumente
delay-between-chunks - Timeout: Reduza
max-prompt-size - Qualidade da Resposta: Ajuste
overlap-size - Performance: Otimize configurações baseado no uso
Ative logs DEBUG para ver detalhes:
logging:
level:
com.api.apiviagem.service.APIService: DEBUG