Compartilhar via


Integração do Ollama na Comunidade do Kit de Ferramentas .NET.NET Aspire

Inclui:Integração de hospedagem e IntegraçãoClient

Nota

Essa integração faz parte do do Community Toolkit e não é oficialmente compatível com a equipe de .

Ollama é um modelo de linguagem de software livre poderoso que pode ser usado para gerar texto com base em um determinado prompt. A integração Ollama .NET.NET Aspire fornece uma maneira de hospedar os modelos Ollama utilizando a imagem de contêiner docker.io/ollama/ollama e acessá-los por meio do OllamaSharp client.

Integração de hospedagem

A integração de hospedagem Ollama modela um server Ollama como o tipo OllamaResource e permite adicionar modelos ao server usando o método de extensão AddModel, que representa o modelo como tipo OllamaModelResource. Para acessar os tipos e APIs que permitem adicionar o pacote NuGet 📦 CommunityToolkit.Aspire.Hosting.Ollama em um projeto de aplicativo host .

dotnet add package CommunityToolkit.Aspire.Hosting.Ollama

Para obter mais informações, consulte dotnet add package ou Gerenciar dependências de pacotes em aplicativos .NET.

Adicionar recurso Ollama

No projeto de host do aplicativo, registre e consuma a integração do Ollama usando o método de extensão AddOllama para adicionar o contêiner Ollama ao construtor de aplicativos. Em seguida, você pode adicionar modelos ao contêiner, que é baixado e executado quando o contêiner é iniciado, usando o método de extensão 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, se você quiser usar um modelo do hub de modelo Abraçando o Rosto, poderá usar o método de extensão AddHuggingFaceModel.

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

Quando .NET.NET Aspire adiciona uma imagem de contêiner ao host do aplicativo, conforme mostrado no exemplo anterior com a imagem docker.io/ollama/ollama, ele cria uma nova instância do Ollama em seu computador local. Para obter mais informações, consulte ciclo de vida do recurso de contêiner.

Baixar o LLM

Quando o contêiner Ollama para essa integração gira pela primeira vez, ele baixa as LLMs configuradas. O progresso desse download é exibido na coluna State para essa integração no painel .NET.NET Aspire.

Importante

Mantenha o aplicativo de orquestração .NET.NET Aspire aberto até que o download seja concluído, caso contrário, o download será cancelado.

Armazenar em cache o LLM

Uma ou mais LLMs são baixadas no contêiner do qual o Ollama está sendo executado e, por padrão, esse contêiner é efêmero. Se você precisar manter uma ou mais LLMs entre as reinicializações de um contêiner, você deve montar um volume no contêiner usando o método WithDataVolume.

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

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

Usar GPUs quando disponível

Uma ou mais LLMs são baixadas no contêiner do qual o Ollama está sendo executado e, por padrão, esse contêiner é executado na CPU. Se você precisar executar o contêiner na GPU, precisará passar um parâmetro para os args de runtime do contêiner.

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

Para obter mais informações, consulte suporte à GPU no Docker Desktop.

Verificações de integridade da integração de serviços de hospedagem

A integração de hospedagem do Ollama adiciona automaticamente uma verificação de integridade para o Ollama server e os recursos de modelo. Para o Ollama server, uma verificação de integridade é adicionada para confirmar que o Ollama server está em execução e que uma conexão pode ser estabelecida com ele. Para os recursos do modelo Ollama, uma verificação de integridade é adicionada para verificar se o modelo está em execução e se o modelo está disponível, o que significa que o recurso será marcado como não íntegro até que o modelo seja baixado.

Abrir suporte a WebUI

A integração do Ollama também forneceu suporte para executar Open WebUI e fazer com que ele se comunicasse com o contêiner Ollama.

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

integração Client

Para começar a usar a integração .NET.NET Aspire OllamaSharp, instale o 📦 CommunityToolkit.Aspire. O OllamaSharp pacote NuGet no projeto que o consome client, ou seja, o projeto do aplicativo que usa o Ollama client.

dotnet add package CommunityToolkit.Aspire.OllamaSharp

Adicionar a API de client Ollama

No arquivo Program.cs do projeto que consome client, chame a extensão AddOllamaClientApi para registrar um IOllamaClientApi para uso por meio do contêiner de injeção de dependência. Se o recurso fornecido no host do aplicativo e referenciado no projeto que consome client, for um OllamaModelResource, o método AddOllamaClientApi registrará o modelo como o modelo padrão para o IOllamaClientApi.

builder.AddOllamaClientApi("llama3");

Depois de adicionar IOllamaClientApi ao construtor, você pode obter a instância de IOllamaClientApi usando a injeção de dependência. Por exemplo, para recuperar o objeto de contexto do serviço:

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

Adicionar API client Ollama com chave

Pode haver situações em que você deseja registrar várias instâncias de IOllamaClientApi com nomes de conexão diferentes. Para registrar clientes Ollama chaveados, chame o método AddKeyedOllamaClientApi:

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

Em seguida, você pode recuperar as instâncias de IOllamaClientApi usando a injeção de dependência. Por exemplo, para recuperar a conexão de um serviço de exemplo:

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

Configuração

A integração do Ollama client fornece várias abordagens de configuração e opções para atender aos requisitos e convenções do seu projeto.

Usar uma cadeia de conexão

Ao usar uma cadeia de conexão da seção de configuração ConnectionStrings, você pode fornecer o nome da cadeia de conexão ao chamar o método AddOllamaClientApi:

builder.AddOllamaClientApi("llama");

Em seguida, a cadeia de conexão será recuperada da seção de configuração ConnectionStrings:

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

Integração com Microsoft.Extensions.AI

A biblioteca de Microsoft.Extensions.AI fornece uma abstração sobre a API de client Ollama usando interfaces genéricas. O OllamaSharp dá suporte a essas interfaces e elas podem ser registradas usando os métodos de extensão AddOllamaSharpChatClient e AddOllamaSharpEmbeddingGenerator. Esses métodos também registrarão as instâncias de IOllamaClientApi no contêiner de injeção de dependência e terão versões identificadas por chave para múltiplas instâncias.

builder.AddOllamaSharpChatClient("llama");

Depois de adicionar IChatClient ao construtor, você pode obter a instância de IChatClient usando a injeção de dependência. Por exemplo, para recuperar o objeto de contexto do serviço:

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

Consulte também