包含: -
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");
有关详细信息,请参阅
托管集成运行状况检查
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 支持这些接口,您可以通过使用IChatClient或IEmbeddingGenerator<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...
}