13. Jan 2025
Lesedauer 10 Min.
Kontakt zur KI
Sprachmodelle per Ollama API ansprechen
Binden Sie verschiedene große Sprachmodelle unter .NET mit OllamaSharp an.

Die Integration von leistungsfähigen KI-Modellen wird zunehmend zu einer Schlüsselanforderung in modernen Softwareprojekten. Die C#-Bibliothek OllamaSharp ermöglicht die einfache Anbindung von Modellen wie Llama 3.2, Mistral und Gemma 2 in eigene Projekte. Sie bietet eine nahtlose Schnittstelle, um Text- und Bildanalysen mit leistungsfähigen Modellen umzusetzen, ohne tiefgreifende KI-Kenntnisse vorauszusetzen.Ein praktisches Beispiel für diese Integration ist Llama 3.2 Vision, ein KI-Modell, das speziell Bildanalysen unterstützt. Dieses Modell kombiniert visuelle Verarbeitung mit textueller Beschreibung, was es ideal für Szenarien wie Objekterkennung, Bildklassifikation und automatisierte Bildbeschreibungen macht. Mit Llama 3.2 Vision lässt sich eine Vielzahl von Anwendungen realisieren, von der automatisierten Inhaltsanalyse bis hin zu benutzerzentrierten Lösungen wie visueller Barrierefreiheit.In dieser Episode der Kolumne Frameworks und mehr liegt der Fokus auf dem Zugriff auf das Ollama API mithilfe der Bibliothek OllamaSharp. Dieser Beitrag zeigt am Beispiel von Llama 3.2 Vision, wie OllamaSharp die Nutzung von Modellen im Entwicklungsprozess vereinfacht und welche Anwendungen sich damit realisieren lassen.
OllamaSharp: Grundlagen und Funktionen
Wie erwähnt dient die C#-Bibliothek als Schnittstelle zwischen C#-Anwendungen und den KI-Modellen, wodurch sich die Funktionalitäten der Modelle schnell und effizient in Projekte integrieren lassen. OllamaSharp macht die Nutzung von KI-Technologien nicht nur zugänglicher, sondern reduziert auch den Entwicklungsaufwand.Die Bibliothek bietet vielseitige Funktionen, darunter die Verarbeitung natürlicher Sprache und die Analyse visueller Inhalte. Mit OllamaSharp lassen sich problemlos Text-Prompts an Modelle wie Llama senden, die Antworten empfangen und diese nahtlos in eigene Anwendungen einbetten.Besonders interessant ist die Unterstützung der neuesten Llama-Modelle wie Llama 3.2 Vision, die speziell für Bildanalysen optimiert sind. Anwendungsfälle reichen von Chatbots über Textgenerierung bis hin zu komplexen Bildverarbeitungsaufgaben wie Objekterkennung und Bildbeschreibungen. OllamaSharp unterstützt eine breite Palette an Modellen der Llama-Familie, darunter textzentrierte Varianten sowie multimodale Modelle wie Llama 3.2 Vision.Die Bibliothek bietet zudem eine flexible Konfiguration, um spezifische Modellversionen auszuwählen, die den Anforderungen des Projekts entsprechen. Darüber hinaus ist die Bibliothek einfach zu integrieren und weist eine hohe Usability auf. Das Projekt bietet intuitive Methoden und eine nützliche Dokumentation, um die Interaktion mit KI-Modellen zu vereinfachen.Trotz ihrer Vorteile bringt die Nutzung von OllamaSharp auch Herausforderungen mit sich. Die Modelle der Llama-Reihe sind rechenintensiv und erfordern leistungsstarke Hardware, insbesondere bei großen Modellversionen wie Llama 3.2 Vision. Dies kann die Nutzung für Entwickler mit begrenzten Ressourcen einschränken.Darüber hinaus sind die Modellgrößen und deren Speicherbedarf zu berücksichtigen, da diese eine erhebliche Menge an Arbeitsspeicher und weiteren Ressourcen beanspruchen können. Diese Einschränkungen gelten für die Nutzung von lokalen Modellen. Wenn über die Schnittstelle Remote-Modelle angesprochen werden, lassen sich diese Anforderungen zwar nicht plötzlich ausknipsen, aber sinnvoll auf andere Systeme verlagern.Was ist das Ollama API?
Das Ollama API ist eine Programmierschnittstelle, die den Zugriff auf verschiedene große Sprachmodelle (LLMs) ermöglicht. Mit diesem API lassen sich Modelle wie Llama 3.2, Mistral, Gemma 2 und andere lokal auf dem System ausführen und in eigene Anwendungen integrieren. Es bietet Endpunkte für verschiedene Funktionen, darunter Textgenerierung, Chat-Komplettierungen, eine Modellverwaltung zum Auflisten, Anzeigen, Kopieren, Löschen, Herunterladen und Hochladen von Modellen, sowie Einbettungen für das Generieren von Vektorrepräsentationen für Texte.Das API ist so konzipiert, dass es sowohl für lokale als auch für serverseitige Anwendungen geeignet ist. Es unterstützt Streaming-Antworten, was besonders nützlich für Anwendungen ist, die Echtzeit-Feedback erfordern. Daneben ist das API kompatibel mit verschiedenen Plattformen, einschließlich macOS, Linux und Windows. Für alle, die in Python arbeiten, steht die Ollama-Python-Bibliothek zur Verfügung, die eine einfache Integration des API in Python-Projekte ermöglicht.OllamaSharp versus LLamaSharp
Sowohl OllamaSharp als auch LLamaSharp bieten leistungsstarke Schnittstellen, um KI-Modelle wie Llama (Large Language Model Meta AI) in C#-Projekten zu integrieren.OllamaSharp ist für die Interaktion mit dem Ollama API entwickelt worden. Die Bibliothek dient als Wrapper, um die Anbindung von Llama-Modellen (wie Llama 3.2 Vision) in C# zu vereinfachen. OllamaSharp bietet eine nahtlose API-Integration, multimodale Unterstützung und einen Fokus auf das Ollama-Ökosystem.LLamaSharp ist eine generische Bibliothek, die für die direkte Integration von Llama-Modellen ohne ein spezifisches API entwickelt wurde. Sie bietet eine Modellunterstützung ohne API, eine hohe Flexibilität bei der Modellnutzung und mehr Kontrolle über Modelle. Tabelle 1 vergleicht OllamaSharp mit LLamaSharp und gibt eine Übersicht zur Abgrenzung und Einschätzung der beiden Bibliotheken.Tabelle 1: Vergleich von OllamaSharp und LLamaSharp
|
Bildmächtig: Llama 3.2 Vision
Llama 3.2 Vision markiert einen deutlichen Fortschritt in der Entwicklung multimodaler KI-Modelle. Im Vergleich zu früheren Versionen der Llama-Reihe bringt diese Version entscheidende Neuerungen, die ihre Leistungsfähigkeit speziell in der Bildverarbeitung und bei multimodalen Anwendungsfällen erheblich steigern.Eine der wichtigsten Neuerungen von Llama 3.2 Vision ist die erweiterte Fähigkeit, Bild- und Textdaten gleichzeitig zu verarbeiten.Während frühere Llama-Versionen vor allem auf Textverarbeitung spezialisiert waren, ermöglicht die 3.2-Vision-Version eine tiefere Integration von visuellen und textbasierten Informationen.Das Modell kann Bilder nicht nur analysieren, sondern auch beschreiben, Muster erkennen und mit Text-Prompts interagieren, die visuelle Kontexte einbeziehen.Das CLI von Ollama
Das Backend für die Tests in diesem Artikel ist ein laufender Ollama-Server. Das Projekt steht für verschiedene Plattformen zur Verfügung und lässt sich dort problemlos installieren. Mitinstalliert wird ein CLI, um zum Beispiel Modelle zu verwalten. Dazu gehört das Laden und Starten eines Modells. Bild 1 zeigt einen Screenshot, wie das Modell llama3.2-vision erfolgreich über den Befehl
Das erfolgreiche Laden eines Modells auf das lokale System (Bild 1)
Autor
<span class="hljs-selector-tag">ollama</span> <span class="hljs-selector-tag">pull</span> <span class="hljs-selector-tag">llama3</span><span class="hljs-selector-class">.2-vision</span>
auf den lokalen Rechner geladen wird. Anschließend zeigt der Befehl ollama list alle nun vorhandenen Modelle an:
<span class="hljs-selector-tag">NAME</span> <span class="hljs-selector-tag">llama3</span><span class="hljs-selector-class">.2-vision</span><span class="hljs-selector-pseudo">:latest</span>
<span class="hljs-selector-tag">ID</span> 38107<span class="hljs-selector-tag">a0cd119</span>
<span class="hljs-selector-tag">SIZE</span> 7<span class="hljs-selector-class">.9</span> <span class="hljs-selector-tag">GB</span>
<span class="hljs-selector-tag">MODIFIED</span> <span class="hljs-selector-tag">About</span> <span class="hljs-selector-tag">a</span> <span class="hljs-selector-tag">minute</span> <span class="hljs-selector-tag">ago</span>
Die Ausgabe zeigt die Größe des Modells und wann es heruntergeladen wurde. Der Befehl ollama show llama3.2-vision zeigt weitere Details an, wie der folgende Ausschnitt zeigt:
architecture mllama
parameters <span class="hljs-number">9.8</span>B
context length <span class="hljs-number">131072</span>
embedding length <span class="hljs-number">4096</span>
quantization Q4_K_M
Zu guter Letzt startet ollama run <Modell> ein Sprachmodell, sodass es über eine lokale Adresse zur Verfügung steht.
Technische Grundlagen und Installation
OllamaSharp unterstützt .NET 6.0 und höher und lässt sich sowohl in Konsolenanwendungen als auch in Web-API- oder Desktop-Projekten nutzen. Diese Vielseitigkeit macht die Bibliothek ideal für unterschiedliche Projekttypen.Die Installation von OllamaSharp ist über das NuGet-Paket am einfachsten, beispielsweise über die Paket-Manager-Konsole oder direkt im .NET-CLI, wie der folgende Befehl zeigt:
dotnet add <span class="hljs-keyword">package</span> <span class="hljs-title">OllamaSharp</span>
OllamaSharp benötigt außerdem eine funktionierende Installation des Backends. Die Abhängigkeiten umfassen ein REST-API, das entweder lokal oder in der Cloud betrieben werden kann.Details zur Konfiguration des Ollama-Servers finden sich in der offiziellen Dokumentation [1]. Die Beispiele in diesem Artikel basieren auf dem Ollama-Projekt, mit dem sich große und kleine Sprachmodelle lokal ausführen lassen.Welche Modelle zur Verfügung stehen, beschreibt die Projektwebseite [2] zu Ollama. Aktuell steht das Projekt in Version 4.0.8 von Ende November 2024 zur Verfügung.Es steht unter der MIT-Lizenz und bietet den Quelltext auf GitHub [3]. Nach der Installation reicht es für einen ersten Anwendungsfall aus, den Namensraum OllamaSharp einzubinden.Listing 1 zeigt ein einfaches Beispiel, wie OllamaSharp in einem Projekt zum Einsatz kommt. Der Code verdeutlicht, wie die Verbindung zum Ollama-Server aufgebaut werden muss. Über die Schnittstelle lassen sich anschließend alle bereits heruntergeladenen Modelle auflisten, was in diesem Beispiel zur Ausgabe des Llama-3.2-Vision-Modells führt, das zuvor über das CLI geladen wurde.
Listing 1: Das erste Beispiel zur Abfrage von Modellen in OllamaSharp
<span class="hljs-keyword">using</span> OllamaSharp;<br/><span class="hljs-keyword">const</span> <span class="hljs-keyword">string</span> URL = <span class="hljs-string">"http://localhost:11434"</span>;<br/><span class="hljs-keyword">var</span> ollama = <span class="hljs-keyword">new</span> OllamaApiClient(URL); <br/><span class="hljs-comment">// Verbindung zum lokalen Ollama-Server</span><br/><span class="hljs-comment">var models = await ollama.ListLocalModelsAsync();</span><br/><span class="hljs-comment">foreach (var model in models)</span><br/><span class="hljs-comment">{</span><br/><span class="hljs-comment"> Console.WriteLine(model.Name, model.Size, </span><br/><span class="hljs-comment"> model.Details);</span><br/><span class="hljs-comment">} </span><br/><span class="hljs-comment">// ... weitere Verarbeitung ...</span>
Primäre Funktionen der Bibliothek
Eine der zentralen Funktionen von OllamaSharp ist die Bereitstellung eines benutzerfreundlichen API-Wrappers, der die Interaktion mit Llama-Modellen erheblich vereinfacht. Anstatt komplexe HTTP-Anfragen manuell zu implementieren, bietet die Bibliothek Schnittstellen in Form von Methoden und Eigenschaften an, um Text- und Bilddaten an das Modell zu senden und die Antworten zu verarbeiten.Der API-Wrapper abstrahiert die zugrunde liegenden technischen Details und stellt eine intuitive Schnittstelle bereit, die sowohl asynchrone als auch synchrone Aufrufe unterstützt.Das erste Beispiel im Listing 1 hat bereits die Methode AnalyzeImageAsync gezeigt, mit der direkt eine Bildanalyse angestoßen werden kann. Andere Methoden ermöglichen es, allgemeinere Prompts an das verknüpfte Modell zu schicken, wie der folgende Codeausschnitt demonstriert:
ollama.SelectedModel = <span class="hljs-string">"llama3.2-vision"</span>;
<span class="hljs-keyword">await</span> <span class="hljs-keyword">foreach</span> (<span class="hljs-keyword">var</span> stream <span class="hljs-keyword">in</span>
ollama.GenerateAsync(<span class="hljs-string">"Beschreibe die Eigenschaften "</span> +
<span class="hljs-string">"eines Sonnenuntergangs."</span>))
Console.Write(stream?.Response);
Der vorherige Code-Ausschnitt zeigt, wie das Modell im Ollama-Backend selektiert wird, damit das Backend weiß, an welches Modell die Anfragen geschickt werden sollen. Die Antworten werden anschließend gestreamt und auf der Konsole ausgegeben – in dieser Demo in JetBrains Rider, wie der Screenshot in Bild 2 zeigt.

