Chat Completions e Responses
Abra o playground da lição e você vai encontrar dois botões, um para cada uma das duas estruturas de API da OpenAI: Chat Completions e Responses. Você vai encontrar os dois nomes de novo em código de outras pessoas e na própria documentação do provedor, geralmente sem nenhuma explicação sobre por que existem dois.
Os dois fazem o mesmo trabalho. Ambos enviam instruções e uma mensagem do usuário para um modelo e recebem uma resposta de volta. O que muda é onde você coloca cada parte da requisição, e onde o texto da resposta aparece depois — e é essa segunda diferença que costuma pegar você quando está copiando um trecho de código de algum lugar.
Esses botões do playground chamam rotas no servidor Express, o pequeno programa em Node que o projeto do curso executa junto com a página, para que as requisições ao modelo aconteçam fora do código do navegador e sua chave de API nunca fique exposta. No Scrimba, a saída dessas rotas do servidor aparece na aba Runner em vez da aba Console.
Os dois exemplos abaixo usam o mesmo client, criado uma única vez a partir dos valores que você salvou em Configurando o provedor:
import OpenAI from "openai"
const client = new OpenAI({
apiKey: process.env.AI_KEY,
baseURL: process.env.AI_URL,
})Chat Completions
O Chat Completions coloca o prompt de sistema e a entrada do usuário juntos em messages:
const response = await client.chat.completions.create({
model: process.env.AI_MODEL,
messages: [
{ role: "system", content: "You are a helpful assistant." },
{
role: "user",
content: "Give me a short explanation of why open-source tools matter.",
},
],
});O texto da resposta fica aninhado dentro da primeira escolha:
response.choices[0].message.contentmessages: primeiro o prompt de sistema, depois sua pergunta. A resposta volta escondida em response.choices[0].message.content. Esse caminho parece complicado nas primeiras vezes que você o digita. Vale a pena ler com calma uma vez, porque você vai vê-lo em praticamente todo exemplo de código que encontrar por aí!
Responses
O Responses dá ao prompt de sistema um campo próprio, instructions. Para uma requisição simples, input pode ser uma string direta:
const response = await client.responses.create({
model: process.env.AI_MODEL,
instructions: "You are a helpful assistant.",
input: "Give me a short explanation of why open-source tools matter.",
});A mesma string direta pode ser transformada em um objeto de mensagem com role/content quando você precisa desse formato:
input: [
{
role: "user",
content: "Give me a short explanation of why open-source tools matter.",
},
],O Responses expõe o texto da resposta diretamente:
response.output_textEle também mantém a estrutura completa da resposta em response.output. Uma resposta de texto básica geralmente contém um item de mensagem cujo content inclui o mesmo texto de saída.
instructions em vez de compartilhar a lista, e input pode ser uma string simples quando você está pedindo só uma coisa. A melhor parte: a resposta está em response.output_text. Um passo, em vez de três.
Por que o curso usa o Responses
O Chat Completions continua sendo uma API válida, e a funcionalidade de agentes deste curso poderia ser construída com ele.
O curso usa o Responses por causa da diferença que você já pode ver nos dois blocos de código acima. Ler uma resposta é response.output_text em vez de response.choices[0].message.content, e o prompt de sistema tem um lugar próprio em vez de ser o primeiro item de um array ao qual você também vai anexando os turnos do usuário. Depois que as chamadas de ferramenta e o histórico de conversa começam a se acumular, essa estrutura significa menos código para manter tudo conectado.
Use a saída completa quando precisar da estrutura
output_text é a forma prática de ler uma resposta de texto final. Use output quando precisar examinar o conjunto completo de itens da resposta.
Você não precisa memorizar as diferenças. Use o Responses aqui, e reconheça o Chat Completions quando encontrá-lo em outro lugar.
Para onde isso leva
Executando o código localmente explica como o navegador e o servidor Express se conectam depois que você baixa uma lição do Scrimba. Se você ainda não escolheu um modelo, Modelos recomendados cobre o que o trabalho com agentes exige.

