Delen via


.NET .NET Aspire Community Toolkit Ollama-integratie

omvat:hostingintegratie en Client integratie

Notitie

Deze integratie maakt deel uit van de .NET.NET Aspire Community Toolkit en wordt niet officieel ondersteund door het .NET.NET Aspire team.

Ollama is een krachtig opensource-taalmodel dat kan worden gebruikt om tekst te genereren op basis van een bepaalde prompt. De .NET.NET Aspire Ollama-integratie biedt een manier om Ollama-modellen te hosten met behulp van de docker.io/ollama/ollama containerinstallatiekopie en deze te openen via de OllamaSharp client.

Hostingintegratie

De Ollama-hostingintegratie modelleert een Ollama-server als het OllamaResource type, en biedt de mogelijkheid om modellen aan de server toe te voegen met behulp van de AddModel-extensiemethode, die het model vertegenwoordigt als een OllamaModelResource type. Voor toegang tot deze typen en API's waarmee u de 📦 CommunityToolkit kunt toevoegen.Aspire. Hosting.Ollama NuGet-pakket in het app-host project.

dotnet add package CommunityToolkit.Aspire.Hosting.Ollama

Zie dotnet pakket toevoegen of Pakketafhankelijkheden beheren in .NET toepassingenvoor meer informatie.

Ollama-resource toevoegen

Registreer en gebruik in het app-hostproject de Ollama-integratie met behulp van de AddOllama extensiemethode om de Ollama-container toe te voegen aan de opbouwfunctie voor toepassingen. Vervolgens kunt u modellen toevoegen aan de container, die wordt gedownload en uitgevoerd wanneer de container wordt gestart, met behulp van de AddModel-extensiemethode.

var builder = DistributedApplication.CreateBuilder(args);

var ollama = builder.AddOllama("ollama");

var phi35 = ollama.AddModel("phi3.5");

var exampleProject = builder.AddProject<Projects.ExampleProject>()
                            .WithReference(phi35);

Als u ook een model wilt gebruiken vanuit de Hugging Face modelhub, kunt u de AddHuggingFaceModel-extensiemethode gebruiken.

var llama = ollama.AddHuggingFaceModel("llama", "bartowski/Llama-3.2-1B-Instruct-GGUF:IQ4_XS");

Wanneer .NET.NET Aspire een containerinstallatiekopie toevoegt aan de app-host, zoals wordt weergegeven in het vorige voorbeeld met de docker.io/ollama/ollama-installatiekopie, wordt er een nieuw Ollama-exemplaar op uw lokale computer gemaakt. Zie levenscyclus van containerresourcesvoor meer informatie.

De LLM downloaden

Wanneer de Ollama-container voor deze integratie voor het eerst wordt uitgevoerd, worden de geconfigureerde LLM's gedownload. De voortgang van deze download wordt weergegeven in de kolom State voor deze integratie op het .NET.NET Aspire-dashboard.

Belangrijk

Houd de .NET.NET Aspire orchestratie-app open totdat het downloaden is voltooid, anders wordt de download geannuleerd.

De LLM opslaan in de cache

Een of meer LLM's worden gedownload naar de container die door Ollama wordt beheerd, en standaard is deze container tijdelijk. Als u een of meer LLM's bij het opnieuw opstarten van de container wilt behouden, moet u een volume aan de container koppelen met behulp van de methode WithDataVolume.

var ollama = builder.AddOllama("ollama")
                    .WithDataVolume();

var llama = ollama.AddModel("llama3");

GPU's gebruiken indien beschikbaar

Een of meer LLM's worden gedownload naar de container waarvan Ollama draait, en deze container draait standaard op de CPU. Als u de container in GPU moet uitvoeren, moet u een parameter doorgeven aan de containerruntime-argumenten.

var ollama = builder.AddOllama("ollama")
                    .AddModel("llama3")
                    .WithContainerRuntimeArgs("--gpus=all");

Zie GPU-ondersteuning in Docker Desktopvoor meer informatie.

Gezondheidscontroles voor hostingintegratie

