DescomplicaR

< Voltar para a página inicial

openai - Como utilizar o pacote dentro do R

Isaac Neves | 01/06/2023

A inteligência artificial está revolucionando a maneira como interagimos com a tecnologia, abrindo caminho para uma série de aplicações inovadoras. Uma das áreas mais empolgantes é a geração de texto por meio de modelos de linguagem avançados. Neste artigo, vamos explorar como criar resultados surpreendentes usando inteligência artificial em R, aproveitando a API Key do OpenAI.

1. Criando uma conta na plataforma e gerando uma chave de API

Para utilizar a inteligência artificial, é necessário possuir uma chave de API gerada na plataforma do fabricante.

Crie uma conta no site https://platform.openai.com/

Depois de criar sua conta, retorne à página inicial e siga os próximos passos para gerar uma chave de API: Personal > View API keys

Na próxima página, clique em Create new secret key. Você criará uma chave de API. Cada conta pessoal e grátis pode possuir até 6 chaves de API, no entanto você poderá utilizá-las ilimitadamente.

Note também que, uma vez gerada, o site não entregará de novo a chave de API. Portanto salvea em um bloco de notas ou em algum arquivo confiável.

Caso a chave de API seja publicamente “vazada”, o OpenAI irá deletar esta chave.

2. Instalando e carregando o pacote openai

Requisito: versão do R >= 4.2

Comandos:

# Instalando pacote
install.packages('openai')
# Carregando pacote
library(openai)
# Setando chave de API
Sys.setenv(OPENAI_API_KEY = 'chave_de_api')

3. Criando uma requisição

Iremos criar uma requisição e um resultado — este, para ser criado, precisaremos chamar a função create_completion(), na tradução literal: “criar conclusão”, ou “criar resultado”.

Uso da função create_completion():

create_completion(
  engine_id = deprecated(),
  model,
  prompt = “Escreva um guia completo de como integrar uma IA com a linguagem R utilizando o pacote openai",
  suffix = NULL,
  max_tokens = 150,
  temperature = 1,
  top_p = 1,
  n = 1,
  stream = FALSE,
  logprobs = NULL,
  echo = FALSE,
  stop = NULL,
  presence_penalty = 0,
  frequency_penalty = 0,
  best_of = 1,
  logit_bias = NULL,
  user = NULL,
  openai_api_key = Sys.getenv("OPENAI_API_KEY"),
  openai_organization = NULL
)

Argumentos:

Argumento Tipo Descrição
engine_id - DESCONTINUADO, não usar
model obrigatório

Modelo de requisição. Checar todos os modelos disponíveis no site oficial.

- Para criação de texto:

RECOMENDADO: text-davinci-003

- Para criação de código:

RECOMENDADO: code-davinci-002

prompt obrigatório Vetor único de caracteres contendo a requisição
suffix opcional Vetor único de caracteres contendo o texto que virá depois do ponto de inserção (não muito utilizado em resultados regulares)
max_tokens obrigatório

Valor inteiro contendo o número de tokens do texto que será gerado. Será contabilizado a quantidade de tokens inserida no prompt também.

Padrão: 16

Máximo: 4096

OBS.: a cada 100 tokens, contamos aproximadamente 75 palavras em inglês

temperature obrigatório

Valor numérico entre 0.0 e 2.0. Valores maiores como 0.8 retornarão resultados mais aleatórios e menos repetitivos. Valores menores como 0.2 retornarão resultados mais determinísticos e, talvez, repetitivos.

Padrão: 1

top_p obrigatório

Valor numérico entre 0.0 e 1.0. Uma alternativa para o argumento ‘temperature’.

Padrão: 1

n obrigatório

Valor inteiro contendo o número de resultados gerados pela requisição.

Padrão: 1

stream obrigatório

Valor lógico (TRUE ou FALSE). Não implementado.

Padrão: FALSE

logprobs opcional

Valor inteiro entre 0 e 5. Incluirá as probabilidades de log de tokens.

Padrão: NULL

echo obrigatório

Valor lógico (TRUE ou FALSE). Retornará a requisição e o resultado.

Padrão: FALSE

stop opcional

Vetor de caracteres contendo o texto que indicará quando a API parará de gerar um resultado.

Padrão: NULL

presence_penalty obrigatório

Valor numérico entre -2.0 e 2.0. Valores positivos irão penalizar novos tokens conforme eles aparecem no texto, aumentando a probabilidade do resultado falar sobre novos temas.

Padrão: 0

frequency_penalty obrigatório

Valor numérico entre -2.0 e 2.0. Valores positivos irão penalizar novos tokens conforme sua frequência no texto, diminuindo a probabilidade do resultado repetir as mesmas linhas ou palavras.

Padrão: 0

best_of obrigatório

Valor inteiro maior que 0. Retorna o melhor resultado possível de n resultados.

Padrão: 1

logit_bias opcional

