共用方式為


.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 託管整合模型將 Ollama server 作為 OllamaResource 類型,並提供可使用 AddModel 擴充方法將模型新增至 server 的功能,此方法會將模型表示為 OllamaModelResource 類型。 若要存取這些類型和 API,您可以在 應用程式主機 專案中新增 CommunityToolkit.Hosting.Ollama 📦Aspire 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 容器第一次啟動時,它會下載已設定的 LLM。 此下載的進度會顯示在 .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。OllamaSharpclient-consuming 專案中的 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...
}

另請參閱