Melhore os resultados com estratégias de engenharia de prompt.
Responses
Com a API da OpenAI, você pode usar um modelo de linguagem de grande porte para gerar texto a partir de um prompt, assim como faria no ChatGPT. Os modelos podem gerar quase qualquer tipo de resposta em texto, como código, equações matemáticas, dados estruturados em JSON ou textos semelhantes aos escritos por pessoas.
1
2
3
4
5
6
7
8
9
10require "openai"openai = OpenAI::Client.newresponse = openai.responses.create( model: "gpt-6-astra", input: "Write a one-sentence bedtime story about a unicorn.")puts(response.output_text)
1
2
3
4
5openai responses create \ --model "gpt-6-astra" \ --input "Write a one-sentence bedtime story about a unicorn." \ --raw-output \ --transform 'output.#(type=="message").content.0.text'
1
2
3
4
5
6
7curl "https://api.openai.com/v1/responses" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d '{ "model": "gpt-6-astra", "input": "Write a one-sentence bedtime story about a unicorn." }'
A propriedade output da resposta contém um array com o conteúdo gerado pelo modelo. Neste exemplo simples, temos apenas uma saída, com este formato:
1234567891011121314[ { "id": "msg_67b73f697ba4819183a15cc17d011509", "type": "message", "role": "assistant", "content": [ { "type": "output_text", "text": "Under the soft glow of the moon, Luna the unicorn danced through fields of twinkling stardust, leaving trails of dreams for every child asleep.", "annotations": [] } ] }]
O array output costuma ter mais de um item! Ele pode conter chamadas de ferramentas, dados sobre tokens de raciocínio gerados por modelos de raciocínio e outros itens. Não é seguro presumir que a saída de texto do modelo esteja em output[0].content[0].text.
Alguns dos nossos SDKs oficiais incluem, por conveniência, uma propriedade output_text nas respostas do modelo, que reúne todas as saídas de texto em uma única string. Ela pode ser útil como um atalho para acessar a saída de texto do modelo.
Além de texto simples, você também pode fazer o modelo retornar dados estruturados em formato JSON. Esse recurso se chama Saídas estruturadas.
A propriedade choices da resposta contém um array com o conteúdo gerado pelo modelo. Neste exemplo simples, temos apenas uma saída, com este formato:
123456789101112[ { "index": 0, "message": { "role": "assistant", "content": "Under the soft glow of the moon, Luna the unicorn danced through fields of twinkling stardust, leaving trails of dreams for every child asleep.", "refusal": null }, "logprobs": null, "finish_reason": "stop" }]
Além de texto simples, você também pode fazer o modelo retornar dados estruturados em formato JSON. Esse recurso se chama Saídas estruturadas.
Escolha de um modelo
Uma decisão importante ao gerar conteúdo pela API é qual modelo usar, definido pelo parâmetro model nos exemplos de código acima. Você encontra aqui a lista completa de modelos disponíveis. Veja alguns fatores a considerar ao escolher um modelo para geração de texto.
Modelos de raciocínio geram uma cadeia de pensamento interna para analisar o prompt de entrada e se destacam na compreensão de tarefas complexas e no planejamento de várias etapas. Em geral, também são mais lentos e mais caros de usar do que os modelos GPT.
Modelos GPT são rápidos, econômicos e altamente inteligentes, mas se beneficiam de instruções mais explícitas sobre como realizar as tarefas.
Modelos grandes e pequenos (mini ou nano) oferecem diferentes combinações de velocidade, custo e inteligência. Os modelos grandes são mais eficazes na compreensão de prompts e na resolução de problemas em diversas áreas, enquanto os modelos pequenos geralmente são mais rápidos e mais baratos de usar.
Em caso de dúvida, gpt-6-astra é uma boa escolha padrão para geração de texto de uso geral e refinamento de prompts.
Engenharia de prompt
Engenharia de prompt é o processo de escrever instruções eficazes para um modelo, de modo que ele gere, de forma consistente, conteúdo que atenda aos seus requisitos.
Como o conteúdo gerado por um modelo não é determinístico, criar prompts para obter a saída desejada é uma mistura de arte e ciência. Ainda assim, você pode aplicar técnicas e práticas recomendadas para obter bons resultados de forma consistente.
Algumas técnicas de engenharia de prompt funcionam com qualquer modelo, como o uso de papéis de mensagem. Porém, diferentes tipos de modelo, como os de raciocínio e os GPT, podem precisar de abordagens diferentes na criação de prompts para produzir os melhores resultados. Até mesmo snapshots diferentes de modelos da mesma família podem produzir resultados distintos. Por isso, à medida que você desenvolve aplicativos mais complexos, recomendamos fortemente:
Fixar snapshots específicos de modelos (como gpt-4.1-2025-04-14, por exemplo) nos seus aplicativos em produção para garantir um comportamento consistente
Criar testes e suítes de avaliação que meçam o comportamento dos prompts para acompanhar o desempenho à medida que você os refina ou quando troca ou atualiza as versões dos modelos
Agora, vamos examinar algumas ferramentas e técnicas disponíveis para criar prompts.
Papéis de mensagem e cumprimento de instruções
Você pode fornecer instruções ao modelo com diferentes níveis de autoridade usando o parâmetro instructions da API ou papéis de mensagem.
O parâmetro instructions fornece ao modelo instruções gerais sobre como ele deve se comportar ao gerar uma resposta, incluindo tom, objetivos e exemplos de respostas corretas. As instruções fornecidas dessa forma terão prioridade sobre um prompt no parâmetro input.
Observe que o parâmetro instructions se aplica apenas à solicitação atual de geração de resposta. Se você estiver gerenciando o estado da conversa com o parâmetro previous_response_id, as instruções de instructions usadas nas interações anteriores não estarão presentes no contexto.
A especificação do modelo da OpenAI descreve como nossos modelos atribuem diferentes níveis de prioridade a mensagens com papéis diferentes.
developer
user
assistant
Mensagens developer são instruções fornecidas pelo desenvolvedor do aplicativo e têm prioridade sobre mensagens user.
Mensagens user são instruções fornecidas por um usuário final e têm prioridade inferior à das mensagens developer.
As mensagens geradas pelo modelo têm o papel assistant.
Uma conversa com várias interações pode conter diversas mensagens desses tipos, além de outros tipos de conteúdo fornecidos tanto por você quanto pelo modelo. Saiba mais sobre como gerenciar o estado da conversa aqui.
Você pode pensar nas mensagens developer e user como uma função e seus argumentos em uma linguagem de programação.
Mensagens developer fornecem as regras e a lógica de negócio do sistema, como a definição de uma função.
Mensagens user fornecem entradas e configurações às quais se aplicam as instruções da mensagem developer, como argumentos de uma função.
Versione prompts no código
Armazene os prompts de produção no código do seu aplicativo em vez de criar objetos de prompt reutilizáveis. Gerenciar prompts no código permite usar entradas tipadas, revisão de código, testes e seu processo habitual de implantação para alterar o comportamento do modelo.
A OpenAI está descontinuando os objetos de prompt reutilizáveis na API. A criação de prompts passará
a ter menos destaque a partir de 3 de junho de 2026, e o encerramento de v1/prompts está previsto
para 30 de novembro de 2026. Consulte a página de
descontinuações para ver o cronograma
atual.
Para novos trabalhos de engenharia de prompt:
Mantenha os construtores de prompts em um módulo pequeno, próximo à funcionalidade que atendem.
Use argumentos de função tipados ou esquemas para valores dinâmicos, como dados de clientes, arquivos ou opções de tarefas.
Passe os valores gerados de instructions e input diretamente para a Responses API.
Adicione dados de teste representativos, testes e verificações de avaliação antes de alterar os prompts de produção.
Disponibilize as alterações nos prompts pelo seu sistema de implantação, usando sinalizadores de funcionalidade ou configurações quando precisar de lançamentos em etapas.
Se sua integração já chama um prompt salvo usando um ID ou uma versão de prompt, use o guia de migração de objetos de prompt para mover esse prompt para o código.
Formatação de mensagens com Markdown e XML
Ao escrever mensagens developer e user, você pode ajudar o modelo a entender os limites lógicos do prompt e dos dados de contexto combinando a formatação Markdown com tags XML.
Títulos e listas em Markdown podem ajudar a delimitar as diferentes seções de um prompt e a comunicar a hierarquia ao modelo. Também podem facilitar a leitura dos prompts durante o desenvolvimento. Tags XML podem ajudar a delimitar onde um conteúdo começa e termina, como um documento de apoio usado como referência. Atributos XML também podem definir metadados sobre o conteúdo do prompt que suas instruções podem referenciar.
Em geral, uma mensagem do desenvolvedor contém as seções a seguir, normalmente nesta ordem (embora o conteúdo e a ordem ideais possam variar conforme o modelo usado):
Identidade: Descreva a finalidade, o estilo de comunicação e os objetivos gerais do assistente.
Instruções: Oriente o modelo sobre como gerar a resposta desejada. Quais regras ele deve seguir? O que o modelo deve fazer e o que nunca deve fazer? Esta seção pode conter várias subseções relevantes para seu caso de uso, como orientações sobre como o modelo deve chamar funções personalizadas.
Exemplos: Forneça exemplos de entradas possíveis, acompanhados da saída desejada do modelo.
Contexto: Forneça ao modelo as informações adicionais de que ele possa precisar para gerar uma resposta, como dados privados ou proprietários que não façam parte dos dados de treinamento, ou quaisquer outros dados que você saiba serem especialmente relevantes. Em geral, é melhor posicionar esse conteúdo perto do fim do prompt, pois você pode incluir contextos diferentes em cada solicitação de geração.
Veja abaixo um exemplo de como usar Markdown e tags XML para criar uma mensagem developer com seções distintas e exemplos de apoio.
Exemplo de prompt
Uma mensagem do desenvolvedor para geração de código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24# IdentityYou are coding assistant that helps enforce the use of snake casevariables in JavaScript code, and writing code that will run inInternet Explorer version 6.# Instructions* When defining variables, use snake case names (e.g. my_variable) instead of camel case names (e.g. myVariable).* To support old browsers, declare variables using the older "var" keyword.* Do not give responses with Markdown formatting, just return the code as requested.# Examples<user_query>How do I declare a string variable for a first name?</user_query><assistant_response>var first_name = "Anna";</assistant_response>
Requisição à API
Envie um prompt para gerar código pela API
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13import fs from"fs/promises";import OpenAI from"openai";constclient=newOpenAI();constinstructions=await fs.readFile("fixtures/prompt.txt", "utf-8");constresponse=await client.responses.create({ model: "gpt-6-astra", instructions, input: "How would I declare a variable for a last name?",});console.log(response.output_text);
1
2
3
4
5
6
7
8
9
10
11
12
13
14from openai import OpenAIclient = OpenAI()with open("prompt.txt", "r", encoding="utf-8") as f: instructions = f.read()response = client.responses.create( model="gpt-6-astra", instructions=instructions, input="How would I declare a variable for a last name?",)print(response.output_text)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import com.openai.client.OpenAIClient;import com.openai.client.okhttp.OpenAIOkHttpClient;import com.openai.models.responses.ResponseCreateParams;ResponseCreateParams params = ResponseCreateParams.builder() .model("gpt-6-astra") .instructions( "You are a coding assistant. Answer with concise JavaScript examples and use semicolons.") .input("How would I declare a variable for a last name?") .build();client.responses().create(params).output().stream() .flatMap(item -> item.message().stream()) .flatMap(message -> message.content().stream()) .flatMap(content -> content.outputText().stream()) .forEach(text -> System.out.println(text.text()));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18using OpenAI.Responses;#pragma warning disable OPENAI001string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;ResponsesClient client = new(key);string instructions = await File.ReadAllTextAsync("prompt.txt");CreateResponseOptions options = new(){ Model = "gpt-6-astra", Instructions = instructions,};options.InputItems.Add( ResponseItem.CreateUserMessageItem("How would I declare a variable for a last name?"));ResponseResult response = await client.CreateResponseAsync(options);Console.WriteLine(response.GetOutputText());
1
2
3
4
5
6
7
8
9
10
11require "openai"client = OpenAI::Client.newinstructions = File.read(File.join(__dir__, "prompt.txt"))response = client.responses.create( model: "gpt-6-astra", instructions: instructions, input: "How would I declare a variable for a last name?")puts(response.output_text)
1
2
3
4
5
6
7
8curl https://api.openai.com/v1/responses \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-6-astra", "instructions": "'"$(< prompt.txt)"'", "input": "How would I declare a variable for a last name?" }'
Reduza custos e latência com o cache de prompts
Ao criar uma mensagem, procure manter o conteúdo que você pretende reutilizar nas requisições à API no início do prompt e entre os primeiros parâmetros da API enviados no corpo JSON da requisição a Chat Completions ou Responses. Isso permite maximizar a redução de custos e latência proporcionada pelo cache de prompts.
Aprendizado few-shot
O aprendizado few-shot permite orientar um modelo de linguagem grande para uma nova tarefa incluindo alguns exemplos de entrada e saída no prompt, em vez de realizar o ajuste fino do modelo. O modelo assimila implicitamente o padrão desses exemplos e o aplica a um prompt. Ao fornecer exemplos, procure apresentar entradas variadas com as saídas desejadas.
Normalmente, você fornece exemplos como parte de uma mensagem developer na requisição à API. Veja uma mensagem developer com exemplos que mostram ao modelo como classificar avaliações de atendimento ao cliente como positivas ou negativas.
# IdentityYou are a helpful assistant that labels short product reviews asPositive, Negative, or Neutral.# Instructions* Only output a single word in your response with no additional formatting or commentary.* Your response should only be one of the words "Positive", "Negative", or "Neutral" depending on the sentiment of the product review you are given.# Examples<product_review id="example-1">I absolutely love this headphones — sound quality is amazing!</product_review><assistant_response id="example-1">Positive</assistant_response><product_review id="example-2">Battery life is okay, but the ear pads feel cheap.</product_review><assistant_response id="example-2">Neutral</assistant_response><product_review id="example-3">Terrible customer service, I'll never buy from them again.</product_review><assistant_response id="example-3">Negative</assistant_response>
Inclua informações de contexto relevantes
Muitas vezes, é útil incluir no prompt informações de contexto adicionais que o modelo possa usar para gerar uma resposta. Alguns motivos comuns para fazer isso são:
Dar ao modelo acesso a dados proprietários ou a quaisquer outros dados que não façam parte do conjunto usado em seu treinamento.
Restringir a resposta do modelo a um conjunto específico de recursos que você identificou como os mais úteis.
A técnica de adicionar contexto relevante à solicitação de geração do modelo às vezes é chamada de geração aumentada por recuperação (RAG). Você pode adicionar contexto ao prompt de várias maneiras, como consultar um banco de dados vetorial e incluir o texto retornado no prompt, ou usar a ferramenta integrada de pesquisa de arquivos da OpenAI para gerar conteúdo com base em documentos enviados.
Planeje o uso da janela de contexto
Os modelos só conseguem processar uma quantidade limitada de dados no contexto que consideram durante uma solicitação de geração. Esse limite de memória é chamado de janela de contexto e é definido em tokens (fragmentos dos dados que você fornece, de texto a imagens).
Os modelos têm janelas de contexto de tamanhos diferentes, que vão de pouco mais de 100 mil tokens até um milhão de tokens nos modelos GPT-4.1 mais recentes. Consulte a documentação dos modelos para saber o tamanho específico da janela de contexto de cada modelo.
Criação de prompts para os modelos atuais
Modelos GPT como gpt-6-astra se beneficiam de instruções precisas que forneçam explicitamente, no prompt, a lógica e os dados necessários para concluir a tarefa. Para aproveitar ao máximo o modelo mais recente, comece pelo guia atual de criação de prompts.
A criação de prompts para tarefas de programação com gpt-6-astra é mais eficaz quando você segue algumas práticas recomendadas: defina o papel do agente, exija o uso estruturado de ferramentas com exemplos, solicite testes abrangentes para verificar a correção e estabeleça padrões de Markdown para obter uma saída bem formatada.
Orientações explícitas sobre o papel e o fluxo de trabalho
Defina o modelo como um agente de engenharia de software com responsabilidades bem definidas. Forneça instruções claras para usar ferramentas como functions.run em tarefas de programação e especifique quando não usar determinados modos; por exemplo, evitar a execução interativa, a menos que seja necessária.
Testes e validação
Instrua o modelo a testar as alterações com testes unitários ou comandos Python e a validar os patches com cuidado, pois ferramentas como apply_patch podem retornar “Done” mesmo em caso de falha.
Exemplos de uso de ferramentas
Inclua exemplos concretos de como executar comandos com as funções fornecidas, o que melhora a confiabilidade e a adesão aos fluxos de trabalho esperados.
Padrões de Markdown
Oriente o modelo a gerar Markdown bem formatado e semanticamente correto, usando código em linha, blocos de código delimitados, listas e tabelas quando apropriado, e a formatar caminhos de arquivos, funções e classes com crases.
tem bom desempenho tanto na criação de front-ends do zero quanto em contribuições para
bases de código grandes e consolidadas. Para obter os melhores resultados, recomendamos usar as
seguintes bibliotecas:
O GPT-5 pode gerar aplicativos web de front-end a partir de um único prompt, sem precisar de exemplos. Veja um exemplo de prompt:
123456You are a world class web developer, capable of producing stunning, interactive, and innovative websites from scratch in a single prompt. You excel at delivering top-tier one-shot solutions.Your process is simple and follows these steps:Step 1: Create an evaluation rubric and refine it until you are fully confident.Step 2: Consider every element that defines a world-class one-shot web app, then use that insight to create a <ONE_SHOT_RUBRIC> with 5–7 categories. Keep this rubric hidden—it's for internal use only.Step 3: Apply the rubric to iterate on the optimal solution to the given prompt. If it doesn't meet the highest standard across all categories, refine and try again.Step 4: Aim for simplicity while fully achieving the goal, and avoid external dependencies such as Next.js or React.
Integração com grandes bases de código
Para trabalhos de engenharia de front-end em bases de código maiores, constatamos que adicionar estas categorias de instruções aos prompts produz os melhores resultados:
Princípios: Estabeleça padrões de qualidade visual, use componentes modulares e reutilizáveis e mantenha a consistência do design.
UI/UX: Especifique tipografia, cores, espaçamento e layout, estados de interação (ao passar o cursor, vazio, carregando) e acessibilidade.
Estrutura: Defina a organização de arquivos e pastas para facilitar a integração.
Componentes: Forneça exemplos de componentes que encapsulem outros componentes de forma reutilizável e estratégias para separar as chamadas ao back-end.
Páginas: Forneça modelos para layouts comuns.
Instruções para o agente: Peça ao modelo que confirme as premissas de design, crie a estrutura inicial dos projetos, garanta o cumprimento dos padrões, integre APIs, teste os estados e documente o código.
Para execuções agênticas e de longa duração com gpt-6-astra, concentre seus prompts em três práticas essenciais: planejar as tarefas em detalhes para garantir sua resolução completa, fornecer preâmbulos claros para as principais decisões de uso de ferramentas e usar uma ferramenta de lista de tarefas para acompanhar o fluxo de trabalho e o progresso de forma organizada.
Planejamento e persistência
Instrua o modelo a resolver toda a solicitação antes de devolver o controle, dividindo-a em subtarefas e refletindo após cada chamada de ferramenta para confirmar que tudo foi concluído.
Remember, you are an agent - please keep going until the user'squery is completely resolved, before ending your turn and yieldingback to the user. Decompose the user's query into all requiredsub-requests, and confirm that each is completed. Do not stopafter completing only part of the request. Only terminate yourturn when you are sure that the problem is solved. You must beprepared to answer multiple queries and only finish the call oncethe user has confirmed they're done.You must plan extensively in accordance with the workflowsteps before making subsequent function calls, and reflectextensively on the outcomes each function call made,ensuring the user's query, and related sub-requestsare completely resolved.
Mensagens introdutórias para dar transparência
Peça ao modelo que explique por que está chamando uma ferramenta, mas apenas nas etapas mais importantes.
Before you call a tool explain why you are calling it
Acompanhamento do progresso com critérios de avaliação e listas de tarefas
Use uma ferramenta de lista de tarefas ou um conjunto de critérios de avaliação para garantir um planejamento estruturado e evitar que etapas sejam esquecidas.
Há algumas diferenças a considerar ao criar prompts para um modelo de raciocínio em comparação com um modelo GPT. Em geral, os modelos de raciocínio apresentam melhores resultados em tarefas com apenas orientações gerais. Já os modelos GPT se beneficiam de instruções muito precisas.
Você pode pensar na diferença entre modelos de raciocínio e modelos GPT da seguinte forma.
Um modelo de raciocínio é como um colega de trabalho sênior. Você pode definir um objetivo e confiar que ele encontrará a melhor forma de alcançá-lo.
Um modelo GPT é como um colega de trabalho júnior. Ele terá um desempenho melhor com instruções explícitas para produzir um resultado específico.
Para saber mais sobre as práticas recomendadas ao usar modelos de raciocínio, consulte este guia.
Próximos passos
Agora que você conhece os conceitos básicos de entradas e saídas de texto, pode explorar um destes recursos.