De Ollama-hostingintegratie voegt automatisch een statuscontrole toe voor de Ollama-server en modelbronnen. Voor de Ollama-server wordt een statuscontrole toegevoegd om te controleren of de Ollama-server in bedrijf is en of er een verbinding tot stand kan worden gebracht. Voor de Ollama-modelresources wordt een statuscontrole toegevoegd om te verifiëren dat het model draait en beschikbaar is. Dit betekent dat de resource als ongezond wordt gemarkeerd totdat het model is gedownload.

Open WebUI-ondersteuning

De Ollama-integratie biedt ook ondersteuning voor het uitvoeren van Open WebUI en het laten communiceren met de Ollama-container.

var ollama = builder.AddOllama("ollama")
                    .AddModel("llama3")
                    .WithOpenWebUI();

integratie van Client

Installeer de 📦 CommunityToolkit om aan de slag te gaan met de .NET.NET Aspire OllamaSharp-integratie.Aspire.OllamaSharp NuGet-pakket in het project dat gebruikmaakt van de client, dat wil zeggen, het project voor de toepassing die de Ollama-client gebruikt.

dotnet add package CommunityToolkit.Aspire.OllamaSharp

Ollama-client-API toevoegen

Roep in het Program.cs bestand van het clientgebruikte project de AddOllamaClientApi-extensie aan om een IOllamaClientApi te registreren voor gebruik via de container voor afhankelijkheidsinjectie. Als de resource die is opgegeven in de app-host en waarnaar wordt verwezen in het clientverbruikende project, een OllamaModelResourceis, registreert de AddOllamaClientApi methode het model als het standaardmodel voor de IOllamaClientApi.

builder.AddOllamaClientApi("llama3");

Nadat u IOllamaClientApi aan de builder hebt toegevoegd, kunt u de IOllamaClientApi instantie verkrijgen met behulp van afhankelijkheidsinjectie. Als u bijvoorbeeld uw contextobject wilt ophalen uit de service:

public class ExampleService(IOllamaClientApi ollama)
{
    // Use ollama...
}

Keyed Ollama-client-API toevoegen

Er kunnen situaties zijn waarin u meerdere IOllamaClientApi exemplaren met verschillende verbindingsnamen wilt registreren. Als u keyed Ollama-clients wilt registreren, roept u de AddKeyedOllamaClientApi methode aan:

builder.AddKeyedOllamaClientApi(name: "chat");
builder.AddKeyedOllamaClientApi(name: "embeddings");

Vervolgens kunt u de IOllamaClientApi exemplaren ophalen met behulp van afhankelijkheidsinjectie. Als u bijvoorbeeld de verbinding wilt ophalen uit een voorbeeldservice:

public class ExampleService(
    [FromKeyedServices("chat")] IOllamaClientApi chatOllama,
    [FromKeyedServices("embeddings")] IOllamaClientApi embeddingsOllama)
{
    // Use ollama...
}

Configuratie

De Ollama-clientintegratie biedt meerdere configuratiemethoden en opties om te voldoen aan de vereisten en conventies van uw project.

Een verbindingsreeks gebruiken

Wanneer u een verbindingsreeks uit de sectie ConnectionStrings configuratie gebruikt, kunt u de naam van de verbindingsreeks opgeven bij het aanroepen van de AddOllamaClientApi methode:

builder.AddOllamaClientApi("llama");

Vervolgens wordt de verbindingsreeks opgehaald uit de ConnectionStrings configuratiesectie:

{
  "ConnectionStrings": {
    "llama": "Endpoint=http//localhost:1234;Model=llama3"
  }
}

Integratie met Microsoft.Extensions.AI

De Microsoft.Extensions.AI-bibliotheek biedt een abstractie over de Ollama-client-API, met behulp van algemene interfaces. OllamaSharp ondersteunt deze interfaces en ze kunnen worden geregistreerd met behulp van de AddOllamaSharpChatClient en AddOllamaSharpEmbeddingGenerator extensiemethoden. Deze methoden registreren ook de IOllamaClientApi instanties bij de container voor afhankelijkheidsinjectie en hebben versies met sleutel voor meerdere instanties.

builder.AddOllamaSharpChatClient("llama");

Nadat u IChatClient aan de builder hebt toegevoegd, kunt u de IChatClient instantie verkrijgen met behulp van afhankelijkheidsinjectie. Als u bijvoorbeeld uw contextobject wilt ophalen uit de service:

public class ExampleService(IChatClient chatClient)
{
    // Use chat client...
}

Zie ook