Introduzione al generative AI in R

Negli ultimi mesi l'ecosistema di intelligenza artificiale generativa per R ha cominciato a colmare il divario rispetto a Python. Se in passato le soluzioni più diffuse erano legate a ChatGPT, oggi gli sviluppatori R possono contare su un'ampia varietà di modelli di grandi linguaggi (LLM) e su strumenti nativi che semplificano l'integrazione di queste tecnologie nei propri workflow.

Questo articolo presenta cinque dei migliori tool disponibili per incorporare LLM in progetti R, con esempi pratici, liste di provider supportati e indicazioni su come sfruttare le funzionalità più avanzate.

ellmer: il punto di riferimento per i LLM in R

Uno dei più importanti pacchetti per connettere i LLM ai workflow R è ellmer. Il progetto nasce sotto l'egida di Posit, la stessa realtà dietro ggplot2 e il framework web Shiny. Oltre a una community attiva, ellmer offre una documentazione completa e supporta una vasta gamma di provider.

Provider supportati da ellmer

    • OpenAI
    • Azure OpenAI
    • Anthropic
    • Google Gemini
    • AWS Bedrock
    • Snowflake Cortex
    • Perplexity AI
    • Ollama (modelli locali)

Installazione e configurazione

Il pacchetto può essere installato dal CRAN con il tradizionale install.packages("ellmer"). Per chi desidera provare la versione di sviluppo, è possibile usare:

pak::pak("tidyverse/ellmer")

Dopo l'installazione, è necessario creare un oggetto chat specifico per il provider scelto, ad esempio chatopenai() o chatclaude(). Il salvataggio della chiave API è gestito dalle funzioni di supporto incluse nella documentazione.

Esempio di creazione di un oggetto chat OpenAI

library(ellmer)

mychat <- chatopenai()

Per Anthropic Claude la sintassi è analoga:

mychatclaude <- chat_claude()

Prompt di sistema e scelta del modello

I prompt di sistema non sono obbligatori, ma risultano utili per attività tematiche. È consigliabile specificare il modello da utilizzare per evitare sorprese legate a versioni obsolete o costose. A inizio 2025 Claude Sonnet 3.5 di Anthropic è ritenuto il più adatto alla generazione di codice R, mentre OpenAI o3-mini offre una buona qualità a costi inferiori.

Gestione dei parametri del modello

Per impostare parametri come la temperature è necessario utilizzare l'argomento api_arg all'interno di una lista nominata:

mychat <- chatopenai(api_arg = list(temperature = 0.7))

Una temperature più alta tende a produrre output più creativo, mentre valori più bassi generano risposte più precise. I valori accettabili dipendono dalla documentazione del provider scelto.

Interazione e streaming dei risultati

ellmer permette tre modalità principali di utilizzo:

    • Interfaccia chatbot nella console R (liveconsole(mychat))
    • Interfaccia web nel browser (livebrowser(mychat))
    • Salvataggio diretto dei risultati senza streaming

Per avviare una conversazione interattiva nella console, basta eseguire:

liveconsole(mychat)

Allo stesso modo, la versione browser è attivata con livebrowser(mychat). Entrambe le modalità mostrano le risposte in streaming.

Chiamate metodiche interattive

Il metodo my_chat$chat() consente di inviare una domanda e di ricevere la risposta sia in streaming sia come stringa di testo da salvare:

result <- my_chat$chat("Come posso ruotare le etichette dell'asse x di 90 gradi?")

Il contesto della conversazione viene mantenuto, quindi è possibile fare domande successive basate sulla cronologia precedente.

Integrazione in script e funzioni

Per includere ellmer in script più complessi, è consigliabile incapsulare le chiamate in una funzione R:

generateplotcode <- function(query) {

chat <- chat_openai()

answer <- chat$chat(query)

return(answer)

}

Questa pratica facilita il riutilizzo del codice e la gestione degli errori.

tidyllm: il tool di origine tedesca per LLM in R

Il secondo strumento di rilievo è tidyllm, sviluppato da Eduard Brüll del ZEW – Leibniz-Zentrum für Europäische Wirtschaftsforschung. Come ellmer, tidyllm supporta molteplici provider, ma si distingue per la sua interfaccia basata su “verbi” (es. chat(), send_batch()) e per la gestione esplicita dei messaggi.

Provider supportati da tidyllm

    • Anthropic (Claude)
    • OpenAI
    • Google Gemini
    • Mistral
    • Groq (non Grok)
    • Perplexity
    • Azure OpenAI
    • Ollama (modelli locali)

Configurazione delle chiavi API

Quando si utilizza un provider cloud, è necessario impostare la chiave API tramite Sys.setenv() oppure aggiungendola al file .Renviron dell'utente.

Esempio di chat con tidyllm

library(tidyllm)

myconversation <- llmmessage("Qual è il modo più veloce per sommare una colonna in dplyr?") |>

chat(openai(.model = "gpt-4o-mini", .temperature = 0, .stream = FALSE))

print(my_conversation)

Il risultato è una semplice stringa di testo contenente la risposta del modello.

Gest