ChatGPT — Respondendo Perguntas sobre o conteudo de um arquivo

Descubra como utilizar o ChatGPT para fazer perguntas sobre arquivos CSV, automatizando processos de análise de dados.

ChatGPT — Respondendo Perguntas sobre o conteudo de um arquivo

Olá Gente


Este é um dos recursos mais legais do ChatGPT, nele, podemos subir um arquivo, e fazer perguntas sobre este arquivo.


Para exemplo, iremos subir um arquivo CSV, com a listagem dos estados brasileiros e a quantidade de livros (Informação de teste apenas, não é uma informação real):

https://fastupload.io/iqTNM2EUOKi5I3j/file


Segue exemplo do arquivo:


Para este recurso, iremos utilizar o “Assistant” do ChatGPT, então precisamos seguir algumas etapas.


1. Enviar Arquivo


Antes de tudo, precisamos fazer o upload do arquivo para nossa conta na OpenAI.


Iremos utilizar o endpoint “files”:

https://api.openai.com/v1/files


Neste endpoint, temos que enviar um POST com os parâmetros abaixo, em “Multipart” (Não é Json):

- file: O arquivo que será utilizado (Para este exemplo, será enviado uma planilha em CSV)
- purpose: O proposito deste arquivo, neste caso, iremos utilizar “assistants”


Segue exemplo do Post:


A resposta da API será um Json onde o ID do arquivo será enviado no campo “id”:


Neste caso, recebemos o ID:

file-5ELElHgPJPPX5SOiDnhYxTJf


2. Criando o Assistente


Agora precisamos criar um Bot e vincular o arquivo a este Bot.


Iremos utilizar o endpoint “assistants”:

https://api.openai.com/v1/assistants


Neste endpoint, temos que enviar um POST com um Json com alguns parâmetros:

- instructions: Aqui iremos descrever o que o Bot ira fazer
- tools: As ferramentas que iremos utilizar, neste caso, iremos utilizar “retrieval”
- model: O modelo que iremos utilizar, neste caso, iremos utilizar “gpt-4-turbo-preview”
- file_ids: Os ids dos arquivos que iremos utilizar, neste caso, iremos preencher apenas um arquivo, sendo o arquivo que enviamos anteriormente


Para este propósito, iremos definir as instruções como:

Responda perguntas sobre o arquivo anexado


Segue exemplo do Post:


A resposta da API será um Json onde o ID do assistente será enviado no campo “id”:


Neste caso, recebemos o ID:

asst_zUpepe7lkEI2gxPNeJZod0Vm


3. Iniciando uma Conversa


Agora precisamos iniciar uma conversa com o assistente que criamos anteriormente.

No ChatGPT, uma conversa é uma “threads”.


Iremos utilizar o endpoint “threads”:

https://api.openai.com/v1/threads


Neste endpoint, temos que enviar um POST vazio.


A resposta da API será um Json onde o ID da Thread será enviado no campo “id”:


Neste caso, recebemos o ID:

thread_rilb6861j2YJPX28vrDiFmH4


4. Adicionando Pergunta na Thread


Agora que criamos a Thread, precisamos adicionar nossa pergunta nesta Thread.


Iremos utilizar o endpoint “threads/messages”:

https://api.openai.com/v1/threads/[thread_id]/messages


Em nosso teste, teremos o Endpoint completo:

https://api.openai.com/v1/threads/thread_rilb6861j2YJPX28vrDiFmH4/messages


Neste endpoint, temos que enviar um POST com um Json com alguns parâmetros:

- role: Aqui iremos setar como fixo “user”, indicando que é uma pergunta do Cliente
- content: Aqui iremos preencher a pergunta


Para este propósito, iremos definir a pergunta como:

Qual o estado com mais filmes?


Segue exemplo do Post:


A resposta da API será um Json onde o ID da Mensagem será enviado no campo “id”:


Neste caso, recebemos o ID:

msg_Z6q2cPReMnvSxwCZ8NtlgTnq


5. Processando a Thread


Quando adicionamos perguntas em uma Thread, ela não é respondida de forma imediata, precisamos “Executar” a Thread e indicar qual “Assistente” ira executar esta Thread.


Iremos utilizar o endpoint “threads/runs”:

https://api.openai.com/v1/threads/[thread_id]/runs


Em nosso teste, teremos o Endpoint completo:

https://api.openai.com/v1/threads/thread_rilb6861j2YJPX28vrDiFmH4/runs


Neste endpoint, temos que enviar um POST com um Json com alguns parâmetros:

- assistant_id: O ID do Assistente que criamos na etapa 2 deste tutorial


Segue exemplo do Post:


A resposta da API será um Json onde o ID da execução será enviado no campo “id”:


Neste caso, recebemos o ID:

run_Md4oi8s8Dp9rhoK9N9WGRvVK


Este ID será importante para checarmos o STATUS desta execução.


6. Verificando se a Thread foi Processada


Quando uma Thread é processada, ela fica em uma fila de execução.


Então, logo após a Thread ser processada ela entra no status:

queued


Após o processamento finalizar o status ira mudar para:

completed


Para consultarmos o Status, iremos fazer uma GET para:

https://api.openai.com/v1/threads/[thread_id]/runs/[run_id]


Em nosso teste, teremos o Endpoint completo:

https://api.openai.com/v1/threads/thread_rilb6861j2YJPX28vrDiFmH4/runs/run_Md4oi8s8Dp9rhoK9N9WGRvVK


O retorno da API será um Json com os detalhe do processamento, e no elemento “status” temos o status do processamento:


7. Verificando a Resposta de nossa Pergunta


Quando a Thread mudar de status para “completed”, podermos consultar as mensagens desta Thread e ver a resposta.


Para isto, iremos fazer uma GET para:

https://api.openai.com/v1/threads/[thread_id]/messages


Em nosso teste, teremos o Endpoint completo:

https://api.openai.com/v1/threads/thread_rilb6861j2YJPX28vrDiFmH4/messages


O retorno da API será um Json com as mensagens no elemento “data”, o primeiro elemento deste array é a resposta do Assistente:


Neste caso, a resposta foi:

O estado com mais filmes, de acordo com o arquivo, é Tocantins (TO) com 260.000 filmes


Que corresponde a informação de nosso arquivo de teste:


8. Fazendo novas perguntas


Para fazer novas perguntas, precisamos seguir o mesmo ciclo:

- Cadastramos a pergunta em “/v1/threads/[thread_id]/messages”
- Processamos a Thread em “/v1/threads/thread_id]/runs”
- Verificamos quando a Thread for processada em “/v1/threads/[thread_id]/runs/[run_id]”
- Consultando a Resposta em “/v1/threads/[thread_id]/messages”


Ao consultar as mensagens, serão retornadas todas as mensagens anteriores, e a resposta será o primeiro elemento do Array:


Versão Beta


Como o recurso de Assistente esta em Beta, é necessário adicionar uma linha no cabeçalho da solicitação:

- OpenAI-Beta: assistants=v1


Por hoje é isto, queridos desenvolvedores! 👩‍💼
Até logo! 👋