R/acep_gpt.R

Defines functions acep_gpt

Documented in acep_gpt

#' @title Función para interactuar con los modelos  de OpenAI.
#' @description Función para interactuar con los modelos de OpenAI
#' desde las claves API secretas y pagas.
#' @param texto texto a procesar.
#' @param instrucciones indicaciones de contexto que se le
#' proporcionan al modelo de lenguaje GPT para influir en
#' su generación de texto.
#' @param gpt_api clave API secreta.
#' @param modelo modelo de lenguaje GPT de OpenAI.
#' @importFrom httr POST add_headers content
#' @importFrom jsonlite toJSON
#' @return Si todas las entradas son correctas,
#' la salida sera un JSON con la información solicitada.
#' @keywords tripletes gpt
#' @examples
#' \dontrun{
#' texto <- "El SOIP declaro la huelga por aumento de salarios."
#' pregunta <- "¿Cuál es el sujeto de la acción? Ejemplo de respuesta: 'CGT'"
#' texto_gpt <- acep_gpt(texto = texto, instrucciones = pregunta)
#' cat(texto_gpt)
#'}
#' @export
acep_gpt <- function(texto,
                     instrucciones,
                     gpt_api = Sys.getenv("OPENAI_API_KEY"),
                     modelo = "gpt-3.5-turbo-0125") {
  stopifnot(is.character(texto),
            is.character(instrucciones),
            is.character(modelo))
  if (nchar(gpt_api) == 0) {
    stop("La clave API de OpenAI no est\u00e1 configurada.")
  }
  contenido <- paste(instrucciones,
                     "\nEl texto a analizar aparece a continuaci\u00f3n:\n###\n",
                     texto,
                     "\n###",
                     sep = " ")
  body <- list(
    model = modelo,
    seed=123456,
    temperature=0,
    max_tokens=1000,
    top_p= 0.2,
    frequency_penalty=0.2,
    response_format = list(type = "json_object"),
    messages = list(
      list(role = "system", content = "You are a helpful assistant designed to output JSON."),
      list(role = "user", content = contenido)
    )
  )
  json_body <- jsonlite::toJSON(body, auto_unbox = TRUE)
  headers <- c(
    `Content-Type` = "application/json",
    Authorization = paste("Bearer", gpt_api)
  )
  tryCatch({
    output <- httr::POST(
      url = "https://api.openai.com/v1/chat/completions",
      body = json_body,
      httr::add_headers(.headers=headers)
    )
    respuesta <- httr::content(output)$choices[[1]]$message$content
    if (is.null(respuesta)) {
      return(message("Los par\u00e1metro ingrasados tienen valores incorrectos."))
    } else {
      return(respuesta)
    }
  }, error = function(e) {
    stop("Error al interactuar con la API de OpenAI: ", conditionMessage(e))
  })
}
agusnieto77/ACEP documentation built on March 16, 2024, 6:50 p.m.