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 imagen de contenedor docker.io/ollama/ollama y acceder a ellos a través de OllamaSharpclient.

Integración de hospedaje

La integración de alojamiento de Ollama modela un server de Ollama como un tipo OllamaResource, y permite agregar modelos al server mediante el método de extensión AddModel, que define 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 los recursos Ollama server y modelo. Para el serverde Ollama, se agrega una comprobación de estado para verificar que el server de Ollama está en funcionamiento 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 el paquete NuGet de 📦 CommunityToolkit.Aspire.OllamaSharp en el proyecto consumidor client, es decir, el proyecto de la aplicación que utiliza Ollama client.

dotnet add package CommunityToolkit.Aspire.OllamaSharp

Agregar la API client de Ollama

En el archivo Program.cs del proyecto consumidor de client, utilice 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, al que se hace referencia en el proyecto de consumo de client, 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...
}

Añadir la API Ollama client con 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 client de Ollama proporciona varios enfoques y opciones de configuración 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 Microsoft.Extensions.AI proporciona una abstracción sobre la API Ollama client 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, puede 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