< 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$textTexto 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$urlResultado:
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!