.NET .NET Aspire Community Toolkit Ollama 集成
注意
此集成是 .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");
有关详细信息,请参阅
托管集成运行状况检查
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 支持这些接口,可以使用 AddOllamaSharpChatClient
和 AddOllamaSharpEmbeddingGenerator
扩展方法注册这些接口。 这些方法还将向依赖项注入容器注册 IOllamaClientApi
实例,并为多个实例注册密钥版本。
builder.AddOllamaSharpChatClient("llama");
将 IChatClient
添加到生成器后,可以使用依赖项注入获取 IChatClient
实例。 例如,若要从服务检索上下文对象,
public class ExampleService(IChatClient chatClient)
{
// Use chat client...
}