.NET .NET Aspire Community Toolkit Ollama 集成

包括:托管集成Client 集成

注意

此集成是 .NET.NET Aspire 社区工具包 的一部分, 不受 .NET.NET Aspire 团队正式支持。

Ollama 是一种功能强大的开源语言模型,可用于基于给定提示生成文本。 .NET .NET Aspire Ollama 集成提供了一种使用 docker.io/ollama/ollama 容器映像 托管 Ollama 模型的方法,并通过 OllamaSharpclient访问这些模型。

托管集成

Ollama 托管集成模型将 server 模型视为 OllamaResource 类型,并提供使用 AddModel 扩展方法将模型添加到 server 的能力,该方法将模型视为 OllamaModelResource 类型。 若要访问这些类型和 API,允许添加 📦 CommunityToolkit。Aspire。应用主机 项目中的 Hosting.Ollama NuGet 包。

dotnet add package CommunityToolkit.Aspire.Hosting.Ollama

有关详细信息,请参阅 dotnet add package在 .NET 应用程序中管理包依赖项

添加 Ollama 资源

在应用主机项目中,使用 AddOllama 扩展方法注册并使用 Ollama 集成,将 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);

或者,如果要从 拥抱人脸 模型中心使用模型,可以使用 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 容器首次启动此集成时,它会下载已配置的 LLMs。 此下载的进度显示在 状态 列中,适用于 .NET.NET Aspire 仪表板上的此集成。

重要

请保持 .NET.NET Aspire 编排应用程序打开状态,直到下载完成,否则下载将被取消。

缓存 LLM

一个或多个 LLM 下载到运行 Ollama 的容器中,默认情况下,此容器是临时的。 如果需要在容器重启时持久化一个或多个 LLM,则需要使用 WithDataVolume 方法将卷挂载到容器中。

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

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

可用时使用 GPU

一个或多个 LLM 下载到运行 Ollama 的容器中,默认情况下,此容器在 CPU 上运行。 如果需要在 GPU 中运行容器,则需要将参数传递给容器运行时参数。

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

有关详细信息,请参阅 Desktop中的 GPU 支持。

托管集成运行状况检查

Ollama 托管集成会自动为 Ollama server 和模型资源添加运行状况检查。 对于 Ollama server,将添加运行状况检查,以验证 Ollama server 是否正在运行,并且可以建立连接。 对于 Ollama 模型资源,将添加运行状况检查以验证模型是否正在运行,并且该模型是否可用,这意味着在下载模型之前,资源将标记为不正常。

打开 WebUI 支持

Ollama 集成还支持运行 Open WebUI,并使其与 Ollama 容器通信。

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

Client 集成

若要开始使用 .NET.NET Aspire OllamaSharp 集成,请安装 📦 CommunityToolkit。Aspire。client消耗项目中的 OllamaSharp NuGet 包,即使用 Ollama client的应用程序的项目。

dotnet add package CommunityToolkit.Aspire.OllamaSharp

添加 Ollama client API

在你的 client消耗项目的 Program.cs 文件中,调用 AddOllamaClientApi 扩展来注册 IOllamaClientApi,以便通过依赖注入容器来使用。 如果应用主机中提供并在 client消耗项目中引用的资源是 OllamaModelResource,则 AddOllamaClientApi 方法会将模型注册为 IOllamaClientApi的默认模型。

builder.AddOllamaClientApi("llama3");

IOllamaClientApi 添加到生成器后,可以使用依赖项注入获取 IOllamaClientApi 实例。 例如,若要从服务检索上下文对象,

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

添加带有密钥的 Ollama client API

在某些情况下,可能需要使用不同的连接名称注册多个 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 client 集成提供了多种配置方法和选项,以满足项目的要求和约定。

使用连接字符串

使用 ConnectionStrings 配置部分中的连接字符串时,可以在调用 AddOllamaClientApi 方法时提供连接字符串的名称:

builder.AddOllamaClientApi("llama");

然后,将从 ConnectionStrings 配置部分检索连接字符串:

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

Microsoft.Extensions.AI 集成

Microsoft.Extensions.AI 库通过 Ollama client API,提供基于泛型接口的抽象层。 OllamaSharp 支持这些接口,可以使用 AddOllamaSharpChatClientAddOllamaSharpEmbeddingGenerator 扩展方法注册这些接口。 这些方法还将向依赖项注入容器注册 IOllamaClientApi 实例,并为多个实例注册密钥版本。

builder.AddOllamaSharpChatClient("llama");

IChatClient 添加到生成器后,可以使用依赖项注入获取 IChatClient 实例。 例如,若要从服务检索上下文对象,

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

另请参阅