Aspire Community Toolkit Ollama 集成

包含:托管集成已包含 - Client 集成已包含Client 集成

Note

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

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

托管集成

Ollama 托管集成将服务器建模为 OllamaResource 类型,并提供使用 AddModel 扩展方法将模型作为 OllamaModelResource 类型添加到服务器的功能。 访问允许添加 📦 CommunityToolkitAspire 的这些类型和 API。AppHost 项目中的 Hosting.Ollama NuGet 包。

dotnet add package CommunityToolkit.Aspire.Hosting.Ollama

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

添加 Ollama 资源

在 AppHost 项目中,使用 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);

或者,如果要从 Hugging Face 模型中心使用模型,可以使用 AddHuggingFaceModel 扩展方法。

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

当 Aspire 将容器映像添加到 AppHost 时,如前面的示例中使用到的 docker.io/ollama/ollama 映像,它会在本地计算机上创建一个新的 Ollama 实例。 有关详细信息,请参阅 容器资源生命周期

下载 LLM

当 Ollama 容器首次启动此集成时,它会下载已配置的 LLMs。 此下载的进度显示在Aspire上此集成的“状态”列中。

Important

请保持 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 服务器和模型资源添加运行状况检查。 对于 Ollama 服务器,会添加运行状况检查,以验证 Ollama 服务器是否正在运行,并可以建立连接。 对于 Ollama 模型资源,将添加运行状况检查以验证模型是否正在运行,并且该模型是否可用,这意味着在下载模型之前,资源将标记为不正常。

启用 WebUI 界面支持

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

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

Client 集成

若要开始使用 Aspire OllamaSharp 集成,请在使用 Ollama 客户端的项目中安装 📦 CommunityToolkit.Aspire.OllamaSharp NuGet 包,该项目即为应用程序使用的项目。

dotnet add package CommunityToolkit.Aspire.OllamaSharp

添加 Ollama 客户端 API

在客户端使用项目的 Program.cs 文件中,调用 AddOllamaClientApi 扩展来注册 IOllamaClientApi,以便通过依赖项注入容器使用。 如果 AppHost 中提供并在客户端使用项目中引用的资源是一种 OllamaModelResource,则 AddOllamaClientApi 该方法会将模型注册为默认模型 IOllamaClientApi

builder.AddOllamaClientApi("llama3");

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

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

添加具有键特性的 Ollama 客户端 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...
}

Configuration

Ollama 客户端集成提供了多种配置方法和选项,以满足项目的要求和约定。

使用连接字符串

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

builder.AddOllamaClientApi("llama");

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

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

Microsoft.Extensions.AI 集成

📦 Microsoft.Extensions.AI NuGet 包通过 Ollama 客户端 API 使用泛型接口提供一个抽象层。 OllamaSharp 支持这些接口,您可以通过使用IChatClientIEmbeddingGenerator<TInput,TEmbedding>注册方法链式调用AddOllamaClientApi方法来注册这些接口。

注册IChatClient,请将AddChatClient方法链接到AddOllamaClientApi方法。

builder.AddOllamaClientApi("llama")
       .AddChatClient();

同样,若要注册 IEmbeddingGenerator,请将 AddEmbeddingGenerator 方法链接起来:

builder.AddOllamaClientApi("llama")
       .AddEmbeddingGenerator();

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

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

添加已经设定密钥的 Microsoft.Extensions.AI 客户端

在某些情况下,你可能想要使用不同的连接名称注册多个 AI 客户端实例。 若要注册密钥 AI 客户端,请使用注册方法的密钥版本:

builder.AddOllamaClientApi("chat")
       .AddKeyedChatClient("chat");
builder.AddOllamaClientApi("embeddings")
       .AddKeyedEmbeddingGenerator("embeddings");

然后,可以使用依赖项注入检索 AI 客户端实例。 例如,若要从示例服务检索客户端:

public class ExampleService(
    [FromKeyedServices("chat")] IChatClient chatClient,
    [FromKeyedServices("embeddings")] IEmbeddingGenerator<string, Embedding<float>> embeddingGenerator)
{
    // Use AI clients...
}

另请参阅