Condividi tramite


Integrazione Ollama del Community Toolkit .NET.NET Aspire

include:integrazione dell'hosting e Client integrazione

Nota

Questa integrazione fa parte di .NET.NET Aspire Community Toolkit e non è ufficialmente supportata dal team .NET.NET Aspire.

Ollama è un potente modello linguistico open source che può essere usato per generare testo in base a una determinata richiesta. L'integrazione di .NET.NET Aspire Ollama consente di ospitare modelli di Ollama usando l'immagine contenitore docker.io/ollama/ollama e accedervi tramite OllamaSharpclient.

Integrazione hosting

L'integrazione dell'hosting Ollama modella un Ollama server come tipo OllamaResource e consente di aggiungere modelli al server utilizzando il metodo di estensione AddModel, che rappresenta il modello come tipo OllamaModelResource. Per accedere a questi tipi e API che consentono di aggiungere il pacchetto NuGet 📦 CommunityToolkit.Aspire.Hosting.Ollama nel progetto host dell'app .

dotnet add package CommunityToolkit.Aspire.Hosting.Ollama

Per altre informazioni, vedere dotnet add package o Manage package dependencies in .NET applications.

Aggiungere una risorsa Ollama

Nel progetto host dell'applicazione, registrare e utilizzare l'integrazione di Ollama, usando il metodo di estensione AddOllama che consente di aggiungere il contenitore Ollama al builder dell'applicazione. È quindi possibile aggiungere modelli al contenitore, che scarica ed esegue all'avvio del contenitore, usando il metodo di estensione AddModel.

var builder = DistributedApplication.CreateBuilder(args);

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

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

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

In alternativa, se si vuole usare un modello dal modello hub di Hugging Face, si può usare il metodo di estensione AddHuggingFaceModel.

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

Quando .NET.NET Aspire aggiunge un'immagine del contenitore all'host dell'app, come illustrato nell'esempio precedente con l'immagine docker.io/ollama/ollama, crea una nuova istanza di Ollama nel computer locale. Per altre informazioni, vedere ciclo di vita delle risorse contenitore.

Scaricare il LLM

Quando il contenitore Ollama per questa integrazione si avvia per la prima volta, scarica gli LLM configurati. Lo stato di avanzamento di questo download viene visualizzato nella colonna stato per questa integrazione nel dashboard .

Importante

Mantenere aperta l'app di orchestrazione .NET.NET Aspire fino al completamento del download; in caso contrario, il download verrà annullato.

Memorizzare nella cache l'LLM

Uno o più LLM vengono scaricati nel contenitore da cui è in esecuzione Ollama e per impostazione predefinita questo contenitore è temporaneo. Se è necessario rendere persistenti uno o più LLMs attraverso i riavvii del contenitore, è necessario montare un volume nel contenitore usando il metodo WithDataVolume.

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

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

Usare GPU quando disponibili

Uno o più LLMs vengono scaricati nel contenitore da cui È in esecuzione Ollama e per impostazione predefinita questo contenitore viene eseguito sulla CPU. Se è necessario eseguire il contenitore nella GPU, è necessario passare un parametro agli argomenti del runtime del contenitore.

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

Per altre informazioni, vedere il supporto della GPU nel Desktop Docker.

Verifiche di integrità dell'integrazione di hosting

L'integrazione dell'hosting Ollama aggiunge automaticamente un controllo di integrità per le risorse del modello Ollama server. Per l'Ollama server, viene aggiunto un controllo integrità per verificare che l'Ollama server sia in esecuzione e che sia possibile stabilire una connessione. Per le risorse del modello Ollama, viene aggiunto un controllo di integrità per verificare che il modello sia in esecuzione e che il modello sia disponibile, ovvero la risorsa verrà contrassegnata come non integra fino al download del modello.

Aprire il supporto di WebUI

L'integrazione di Ollama fornisce anche il supporto per l'esecuzione di Open WebUI e la relativa comunicazione con il contenitore Ollama.

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

Client integrazione

Per iniziare a usare l'integrazione di OllamaSharp .NET.NET Aspire, installare il 📦 CommunityToolkit.Aspire. OllamaSharp pacchetto NuGet nel progetto client-consume, ovvero il progetto per l'applicazione che usa Ollama client.

dotnet add package CommunityToolkit.Aspire.OllamaSharp

Aggiungere l'API di client Ollama

Nel file Program.cs del progetto client-consumer, chiama l'estensione AddOllamaClientApi per registrare un IOllamaClientApi da utilizzare tramite il contenitore di iniezione delle dipendenze. Se la risorsa fornita nell'host dell'app e a cui viene fatto riferimento nel progetto che utilizza clientè un OllamaModelResource, il metodo AddOllamaClientApi registrerà il modello come modello predefinito per il IOllamaClientApi.

builder.AddOllamaClientApi("llama3");

Dopo aver aggiunto IOllamaClientApi al generatore, è possibile ottenere l'istanza di IOllamaClientApi tramite l'iniezione delle dipendenze. Ad esempio, per recuperare l'oggetto contesto dal servizio:

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

Aggiungere l'API di Ollama con chiave client

In alcuni casi potrebbe essere necessario registrare più istanze di IOllamaClientApi con nomi di connessione diversi. Per registrare i client Ollama con chiave, chiamare il metodo AddKeyedOllamaClientApi:

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

È quindi possibile recuperare le istanze di IOllamaClientApi usando l'iniezione delle dipendenze. Ad esempio, per recuperare la connessione da un servizio di esempio:

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

Configurazione

L'integrazione di Ollama client offre più approcci di configurazione e opzioni per soddisfare i requisiti e le convenzioni del progetto.

Usare una stringa di connessione

Quando si usa una stringa di connessione dalla sezione di configurazione ConnectionStrings, è possibile specificare il nome della stringa di connessione quando si chiama il metodo AddOllamaClientApi:

builder.AddOllamaClientApi("llama");

La stringa di connessione verrà quindi recuperata dalla sezione di configurazione ConnectionStrings:

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

Integrazione con Microsoft.Extensions.AI

La libreria Microsoft.Extensions.AI fornisce un'astrazione sull'API Ollama client, utilizzando interfacce generiche. OllamaSharp supporta queste interfacce e possono essere registrate usando i metodi di estensione AddOllamaSharpChatClient e AddOllamaSharpEmbeddingGenerator. Questi metodi registrano anche le istanze di IOllamaClientApi con il contenitore di inserimento delle dipendenze e hanno versioni con chiave per più istanze.

builder.AddOllamaSharpChatClient("llama");

Dopo aver aggiunto IChatClient al generatore, è possibile ottenere l'istanza di IChatClient usando l'inserimento delle dipendenze. Ad esempio, per recuperare l'oggetto contesto dal servizio:

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

Vedere anche