Screenshot einer gestreamten Antwort in der Konsole von JetBrains Rider (Bild 2)
Autor
Neben Text- und Bilddaten kann Llama 3.2 Vision auch interaktive Chats implementieren, sodass mit recht wenig Aufwand interaktive Anwendungen implementierbar sind.Ein Beispiel für die Nutzung der Chat-Funktionen zeigt der nachfolgende Code-Ausschnitt:
<span class="hljs-keyword">var</span> answerToken <span class="hljs-keyword">in</span> chat.SendAsync(<span class="hljs-keyword">message</span>);
Use-Case: Implementierung einer Bildanalyse
Für die Implementierung einer Bildanalyse mit OllamaSharp und Llama 3.2 Vision ist der Download einer unterstützten Llama-3.2-Vision-Modellversion notwendig, die sich von der offiziellen Plattform herunterladen und im Ollama-Server einrichten lässt. Anschließend starten Sie den Server mit folgendem Befehl:
ollama <span class="hljs-keyword">run</span><span class="bash"> llama3.2-vision</span>
Die zurückgegebene URL ist wichtig für die Verbindung aus dem Beispielcode heraus. Die Initialisierung des Ollama-Clients ist sehr ähnlich zum ersten Beispiel.Nachdem diese Grundkonfiguration abgeschlossen ist, lässt sich die Funktionalität zur Analyse eines Bildes implementieren. Das verläuft recht ähnlich zur Verarbeitung aus unserem ersten Beispiel. Wir nutzen einen Chat, um die Anfragen aus diesem Chat heraus an das Modell zu schicken und das Bild anzuhängen. Den Code dazu zeigt Listing 2.
Listing 2: Die Analyse eines Bilds über die Chat-Funktion
<span class="hljs-keyword">const</span> <span class="hljs-keyword">string</span> imagePath = <span class="hljs-string">"data/sunset.jpg"</span>;<br/><span class="hljs-keyword">var</span> imageBytes = <span class="hljs-keyword">new</span>[] { <br/> File.ReadAllBytes(imagePath) };<br/><span class="hljs-keyword">var</span> chat = <span class="hljs-keyword">new</span> Chat(ollama);<br/><span class="hljs-keyword">await</span> <span class="hljs-keyword">foreach</span> (<span class="hljs-keyword">var</span> answerToken <span class="hljs-keyword">in</span> chat.SendAsync(<br/> <span class="hljs-string">"Was ist auf dem Bild zu sehen?"</span>, imageBytes))<br/>Console.Write(answerToken);
Diese Implementierung zeigt, wie einfach es ist, OllamaSharp und das Modell Llama 3.2 Vision in einem C#-Projekt einzusetzen, um Bilder zu analysieren und aussagekräftige Ergebnisse zu liefern.
Weiterführende Themen und Optimierungen
Die Nutzung von Llama 3.2 Vision mit OllamaSharp erfordert eine effiziente Ressourcennutzung, da KI-Modelle, vor allem solche für Bildverarbeitung, sehr rechenintensiv sind. Um die Performance möglichst hoch zu halten, lassen sich einige Optimierungspotenziale ausschöpfen.Beispielsweise ist eine Batch-Verarbeitung denkbar, um mehrere Anfragen gleichzeitig zu senden. Auch Caching ist ein Thema.Ergebnisse häufiger Analysen lokal zu speichern, um wiederholte Berechnungen zu vermeiden, ist in vielen Szenarien eine sehr gute Idee. Das betrifft insbesondere Szenarien, in denen externe Modelle bei Anbietern angesprochen werden müssen, die bei jeder Anfrage Kosten produzieren.Zudem lassen sich die Modellparameter anpassen und optimieren. Parameter wie MaxTokens oder Temperature lassen sich einstellen, um die Berechnungszeit zu reduzieren, ohne die Ergebnisqualität erheblich zu beeinträchtigen.Für die optimale Leistung empfiehlt sich zudem die Nutzung einer GPU. Um GPU-Beschleunigung zu aktivieren, ist die Installation der entsprechenden CUDA-Treiber und -Bibliotheken notwendig. Anschließend ist der Server neu zu starten, was die GPU-Unterstützung aktiviert.Unterstützung für Microsoft.Extensions.AI und Microsoft Semantic Kernel
OllamaSharp bietet nahtlose Unterstützung für Microsoft.Extensions.AI [4], ein Framework, das die Integration von KI-Services in .NET-Anwendungen vereinfacht. Dies ermöglicht es, KI-Modelle in bestehende Pipelines zu integrieren, ohne viel Boilerplate-Code schreiben zu müssen.Mit OllamaSharp lassen sich beispielsweise lokale oder remote bereitgestellte KI-Modelle mit wenigen Zeilen Code nutzen. Ein einfaches Beispiel für die Integration in eine Anwendung zeigt Listing 3. Hier wird der Ollama-Service als KI-Dienst konfiguriert und in einem Web-API verfügbar gemacht.Listing 3: Die Kombination von OllamaSharp und Microsoft.Extensions.AI
<span class="hljs-built_in">var</span> builder = WebApplication.CreateBuilder(<span class="hljs-built_in">args</span>);<br/>// Hinzufügen von OllamaSharp zu<br/>// Microsoft.Extensions.AI<br/>builder.Services.AddAIService&lt;OllamaService&gt;(<br/> options =&gt;<br/>{<br/> options.BaseUrl = <span class="hljs-string">"http://localhost:11434"</span>; <br/> // Ollama-Server-URL<br/> options.DefaultModel = <span class="hljs-string">"llama-3"</span>;<br/>});<br/><span class="hljs-built_in">var</span> app = builder.Build();<br/>app.MapGet(<span class="hljs-string">"/chat"</span>, async (<br/> IOllamaService ollamaService, <span class="hljs-built_in">string</span> input) =&gt;<br/>{<br/> <span class="hljs-built_in">var</span> response = <br/> await ollamaService.QueryAsync(input);<br/> <span class="hljs-built_in">return</span> response.Text;<br/>});<br/>app.Run();
Microsoft Semantic Kernel [5] ist ein leistungsfähiges Framework für KI-gestützte Anwendungen, das auf Plug-and-Play-Funktionen setzt.OllamaSharp erweitert das Semantic-Kernel-Framework, indem es als KI-Plug-in verwendet werden kann. Damit lassen sich KI-Funktionen wie Textgenerierung, Codierung oder Wissensabfragen effizient integrieren.Die Beispielimplementierung in Listing 4 veranschaulicht schließlich die Nutzung von OllamaSharp innerhalb des Semantic Kernel. Dieses Beispiel zeigt, wie OllamaSharp direkt in ein Kernel-Setup integriert wird, um eine flexible und skalierbare KI-Architektur bereitzustellen.
Listing 4: Integration mit Microsoft Semantic Kernel
var <span class="hljs-attr">kernel</span> = Kernel.Builder<br/> .ConfigureAIService&lt;OllamaService&gt;(<span class="hljs-attr">config</span> =&gt;<br/> {<br/> config.<span class="hljs-attr">BaseUrl</span> = <span class="hljs-string">"http://localhost:11434"</span>;<br/> config.<span class="hljs-attr">DefaultModel</span> = <span class="hljs-string">"llama-3"</span>;<br/> })<br/> .Build();<br/>string <span class="hljs-attr">prompt</span> = <br/> <span class="hljs-string">"Schreibe einen kurzen Blogpost über KI."</span>;<br/>var <span class="hljs-attr">result</span> = await kernel.RunAsync(prompt);<br/>Console.WriteLine(result.GetResult());
Fazit
Die Integration von KI-Modellen ist in der modernen Softwareentwicklung essenziell. Das Ollama API und die dazugehörige C#-Bibliothek OllamaSharp ermöglichen die einfache Nutzung leistungsstarker Sprach- und Vision-Modelle wie Llama 3.2 Vision. Mit ihrer benutzerfreundlichen Schnittstelle, den multimodalen Fähigkeiten und der nahtlosen Integration in .NET-Projekte erleichtert OllamaSharp den Zugang zu KI-Technologien erheblich, selbst ohne tiefgehende KI-Kenntnisse.Während Herausforderungen wie hoher Ressourcenbedarf bestehen, bietet die Bibliothek flexible Konfigurationsmöglichkeiten, um individuelle Anforderungen zu erfüllen.OllamaSharp zeigt, wie leistungsfähige KI-Funktionen einfach in Projekte integriert und vielseitige Anwendungsfälle – von Text- und Bildanalysen bis hin zu interaktiven Chats – realisiert werden können. Wer Modelle lokal betreiben möchte, um mit diesen zu experimentieren oder sie in produktive Anwendungen zu integrieren, sollte einen Blick auf Ollama und OllamaSharp werfen. Die Bibliothek verdient sich ein „Gut +“ und eine Empfehlung. An der Dokumentation lässt sich sicherlich noch arbeiten. Zugleich empfohlen seien das Projekt LLamaSharp und das Llama-Backend.Fussnoten
- Das GitHub-Repository zu Ollama, http://www.dotnetpro.de/SL2502Frameworks1
- Übersicht der Modelle in Ollama auf der Projektwebseite, https://ollama.com/library
- Das GitHub-Repository zu OllamaSharp, http://www.dotnetpro.de/SL2502Frameworks2
- Informationen zu Microsoft.Extensions.AI, http://www.dotnetpro.de/SL2502Frameworks3
- Informationen zu Microsoft Semantic Kernel, http://www.dotnetpro.de/SL2502Frameworks4