Gemini no RStudio
Hype de Machado de Assis
Introdução
No blog listendata, Deepanshu demonstra como utilizar a API do Google Gemini no R, inclusive com o uso da interface interativa Shiny. Vamos detalhar o código básico de exemplo, sugerido para integrar os dois sistemas, capaz de gerar uma resposta do Gemini a um prompt apresentado através de uma função chamada no R.
Bibliotecas
Carregamos as bibliotecas indispensáveis:
- httr - permite realizar requisições HTTP,;
- jsonlite - facilita a interpretação e manipulação de dados json;
Armazene a api key como variável de ambiente
O valor da chave da API key do Gemini pode ser atribuído diretamente ao objeto key ou ser salvo em uma variável de ambiente, que pode ser chamada a qualquer momento através da função Sys.getenv(), de acordo com o roteiro fornecido por Paul Oldham.
Definições e parâmetros
Prompt: Prompt significa uma pergunta que
você deseja fazer ou um conjunto de instruções específicas. Também é
chamado de consulta de pesquisa.
Tokens:
Tokens são subpalavras ou palavras. Por exemplo, a palavra
“nocivo” é dividida em dois tokens: radical “noc” (Latim nocere
= prejudicar) e sufixo “ivo”. De modo que o cognato “inocente” pode ser
dividido em três tokens: “in”, “noc” e “ente”.
Temperatura: É um parâmetro do modelo que é usado para
ajustar a resposta. Ele está entre 0 e 1. Se você definir o valor da
temperatura próximo a 0, isso significa que o modelo gerará uma resposta
com a maior probabilidade. Um valor mais próximo de 1 produzirá
respostas mais criativas.
Max output tokens: É um
parâmetro do modelo que define o número máximo de tokens que podem ser
gerados na resposta.
Definição da função
Definimos a função gemini, que recebe o prompt do usuário, parâmetros de configuração e a chave de API do Gemini:
rgemini <- function(prompt,
temperature=0.5, # Parâmetro de temperatura para a geração de texto
max_output_tokens=1024, # Limite máximo de tokens de saída
api_key=Sys.getenv("GEMINI_API_KEY"), # Chave de API do Gemini
model = "gemini-1.5-pro-latest") # Modelo do Gemini a ser utilizadoVerificamos o processo de autenticação:
# Verificação da chave de API
if(nchar(api_key)<1) {
api_key <- readline("Informe a api key: ") # Solicita a chave de API ao usuário
Sys.setenv(GEMINI_API_KEY = api_key) # Armazena a chave de API na variável de ambiente
}Definimos o endpoint da API do Gemini. Um endpoint da API é um endereço específico e único que identifica um recurso ou serviço dentro de uma API (Interface de Programação de Aplicativos):
Requisição POST:
# Realiza uma requisição POST para o endpoint da API
response <- POST(
url = paste0("https://generativelanguage.googleapis.com/v1beta/models/", model_query), # URL da API
query = list(key = api_key), # Parâmetros da requisição (chave de API)
content_type_json(), # Define o tipo de conteúdo como JSON
encode = "json", # Codifica os dados como JSON
body = list(
contents = list(
parts = list(
list(text = prompt) # O prompt do usuário, como entrada para a geração de texto
)),
generationConfig = list(
temperature = temperature, # Temperatura para a geração de texto
maxOutputTokens = max_output_tokens # Limite de tokens de saída
)
)
)Verifica o status da requisição:
# Verifica se a requisição foi bem-sucedida
if(response$status_code>200) {
stop(paste("Error - ", content(response)$error$message)) # Se houve erro, exibe a mensagem de erro
}Extraímos os candidatos da resposta JSON e o texto gerado de cada candidato:
Retorna o texto gerado pelo Gemini:
Define o prompt do usuário e chama a função rgemini:
prompt <- "Aja como um crítico literário especialista na obra de Machado de Assis. \
Apresente, com entusiasmo, o livro 'Memórias Póstumas de Brás Cubas',\
para um público que desconhece esse romance."Chamamos a função rgemini com o prompt definido:
Tudo junto fica assim:
# Função para interagir com o Gemini
rgemini <- function(prompt,
temperature=0.5, # Parâmetro de temperatura para a geração de texto
max_output_tokens=1024, # Limite máximo de tokens de saída
api_key=Sys.getenv("GEMINI_API_KEY"), # Chave de API do Gemini
model = "gemini-1.5-pro-latest") { # Modelo do Gemini a ser utilizado
# Verificação da chave de API
if(nchar(api_key)<1) {
api_key <- readline("Informe a api key: ") # Solicita a chave de API ao usuário
Sys.setenv(GEMINI_API_KEY = api_key) # Armazena a chave de API na variável de ambiente
}
# Define o endpoint da API do Gemini
model_query <- paste0(model, ":generateContent")
# Realiza uma requisição POST para o endpoint da API
response <- POST(
url = paste0("https://generativelanguage.googleapis.com/v1beta/models/", model_query), # URL da API
query = list(key = api_key), # Parâmetros da requisição (chave de API)
content_type_json(), # Define o tipo de conteúdo como JSON
encode = "json", # Codifica os dados como JSON
body = list(
contents = list(
parts = list(
list(text = prompt) # O prompt do usuário, como entrada para a geração de texto
)),
generationConfig = list(
temperature = temperature, # Temperatura para a geração de texto
maxOutputTokens = max_output_tokens # Limite de tokens de saída
)
)
)
# Verifica se a requisição foi bem-sucedida
if(response$status_code>200) {
stop(paste("Error - ", content(response)$error$message)) # Se houve erro, exibe a mensagem de erro
}
# Extrai os candidatos da resposta JSON
candidates <- content(response)$candidates
# Extrai o texto gerado de cada candidato
outputs <- unlist(lapply(candidates, function(candidate) candidate$content$parts))
# Retorna o texto gerado pelo Gemini
return(outputs)
}
# Define o prompt do usuário
prompt <- "Aja como um crítico literário especialista na obra de Machado de Assis. \
Apresente, com entusiasmo, o livro 'Memórias Póstumas de Brás Cubas',\
para um público que desconhece esse romance."Caríssimos, preparem suas poltronas e acendam as luzes da razão, pois hoje vos apresento uma obra que subverte a lógica e nos convida a rir da nossa própria mortalidade! Abramos, com a vã curiosidade que nos é peculiar, as páginas de “Memórias Póstumas de Brás Cubas”, obra-prima do mestre Machado de Assis!
Esqueçam, meus caros, os romances açucarados e as histórias previsíveis! Aqui, o narrador, o defunto autor Brás Cubas, nos presenteia com a sua autobiografia, escrita do além-túmulo, com uma ironia fina e uma sagacidade mordaz que desafiam os padrões literários da época.
Preparem-se para conhecer um protagonista cínico e egocêntrico, um anti-herói que passeia pela vida sem grandes aspirações, movido por caprichos e devaneios. Acompanhem Brás Cubas em suas desventuras amorosas, em suas reflexões filosóficas pouco ortodoxas e em suas observações perspicazes sobre a sociedade carioca do século XIX.
Mas não se enganem com o tom aparentemente leviano da narrativa! Machado de Assis, com sua pena afiada e genial, nos conduz por um labirinto de digressões, metanarrativas e jogos metalinguísticos, questionando a própria natureza da realidade, da memória e da literatura.
Em “Memórias Póstumas de Brás Cubas”, a morte não é o fim, mas o ponto de partida para uma análise profunda e irônica da existência humana. Preparem-se para rir de si mesmos, para se surpreender com a ousadia narrativa e para se encantar com a genialidade do Bruxo do Cosme Velho!
Não percam a oportunidade de se aventurar por esta obra singular, que revolucionou a literatura brasileira e que continua a encantar e desafiar leitores de todas as épocas. Uma leitura obrigatória para aqueles que buscam uma experiência literária única e inesquecível!
Considerações adicionais
- A função Sys.getenv(“GEMINI_API_KEY”) busca a chave de API no ambiente do sistema, garantindo a segurança da sua chave de API.
- A função content(response) extrai o conteúdo JSON da resposta da API.
- A função unlist é usada para converter a lista de texto gerado em uma única string.
Este código demonstra como o R pode ser utilizado para interagir com APIs de linguagem natural, como o Gemini, e obter resultados relevantes para tarefas específicas.
Referências:
Bhalla, D. (2024). How to use Google’s Gemini AI model in R. Acessado em 24/05/2024: https://www.listendata.com/2023/12/google-gemini-r.html
Abolafio Jr., R. (2020) Nova tradução aumenta o hype de Machado de Assis no exterior. Revista Versatille. Edição 116. Acessada a versão online em 24/05/2024: https://versatille.com/re-descobrir-machado-de-assis/