.NET .NET Aspire Community Toolkit Ollama 整合
注意
這項整合是 .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");
如需詳細資訊,請參閱
主機整合健康檢查
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 支援這些介面,而且可以使用 AddOllamaSharpChatClient
和 AddOllamaSharpEmbeddingGenerator
擴充方法進行註冊。 這些方法也會將 IOllamaClientApi
實例註冊到相依性注入容器中,並具有多個實例的鍵值版本。
builder.AddOllamaSharpChatClient("llama");
將 IChatClient
新增至產生器之後,您可以使用相依性插入取得 IChatClient
實例。 例如,若要從服務中擷取上下文物件:
public class ExampleService(IChatClient chatClient)
{
// Use chat client...
}