Ao usar a API Perplexity com o modelo Sonar, você pode perceber que o prompt de sistema cuidadosamente elaborado é completamente ignorado. O modelo retorna respostas como se nenhuma instrução tivesse sido dada, usando seu comportamento padrão. Isso acontece porque o modelo Sonar tem um requisito específico para a estruturação do prompt de sistema na chamada da API. Este artigo explica a causa exata do problema e fornece uma correção passo a passo para garantir que seu prompt de sistema seja aplicado corretamente.
Principais Conclusões: Corrigindo o Prompt de Sistema Ignorado no Sonar
- Ordem dos papéis no array messages: A mensagem com papel
systemdeve ser o primeiro item no arraymessages, antes de qualquer mensagemuserouassistant. - Parâmetro model explícito: Defina o parâmetro model como
sonarousonar-prono corpo da requisição para garantir o comportamento correto do endpoint. - Sem espaços extras ou formatação: Mantenha o conteúdo do prompt de sistema simples, sem markdown ou quebras de linha excessivas, para evitar erros de análise.
Por que o Modelo Sonar Ignora o Prompt de Sistema
A API Perplexity suporta vários modelos, cada um com sua própria lógica de manipulação de mensagens. O modelo Sonar foi projetado para priorizar a mensagem com papel user para contexto, especialmente quando o prompt de sistema não está no início do array messages. Se sua requisição API enviar o prompt de sistema após uma mensagem do usuário, ou se o prompt de sistema contiver caracteres especiais ou formatação excessiva, o modelo Sonar pode descartá-lo silenciosamente. Esse comportamento não é um bug, mas uma escolha de design para otimizar a velocidade e relevância das respostas em consultas conversacionais. A correção exige ordenação e formatação precisas do array messages.
Como Funciona o Array Messages da API
A API espera um array JSON chamado messages que contém um ou mais objetos de mensagem. Cada objeto tem um campo role (system, user ou assistant) e um campo content. A ordem desses objetos é importante. Para o modelo Sonar, a mensagem system deve ser o primeiro elemento. Se qualquer mensagem user ou assistant vier antes da mensagem system, o prompt de sistema é ignorado.
Erro Comum: Inverter a Ordem
Muitos desenvolvedores constroem o array messages adicionando o prompt de sistema após a consulta do usuário. Esse é um padrão natural ao usar bibliotecas de código que processam a entrada do usuário primeiro. O array resultante fica como [{role: "user", content: "..."}, {role: "system", content: "..."}]. O modelo Sonar trata a primeira mensagem como a instrução principal e ignora mensagens system subsequentes.
Passos para Corrigir o Prompt de Sistema Ignorado
Siga estes passos para corrigir sua requisição API e fazer o modelo Sonar respeitar seu prompt de sistema.
- Abra seu cliente API ou editor de código
Acesse o script, coleção Postman ou comando curl que envia requisições para o endpoint da API Perplexityhttps://api.perplexity.ai/chat/completions. - Localize o array messages
Encontre o corpo JSON da sua requisição POST. Procure pelo arraymessages. Ele deve conter um ou mais objetos com camposroleecontent. - Mova a mensagem system para a primeira posição
Garanta que o objeto com"role": "system"seja o primeiro elemento do array. O array corrigido deve ficar assim:[{"role": "system", "content": "Você é um assistente prestativo que responde em português."}, {"role": "user", "content": "Qual é a capital do Brasil?"}] - Verifique o parâmetro model
Confira se o campomodelno corpo da requisição está definido como"sonar"ou"sonar-pro". Por exemplo:"model": "sonar". Isso garante que a requisição seja roteada para o manipulador de modelo correto. - Simplifique o conteúdo do prompt de sistema
Remova qualquer formatação markdown, tags HTML ou quebras de linha excessivas do prompt de sistema. Mantenha o conteúdo simples e conciso. Por exemplo, use"Você é um assistente prestativo."em vez de"Você é um assistente prestativo." - Envie a requisição corrigida
Execute a chamada API novamente. A resposta agora deve refletir seu prompt de sistema. Teste com uma instrução simples como"Responda em uma frase."para confirmar a mudança.
Se o Prompt de Sistema Ainda For Ignorado Após a Correção
Se o problema persistir, verifique estas causas e soluções adicionais.
Chave API com Permissões Limitadas
Sua chave API pode estar restrita a um modelo ou nível de uso específico. Verifique se sua chave tem acesso ao modelo Sonar consultando o painel da API Perplexity em API Keys > Permissions. Se a chave estiver restrita a um modelo diferente, gere uma nova chave com acesso total aos modelos.
Prompt de Sistema Excede o Limite de Tokens
O modelo Sonar tem um comprimento máximo de contexto de 4096 tokens. Se o prompt de sistema mais a mensagem do usuário exceder esse limite, o modelo pode truncar ou ignorar o prompt. Reduza o prompt de sistema para menos de 500 tokens. Use a ferramenta de tokenização na documentação da API Perplexity para contar tokens.
Múltiplas Mensagens System no Array
O modelo Sonar reconhece apenas a primeira mensagem system. Se você incluir mais de uma mensagem system no array, apenas a primeira é usada. Remova mensagens system duplicadas e mescle seu conteúdo em uma única mensagem system no início do array.
Cache de Requisições Anteriores
Alguns clientes API armazenam respostas em cache para evitar chamadas redundantes. Limpe o cache do seu cliente ou adicione um campo user único ao corpo da requisição para evitar o cache. O campo user pode ser uma string aleatória como "user": "teste-1234".
Comparação de Suporte a Prompt de Sistema entre Modelos da API Perplexity
| Item | Sonar / Sonar-Pro | Outros Modelos (ex.: Mixtral, Llama) |
|---|---|---|
| Exigência de posição do prompt de sistema | Deve ser o primeiro no array messages | Qualquer posição é aceita |
| Máximo de tokens no prompt de sistema | 500 tokens recomendados | Até 1024 tokens |
| Sensibilidade a formatação | Apenas texto simples | Markdown básico permitido |
| Múltiplas mensagens system | Apenas a primeira é usada | Todas são mescladas |
O modelo Sonar exige formatação mais rigorosa do prompt de sistema do que outros modelos da API Perplexity. Sempre coloque a mensagem system primeiro e mantenha-a simples. Para instruções complexas, considere usar um modelo diferente como mixtral-8x7b-instruct, que aceita prompts de sistema em qualquer ordem.
Agora você pode definir prompts de sistema de forma confiável para o modelo Sonar colocando a mensagem system primeiro no array messages e mantendo seu conteúdo simples. Teste sua correção com uma instrução simples para confirmar que o modelo a segue. Para uso avançado, explore a documentação da API Perplexity para os parâmetros temperature e top_p para controlar ainda mais o comportamento do modelo.