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 oferece um meio de hospedar modelos Ollama utilizando a imagem de container docker.io/ollama/ollama e de acessá-los através do OllamaSharpclient.

Integração de hospedagem

A integração de hospedagem Ollama modela um Ollama server como tipo OllamaResource e oferece a capacidade de adicionar modelos ao server utilizando o método de extensão AddModel, que representa o modelo como 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 do Ollama adiciona automaticamente uma verificação de integridade para os recursos server e do modelo do Ollama. Para o Ollama server, uma verificação de integridade é adicionada para verificar se o Ollama server 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 que consome client, ou seja, o projeto de aplicação que utiliza o Ollama client.

dotnet add package CommunityToolkit.Aspire.OllamaSharp

Adicionar Ollama client API

No arquivo Program.cs do seu projeto que consome client, chame a extensão AddOllamaClientApi para registar 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 de consumo de clientfor 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 a API client do 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 Ollama client 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 client 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