Olá, Rodrigo. Como vai?
Esse é um problema clássico de engenharia de prompts e, olha, você já deu passos excelentes! Usar Chain of Thought (Cadeia de Pensamento), injetar exemplos (Few-Shot) e derrubar a temperatura para 0.1 (o que força o modelo a ser mais determinístico e menos criativo) são exatamente as técnicas corretas para o seu cenário.
O comportamento que você descreveu — onde a IA faz todo o raciocínio correto no campo de texto, mas na hora de entregar a variável final ela "muda de ideia" e escolhe a opção errada — é conhecido no mundo dos LLMs como "Perda de Atenção no Alinhamento de Saída" ou Vício Semântico.
O que está acontecendo é que a palavra "café" dentro do cupom tem uma carga semântica tão forte para o modelo que, na última camada de predição do token de saída, ela acaba "vencendo" a lógica matemática do horário, mesmo que o raciocínio textual tenha dito o contrário.
Como o Llama (especialmente em versões menores ou customizadas via OpenRouter) pode se perder se o prompt estiver puramente em linguagem natural corrida, a melhor forma de blindar isso é estruturar o Few-Shot rigorosamente em blocos lógicos rígidos (como tags XML ou JSON) e forçar o modelo a fechar a decisão dentro do loop de pensamento.
Abaixo, preparei uma estrutura de prompt reformulada para você testar. O segredo aqui é separar as regras por prioridade e fechar o prompt exigindo que ela use as suas variáveis de decisão.
Proposta de Prompt Estruturado
Substitua o formato atual por algo parecido com esta estrutura hierárquica:
Você é um classificador de cupons fiscais ultra preciso. Sua tarefa é categorizar o tipo de refeição com base estritamente na HORA DE EMISSÃO, ignorando os itens consumidos se houver conflito.
[REGRAS DE PRIORIDADE COMPORTAMENTAL]
1. A HORA DE EMISSÃO manda no veredito.
2. Se o horário for entre [06:00] e [10:59] -> Sempre classifique como: CAFÉ DA MANHÃ
3. Se o horário for entre [11:00] e [15:59] -> Sempre classifique como: ALMOÇO
4. Regra de Conflito: Mesmo que o cupom contenha palavras como "café", "pão" ou "leite", se a hora for entre 11:00 e 15:59, o veredito final DEVE SER "ALMOÇO".
[EXEMPLOS DE VALIDAÇÃO (FEW-SHOT + CHAIN OF THOUGHT)]
---
Dados do Cupom:
Hora: 08:30
Itens: Pão de queijo, Café expresso
<raciocínio>
O horário é 08:30, que está no intervalo entre 06:00 e 10:59. Os itens são café da manhã. Não há conflito.
</raciocínio>
Veredito Final: CAFÉ DA MANHÃ
---
Dados do Cupom:
Hora: 13:15
Itens: Café expresso, Cappuccino
<raciocínio>
O horário é 13:15, que está no intervalo entre 11:00 e 15:59. Embora os itens contenham a palavra 'Café', a Regra de Conflito diz que o horário manda. O intervalo de 13:15 pertence ao Almoço. Portanto, os itens devem ser ignorados na decisão.
</raciocínio>
Veredito Final: ALMOÇO
---
Agora, classifique o cupom abaixo seguindo estritamente o formato dos exemplos acima, preenchendo as tags de <raciocínio> e finalizando com "Veredito Final: [CATEGORIA]".
Dados do Cupom:
Hora: [Insira a Hora Aqui]
Itens: [Insira os Itens Aqui]
Por que essa abordagem tende a resolver o seu problema?
- Uso de Tags de Escopo (
<raciocínio>): Modelos da família Llama respondem muito bem a tags estilo HTML/XML. Elas ajudam o modelo a entender onde termina o rascunho e onde começa a entrega do dado. - Definição de Regra de Conflito Direta: Escrever explicitamente "Mesmo que o cupom contenha a palavra café..." desativa o viés estatístico que estava fazendo a IA travar na palavra.
- Inversão da Ordem de Leitura: Note que nos exemplos, a
Hora vem antes dos Itens. Na arquitetura de atenção dos LLMs, o que ele lê primeiro ganha um peso ligeiramente maior no processamento do contexto inicial.
Uma dica extra sobre o Provedor (OpenRouter)
Como você mencionou que o modelo é o Llama-Maverick (geralmente um merge ou fine-tuning específico hospedado lá), se mesmo com o prompt estruturado ele continuar falhando, vale a pena fazer um teste rápido no OpenRouter trocando o modelo para o meta-llama/llama-3-8b-instruct ou meta-llama/llama-3-70b-instruct. Modelos oficiais de Instruct são muito mais obedientes a regras de restrição do que modelos customizados para conversação genérica.
Faça o teste com essa nova estrutura e me conte se o veredito final finalmente se alinhou com o raciocínio! Se precisar ajustar alguma regra específica, é só falar.
Espero que possa ter lhe ajudado!