Tamanho de fonte
Alto contraste
Altura de linha

Assistants da OpenAI: Utilizando o Code Interpreter

Avatar de Luiza Cherobini Pereira Luiza Cherobini Pereira
6 minutos de leitura 3 meses atrás

Se você está começando a explorar o mundo da Inteligência Artificial, provavelmente já ouviu falar sobre a OpenAI e suas poderosas APIs. Uma das funcionalidades mais interessantes e recentes é o code interpreter dos assistants da OpenAI. Neste post, vamos entender o que é essa ferramenta, como utilizá-la e como ela pode facilitar suas primeiras experiências com IA.

tela com código pythn

O que é o Code Interpreter dos Assistants da OpenAI?

O code interpreter dos assistants da OpenAI é uma ferramenta que permite aos assistentes de IA executar códigos em Python para resolver problemas complexos. Isso significa que, além de gerar texto, esses assistentes podem rodar scripts, analisar dados e até gerar gráficos, tudo de forma automatizada.

Por que isso é importante?

Para iniciantes em IA, essa funcionalidade é uma verdadeira mão na roda. Ela permite que você realize tarefas avançadas sem precisar se aprofundar em detalhes técnicos complexos. Com o code interpreter, você pode focar em entender os conceitos básicos e ver resultados práticos rapidamente.

Como Utilizar o Code Interpreter dos Assistants da OpenAI

Vamos agora ao passo a passo de como configurar e utilizar um Assitant.

1. Criando um Assistant

Primeiro, precisamos criar um assistente que tenha acesso ao code interpreter. Para isso, utilizamos a API da OpenAI. Veja o exemplo abaixo:

from openai import OpenAI
client = OpenAI()

assistant = client.beta.assistants.create(
  name="Math Tutor",
  instructions="Você é um tutor pessoal de matemática. Escreva e execute códigos para responder perguntas de matemática.",
  tools=[{"type": "code_interpreter"}],
  model="gpt-4-turbo-preview",
)

2. Criando uma Thread

A comunicação com os assistentes é feita através de threads, que armazenam o histórico de mensagens. Vamos criar uma thread:

thread = client.beta.threads.create()

3. Adicionando Mensagens à Thread

Agora, adicionamos uma mensagem à thread. Por exemplo, podemos perguntar sobre a probabilidade de obter um número específico ao lançar um dado:

message = client.beta.threads.messages.create(
    thread_id=thread.id,
    role='user',
    content='Se eu jogar um dado honesto 1000 vezes, qual é a probabilidade de eu obter exatamente 150 vezes o número 6? Resolva com um código'
)

4. Rodando a Thread

Depois de adicionar a mensagem, precisamos solicitar ao assistente que rode a thread:

run = client.beta.threads.runs.create(
    thread_id=thread.id,
    assistant_id=assistant.id,
    instructions='O nome do usuário é Adriano Soares e ele é um usuário Premium.'
)

5. Esperando a Thread Rodar

Para garantir que a thread já tenha sido executada, utilizamos o seguinte código:

import time

while run.status in ['queued', 'in_progress', 'cancelling']:
    time.sleep(1)
    run = client.beta.threads.runs.retrieve(
        thread_id=thread.id,
        run_id=run.id
    )
print(run.status)  # 'completed'

6. Verificando a Resposta

Por fim, verificamos a resposta dada pelo modelo:

if run.status == 'completed':
    mensagens = client.beta.threads.messages.list(
        thread_id=thread.id
    )
    print(mensagens)
else:
    print('Erro', run.status)

Se a mensagem final for um texto, podemos verificá-la da seguinte forma:

print(mensagens.data[0].content[0].text.value)

7. Analisando os Passos de Processamento

Podemos também verificar todos os passos que o modelo percorreu até chegar à solução:

run_steps = client.beta.threads.runs.steps.list(
    thread_id=thread.id,
    run_id=run.id
)

for step in run_steps.data[::-1]:
    print('\n=== Step:', step.step_details.type)
    if step.step_details.type == 'tool_calls':
        for tool_call in step.step_details.tool_calls:
            print('-----')
            print(tool_call.code_interpreter.input)
            print('-----')
            print('Result')
            print(tool_call.code_interpreter.outputs[0].logs)
    if step.step_details.type == 'message_creation':
        message = client.beta.threads.messages.retrieve(
            thread_id=thread.id,
            message_id=step.step_details.message_creation.message_id
        )
        print(message.content[0].text.value)

