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.
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!
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
Comentários