Lokale Sprachmodelle in .NET einbinden
- Matt
Der angenehmste Nebeneffekt der IChatClient-Abstraktion ist, dass ein lokales Modell dahinter genauso aussieht wie ein entferntes. Das macht den Versuch billig.
Ollama aufsetzen
Auf dem Homelab-Rechner:
curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama3.1:8b
Standardmäßig lauscht der Dienst nur lokal. Damit andere Rechner im Netz zugreifen können, braucht es eine Umgebungsvariable im Dienst:
systemctl edit ollama
# [Service]
# Environment="OLLAMA_HOST=0.0.0.0:11434"
Das ist die Stelle, an der man eine Weile sucht. Und ein Hinweis: Ollama kennt keine Authentifizierung. Der Port gehört nicht ins Internet, auch nicht „nur kurz zum Testen”.
Aus C# heraus
dotnet add package OllamaSharp
using Microsoft.Extensions.AI;
using OllamaSharp;
IChatClient client = new ChatClientBuilder(
new OllamaApiClient(new Uri("http://homelab:11434"), "llama3.1:8b"))
.UseFunctionInvocation()
.Build();
var antwort = await client.GetResponseAsync("Fasse diesen Fehlertext in einem Satz zusammen: ...");
Console.WriteLine(antwort.Text);
Der Rest des Codes bleibt identisch zu dem mit OpenAI. Man kann sogar beides registrieren und über einen Schalter umziehen, was für Tests praktisch ist.
Wofür ich es benutze
Alles, was Text verarbeitet und nicht besonders klug sein muss. Logdateien zusammenfassen, Commit-Nachrichten vorschlagen, Textbausteine umformulieren. Dabei gehen keine Daten aus dem Haus, und es kostet nichts pro Aufruf, was das Ausprobieren verändert: Man denkt nicht mehr darüber nach, ob eine Anfrage den Cent wert ist.
Wofür nicht
Alles, wo Genauigkeit zählt. Ein 8B-Modell auf meiner Hardware ist ungefähr auf dem Stand dessen, was vor zwei Jahren über die API kam. Für Codegenerierung reicht mir das nicht, für strukturierte Extraktion aus komplexen Texten auch nicht.
Der ehrliche Vergleich ist nicht „lokal gegen Cloud”, sondern „lokal gegen gar nicht”. Für viele kleine Aufgaben hätte ich sonst nichts benutzt.