Lista. Modifica a probabilidade de tokens específicos aparecerem no resultado. Valores pequenos, como -1 ou 1, diminuem ou aumentam a probabilidade de seleção. Valores extremos, como -100 ou 100, resultam no banimento ou seleção exclusiva do token.

Utiliza o token mapeado pelo tokenizer, para converter texto para ID de token.

Exemplo: logit_bias <- list(“23955” = -100, “9390” = -100)

Padrão: NULL

openai_api_key obrigatório

Vetor único de caracteres contendo a chave de API.

Padrão: Sys.getenv(“OPENAI_API_KEY”)

openai_organization opcional

Vetor único de caracteres contendo a especificação de uma organização OpenAI.

Padrão: NULL

Exemplo:

resultado <- create_completion(
  model = "text-davinci-003",
  prompt = "Faça um final para o anime One Piece, contando o que é, de fato, o one piece",
  temperature = 0.9,
  max_tokens = 500,
  top_p = 1,
  frequency_penalty = 0.0,
  presence_penalty = 0.6
)

resultado$choices$text

Texto exibido pelo resultado$choices$text:

Depois de muitas batalhas e aventuras, Luffy e seus amigos finalmente descobriram o que era o One Piece. Estava embutido em uma lenda antiga sobre segredos escondidos em um lugar secreto conhecido como Raftel. Um mundo novo de alegrias e sonhos guiou os piratas e sua tripulação até à descoberta do tesouro lendário que manteve os símbolos de todas as verdades do mundo.
O One Piece era algo mais do que um tesouro comum. Era a chave para a liberdade do mundo.
Uma vez obtido, o One Piece permitiu aos piratas estabelecer a paz e a justiça entre os reinos.
O tesouro foi dividido entre as tripulações e, com ele, Luffy realizou o seu sonho de tornar-se o Rei dos Piratas.
A história contada a gerações mudou o destino dos sete mares, pois o One Piece proporcionou prosperidade e liberdade a todos os povos. O triunfo sobre a adversidade, com força e esperança, foi a jornada de Luffy e de seu grupo de piratas que conquistaram o One Piece.

4. Criando uma imagem

Iremos criar uma imagem. Para isso, utilizaremos a função create_image().

Uso da função:

create_image(
  prompt,
  n = 1,
  size = c("1024x1024", "256x256", "512x512"),
  response_format = c("url", "b64_json"),
  user = NULL,
  openai_api_key = Sys.getenv("OPENAI_API_KEY"),
  openai_organization = NULL
)

Argumentos:

Argumento Tipo Descrição
prompt obrigatório Vetor único de caracteres contendo a requisição
n obrigatório

Valor inteiro maior que 0 contendo o número de imagens que serão geradas.

Padrão: 1

size obrigatório

Vetor único de caracteres contendo o tamanho da imagem. Disponíveis:

- “256x256”

- “512x512”

- “1024x1024”

Padrão: “1024x1024”

response_fomat obrigatório

Vetor único de caracteres contendo o formato de retorno da imagem (“url” ou “b64_json”).

Padrão: “url”

user opcional

Vetor único de caracteres.

Padrão: NULL

openai_api_key obrigatório

Vetor único de caracteres contendo a chave de API.

Padrão: Sys.getenv(“OPENAI_API_KEY”)

openai_organization opcional

Vetor único de caracteres contendo a especificação de uma organização OpenAI.

Padrão: NULL

Exemplo:

imagem <- create_image(
  prompt = "Um cachorro com uma maçã na cabeça"
)

imagem$data$url

Resultado:

5. Projetos e outras ideias

Agora que você já sabe o básico de como funciona a comunicação com a API do OpenAI, basta colocar em prática novos projetos. Vai aí algumas ideias já desenvolvidas ou ainda não desenvolvida:

  • ChatBot simples: https://github.com/ingeraldo/projetos/blob/main/openai-R-chatbot.R (projeto que faz requisição sobre requisição com auxílio de um laço de repetição);
  • MindTrix: https://mindtrix.shinyapps.io/MindTrix/ (projeto para criação de frases de SMS, corpo e assunto de e-mail, HSM e outros);
  • WordTrix: https://mindtrix.shinyapps.io/WordTrix/ (projeto para análise de sentimentos de frases);
  • Análise de dados repetitiva (crie uma variável contendo o dataframe e peça para a IA fazer a análise deste dataframe, concatenando com o comando paste() ou paste0());
  • Criação de imagens representativas, servindo de modelo para suas ideias (peça para a IA criar layouts, UIs etc. para seus projetos);
  • Criação de scripts e textos para seus projetos;
  • Criação ou correção de códigos.

7. Conclusão

A inteligência artificial pode, com toda a certeza, ser utilizada como uma espécie de aliada em nossas ações digitais. Para isso, é de suma importância aprofundar-se nos demais comandos e funções do pacote, que podem ser úteis em seus projetos.

Obrigado e faça bom proveito!

8. Notas

URLs importantes (fontes, documentações etc.):

Documentação completa do pacote “openai”:

https://cran.r-project.org/web/packages/openai/index.html