Поделиться через


Интеграция .NET.NET Aspire Ollama Community Toolkit

Включает:интеграция хостинга и интеграцияClient

Заметка

Эта интеграция является частью набора средств сообщества и официально не поддерживается командой .

Ollama — это мощная языковая модель с открытым исходным кодом, которую можно использовать для создания текста на основе заданного запроса. Интеграция .NET.NET Aspire Ollama предоставляет способ размещения моделей Ollama с помощью образа контейнера docker.io/ollama/ollama и доступа к ним через клиент OllamaSharp.

Интеграция хостинга

Модели интеграции Ollama представляют собой сервер Ollama как тип OllamaResource и обеспечивают возможность добавления моделей на сервер с использованием метода расширения AddModel, который представляет модель как тип OllamaModelResource. Чтобы получить доступ к этим типам и API, которые позволяют добавить пакет CommunityToolkit..Hosting.Ollama NuGet в проект хоста приложения .

dotnet add package CommunityToolkit.Aspire.Hosting.Ollama

Дополнительные сведения см. в статье dotnet add package or Manage package dependencies in .NET applications.

Добавление ресурса Ollama

В проекте хоста приложения зарегистрируйте и внедрите интеграцию Ollama с помощью метода расширения AddOllama, чтобы добавить контейнер Ollama в сборщик приложения. Затем можно добавить модели в контейнер, который скачивает и запускается при запуске контейнера с помощью метода расширения 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);

Кроме того, если вы хотите использовать модель из центра моделей Hugging Face, можно использовать метод расширения AddHuggingFaceModel.

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

Когда .NET.NET Aspire добавляет образ контейнера в узел приложения, как показано в предыдущем примере с изображением docker.io/ollama/ollama, он создает новый экземпляр Ollama на локальном компьютере. Дополнительные сведения см. в жизненном цикле ресурсов контейнера.

Скачивание LLM

Когда контейнер Ollama для этой интеграции сначала запускается, он скачивает настроенные LLM. Прогресс этой загрузки отображается в столбце состояния для этой интеграции на панели мониторинга .NET.NET Aspire.

Важный

Не закрывайте приложение оркестрации .NET.NET Aspire, пока не завершится скачивание, в противном случае скачивание будет отменено.

Кэширование LLM

Один или несколько LLM загружаются в контейнер, из которого выполняется Ollama, и по умолчанию этот контейнер является временным. Если необходимо сохранить одну или несколько LLM при перезапусках контейнера, нужно подключить том к контейнеру с помощью метода WithDataVolume.

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

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

Использование графических процессоров при наличии

Один или несколько LLM загружаются в контейнер, из которого осуществляется запуск Ollama, и по умолчанию этот контейнер работает на центральном процессоре. Если необходимо запустить контейнер в GPU, необходимо передать параметр в args среды выполнения контейнера.

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

Для получения дополнительной информации см. раздел поддержка GPU в настольной системе Docker.

Проверка работоспособности интеграции хостинга

Интеграция размещения Ollama автоматически добавляет проверку состояния для сервера Ollama и ресурсов модели. Для сервера Ollama добавляется проверка работоспособности, чтобы убедиться, что запущен сервер Ollama и что подключение можно установить к нему. Для ресурсов модели Ollama добавляется проверка работоспособности, чтобы убедиться, что модель запущена и доступна, то есть ресурс будет помечен как неисправный, пока модель не будет загружена.

Поддержка Open WebUI

Интеграция Ollama также предоставляет поддержку запуска Open WebUI и взаимодействия с контейнером Ollama.

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

интеграция Client

Чтобы приступить к работе с внедрением .NET.NET Aspire OllamaSharp, установите 📦 CommunityToolkit.Aspire.OllamaSharp пакет NuGet в проекте, использующем клиент, то есть для приложения, которое использует клиент Ollama.

dotnet add package CommunityToolkit.Aspire.OllamaSharp

Добавить API клиента Ollama

В файле Program.cs проекта, используемого клиентом, вызовите расширение AddOllamaClientApi, чтобы зарегистрировать IOllamaClientApi для использования с помощью контейнера внедрения зависимостей. Если ресурс, предоставленный в узле приложения и на который ссылается проект, используемый клиентом, является OllamaModelResource, метод AddOllamaClientApi будет регистрировать модель в качестве модели по умолчанию для IOllamaClientApi.

builder.AddOllamaClientApi("llama3");

После добавления IOllamaClientApi в конструктор, можно получить экземпляр IOllamaClientApi через инъекцию зависимостей. Например, чтобы получить объект контекста из службы:

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

Добавление api клиента Ollama с ключом

Могут возникнуть ситуации, когда может потребоваться зарегистрировать несколько экземпляров IOllamaClientApi с различными именами подключений. Чтобы зарегистрировать ключи клиентов Ollama, вызовите метод AddKeyedOllamaClientApi:

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

Затем можно получить IOllamaClientApi экземпляры с помощью внедрения зависимостей. Например, чтобы получить подключение из примера сервиса:

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

Конфигурация

Интеграция клиента Ollama предоставляет несколько подходов к конфигурации и вариантов для удовлетворения требований и соглашений проекта.

Используйте строку подключения

При использовании строки подключения из раздела конфигурации ConnectionStrings можно указать имя строки подключения при вызове метода AddOllamaClientApi:

builder.AddOllamaClientApi("llama");

Затем строка подключения будет получена из раздела конфигурации ConnectionStrings:

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

Интеграция с Microsoft.Extensions.AI

Библиотека Microsoft.Extensions.AI предоставляет абстракцию для клиентского API Ollama, используя универсальные интерфейсы. OllamaSharp поддерживает эти интерфейсы, и их можно зарегистрировать с помощью методов расширения AddOllamaSharpChatClient и AddOllamaSharpEmbeddingGenerator. Эти методы также регистрируют экземпляры IOllamaClientApi в контейнере внедрения зависимостей и имеют версии с ключами для нескольких экземпляров.

builder.AddOllamaSharpChatClient("llama");

После добавления IChatClient в конструктор, можно получить экземпляр IChatClient через инъекцию зависимостей. Например, чтобы получить объект контекста из службы:

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

См. также