ChatGPT - Retornando um Json com elementos relacionados a conversa
Descubra como solicitar respostas no formato JSON com a OpenAI para extrair informações específicas de conversas

Olá meus Unicórnios! 🦄✨
No tutorial anterior, conversamos sobre fazer perguntas sobre conversas previamente transcritas.
Porem, simplesmente trazer respostas ainda é algo muito "manual".
Vamos utilizar o mesmo exemplo do tutorial anterior mas com uma pitada de automação:

O que iremos fazer neste exemplo, é pedir para que a OpenAI nos retorne um Json que ira nos retornar um Objeto com os dados que queremos.
Iremos utilizar a mesma conversa e a mesma instrução:
Tenho a conversa abaixo, e irei fazer perguntas sobre elas:
- Pessoal, vocês já pararam para pensar qual é o melhor filme de Harry Potter? Eu sou totalmente #TeamAzkaban.
- Ah, não! Azkaban é ótimo, mas pra mim, o melhor filme é O Cálice de Fogo. A trama do Torneio Tribruxo, os dragões, a cena do pântano... Isso é ação de verdade!
- Eu até entendo sua paixão por "O Cálice de Fogo", mas a atmosfera sombria de "O Prisioneiro de Azkaban" é incomparável! A forma como o filme lida com o passado de Harry, a introdução do Sirius Black... é incrível.
Porem, iremos mudar a pergunta, para indicar como queremos a resposta:
Sobre o que eles estão conversando?
O retorno deve ser um Json, onde teremos os elementos abaixo:
- [Assunto] Assunto da Conversa
- [Filme] Array com uma lista dos Filmes Discutidos
- [QtdPessoas] Quantidade de pessoas na conversa
E em nossa requisição, precisamos indicar que queremos que o retorno seja um Json:
"response_format": {
"type": "json_object"
}
Vamos para a Prática, iremos utilizar o recurso "completions" e o modelo "gpt-4o".
{
"model": "gpt-4o",
"max_tokens": 300,
"messages": [
{
"role": "system",
"content": [
{
"type": "text",
"text": "Tenho a conversa abaixo, e irei fazer perguntas sobre elas:\n- Pessoal, vocês já pararam para pensar qual é o melhor filme de Harry Potter? Eu sou totalmente #TeamAzkaban.\n- Ah, não! Azkaban é ótimo, mas pra mim, o melhor filme é O Cálice de Fogo. A trama do Torneio Tribruxo, os dragões, a cena do pântano... Isso é ação de verdade!\n- Eu até entendo sua paixão por \"O Cálice de Fogo\", mas a atmosfera sombria de \"O Prisioneiro de Azkaban\" é incomparável! A forma como o filme lida com o passado de Harry, a introdução do Sirius Black... é incrível."
}
]
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Sobre o que eles estão conversando?\n\nO retorno deve ser um Json, onde teremos os elementos abaixo:\n- [Assunto] Assunto da Conversa\n- [Filme] Array com uma lista dos Filmes Discutidos\n- [QtdPessoas] Quantidade de pessoas na conversa"
}
]
}
],
"response_format": {
"type": "json_object"
}
}
Em "choises[0].message.content" iremos receber o json com nossa resposta:
{
"choices": [
{
"message": {
"role": "assistant",
"content": "{\n \"Assunto\": \"Melhor filme da série Harry Potter\",\n \"Filme\": [\n \"O Prisioneiro de Azkaban\",\n \"O Cálice de Fogo\"\n ],\n \"QtdPessoas\": 3\n}",
}
}
]
}
Agora, basta decodificarmos o Json retornado em "content":
{
"Assunto": "Melhor filme da série Harry Potter",
"Filme": [
"O Prisioneiro de Azkaban",
"O Cálice de Fogo"
],
"QtdPessoas": 3
}
Mas para que iremos utilizar isto?
Imagine que temos um sistema de imobiliária, onde cada atendente conversa por áudio com os clientes.
Podemos transcrever estes áudios e checar se existe alguma conversa sobre uma venda "por fora", e com base nisto gerar alguma ação no sistema.
Por hoje é só, meus unicórnios! 🦄✨
Que a magia do arco-íris continue brilhando em suas vidas! Até mais! 🌈🌟