Freigeben über


.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 OllamaModelResourceist, 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...
}

Siehe auch