.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 .
- .NET CLI
- PackageReference
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
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.
- .NET CLI
- PackageReference
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...
}