Exemplo Prático: Analisando Dados de Vendas

Vamos ver um exemplo prático de como o code interpreter pode ser utilizado para analisar dados de vendas de um supermercado. Neste exemplo, vamos utilizar dados de supermercado extraídos do Kaggle.

Enviando Arquivos para o Assistant

Primeiro, enviamos um arquivo CSV com os dados de vendas para o assistente:

import openai
from dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv())

client = openai.Client()

file = client.files.create(
    file=open('arquivos/supermarket_sales.csv', 'rb'),
    purpose='assistants'
)

assistant = client.beta.assistants.create(
    name="Analista Financeiro Supermercados Asimov",
    instructions="Você é um analista financeiro de um supermercado. \
        Você utiliza os dados .csv relativo às vendas \
        do supermercado para realizar as suas análises",
    tools=[{'type': 'code_interpreter'}],
    file_ids=[file.id],
    model='gpt-4-turbo-preview'
)

Fazendo Perguntas ao Assistant

Agora, podemos fazer perguntas ao assistente, como “Qual é o rating médio das vendas do nosso supermercado?”:

# Cria thread
thread = client.beta.threads.create()

# Adiciona mensagem
pergunta = 'Qual é o rating médio das vendas do nosso supermercado?'
messages = client.beta.threads.messages.create(
    thread_id=thread.id,
    role='user',
    content=pergunta
)

# Roda thread
run = client.beta.threads.runs.create(
    thread_id=thread.id,
    assistant_id=assistant.id,
    instructions='O nome do usuário é Adriano.'
)

# Espera ela rodar
import time

while run.status in ['queued', 'in_progress', 'cancelling']:
    time.sleep(1)
    run = client.beta.threads.runs.retrieve(
        thread_id=thread.id,
        run_id=run.id
    )

print(run.status)

Verificando a Resposta

if run.status == 'completed':
    messages = client.beta.threads.messages.list(
        thread_id=thread.id
    )
    print(messages)
else:
    print('Erro', run.status)

Analisando a Resposta

print(messages.data[0].content[0].text.value)
O rating médio das vendas do seu supermercado é aproximadamente 6.97. Se precisar de mais informações ou análises adicionais, por favor, me avise!

Verificando os Passos

Para verificar os passos necessários para chegar à resposta, basta executar o trecho de código do capítulo anterior.

run_steps = client.beta.threads.runs.steps.list(
  thread_id=thread.id,
  run_id=run.id
)

for step in run_steps.data[::-1]:
    print('======= Step >', step.step_details.type)
    if step.step_details.type == 'tool_calls':
        for tool_call in step.step_details.tool_calls:
            print('```')
            print(tool_call.code_interpreter.input)
            print('```')
            if tool_call.code_interpreter.outputs[0].type == 'logs':
                print('Result')
                print(tool_call.code_interpreter.outputs[0].logs)
    if step.step_details.type == 'message_creation':
        message = client.beta.threads.messages.retrieve(
            thread_id=thread.id,
            message_id=step.step_details.message_creation.message_id
        )
        if message.content[0].type == 'text':
            print(message.content[0].text.value)

Conclusão

O code interpreter dos assistants da OpenAI é uma ferramenta poderosa que pode facilitar muito a vida de quem está começando a explorar a Inteligência Artificial. Com ele, você pode realizar análises complexas, gerar gráficos e muito mais, tudo de forma automatizada e acessível. Experimente e veja como essa ferramenta pode transformar suas primeiras experiências com IA!

Se você gostou deste tutorial e quer aprender mais sobre como utilizar a API da OpenAI, continue acompanhando nossos posts e explore as infinitas possibilidades que a IA pode oferecer. Até a próxima!

Imagem de um notebook

Cursos de programação gratuitos com certificado

Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:

  • Conteúdos gratuitos
  • Projetos práticos
  • Certificados
  • +20 mil alunos e comunidade exclusiva
  • Materiais didáticos e download de código
Inicie agora

Comentários

Comentar
Faça parte da discussão Crie sua conta gratuita e compartilhe
sua opinião nos comentários
Entre para a Asimov