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
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...
}