Computerhaus Quickborn

Die besten KI-Tools für R​

TippaPatt | shutterstock.com Das Generative-AI-Ökosystem von R kann zwar nicht mit dem von Python mithalten, hat sich aber in den vergangenen Monaten entscheidend weiterentwickelt. Waren in diesem Bereich zunächst hauptsächlich Tools mit ChatGPT-Bezug angesagt, ist inzwischen mehr nativer Support für die Anbieter von Large Language Models (LLMs) verfügbar. Zudem hat sich auch die Bandbreite der GenAI-Tasks, die Entwickler mit R bewältigen können, erweitert. In diesem Artikel stellen wir Ihnen fünf der besten Tools vor, um große Sprachmodelle in R-Projekte einzubinden – sowohl lokal als auch über APIs. ellmer Eines der wichtigsten Tools, um LLMs in R-Workflows zu integrieren, ist ellmer. Das Projekt ist beim Open-Source-Unternehmen Posit entstanden und wird von Entwicklern gepflegt, die sich bereits mit anderen populären R-Packages einen Namen gemacht haben (etwa ggplot2 und das Web-Framework Shiny R). Darüber hinaus erfreut sich dieses Tool auch einer lebendigen und begeisterten Community:   {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/[image or embed]— Kyle Walker (@kylewalker.bsky.social) 14. Februar 2025 um 22:41 Geht’s ans Eingemachte, ist ellmer gut dokumentiert und unterstützt eine ganze Reihe von KI-Funktionen, -Anwendungsfällen und -Plattformen. Zu letzteren zählen beispielsweise:   OpenAI, Azure OpenAI, Anthropic, Google Gemini, AWS Bedrock, Snowflake Cortex, Perplexity AI und Ollama (für lokale Modelle). Das ellmer-Package installieren Sie entweder wie üblich über CRAN – oder testen die Development-Version mit pak::pak(„tidyverse/ellmer“). Um ellmer zu nutzen, erstellen Sie zunächst ein Chat-Objekt mit Funktionen wie chat_openai() oder chat_claude(). Dieses verwenden Sie, um mit dem Large Language Model zu interagieren. Um herauszufinden, wie Sie Ihren API-Key speichern können (falls Sie kein lokales Modell verwenden), konsultieren Sie die Hilfedatei der Chat-Funktion. Ein grundlegendes OpenAI-Chat-Objekt ließe sich zum Beispiel folgendermaßen erstellen: library(ellmer) my_chat Im Fall von Anthropics Claude würde die Syntax lauten: my_chat_claude System-Prompts sind zwar nicht unbedingt erforderlich, für themenspezifische Tasks aber empfehlenswert. Ebenso wenig ist es nötig, ein Modell für alle Chat-Funktionen einzustellen. Trotzdem ist es eine gute Idee, um nicht von einem veralteten oder sehr teuren Modell überrascht zu werden.   Anfang 2025 scheint Anthropics Claude Sonnet 3.5 speziell für R-Code am besten geeignet – ersten Berichten zufolge soll das kommende Modell Sonnet 3.7 im Allgemeinen sogar noch besser performen. Da sich die LLM-Landschaft rasant weiterentwickelt, gilt es jedoch, sich diesbezüglich informiert zu halten. Ein Tipp an dieser Stelle: OpenAIs o3-mini kann nach unserer Erfahrung ebenfalls sehr gut R-Code schreiben und ist günstiger als Sonnet. Allerdings reagiert es als Reasoning-Modell womöglich nicht so schnell wie das Anthropic-LLM. Falls Sie andere Parameter für das Modell festlegen möchten (inklusive der Temperature), nutzen Sie dazu api_arg. Das erfordert eine benannte Liste wie: my_chat Eine höhere Temperature wird oft mit „kreativerem“ Output verbunden, eine niedrigere mit präziserem. Dabei ist zu beachten, dass die Temperature in den Chatfunktionen von ellmer kein explizites Argument darstellt. Deshalb müssen Sie es innerhalb der api_arg-Liste definieren. Eine Auflistung der verfügbaren Argumente und gültigen Wertebereiche für Temperature (und weitere Einstellungen) finden Sie in der API-Dokumentation des jeweiligen Modellanbieters. Um die Chat-Objekte zu verwenden, kann ellmer: eine Chatbot-Schnittstelle bieten (entweder in der R-Konsole oder im Browser), Ergebnisse in Textform streamen und speichern, oder nur die Abfrageergebnissen speichern – ohne zu streamen. In der R-Konsole öffnet live_console(my_chat) ein Chat-Interface. In einem Browser nutzen Sie dazu live_browser(my_chat). In beiden Fällen werden die Antworten gestreamt. Der „Interactive Method Call“ von ellmer nutzt eine Syntax wie my_chat$chat(), um sowohl gestreamte Antworten anzuzeigen, als auch, um das Ergebnis in Textform zu speichern: my_results Wenn Sie my_chat erneut verwenden, um eine weitere Frage zu stellen, wird der Chatverlauf mit den vorherigen Fragen und Antworten beibehalten, so dass Sie auf diese Bezug nehmen können – wie im folgenden Beispiel: my_results2 Die nachfolgende Chat-Abfrage enthält eine Historie früherer Fragen und Antworten: Sharon Machlis Wenn Sie Ellmer-Code nicht interaktiv innerhalb eines R-Skripts als Teil eines größeren Workflows nutzen, empfiehlt die Dokumentation, Ihren Code in einer R-Funktion zu „wrappen“: my_function In diesem Fall ist my_answer ein einfacher Text-String. Das ellmer-Package enthält unter anderem auch Dokumentationen für: Tool/Function Calling, Prompt Design, oder Datenextraktion. Wir haben es in Kombination mit dem shinychat-Package genutzt, um einer Shiny-Applikation Chatbot-Funktionen hinzuzufügen. In diesem öffentlichen GitHub-Gist finden Sie Beispielcode, um eine einfache Shiny-Chat-Oberfläche für lokale Ollama-LLMs zu erstellen (inklusive Dropdown-Menü für die Modellauswahl und einer Schaltfläche, um Chats herunterzuladen). tidyllm Dieses Tool hat deutsche Wurzeln: tidyllm wurde von Eduard Brüll, Forscher beim ZEW – Leibniz-Zentrum für Europäische Wirtschaftsforschung, entwickelt. In Sachen Funktionen weisen tidyllm und das eben besprochene ellmer Überschneidungsbereiche auf. Mit Blick auf die Benutzeroberfläche und die Designphilosophie gibt es jedoch wesentliche Unterschiede zwischen diesen beiden KI-Tools für R-Entwickler. Denn tidyllm kombiniert „Verben“ – die Art von Anfrage, die Sie stellen möchten, wie chat() oder send_batch() – mit Anbietern. Zu diesen Requests gehören Text Embeddings, Chats und Batch Processing. Aktuell unterstützt das tidyllm-Tool die KI-Modelle von: Anthropic (Claude), OpenAI, Google (Gemini), Mistral, Groq (nicht Grok), Perplexity, Azure OpenAI, sowie lokale Ollama-Modelle. Falls Sie einen Cloud-Anbieter nutzen, müssen Sie zuvor Ihren API-Key einrichten – entweder mit sys.setenv() oder über Ihre .Renviron-Datei. Eine einfache Chat-Abfrage beginnt in der Regel damit, mit der llm_message(„your query here“)-Funktion ein einfaches LLMMessage-Objekt zu erstellen und dieses an eine chat()-Funktion weiterzuleiten: library(tidyllm) my_conversation chat(openai(.model = "gpt-4o-mini", .temperature = 0, .stream = FALSE)) Dabei kann llm_message() auch eine .system_prompt-Nachricht enthalten. Der zurückgegebene Wert von my_conversation ist lediglich ein Text-String mit der Antwort des Modells, die sich leicht ausgeben lässt. Darauf können Sie aufbauen, indem Sie eine weitere Nachricht und einen Chat hinzufügen, wodurch die ursprüngliche Abfrage und Antwort im Speicher bleiben: # Keep history of last message my_conversation2 llm_message("How would I rotate labels on the x-axis 90 degrees?") |> chat(openai(.model = "gpt-4o-mini", .temperature = 0, .stream = FALSE)) print(my_conversation2) Um Metadaten aus den Ergebnissen zu extrahieren, nutzen Sie: result_metadata Das gibt einen „Tibble“ (spezieller Data Frame) zurück, der Spalten aufweist für: model, timestamp, prompt_tokens, completion_tokens, total_tokens, sowie api_specific-Listen mit weiteren Token-Details. Sie können auch die Benutzernachricht extrahieren, die die Antwort mit get_user_message(my_conversation2) generiert hat. Darüber hinaus unterstützt llm_message() auch Modelle, die Bild-Uploads mit dem .imagefile-Argument ermöglichen – sowie Fragen zu PDF-Dateien mit dem .pdf-Argument (vorausgesetzt, das R-Package pdftools ist installiert). Wir haben beispielsweise das tidyllm PDF-Referenzhandbuch von CRAN heruntergeladen und in einem Unterverzeichnis gespeichert (tidyllm.pdf). Anschließend konnten wir dazu eine Frage stellen: my_conversation3 chat(openai(.model = "gpt-4o", .temperature = .1, .stream = FALSE)) print(my_conversation3) Message History: system: You are a helpful assistant ————————————————————– user: What are 10 interesting tasks I can perform with the tidyllm package? -> Attached Media Files: tidyllm.pdf ————————————————————– assistant: The tidyllm package provides a tidy interface for integrating large language model (LLM) APIs into R workflows. Here are 10 interesting tasks you can perform with the tidyllm package: Chat with Language Models: Use the chat() function to send messages to various language models like OpenAI, Claude, or Mistral, and receive responses. This can be useful for generating text, answering questions, or creating conversational agents. Generate Text Embeddings: Use the embed() function to generate embeddings for text data. This can be useful for tasks like semantic search, clustering, or as input features for machine learning models. Batch Processing: Use functions like send_batch(), fetch_batch(), and check_batch() to send multiple requests in a batch to an LLM API, retrieve results, and check the status of batch processing. This is useful for processing large datasets efficiently. Multimodal Interactions: Create LLMMessage objects that include text and media (such as images or PDFs) for multimodal processing. This can be useful for tasks that require understanding both text and visual content. Interactive Message History: Maintain a conversation history using LLMMessage objects, allowing for context-aware interactions with language models. This is useful for building chatbots or virtual assistants that need to remember previous interactions. Custom JSON Schemas: Define custom JSON schemas using tidyllm_schema() to enforce structured outputs from language models. This is useful for ensuring that the responses from the models adhere to a specific format. Transcribe Audio Files: Use the groq_transcribe() function to transcribe audio files using the Groq transcription API. This can be useful for converting spoken content into text. File Management with Gemini API: Use functions like gemini_upload_file(), gemini_list_files(), and gemini_delete_file() to manage files in the Gemini API. This is useful for tasks that involve uploading, listing, or deleting files as part of the workflow. Rate Limit Information: Use rate_limit_info() to retrieve the current rate limit information for APIs. This is useful for managing API usage and avoiding hitting rate limits. Stream Responses: Enable streaming of responses from language models using the .stream parameter in functions like chat() or ollama_chat(). This is useful for real-time applications where you want to display the response as it is being generated. These tasks demonstrate the versatility of the tidyllm package in integrating LLMs into various data workflows and applications. Hinweis: Der obenstehende Code dient lediglich dazu, die Paketsyntax und -funktionen zu veranschaulichen. Es handelt es sich dabei nicht um eine effiziente Methode, große Dokumente abzufragen (dazu später mehr). Ein abschließender Tipp: Wenn Sie keine sofortigen Antworten benötigen, können Sie die Kosten auch senken, indem Sie auf Batch Processing setzen. Diverse Anbieter bieten für diesen Fall großzügige Rabatte an. Die Funktion tidyllm send_batch() sendet eine solchen Batch-Processing-Request, check_batch() überprüft den Status und fetch_batch() ruft die Ergebnisse ab. Weitere Details dazu finden Sie auf der offiziellen Webseite von tidyllm. batchLLM Entwickler Dylan Pieper hat batchLLM kürzlich zugunsten eines neuen Pakets namens hellmer eingestellt – es funktioniert weiterhin, erhält aber keine neuen Funktionen mehr. Wie der Name bereits nahelegt, ist batchLLM darauf ausgelegt, Prompts über mehrere Ziele hinweg auszuführen. Etwas konkreter ausgedrückt, ermöglicht das Tool, einen Prompt über eine Spalte in einem Data Frame auszuführen – und einen Data Frame zurückzuerhalten, der eine neue Spalte mit Antworten enthält. Das ist eine praktische Möglichkeit, um LLMs in R-Workflows einzubinden – etwa für Tasks wie: Sentiment-Analysen, Klassifizierung und Labeling oder Tagging. Das Tool protokolliert auch Batches und Metadaten, ermöglicht es, Ergebnisse verschiedener LLMs zu vergleichen und verfügt über integrierte Verzögerungen für das API-Rate-Limiting. Darüber hinaus enthält batchLLM auch eine integrierte Shiny-App, die eine praktische Weboberfläche zur Verfügung stellt: Sharon Machlis Diese starten Sie mit batchLLM_shiny() (oder als RStudio-Add-in). Eine Webdemo der Applikation finden Sie hier. Zusätzliche LLM-Tools für R-Entwickler Nach dem Blick auf die drei wichtigsten Tools, um große Sprachmodelle in R-Programme und -Skripte zu integrieren, lohnt sich auch ein Blick auf die folgenden beiden Werkzeuge. Sie fokussieren auf spezifische Tasks, wenn LLMs mit R genutzt werden: ragnar extrahiert Informationen aus großen Datenmengen, während tidyprompt Skripte für allgemeine Prompts erstellt. ragnar Retrieval Augmented Generation (RAG) ist eine der nützlichsten Anwendungen für LLMs. Für Python und JavaScript stehen entsprechend viele RAG-Packages und -Tools zur Verfügung. Nicht so für R – zumindest, wenn sie darüber hinausgehen sollen, Embeddings zu generieren. Das ragnar-Package (das sich derzeit noch in Entwicklung befindet) zielt jedoch darauf ab, „eine Komplettlösung mit sinnvollen Standardeinstellungen anzubieten, die sachkundigen Benutzern dennoch präzise Kontrolle über alle Schritte einräumt“. Diese Schritte umfassen: Dokumentenverarbeitung, Chunking, Embedding, Storage (standardmäßig DuckDB), Retrieval (basierend auf der Ähnlichkeits- und Textsuche), sowie einen Prozess namens „Re-Ranking“ (soll Suchergebnisse und Prompts optimieren). R-Entwickler mit RAG-Affinität sollten dieses Tool auf jeden Fall im Auge behalten. tidyprompt LLM-Nutzer werden bestimmte Tasks sehr wahrscheinlich mehrmals codieren wollen. Zum Beispiel, wenn es darum geht strukturierte Outputs zu generieren, Funktionen zu callen oder bestimmte LLM-Verhaltensweisen zu erzwingen (etwa eine „Chain of Thought“). Die Idee hinter dem tidyprompt-Package ist es, „Bausteine“ anzubieten, um Prompts zu erstellen und LLM-Outputs zu verarbeiten. Diese Bausteine werden dann mithilfe herkömmlicher R-Pipes miteinander verkettet. Laut seiner Dokumentation will tidyprompt als Tool wahrgenommen werden, „mit dem sich die Funktionalität von LLMs über native APIs hinaus optimieren lässt“. Das Tool unterstützt zurzeit Modelle von: OpenAI, Google, Ollama, Groq, Grok, XAI und OpenRouter. Eine Prompt kann so simpel ausfallen wie: library(tidyprompt) "Is London the capital of France?" |> answer_as_boolean() |> send_prompt(llm_provider_groq(parameters = list(model = "llama3-70b-8192") )) Ein detaillierteres Beispiel finden Sie auf GitHub. Darüber hinaus gibt es auch komplexere Pipelines, die beispielweise Funktionen wie llm_feedback() verwenden, um zu überprüfen, ob eine LLM-Antwort bestimmte Bedingungen erfüllt. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox! 

Die besten KI-Tools für R​ TippaPatt | shutterstock.com Das Generative-AI-Ökosystem von R kann zwar nicht mit dem von Python mithalten, hat sich aber in den vergangenen Monaten entscheidend weiterentwickelt. Waren in diesem Bereich zunächst hauptsächlich Tools mit ChatGPT-Bezug angesagt, ist inzwischen mehr nativer Support für die Anbieter von Large Language Models (LLMs) verfügbar. Zudem hat sich auch die Bandbreite der GenAI-Tasks, die Entwickler mit R bewältigen können, erweitert. In diesem Artikel stellen wir Ihnen fünf der besten Tools vor, um große Sprachmodelle in R-Projekte einzubinden – sowohl lokal als auch über APIs. ellmer Eines der wichtigsten Tools, um LLMs in R-Workflows zu integrieren, ist ellmer. Das Projekt ist beim Open-Source-Unternehmen Posit entstanden und wird von Entwicklern gepflegt, die sich bereits mit anderen populären R-Packages einen Namen gemacht haben (etwa ggplot2 und das Web-Framework Shiny R). Darüber hinaus erfreut sich dieses Tool auch einer lebendigen und begeisterten Community:   {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/[image or embed]— Kyle Walker (@kylewalker.bsky.social) 14. Februar 2025 um 22:41 Geht’s ans Eingemachte, ist ellmer gut dokumentiert und unterstützt eine ganze Reihe von KI-Funktionen, -Anwendungsfällen und -Plattformen. Zu letzteren zählen beispielsweise:   OpenAI, Azure OpenAI, Anthropic, Google Gemini, AWS Bedrock, Snowflake Cortex, Perplexity AI und Ollama (für lokale Modelle). Das ellmer-Package installieren Sie entweder wie üblich über CRAN – oder testen die Development-Version mit pak::pak(„tidyverse/ellmer“). Um ellmer zu nutzen, erstellen Sie zunächst ein Chat-Objekt mit Funktionen wie chat_openai() oder chat_claude(). Dieses verwenden Sie, um mit dem Large Language Model zu interagieren. Um herauszufinden, wie Sie Ihren API-Key speichern können (falls Sie kein lokales Modell verwenden), konsultieren Sie die Hilfedatei der Chat-Funktion. Ein grundlegendes OpenAI-Chat-Objekt ließe sich zum Beispiel folgendermaßen erstellen: library(ellmer) my_chat Im Fall von Anthropics Claude würde die Syntax lauten: my_chat_claude System-Prompts sind zwar nicht unbedingt erforderlich, für themenspezifische Tasks aber empfehlenswert. Ebenso wenig ist es nötig, ein Modell für alle Chat-Funktionen einzustellen. Trotzdem ist es eine gute Idee, um nicht von einem veralteten oder sehr teuren Modell überrascht zu werden.   Anfang 2025 scheint Anthropics Claude Sonnet 3.5 speziell für R-Code am besten geeignet – ersten Berichten zufolge soll das kommende Modell Sonnet 3.7 im Allgemeinen sogar noch besser performen. Da sich die LLM-Landschaft rasant weiterentwickelt, gilt es jedoch, sich diesbezüglich informiert zu halten. Ein Tipp an dieser Stelle: OpenAIs o3-mini kann nach unserer Erfahrung ebenfalls sehr gut R-Code schreiben und ist günstiger als Sonnet. Allerdings reagiert es als Reasoning-Modell womöglich nicht so schnell wie das Anthropic-LLM. Falls Sie andere Parameter für das Modell festlegen möchten (inklusive der Temperature), nutzen Sie dazu api_arg. Das erfordert eine benannte Liste wie: my_chat Eine höhere Temperature wird oft mit „kreativerem“ Output verbunden, eine niedrigere mit präziserem. Dabei ist zu beachten, dass die Temperature in den Chatfunktionen von ellmer kein explizites Argument darstellt. Deshalb müssen Sie es innerhalb der api_arg-Liste definieren. Eine Auflistung der verfügbaren Argumente und gültigen Wertebereiche für Temperature (und weitere Einstellungen) finden Sie in der API-Dokumentation des jeweiligen Modellanbieters. Um die Chat-Objekte zu verwenden, kann ellmer: eine Chatbot-Schnittstelle bieten (entweder in der R-Konsole oder im Browser), Ergebnisse in Textform streamen und speichern, oder nur die Abfrageergebnissen speichern – ohne zu streamen. In der R-Konsole öffnet live_console(my_chat) ein Chat-Interface. In einem Browser nutzen Sie dazu live_browser(my_chat). In beiden Fällen werden die Antworten gestreamt. Der „Interactive Method Call“ von ellmer nutzt eine Syntax wie my_chat$chat(), um sowohl gestreamte Antworten anzuzeigen, als auch, um das Ergebnis in Textform zu speichern: my_results Wenn Sie my_chat erneut verwenden, um eine weitere Frage zu stellen, wird der Chatverlauf mit den vorherigen Fragen und Antworten beibehalten, so dass Sie auf diese Bezug nehmen können – wie im folgenden Beispiel: my_results2 Die nachfolgende Chat-Abfrage enthält eine Historie früherer Fragen und Antworten: Sharon Machlis Wenn Sie Ellmer-Code nicht interaktiv innerhalb eines R-Skripts als Teil eines größeren Workflows nutzen, empfiehlt die Dokumentation, Ihren Code in einer R-Funktion zu „wrappen“: my_function In diesem Fall ist my_answer ein einfacher Text-String. Das ellmer-Package enthält unter anderem auch Dokumentationen für: Tool/Function Calling, Prompt Design, oder Datenextraktion. Wir haben es in Kombination mit dem shinychat-Package genutzt, um einer Shiny-Applikation Chatbot-Funktionen hinzuzufügen. In diesem öffentlichen GitHub-Gist finden Sie Beispielcode, um eine einfache Shiny-Chat-Oberfläche für lokale Ollama-LLMs zu erstellen (inklusive Dropdown-Menü für die Modellauswahl und einer Schaltfläche, um Chats herunterzuladen). tidyllm Dieses Tool hat deutsche Wurzeln: tidyllm wurde von Eduard Brüll, Forscher beim ZEW – Leibniz-Zentrum für Europäische Wirtschaftsforschung, entwickelt. In Sachen Funktionen weisen tidyllm und das eben besprochene ellmer Überschneidungsbereiche auf. Mit Blick auf die Benutzeroberfläche und die Designphilosophie gibt es jedoch wesentliche Unterschiede zwischen diesen beiden KI-Tools für R-Entwickler. Denn tidyllm kombiniert „Verben“ – die Art von Anfrage, die Sie stellen möchten, wie chat() oder send_batch() – mit Anbietern. Zu diesen Requests gehören Text Embeddings, Chats und Batch Processing. Aktuell unterstützt das tidyllm-Tool die KI-Modelle von: Anthropic (Claude), OpenAI, Google (Gemini), Mistral, Groq (nicht Grok), Perplexity, Azure OpenAI, sowie lokale Ollama-Modelle. Falls Sie einen Cloud-Anbieter nutzen, müssen Sie zuvor Ihren API-Key einrichten – entweder mit sys.setenv() oder über Ihre .Renviron-Datei. Eine einfache Chat-Abfrage beginnt in der Regel damit, mit der llm_message(„your query here“)-Funktion ein einfaches LLMMessage-Objekt zu erstellen und dieses an eine chat()-Funktion weiterzuleiten: library(tidyllm) my_conversation chat(openai(.model = "gpt-4o-mini", .temperature = 0, .stream = FALSE)) Dabei kann llm_message() auch eine .system_prompt-Nachricht enthalten. Der zurückgegebene Wert von my_conversation ist lediglich ein Text-String mit der Antwort des Modells, die sich leicht ausgeben lässt. Darauf können Sie aufbauen, indem Sie eine weitere Nachricht und einen Chat hinzufügen, wodurch die ursprüngliche Abfrage und Antwort im Speicher bleiben: # Keep history of last message my_conversation2 llm_message("How would I rotate labels on the x-axis 90 degrees?") |> chat(openai(.model = "gpt-4o-mini", .temperature = 0, .stream = FALSE)) print(my_conversation2) Um Metadaten aus den Ergebnissen zu extrahieren, nutzen Sie: result_metadata Das gibt einen „Tibble“ (spezieller Data Frame) zurück, der Spalten aufweist für: model, timestamp, prompt_tokens, completion_tokens, total_tokens, sowie api_specific-Listen mit weiteren Token-Details. Sie können auch die Benutzernachricht extrahieren, die die Antwort mit get_user_message(my_conversation2) generiert hat. Darüber hinaus unterstützt llm_message() auch Modelle, die Bild-Uploads mit dem .imagefile-Argument ermöglichen – sowie Fragen zu PDF-Dateien mit dem .pdf-Argument (vorausgesetzt, das R-Package pdftools ist installiert). Wir haben beispielsweise das tidyllm PDF-Referenzhandbuch von CRAN heruntergeladen und in einem Unterverzeichnis gespeichert (tidyllm.pdf). Anschließend konnten wir dazu eine Frage stellen: my_conversation3 chat(openai(.model = "gpt-4o", .temperature = .1, .stream = FALSE)) print(my_conversation3) Message History: system: You are a helpful assistant ————————————————————– user: What are 10 interesting tasks I can perform with the tidyllm package? -> Attached Media Files: tidyllm.pdf ————————————————————– assistant: The tidyllm package provides a tidy interface for integrating large language model (LLM) APIs into R workflows. Here are 10 interesting tasks you can perform with the tidyllm package: Chat with Language Models: Use the chat() function to send messages to various language models like OpenAI, Claude, or Mistral, and receive responses. This can be useful for generating text, answering questions, or creating conversational agents. Generate Text Embeddings: Use the embed() function to generate embeddings for text data. This can be useful for tasks like semantic search, clustering, or as input features for machine learning models. Batch Processing: Use functions like send_batch(), fetch_batch(), and check_batch() to send multiple requests in a batch to an LLM API, retrieve results, and check the status of batch processing. This is useful for processing large datasets efficiently. Multimodal Interactions: Create LLMMessage objects that include text and media (such as images or PDFs) for multimodal processing. This can be useful for tasks that require understanding both text and visual content. Interactive Message History: Maintain a conversation history using LLMMessage objects, allowing for context-aware interactions with language models. This is useful for building chatbots or virtual assistants that need to remember previous interactions. Custom JSON Schemas: Define custom JSON schemas using tidyllm_schema() to enforce structured outputs from language models. This is useful for ensuring that the responses from the models adhere to a specific format. Transcribe Audio Files: Use the groq_transcribe() function to transcribe audio files using the Groq transcription API. This can be useful for converting spoken content into text. File Management with Gemini API: Use functions like gemini_upload_file(), gemini_list_files(), and gemini_delete_file() to manage files in the Gemini API. This is useful for tasks that involve uploading, listing, or deleting files as part of the workflow. Rate Limit Information: Use rate_limit_info() to retrieve the current rate limit information for APIs. This is useful for managing API usage and avoiding hitting rate limits. Stream Responses: Enable streaming of responses from language models using the .stream parameter in functions like chat() or ollama_chat(). This is useful for real-time applications where you want to display the response as it is being generated. These tasks demonstrate the versatility of the tidyllm package in integrating LLMs into various data workflows and applications. Hinweis: Der obenstehende Code dient lediglich dazu, die Paketsyntax und -funktionen zu veranschaulichen. Es handelt es sich dabei nicht um eine effiziente Methode, große Dokumente abzufragen (dazu später mehr). Ein abschließender Tipp: Wenn Sie keine sofortigen Antworten benötigen, können Sie die Kosten auch senken, indem Sie auf Batch Processing setzen. Diverse Anbieter bieten für diesen Fall großzügige Rabatte an. Die Funktion tidyllm send_batch() sendet eine solchen Batch-Processing-Request, check_batch() überprüft den Status und fetch_batch() ruft die Ergebnisse ab. Weitere Details dazu finden Sie auf der offiziellen Webseite von tidyllm. batchLLM Entwickler Dylan Pieper hat batchLLM kürzlich zugunsten eines neuen Pakets namens hellmer eingestellt – es funktioniert weiterhin, erhält aber keine neuen Funktionen mehr. Wie der Name bereits nahelegt, ist batchLLM darauf ausgelegt, Prompts über mehrere Ziele hinweg auszuführen. Etwas konkreter ausgedrückt, ermöglicht das Tool, einen Prompt über eine Spalte in einem Data Frame auszuführen – und einen Data Frame zurückzuerhalten, der eine neue Spalte mit Antworten enthält. Das ist eine praktische Möglichkeit, um LLMs in R-Workflows einzubinden – etwa für Tasks wie: Sentiment-Analysen, Klassifizierung und Labeling oder Tagging. Das Tool protokolliert auch Batches und Metadaten, ermöglicht es, Ergebnisse verschiedener LLMs zu vergleichen und verfügt über integrierte Verzögerungen für das API-Rate-Limiting. Darüber hinaus enthält batchLLM auch eine integrierte Shiny-App, die eine praktische Weboberfläche zur Verfügung stellt: Sharon Machlis Diese starten Sie mit batchLLM_shiny() (oder als RStudio-Add-in). Eine Webdemo der Applikation finden Sie hier. Zusätzliche LLM-Tools für R-Entwickler Nach dem Blick auf die drei wichtigsten Tools, um große Sprachmodelle in R-Programme und -Skripte zu integrieren, lohnt sich auch ein Blick auf die folgenden beiden Werkzeuge. Sie fokussieren auf spezifische Tasks, wenn LLMs mit R genutzt werden: ragnar extrahiert Informationen aus großen Datenmengen, während tidyprompt Skripte für allgemeine Prompts erstellt. ragnar Retrieval Augmented Generation (RAG) ist eine der nützlichsten Anwendungen für LLMs. Für Python und JavaScript stehen entsprechend viele RAG-Packages und -Tools zur Verfügung. Nicht so für R – zumindest, wenn sie darüber hinausgehen sollen, Embeddings zu generieren. Das ragnar-Package (das sich derzeit noch in Entwicklung befindet) zielt jedoch darauf ab, „eine Komplettlösung mit sinnvollen Standardeinstellungen anzubieten, die sachkundigen Benutzern dennoch präzise Kontrolle über alle Schritte einräumt“. Diese Schritte umfassen: Dokumentenverarbeitung, Chunking, Embedding, Storage (standardmäßig DuckDB), Retrieval (basierend auf der Ähnlichkeits- und Textsuche), sowie einen Prozess namens „Re-Ranking“ (soll Suchergebnisse und Prompts optimieren). R-Entwickler mit RAG-Affinität sollten dieses Tool auf jeden Fall im Auge behalten. tidyprompt LLM-Nutzer werden bestimmte Tasks sehr wahrscheinlich mehrmals codieren wollen. Zum Beispiel, wenn es darum geht strukturierte Outputs zu generieren, Funktionen zu callen oder bestimmte LLM-Verhaltensweisen zu erzwingen (etwa eine „Chain of Thought“). Die Idee hinter dem tidyprompt-Package ist es, „Bausteine“ anzubieten, um Prompts zu erstellen und LLM-Outputs zu verarbeiten. Diese Bausteine werden dann mithilfe herkömmlicher R-Pipes miteinander verkettet. Laut seiner Dokumentation will tidyprompt als Tool wahrgenommen werden, „mit dem sich die Funktionalität von LLMs über native APIs hinaus optimieren lässt“. Das Tool unterstützt zurzeit Modelle von: OpenAI, Google, Ollama, Groq, Grok, XAI und OpenRouter. Eine Prompt kann so simpel ausfallen wie: library(tidyprompt) "Is London the capital of France?" |> answer_as_boolean() |> send_prompt(llm_provider_groq(parameters = list(model = "llama3-70b-8192") )) Ein detaillierteres Beispiel finden Sie auf GitHub. Darüber hinaus gibt es auch komplexere Pipelines, die beispielweise Funktionen wie llm_feedback() verwenden, um zu überprüfen, ob eine LLM-Antwort bestimmte Bedingungen erfüllt. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!

TippaPatt | shutterstock.com Das Generative-AI-Ökosystem von R kann zwar nicht mit dem von Python mithalten, hat sich aber in den vergangenen Monaten entscheidend weiterentwickelt. Waren in diesem Bereich zunächst hauptsächlich Tools mit ChatGPT-Bezug angesagt, ist inzwischen mehr nativer Support für die Anbieter von Large Language Models (LLMs) verfügbar. Zudem hat sich auch die Bandbreite der GenAI-Tasks, die Entwickler mit R bewältigen können, erweitert. In diesem Artikel stellen wir Ihnen fünf der besten Tools vor, um große Sprachmodelle in R-Projekte einzubinden – sowohl lokal als auch über APIs. ellmer Eines der wichtigsten Tools, um LLMs in R-Workflows zu integrieren, ist ellmer. Das Projekt ist beim Open-Source-Unternehmen Posit entstanden und wird von Entwicklern gepflegt, die sich bereits mit anderen populären R-Packages einen Namen gemacht haben (etwa ggplot2 und das Web-Framework Shiny R). Darüber hinaus erfreut sich dieses Tool auch einer lebendigen und begeisterten Community:   {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/[image or embed]— Kyle Walker (@kylewalker.bsky.social) 14. Februar 2025 um 22:41 Geht’s ans Eingemachte, ist ellmer gut dokumentiert und unterstützt eine ganze Reihe von KI-Funktionen, -Anwendungsfällen und -Plattformen. Zu letzteren zählen beispielsweise:   OpenAI, Azure OpenAI, Anthropic, Google Gemini, AWS Bedrock, Snowflake Cortex, Perplexity AI und Ollama (für lokale Modelle). Das ellmer-Package installieren Sie entweder wie üblich über CRAN – oder testen die Development-Version mit pak::pak(„tidyverse/ellmer“). Um ellmer zu nutzen, erstellen Sie zunächst ein Chat-Objekt mit Funktionen wie chat_openai() oder chat_claude(). Dieses verwenden Sie, um mit dem Large Language Model zu interagieren. Um herauszufinden, wie Sie Ihren API-Key speichern können (falls Sie kein lokales Modell verwenden), konsultieren Sie die Hilfedatei der Chat-Funktion. Ein grundlegendes OpenAI-Chat-Objekt ließe sich zum Beispiel folgendermaßen erstellen: library(ellmer) my_chat Im Fall von Anthropics Claude würde die Syntax lauten: my_chat_claude System-Prompts sind zwar nicht unbedingt erforderlich, für themenspezifische Tasks aber empfehlenswert. Ebenso wenig ist es nötig, ein Modell für alle Chat-Funktionen einzustellen. Trotzdem ist es eine gute Idee, um nicht von einem veralteten oder sehr teuren Modell überrascht zu werden.   Anfang 2025 scheint Anthropics Claude Sonnet 3.5 speziell für R-Code am besten geeignet – ersten Berichten zufolge soll das kommende Modell Sonnet 3.7 im Allgemeinen sogar noch besser performen. Da sich die LLM-Landschaft rasant weiterentwickelt, gilt es jedoch, sich diesbezüglich informiert zu halten. Ein Tipp an dieser Stelle: OpenAIs o3-mini kann nach unserer Erfahrung ebenfalls sehr gut R-Code schreiben und ist günstiger als Sonnet. Allerdings reagiert es als Reasoning-Modell womöglich nicht so schnell wie das Anthropic-LLM. Falls Sie andere Parameter für das Modell festlegen möchten (inklusive der Temperature), nutzen Sie dazu api_arg. Das erfordert eine benannte Liste wie: my_chat Eine höhere Temperature wird oft mit „kreativerem“ Output verbunden, eine niedrigere mit präziserem. Dabei ist zu beachten, dass die Temperature in den Chatfunktionen von ellmer kein explizites Argument darstellt. Deshalb müssen Sie es innerhalb der api_arg-Liste definieren. Eine Auflistung der verfügbaren Argumente und gültigen Wertebereiche für Temperature (und weitere Einstellungen) finden Sie in der API-Dokumentation des jeweiligen Modellanbieters. Um die Chat-Objekte zu verwenden, kann ellmer: eine Chatbot-Schnittstelle bieten (entweder in der R-Konsole oder im Browser), Ergebnisse in Textform streamen und speichern, oder nur die Abfrageergebnissen speichern – ohne zu streamen. In der R-Konsole öffnet live_console(my_chat) ein Chat-Interface. In einem Browser nutzen Sie dazu live_browser(my_chat). In beiden Fällen werden die Antworten gestreamt. Der „Interactive Method Call“ von ellmer nutzt eine Syntax wie my_chat$chat(), um sowohl gestreamte Antworten anzuzeigen, als auch, um das Ergebnis in Textform zu speichern: my_results Wenn Sie my_chat erneut verwenden, um eine weitere Frage zu stellen, wird der Chatverlauf mit den vorherigen Fragen und Antworten beibehalten, so dass Sie auf diese Bezug nehmen können – wie im folgenden Beispiel: my_results2 Die nachfolgende Chat-Abfrage enthält eine Historie früherer Fragen und Antworten: Sharon Machlis Wenn Sie Ellmer-Code nicht interaktiv innerhalb eines R-Skripts als Teil eines größeren Workflows nutzen, empfiehlt die Dokumentation, Ihren Code in einer R-Funktion zu „wrappen“: my_function In diesem Fall ist my_answer ein einfacher Text-String. Das ellmer-Package enthält unter anderem auch Dokumentationen für: Tool/Function Calling, Prompt Design, oder Datenextraktion. Wir haben es in Kombination mit dem shinychat-Package genutzt, um einer Shiny-Applikation Chatbot-Funktionen hinzuzufügen. In diesem öffentlichen GitHub-Gist finden Sie Beispielcode, um eine einfache Shiny-Chat-Oberfläche für lokale Ollama-LLMs zu erstellen (inklusive Dropdown-Menü für die Modellauswahl und einer Schaltfläche, um Chats herunterzuladen). tidyllm Dieses Tool hat deutsche Wurzeln: tidyllm wurde von Eduard Brüll, Forscher beim ZEW – Leibniz-Zentrum für Europäische Wirtschaftsforschung, entwickelt. In Sachen Funktionen weisen tidyllm und das eben besprochene ellmer Überschneidungsbereiche auf. Mit Blick auf die Benutzeroberfläche und die Designphilosophie gibt es jedoch wesentliche Unterschiede zwischen diesen beiden KI-Tools für R-Entwickler. Denn tidyllm kombiniert „Verben“ – die Art von Anfrage, die Sie stellen möchten, wie chat() oder send_batch() – mit Anbietern. Zu diesen Requests gehören Text Embeddings, Chats und Batch Processing. Aktuell unterstützt das tidyllm-Tool die KI-Modelle von: Anthropic (Claude), OpenAI, Google (Gemini), Mistral, Groq (nicht Grok), Perplexity, Azure OpenAI, sowie lokale Ollama-Modelle. Falls Sie einen Cloud-Anbieter nutzen, müssen Sie zuvor Ihren API-Key einrichten – entweder mit sys.setenv() oder über Ihre .Renviron-Datei. Eine einfache Chat-Abfrage beginnt in der Regel damit, mit der llm_message(„your query here“)-Funktion ein einfaches LLMMessage-Objekt zu erstellen und dieses an eine chat()-Funktion weiterzuleiten: library(tidyllm) my_conversation chat(openai(.model = “gpt-4o-mini”, .temperature = 0, .stream = FALSE)) Dabei kann llm_message() auch eine .system_prompt-Nachricht enthalten. Der zurückgegebene Wert von my_conversation ist lediglich ein Text-String mit der Antwort des Modells, die sich leicht ausgeben lässt. Darauf können Sie aufbauen, indem Sie eine weitere Nachricht und einen Chat hinzufügen, wodurch die ursprüngliche Abfrage und Antwort im Speicher bleiben: # Keep history of last message my_conversation2 llm_message(“How would I rotate labels on the x-axis 90 degrees?”) |> chat(openai(.model = “gpt-4o-mini”, .temperature = 0, .stream = FALSE)) print(my_conversation2) Um Metadaten aus den Ergebnissen zu extrahieren, nutzen Sie: result_metadata Das gibt einen „Tibble“ (spezieller Data Frame) zurück, der Spalten aufweist für: model, timestamp, prompt_tokens, completion_tokens, total_tokens, sowie api_specific-Listen mit weiteren Token-Details. Sie können auch die Benutzernachricht extrahieren, die die Antwort mit get_user_message(my_conversation2) generiert hat. Darüber hinaus unterstützt llm_message() auch Modelle, die Bild-Uploads mit dem .imagefile-Argument ermöglichen – sowie Fragen zu PDF-Dateien mit dem .pdf-Argument (vorausgesetzt, das R-Package pdftools ist installiert). Wir haben beispielsweise das tidyllm PDF-Referenzhandbuch von CRAN heruntergeladen und in einem Unterverzeichnis gespeichert (tidyllm.pdf). Anschließend konnten wir dazu eine Frage stellen: my_conversation3 chat(openai(.model = “gpt-4o”, .temperature = .1, .stream = FALSE)) print(my_conversation3) Message History: system: You are a helpful assistant ————————————————————– user: What are 10 interesting tasks I can perform with the tidyllm package? -> Attached Media Files: tidyllm.pdf ————————————————————– assistant: The tidyllm package provides a tidy interface for integrating large language model (LLM) APIs into R workflows. Here are 10 interesting tasks you can perform with the tidyllm package: Chat with Language Models: Use the chat() function to send messages to various language models like OpenAI, Claude, or Mistral, and receive responses. This can be useful for generating text, answering questions, or creating conversational agents. Generate Text Embeddings: Use the embed() function to generate embeddings for text data. This can be useful for tasks like semantic search, clustering, or as input features for machine learning models. Batch Processing: Use functions like send_batch(), fetch_batch(), and check_batch() to send multiple requests in a batch to an LLM API, retrieve results, and check the status of batch processing. This is useful for processing large datasets efficiently. Multimodal Interactions: Create LLMMessage objects that include text and media (such as images or PDFs) for multimodal processing. This can be useful for tasks that require understanding both text and visual content. Interactive Message History: Maintain a conversation history using LLMMessage objects, allowing for context-aware interactions with language models. This is useful for building chatbots or virtual assistants that need to remember previous interactions. Custom JSON Schemas: Define custom JSON schemas using tidyllm_schema() to enforce structured outputs from language models. This is useful for ensuring that the responses from the models adhere to a specific format. Transcribe Audio Files: Use the groq_transcribe() function to transcribe audio files using the Groq transcription API. This can be useful for converting spoken content into text. File Management with Gemini API: Use functions like gemini_upload_file(), gemini_list_files(), and gemini_delete_file() to manage files in the Gemini API. This is useful for tasks that involve uploading, listing, or deleting files as part of the workflow. Rate Limit Information: Use rate_limit_info() to retrieve the current rate limit information for APIs. This is useful for managing API usage and avoiding hitting rate limits. Stream Responses: Enable streaming of responses from language models using the .stream parameter in functions like chat() or ollama_chat(). This is useful for real-time applications where you want to display the response as it is being generated. These tasks demonstrate the versatility of the tidyllm package in integrating LLMs into various data workflows and applications. Hinweis: Der obenstehende Code dient lediglich dazu, die Paketsyntax und -funktionen zu veranschaulichen. Es handelt es sich dabei nicht um eine effiziente Methode, große Dokumente abzufragen (dazu später mehr). Ein abschließender Tipp: Wenn Sie keine sofortigen Antworten benötigen, können Sie die Kosten auch senken, indem Sie auf Batch Processing setzen. Diverse Anbieter bieten für diesen Fall großzügige Rabatte an. Die Funktion tidyllm send_batch() sendet eine solchen Batch-Processing-Request, check_batch() überprüft den Status und fetch_batch() ruft die Ergebnisse ab. Weitere Details dazu finden Sie auf der offiziellen Webseite von tidyllm. batchLLM Entwickler Dylan Pieper hat batchLLM kürzlich zugunsten eines neuen Pakets namens hellmer eingestellt – es funktioniert weiterhin, erhält aber keine neuen Funktionen mehr. Wie der Name bereits nahelegt, ist batchLLM darauf ausgelegt, Prompts über mehrere Ziele hinweg auszuführen. Etwas konkreter ausgedrückt, ermöglicht das Tool, einen Prompt über eine Spalte in einem Data Frame auszuführen – und einen Data Frame zurückzuerhalten, der eine neue Spalte mit Antworten enthält. Das ist eine praktische Möglichkeit, um LLMs in R-Workflows einzubinden – etwa für Tasks wie: Sentiment-Analysen, Klassifizierung und Labeling oder Tagging. Das Tool protokolliert auch Batches und Metadaten, ermöglicht es, Ergebnisse verschiedener LLMs zu vergleichen und verfügt über integrierte Verzögerungen für das API-Rate-Limiting. Darüber hinaus enthält batchLLM auch eine integrierte Shiny-App, die eine praktische Weboberfläche zur Verfügung stellt: Sharon Machlis Diese starten Sie mit batchLLM_shiny() (oder als RStudio-Add-in). Eine Webdemo der Applikation finden Sie hier. Zusätzliche LLM-Tools für R-Entwickler Nach dem Blick auf die drei wichtigsten Tools, um große Sprachmodelle in R-Programme und -Skripte zu integrieren, lohnt sich auch ein Blick auf die folgenden beiden Werkzeuge. Sie fokussieren auf spezifische Tasks, wenn LLMs mit R genutzt werden: ragnar extrahiert Informationen aus großen Datenmengen, während tidyprompt Skripte für allgemeine Prompts erstellt. ragnar Retrieval Augmented Generation (RAG) ist eine der nützlichsten Anwendungen für LLMs. Für Python und JavaScript stehen entsprechend viele RAG-Packages und -Tools zur Verfügung. Nicht so für R – zumindest, wenn sie darüber hinausgehen sollen, Embeddings zu generieren. Das ragnar-Package (das sich derzeit noch in Entwicklung befindet) zielt jedoch darauf ab, „eine Komplettlösung mit sinnvollen Standardeinstellungen anzubieten, die sachkundigen Benutzern dennoch präzise Kontrolle über alle Schritte einräumt“. Diese Schritte umfassen: Dokumentenverarbeitung, Chunking, Embedding, Storage (standardmäßig DuckDB), Retrieval (basierend auf der Ähnlichkeits- und Textsuche), sowie einen Prozess namens „Re-Ranking“ (soll Suchergebnisse und Prompts optimieren). R-Entwickler mit RAG-Affinität sollten dieses Tool auf jeden Fall im Auge behalten. tidyprompt LLM-Nutzer werden bestimmte Tasks sehr wahrscheinlich mehrmals codieren wollen. Zum Beispiel, wenn es darum geht strukturierte Outputs zu generieren, Funktionen zu callen oder bestimmte LLM-Verhaltensweisen zu erzwingen (etwa eine „Chain of Thought“). Die Idee hinter dem tidyprompt-Package ist es, „Bausteine“ anzubieten, um Prompts zu erstellen und LLM-Outputs zu verarbeiten. Diese Bausteine werden dann mithilfe herkömmlicher R-Pipes miteinander verkettet. Laut seiner Dokumentation will tidyprompt als Tool wahrgenommen werden, „mit dem sich die Funktionalität von LLMs über native APIs hinaus optimieren lässt“. Das Tool unterstützt zurzeit Modelle von: OpenAI, Google, Ollama, Groq, Grok, XAI und OpenRouter. Eine Prompt kann so simpel ausfallen wie: library(tidyprompt) “Is London the capital of France?” |> answer_as_boolean() |> send_prompt(llm_provider_groq(parameters = list(model = “llama3-70b-8192”) )) Ein detaillierteres Beispiel finden Sie auf GitHub. Darüber hinaus gibt es auch komplexere Pipelines, die beispielweise Funktionen wie llm_feedback() verwenden, um zu überprüfen, ob eine LLM-Antwort bestimmte Bedingungen erfüllt. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox! 

Nach oben scrollen
×