Compartir a través de


Integración de .NET.NET Aspire Community Toolkit Ollama

Incluye:integración de hospedaje y Client integración

Nota

Esta integración forma parte del Community Toolkit, y no es apoyada oficialmente por el equipo de .

Ollama es un modelo de lenguaje de código abierto eficaz que se puede usar para generar texto basado en una indicación determinada. La integración de .NET.NET Aspire Ollama proporciona una manera de hospedar modelos de Ollama mediante la docker.io/ollama/ollama imagen de contenedor y acceder a ellos a través del cliente OllamaSharp.

Integración de hospedaje

El sistema de alojamiento Ollama modela servidores Ollama como el tipo OllamaResource, y proporciona la capacidad de agregar modelos al servidor mediante el método de extensión AddModel, que representa el modelo como un tipo OllamaModelResource. Para acceder a estos tipos y API que permiten agregar el 📦 CommunityToolkit.Aspire. Hosting.Ollama paquete NuGet en el proyecto de host de aplicación.

dotnet add package CommunityToolkit.Aspire.Hosting.Ollama

Para obtener más información, consulte dotnet add package o Administrar dependencias de paquetes en aplicaciones .NET.

Adición de un recurso de Ollama

En el proyecto host de la aplicación, registre y consuma la integración de Ollama mediante el método de extensión AddOllama para agregar el contenedor de Ollama al generador de aplicaciones. A continuación, puede agregar modelos al contenedor, que descarga y ejecuta cuando se inicia el contenedor, mediante el método de extensión 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);

Como alternativa, si quiere usar un modelo del centro de modelos de Hugging Face, puede usar el método de extensión AddHuggingFaceModel.

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

Cuando .NET.NET Aspire agrega una imagen de contenedor al host de la aplicación, como se muestra en el ejemplo anterior con la imagen de docker.io/ollama/ollama, crea una nueva instancia de Ollama en el equipo local. Para obtener más información, consulte ciclo de vida de los recursos de contenedor.

Descarga del LLM

Cuando el contenedor de Ollama para esta integración se pone en marcha por primera vez, descarga las LLM configuradas. El progreso de esta descarga se muestra en la columna Estado para esta integración en el panel de control .NET.NET Aspire.

Importante

Mantenga abierta la aplicación de orquestación .NET.NET Aspire hasta que se complete la descarga; de lo contrario, se cancelará la descarga.

Almacenar en caché el LLM

Se descargan uno o varios LLM en el contenedor desde el que se ejecuta Ollama y, de forma predeterminada, este contenedor es efímero. Si necesita conservar uno o más Modelos de Lenguaje Extensivos (LLMs) entre los reinicios del contenedor, debe montar un volumen en el contenedor mediante el método WithDataVolume.

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

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

Uso de GPU cuando estén disponibles

Uno o varios LLMs se descargan en el contenedor desde el cual Ollama está en funcionamiento, y por defecto, este contenedor se ejecuta en CPU. Si necesita ejecutar el contenedor en GPU, debe pasar un parámetro a los argumentos del entorno de ejecución del contenedor.

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

Para obtener más información, consulte la compatibilidad con la GPU en el escritorio Docker.

Comprobaciones del estado de integración de hospedaje

La integración de hospedaje de Ollama agrega automáticamente una comprobación de estado para el servidor de Ollama y los recursos del modelo. Para el servidor de Ollama, se agrega una comprobación de estado para comprobar que el servidor de Ollama se está ejecutando y que se puede establecer una conexión con él. Para los recursos del modelo de Ollama, se agrega una comprobación de estado para comprobar que el modelo se está ejecutando y que el modelo está disponible, lo que significa que el recurso se marcará como incorrecto hasta que se haya descargado el modelo.

Abrir compatibilidad con WebUI

La integración de Ollama también proporcionó compatibilidad para ejecutar Open WebUI y facilitar la comunicación con el contenedor de Ollama.

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

integración de Client

Para empezar a trabajar con la integración de .NET.NET Aspire OllamaSharp, instale 📦 CommunityToolkit.Aspire. OllamaSharp paquete NuGet en el proyecto que consume el cliente, es decir, el proyecto de la aplicación que usa el cliente de Ollama.

dotnet add package CommunityToolkit.Aspire.OllamaSharp

Incorporación de la API de cliente de Ollama

En el archivo Program.cs de tu proyecto cliente, llama a la extensión AddOllamaClientApi para registrar un IOllamaClientApi para su uso a través del contenedor de inyección de dependencias. Si el recurso proporcionado en el host de la aplicación y al que se hace referencia en el proyecto que consume el cliente, es un OllamaModelResource, el método AddOllamaClientApi registrará el modelo como el modelo predeterminado para el IOllamaClientApi.

builder.AddOllamaClientApi("llama3");

Después de agregar IOllamaClientApi al generador, puedes obtener la instancia de IOllamaClientApi mediante la inyección de dependencias. Por ejemplo, para recuperar el objeto de contexto del servicio:

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

Adición de la API de cliente de Ollama con autenticación por clave

Puede haber situaciones en las que quiera registrar varias instancias de IOllamaClientApi con nombres de conexión diferentes. Para registrar clientes de Ollama con claves, llame al método AddKeyedOllamaClientApi:

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

A continuación, puede recuperar las instancias de IOllamaClientApi mediante inyección de dependencias. Por ejemplo, para recuperar la conexión de un servicio de ejemplo:

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

Configuración

La integración del cliente de Ollama proporciona varios enfoques de configuración y opciones para cumplir los requisitos y convenciones del proyecto.

Uso de una cadena de conexión

Al usar una cadena de conexión de la sección de configuración de ConnectionStrings, puede proporcionar el nombre de la cadena de conexión al llamar al método AddOllamaClientApi:

builder.AddOllamaClientApi("llama");

A continuación, la cadena de conexión se recuperará de la sección de configuración de ConnectionStrings:

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

Integración con Microsoft.Extensions.AI

La biblioteca de Microsoft.Extensions.AI proporciona una abstracción sobre la API cliente de Ollama, mediante interfaces genéricas. OllamaSharp admite estas interfaces y se pueden registrar mediante los métodos de extensión AddOllamaSharpChatClient y AddOllamaSharpEmbeddingGenerator. Estos métodos también registrarán las instancias de IOllamaClientApi con el contenedor de inyección de dependencias y tendrán versiones identificadas por clave para varias instancias.

builder.AddOllamaSharpChatClient("llama");

Después de agregar IChatClient al generador, puedes obtener la instancia de IChatClient mediante la inyección de dependencias. Por ejemplo, para recuperar el objeto de contexto del servicio:

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

Consulte también