.NET .NET Aspire Community Toolkit Ollama-Integration
umfasst:Hosting-Integration und Client Integration
Anmerkung
Diese Integration ist Teil des .NET.NET Aspire Community Toolkit und wird vom .NET.NET Aspire Team nicht offiziell unterstützt.
Ollama ist ein leistungsfähiges Open Source-Sprachmodell, das verwendet werden kann, um Text basierend auf einer bestimmten Eingabeaufforderung zu generieren. Die .NET.NET Aspire Ollama-Integration bietet eine Möglichkeit, Ollama-Modelle mithilfe des docker.io/ollama/ollama
Containerimages zu hosten und über die OllamaSharpclientdarauf zuzugreifen.
Hosting-Integration
Das Ollama-Hosting integriert Modelle und stellt ein Modell vom Typ Ollama server als Typ OllamaResource
dar. Es bietet die Möglichkeit, Modelle mithilfe der Erweiterungsmethode AddModel
zu server hinzuzufügen, die das Modell als Typ OllamaModelResource
repräsentiert. Um auf diese Typen und APIs zuzugreifen, die es Ihnen ermöglichen, das 📦 CommunityToolkitAspire.Hosting.Ollama NuGet-Paket im App-Host Projekt hinzuzufügen.
dotnet add package CommunityToolkit.Aspire.Hosting.Ollama
Weitere Informationen finden Sie unter dotnet add package oder Verwalten von Paketabhängigkeiten in .NET-Anwendungen.
Ollama-Ressource hinzufügen
Registrieren und nutzen Sie im App-Host-Projekt die Ollama-Integration mithilfe der Erweiterungsmethode AddOllama
, um den Ollama-Container zum Anwendungsbuilder hinzuzufügen. Anschließend können Sie dem Container Modelle hinzufügen, die beim Starten des Containers mithilfe der AddModel
Erweiterungsmethode heruntergeladen und ausgeführt werden.
var builder = DistributedApplication.CreateBuilder(args);
var ollama = builder.AddOllama("ollama");
var phi35 = ollama.AddModel("phi3.5");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(phi35);
Alternativ können Sie die AddHuggingFaceModel
Erweiterungsmethode verwenden, wenn Sie ein Modell aus dem Hugging Face Modellhub verwenden möchten.
var llama = ollama.AddHuggingFaceModel("llama", "bartowski/Llama-3.2-1B-Instruct-GGUF:IQ4_XS");
Wenn .NET.NET Aspire dem App-Host ein Containerimage hinzufügt, wie im vorherigen Beispiel mit dem docker.io/ollama/ollama
-Image gezeigt, wird eine neue Ollama-Instanz auf Ihrem lokalen Computer erstellt. Weitere Informationen finden Sie unter Lebenszyklus von Containerressourcen.
Herunterladen des LLM
Wenn der Ollama-Container für diese Integration zum ersten Mal gestartet wird, lädt er die konfigurierten LLMs herunter. Der Fortschritt dieses Downloads wird in der Statusspalte für diese Integration auf dem .NET.NET Aspire-Dashboard angezeigt.
Wichtig
Lassen Sie die .NET.NET Aspire Orchestrierungs-App geöffnet, bis der Download abgeschlossen ist, andernfalls wird der Download abgebrochen.
Zwischenspeichern der LLM
Mindestens ein LLM wird in den Container heruntergeladen, aus dem Ollama ausgeführt wird, und standardmäßig ist dieser Container flüchtig. Wenn Sie eine oder mehrere LLMs über Containerneustarts hinweg beibehalten müssen, müssen Sie ein Volume mithilfe der WithDataVolume
-Methode in den Container einbinden.
var ollama = builder.AddOllama("ollama")
.WithDataVolume();
var llama = ollama.AddModel("llama3");
Verwenden von GPUs, wenn verfügbar
Mindestens eine LLMs werden in den Container heruntergeladen, von dem Ollama ausgeführt wird, und dieser Container wird standardmäßig auf der CPU ausgeführt. Wenn Sie den Container in der GPU ausführen müssen, müssen Sie einen Parameter an die Containerlaufzeitargumente übergeben.
var ollama = builder.AddOllama("ollama")
.AddModel("llama3")
.WithContainerRuntimeArgs("--gpus=all");
Weitere Informationen finden Sie unter GPU-Unterstützung in Docker Desktop-.
Hosten von Integritätsprüfungen für Integration
Die Ollama-Hostingintegration fügt automatisch eine Integritätsprüfung für die Ollama-server und Modellressourcen hinzu. Für die Ollama serverwird eine Gesundheitsprüfung hinzugefügt, um zu überprüfen, ob die Ollama server ausgeführt wird und um sicherzustellen, dass eine Verbindung hergestellt werden kann. Für die Ollama-Modellressourcen wird eine Gesundheitsprüfung hinzugefügt, um zu überprüfen, ob das Modell ausgeführt wird und ob das Modell verfügbar ist. Das bedeutet, dass die Ressource als nicht gesund markiert wird, bis das Modell heruntergeladen wurde.
Unterstützung für Open WebUI
Die Ollama-Integration bietet außerdem Unterstützung zum Betrieb von Open WebUI und ermöglicht die Kommunikation mit dem Ollama-Container.
var ollama = builder.AddOllama("ollama")
.AddModel("llama3")
.WithOpenWebUI();
Client Integration
Um mit der Integration von .NET.NET Aspire OllamaSharp zu beginnen, installieren Sie das 📦 CommunityToolkit.Aspire.OllamaSharp NuGet-Paket im client-verbrauchenden Projekt, d. h. das Projekt der Anwendung, die Ollama clientverwendet.
dotnet add package CommunityToolkit.Aspire.OllamaSharp
Hinzufügen von Ollama client-API
Rufen Sie in der Program.cs Datei Ihres client-verbrauchenden Projekts die AddOllamaClientApi
-Erweiterung auf, um eine IOllamaClientApi
für die Verwendung über den Container zum Einfügen von Abhängigkeiten zu registrieren. Wenn die im App-Host bereitgestellte Ressource, auf die im verbrauchenden Projekt clientverwiesen wird, ein OllamaModelResource
ist, registriert die AddOllamaClientApi
-Methode das Modell als Standardmodell für die IOllamaClientApi
.
builder.AddOllamaClientApi("llama3");
Nachdem Sie IOllamaClientApi
zum Generator hinzugefügt haben, können Sie die IOllamaClientApi
Instanz mithilfe der Abhängigkeitseinfügung abrufen. So rufen Sie z. B. das Kontextobjekt aus dem Dienst ab:
public class ExampleService(IOllamaClientApi ollama)
{
// Use ollama...
}
Hinzufügen von keyed Ollama client API
Es kann Situationen geben, in denen Sie mehrere IOllamaClientApi
-Instanzen mit unterschiedlichen Verbindungsnamen registrieren möchten. Rufen Sie die AddKeyedOllamaClientApi
-Methode auf, um schlüsselierte Ollama-Clients zu registrieren:
builder.AddKeyedOllamaClientApi(name: "chat");
builder.AddKeyedOllamaClientApi(name: "embeddings");
Anschließend können Sie die IOllamaClientApi
Instanzen mithilfe der Abhängigkeitseinfügung abrufen. So rufen Sie beispielsweise die Verbindung aus einem Beispieldienst ab:
public class ExampleService(
[FromKeyedServices("chat")] IOllamaClientApi chatOllama,
[FromKeyedServices("embeddings")] IOllamaClientApi embeddingsOllama)
{
// Use ollama...
}
Konfiguration
Die Integration von Ollama client bietet mehrere Konfigurationsmethoden und -optionen, um die Anforderungen und Konventionen Ihres Projekts zu erfüllen.
Verwenden Sie eine Verbindungszeichenfolge
Wenn Sie eine Verbindungszeichenfolge aus dem Konfigurationsabschnitt ConnectionStrings
verwenden, können Sie beim Aufrufen der AddOllamaClientApi
-Methode den Namen der Verbindungszeichenfolge angeben:
builder.AddOllamaClientApi("llama");
Anschließend wird die Verbindungszeichenfolge aus dem Konfigurationsabschnitt ConnectionStrings
abgerufen:
{
"ConnectionStrings": {
"llama": "Endpoint=http//localhost:1234;Model=llama3"
}
}
Integration mit Microsoft.Extensions.AI
Die Microsoft.Extensions.AI-Bibliothek bietet eine Abstraktion über die Ollama client-API unter Verwendung generischer Schnittstellen. OllamaSharp unterstützt diese Schnittstellen und kann mithilfe der AddOllamaSharpChatClient
- und AddOllamaSharpEmbeddingGenerator
-Erweiterungsmethoden registriert werden. Diese Methoden registrieren auch die IOllamaClientApi
Instanzen mit dem Container zum Einfügen von Abhängigkeiten und verfügen über Schlüsselversionen für mehrere Instanzen.
builder.AddOllamaSharpChatClient("llama");
Nachdem Sie IChatClient
zum Generator hinzugefügt haben, können Sie die IChatClient
Instanz mithilfe der Abhängigkeitseinfügung abrufen. So rufen Sie z. B. das Kontextobjekt aus dem Dienst ab:
public class ExampleService(IChatClient chatClient)
{
// Use chat client...
}