I migliori strumenti di intelligenza artificiale per R
Il mondo dell'analisi dei dati e della statistica, dominato da linguaggi come R e Python, sta vivendo una rivoluzione grazie all'integrazione dell'intelligenza artificiale generativa (GenAI) e, in particolare, dei modelli linguistici di grandi dimensioni (LLM). Sebbene l'ecosistema GenAI di R non possa ancora competere in termini di dimensioni con quello di Python, ha compiuto progressi decisivi negli ultimi mesi. Inizialmente, in questo settore, erano prevalentemente diffusi strumenti legati a ChatGPT; tuttavia, ora è disponibile un supporto nativo più ampio per vari fornitori di LLM. Si è ampliata anche la gamma di compiti GenAI che gli sviluppatori possono affrontare utilizzando R.
In questo articolo, vi presentiamo alcuni dei migliori strumenti per integrare i grandi modelli linguistici nei vostri progetti R, sia localmente che tramite API. Questi strumenti offrono un ponte robusto e flessibile tra il vasto potere computazionale degli LLM e la comprovata capacità di R nell'analisi dei dati e nello sviluppo di applicazioni.
ellmer: L'interfaccia principale per gli LLM in R
Uno degli strumenti più importanti per integrare gli LLM nei flussi di lavoro di R è ellmer. Questo progetto è nato all'interno dell'azienda open source Posit ed è mantenuto da sviluppatori che si sono già fatti un nome con altri popolari pacchetti R, come ggplot2 e il framework web Shiny R. Inoltre, questo strumento gode di una comunità vivace ed entusiasta, come testimonia questo post sui social media:
{ellmer} is the best #LLM interface in any language, in my opinion, and I’d encourage you to give the new PDF support a try.
Learn more: ellmer.tidyverse.org/
— Kyle Walker (@kylewalker.bsky.social)
14 febbraio 2025 alle 22:41
Quando si tratta di concretezza, ellmer è ben documentato e supporta una vasta gamma di funzioni, casi d'uso e piattaforme AI. Tra queste ultime figurano, ad esempio:
- OpenAI
- Azure OpenAI
- Anthropic
- Google Gemini
- AWS Bedrock
- Snowflake Cortex
- Perplexity AI
- Ollama (per modelli locali)
Installazione e configurazione di ellmer
Il pacchetto ellmer può essere installato come di consueto tramite CRAN, oppure è possibile testare la versione di sviluppo con:
pak::pak("tidyverse/ellmer")
Per utilizzare ellmer, è necessario creare innanzitutto un oggetto chat con funzioni come chat_openai() o chat_claude(). Questo oggetto verrà poi utilizzato per interagire con il modello linguistico di grandi dimensioni. Per scoprire come salvare la vostra API key (se non utilizzate un modello locale), consultate il file di aiuto della funzione chat.
Un oggetto chat OpenAI di base potrebbe essere creato, ad esempio, nel seguente modo:
library(ellmer)
my_chat <- chat_openai("Il mio primo prompt")
Nel caso di Claude di Anthropic, la sintassi sarebbe:
my_chat_claude <- chat_claude("Il mio primo prompt", model = "claude-3-sonnet-20240229")
Prompt di sistema e selezione del modello
I prompt di sistema, pur non essendo strettamente necessari, sono consigliabili per attività specifiche. Allo stesso modo, non è obbligatorio impostare un modello per tutte le funzioni di chat. Tuttavia, è una buona pratica per evitare di essere sorpresi da un modello obsoleto o molto costoso.
All'inizio del 2025, Anthropics Claude Sonnet 3.5 sembra essere il più adatto per il codice R, e secondo i primi rapporti, il prossimo modello Sonnet 3.7 dovrebbe avere prestazioni ancora migliori in generale. Poiché il panorama degli LLM si evolve rapidamente, è importante rimanere informati. Un consiglio a questo punto: l'o3-mini di OpenAI, secondo la nostra esperienza, è anch'esso molto bravo a scrivere codice R ed è più economico di Sonnet. Tuttavia, come modello di ragionamento, potrebbe non reagire così rapidamente come l'LLM di Anthropic.
Parametri avanzati
Se desiderate impostare altri parametri per il modello (inclusa la temperatura), utilizzate api_arg. Questo richiede una lista nominata come:
my_chat <- chat_openai(api_arg = list(temperature = 0.5))
Una temperatura più alta è spesso associata a un output "più creativo", una più bassa a uno più preciso. Va notato che la temperatura nelle funzioni di chat di ellmer non è un argomento esplicito. Pertanto, è necessario definirla all'interno della lista api_arg. Un elenco degli argomenti disponibili e dei range di valori validi per la temperatura (e altre impostazioni) è disponibile nella documentazione API del rispettivo fornitore del modello.
Interazione con i modelli
Per utilizzare gli oggetti chat, ellmer può:
- offrire un'interfaccia chatbot (sia nella console R che nel browser),
- trasmettere e salvare i risultati in formato testuale, o
- salvare solo i risultati della query, senza lo streaming.
Nella console R, live_console(my_chat) apre un'interfaccia di chat. In un browser, si usa live_browser(my_chat). In entrambi i casi, le risposte vengono trasmesse in streaming.
La "Interactive Method Call" di ellmer utilizza una sintassi come my_chat$chat() per visualizzare le risposte in streaming e per salvare il risultato in formato testuale:
my_results <- my_chat$chat("La mia prima domanda.")
Se si utilizza di nuovo my_chat per porre un'altra domanda, la cronologia della chat con le domande e le risposte precedenti viene mantenuta, consentendo di farvi riferimento, come nell'esempio seguente:
my_results2 <- my_chat$chat("Ora colora di turchese per favore")
La successiva query di chat contiene una cronologia delle domande e risposte precedenti, consentendo al modello di mantenere il contesto della conversazione. Questo è fondamentale per interazioni più complesse e per costruire dialoghi coerenti.
Se non si utilizza il codice ellmer in modo interattivo all'interno di uno script R come parte di un flusso di lavoro più ampio, la documentazione consiglia di "avvolgere" il codice in una funzione R:
my_function <- function(user_prompt) {
my_chat <- chat_openai()
my_answer <- my_chat$chat(user_prompt)
return(my_answer)
}
In questo caso, my_answer è una semplice stringa di testo.
Il pacchetto ellmer include anche documentazioni per:
- Tool/Function Calling (chiamata di strumenti/funzioni)
- Prompt Design (progettazione di prompt)
- Data Extraction (estrazione di dati)
Abbiamo utilizzato ellmer in combinazione con il pacchetto shinychat per aggiungere funzionalità di chatbot a un'applicazione Shiny. In questo Gist pubblico su GitHub troverete un codice di esempio per creare una semplice interfaccia di chat Shiny per LLM locali di Ollama (inclusi un menu a tendina per la selezione del modello e un pulsante per scaricare le chat).
tidyllm: L'LLM nel cuore del Tidyverse
Questo strumento ha radici tedesche: tidyllm è stato sviluppato da Eduard Brüll, ricercatore presso lo ZEW – Leibniz-Zentrum für Europäische Wirtschaftsforschung. In termini di funzioni, tidyllm e ellmer (appena discussi) presentano aree di sovrapposizione. Tuttavia, per quanto riguarda l'interfaccia utente e la filosofia di design, ci sono differenze sostanziali tra questi due strumenti AI per gli sviluppatori R.
Infatti, tidyllm combina "verbi" – il tipo di richiesta che si desidera effettuare, come chat() o send_batch() – con i fornitori. Queste richieste includono text embeddings, chat e elaborazione batch.
Attualmente, lo strumento tidyllm supporta i modelli AI di:
- Anthropic (Claude)
- OpenAI
- Google (Gemini)
- Mistral
- Groq (non Grok)
- Perplexity
- Azure OpenAI
- modelli locali di Ollama
Se si utilizza un fornitore di cloud, è necessario configurare in precedenza la propria API key, sia con sys.setenv() che tramite il file .Renviron. Questa pratica garantisce che le credenziali siano gestite in modo sicuro e non vengano incorporate direttamente nel codice.
Interagire con tidyllm
Una semplice query di chat di solito inizia creando un oggetto LLMMessage con la funzione llm_message("la tua query qui") e passandolo a una funzione chat():
library(tidyllm)
my_conversation <- llm_message("Parlami della storia dell'intelligenza artificiale.") |>
chat(openai(.model = "gpt-4o-mini", .temperature = 0, .stream = FALSE))
In questo contesto, llm_message() può anche contenere un messaggio .system_prompt. Questo è utile per fornire al modello istruzioni contestuali o persona-specifiche prima della query principale, migliorando la rilevanza e la qualità della risposta.
Il valore restituito da my_conversation è semplicemente una stringa di testo con la risposta del modello, che può essere facilmente stampata. È possibile costruire su questo aggiungendo un altro messaggio e una chat, mantenendo così la query e la risposta originale in memoria:
# Mantiene la cronologia dell'ultimo messaggio
my_conversation2 <- my_conversation |>
llm_message("Come potrei ruotare le etichette sull'asse x di 90 gradi?") |>
chat(openai(.model = "gpt-4o-mini", .temperature = 0, .stream = FALSE))
print(my_conversation2)
Estrazione di metadati e messaggi utente
Per estrarre metadati dai risultati, si utilizza:
result_metadata(my_conversation2)
Questo restituisce un "Tibble" (un tipo speciale di data frame) che presenta colonne per:
model: il nome del modello utilizzato.timestamp: l'orario della richiesta.prompt_tokens: il numero di token nel prompt.completion_tokens: il numero di token nella risposta.total_tokens: il numero totale di token (prompt + completion).api_specific: liste con ulteriori dettagli sui token specifici dell'API.
È anche possibile estrarre il messaggio dell'utente che ha generato la risposta con get_user_message(my_conversation2).
Supporto per immagini e PDF
Inoltre, llm_message() supporta anche modelli che consentono l'upload di immagini con l'argomento .imagefile, nonché domande su file PDF con l'argomento .pdf (a condizione che il pacchetto R pdftools sia installato). Questa funzionalità è particolarmente utile per l'analisi di documenti e contenuti visivi.
Abbiamo ad esempio scaricato il manuale di riferimento PDF di tidyllm da CRAN e lo abbiamo utilizzato in una sottodirectory per effettuare query dirette sul suo contenuto.
Conclusione
L'integrazione dei modelli linguistici di grandi dimensioni in R sta aprendo nuove frontiere per gli analisti di dati, i ricercatori e gli sviluppatori. Strumenti come ellmer e tidyllm stanno democratizzando l'accesso a potenti capacità di intelligenza artificiale generativa, consentendo di eseguire compiti complessi direttamente nell'ambiente R. Con il continuo sviluppo di questi pacchetti e il rapido progresso degli LLM, il futuro dell'AI in R si prospetta entusiasmante, offrendo possibilità sempre maggiori per l'automazione, l'analisi del testo, la generazione di codice e molto altro ancora.