Partilhar via


.NET .NET Aspire integração do Kit de Ferramentas da Comunidade Ollama

Inclui:integração de hosting e Client integração

Observação

Essa integração faz parte do .NET.NET Aspire Community Toolkit e não é oficialmente suportada pela equipe .NET.NET Aspire.

Ollama é um poderoso modelo de linguagem de código aberto que pode ser usado para gerar texto com base em um determinado prompt. A integração .NET.NET Aspire Ollama fornece uma maneira de hospedar modelos Ollama usando a imagem do contentor docker.io/ollama/ollama e acessá-los através do cliente OllamaSharp.

Integração de hospedagem

A integração de hospedagem Ollama modela um servidor Ollama como o tipo OllamaResource e fornece a capacidade de adicionar modelos ao servidor usando o método de extensão AddModel, que representa o modelo como um tipo OllamaModelResource. Para aceder a esses tipos e APIs que permitem adicionar o 📦 CommunityToolkit.Aspire. Hosting.Ollama pacote NuGet no projeto do hospedeiro da aplicação .

dotnet add package CommunityToolkit.Aspire.Hosting.Ollama

Para obter mais informações, consulte dotnet adicionar pacote ou Gerir dependências de pacotes em aplicações .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 Hugging Face hub de modelo, você pode 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, como mostrado no exemplo anterior com a imagem docker.io/ollama/ollama, ele cria uma nova instância do Ollama em sua máquina local. Para obter mais informações, consulte Ciclo de vida do recurso de contêiner.

Faça o download do LLM

Quando o contêiner Ollama para essa integração gira pela primeira vez, ele baixa os LLMs configurados. O progresso deste download é exibido na coluna Estado do para esta integração no painel .

Importante

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

Armazenar em cache o LLM

Um ou mais LLMs são baixados no contêiner do qual o Ollama está sendo executado e, por padrão, esse contêiner é efêmero. Se necessitar de persistir um ou mais LLMs nas reinicializações do contentor, deverá montar um volume no contentor utilizando o método WithDataVolume.

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

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

Usar GPUs quando disponíveis

Um ou mais LLMs são baixados 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 tempo de execução do contêiner.

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

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

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

A integração de hospedagem Ollama adiciona automaticamente uma verificação de integridade para o servidor Ollama e recursos de modelo. Para o servidor Ollama, uma verificação de integridade é adicionada para verificar se o servidor Ollama está em execução e se 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 tenha sido baixado.

Suporte a WebUI aberta

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

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

Client integração

Para começar a usar a integração .NET.NET Aspire OllamaSharp, instale o 📦 CommunityToolkit.Aspire.OllamaSharp pacote NuGet no projeto consumidor, ou seja, o projeto para o aplicativo que usa o cliente Ollama.

dotnet add package CommunityToolkit.Aspire.OllamaSharp

Adicionar API de cliente Ollama

No ficheiro Program.cs do seu projeto cliente, chame a extensão AddOllamaClientApi para registar um IOllamaClientApi para utilização através do contêiner de injeção de dependência. Se o recurso fornecido no host do aplicativo e referenciado no projeto que consome o cliente 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 IOllamaClientApi usando a injeção de dependência. Por exemplo, para recuperar seu objeto de contexto do serviço:

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

Adicionar API de cliente Ollama com chave

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

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

Em seguida, é possível recuperar as instâncias 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 cliente Ollama fornece várias abordagens e opções de configuração 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 de 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 Microsoft.Extensions.AI fornece uma abstração sobre a API do cliente Ollama, usando interfaces genéricas. OllamaSharp suporta essas interfaces, e eles podem ser registrados usando os métodos de extensão AddOllamaSharpChatClient e AddOllamaSharpEmbeddingGenerator. Esses métodos também registrarão as instâncias IOllamaClientApi com o contêiner de injeção de dependência e terão versões chaveadas para várias instâncias.

builder.AddOllamaSharpChatClient("llama");

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

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

Ver também