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


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

Включает:интеграция хостинга включена интеграция хостинга — и — Client интеграция включена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 или Управление зависимостями пакетов в приложениях .NET.

Добавление ресурса 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 Desktop.

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

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

Поддержка Open WebUI

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

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

интеграция Client

Чтобы приступить к .NET.NET Aspire интеграции OllamaSharp, установите пакет NuGet Aspire в проект, использующий клиент, то есть в проект приложения, использующего клиент 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...
}

См. также