技术速递|通过 .NET Aspire 使用本地 AI 模型

作者:Aaron Powell

排版:Alan Wang

使用本地 AI 模型是无需将资源部署到云中即可在自己的机器上进行实验的好方法。在本文中,我们将探讨如何使用 .NET Aspire 与 Ollama 来本地运行 AI 模型,同时利用 Microsoft.Extensions.AI 抽象在部署时无缝过渡到云托管模型。

在 .NET Aspire 中设置 Ollama

我们需要一种方法在 .NET Aspire 应用程序中使用 Ollama,最简单的方法是使用 .NET Aspire 社区工具包中的 Ollama 托管集成。您可以通过 Visual Studio 工具、VS Code 工具或 .NET CLI 从 NuGet 安装 Ollama 托管集成。接下来,我们来看一下如何通过命令行将 Ollama 托管集成安装到我们的应用程序主机项目中:

csharp 复制代码
dotnet add package CommunityToolkit.Aspire.Hosting.Ollama

安装 Ollama 托管集成后,您可以在 Program.cs 文件中进行配置。以下是配置 Ollama 托管集成的示例:

csharp 复制代码
var ollama =
        builder.AddOllama("ollama")
               .WithDataVolume()
               .WithOpenWebUI();

这里,我们使用了 AddOllama 扩展方法将容器添加到应用程序主机中。由于我们需要下载一些模型,因此我们希望在容器重启时持久化这些模型(这意味着我们每次启动容器时不必重新下载好几 GB 的数据!)。此外,为了提供一个测试环境,我们还添加了 OpenWebUI 容器,它将为我们提供一个用于在应用程序之外与模型交互的网页界面。

运行本地模型

我们在上一步中创建的 Ollama 资源仅运行了 Ollama 服务器,接下来我们还需要向其添加一些模型,可以通过 AddModel 方法完成。让我们使用 Llama 3.2 模型

csharp 复制代码
var chat = ollama.AddModel("chat", "llama3.2");

如果我们想使用模型的某个变体或特定标签,可以在 AddModel 方法中指定,例如 ollama.AddModel("chat", "llama3.2:1b") 用于 Llama 3.2 模型的 1b 标签。或者,如果您需要的模型不在 Ollama 库中,可以使用 AddHuggingFaceModel 方法从 Hugging Face 模型库中添加模型。

现在我们已经有了模型,可以将其作为资源添加到应用程序主机中的其他服务中:

csharp 复制代码
builder.AddProject<Projects.MyApi>("api")
       .WithReference(chat);

当我们运行应用程序主机项目时,Ollama 服务器将启动并下载我们指定的模型(确保在下载完成之前不要停止应用程序主机),然后我们就可以在应用程序中使用该模型。如果您希望依赖该模型的资源等到模型下载完成后再使用,可以使用 WaitFor 方法与模型引用一起使用:

csharp 复制代码
builder.AddProject<Projects.MyApi>("api")
       .WithReference(chat)
       .WaitFor(chat);

在上面的仪表板截图中,我们可以看到模型正在下载。Ollama 服务器正在运行,但处于不健康状态,因为模型尚未下载完成,并且 API 资源尚未启动,因为它正在等待模型下载从而恢复健康状态。

在您的应用程序中使用模型

通过将我们的 API 项目设置来使用聊天模型,我们现在可以使用 OllamaSharp 库连接到 Ollama 服务器并与模型进行交互。为此,我们将使用 .NET Aspire 社区工具包中的 OllamaSharp 集成

csharp 复制代码
dotnet add package CommunityToolkit.Aspire.OllamaSharp

该集成允许我们将 OllamaSharp 客户端注册为 Microsoft.Extensions.AI 包中的 IChatClientIEmbeddingsGenerator 服务。这种抽象机制意味着我们可以将本地 Ollama 服务器切换为云托管选项(例如 Azure OpenAI 服务),而无需更改使用该客户端的代码:

csharp 复制代码
builder.AddOllamaSharpChatClient("chat");

注意:如果您使用的是嵌入模型并想要注册 IEmbeddingsGenerator 服务,可以使用 AddOllamaSharpEmbeddingsGenerator 方法。

为了充分利用 Microsoft.Extensions.AI 管道,我们可以将该服务提供给 ChatClientBuilder

csharp 复制代码
builder.AddKeyedOllamaSharpChatClient("chat");
builder.Services.AddChatClient(b => b
    .UseFunctionInvocation()
    .UseOpenTelemetry(configure: t => t.EnableSensitiveData = true)
    .UseLogging()
    // Use the OllamaSharp client
    .Use(b.Services.GetRequiredKeyedService<IChatClient>("chat")));

最后,我们可以将 IChatClient 注入到路由处理程序中:

csharp 复制代码
app.MapPost("/chat", async (IChatClient chatClient, string question) =>
{
    var response = await chatClient.CompleteAsync(question);
    return response.Message;
});

云托管模型支持

虽然 Ollama 是一个很好的本地开发工具,但在部署应用程序时,您可能更倾向于使用云端 AI 服务,例如 Azure OpenAI 服务。为此,我们需要更新 API 项目,以便在云端运行时注册 IChatClient 服务的不同实现:

csharp 复制代码
if (builder.Environment.IsDevelopment())
{
    builder.AddKeyedOllamaSharpChatClient("chat");
}
else
{
    builder.AddKeyedAzureOpenAIClient("chat");
}
builder.Services.AddChatClient(b => b
    .UseFunctionInvocation()
    .UseOpenTelemetry(configure: t => t.EnableSensitiveData = true)
    .UseLogging()
    // Use the previously registered IChatClient, which is either Ollama or Azure OpenAI
    .Use(b.Services.GetRequiredKeyedService<IChatClient>("chat")));

结论

在本文中,我们展示了如何仅通过几行代码使用 .NET Aspire 设置 Ollama 服务器,指定所需使用的模型,让其自动下载并集成到客户端应用程序中。同时,我们还介绍了如何利用 Microsoft.Extensions.AI 的抽象功能,轻松地在本地模型和云托管模型之间切换。这是一种强大的方式,可以在将 AI 模型部署到云端之前,先在本地机器上进行实验。

查看 eShop 示例应用程序,了解如何将 Ollama 与 .NET Aspire 结合使用的完整示例。

相关推荐
檀越剑指大厂13 分钟前
无需昂贵GPU:本地部署开源AI项目LocalAI你在消费级硬件上运行大模型
人工智能·开源
桂月二二1 小时前
利用ChatGPT API构建智能应用的最佳实践
人工智能·chatgpt
科技与数码3 小时前
倍思氮化镓充电器分享:Super GaN伸缩线快充35W
人工智能·神经网络·生成对抗网络
HUIBUR科技5 小时前
量子计算遇上人工智能:突破算力瓶颈的关键?
人工智能·量子计算
CES_Asia5 小时前
CES Asia 2025聚焦量子与空间技术
人工智能·科技·数码相机·金融·量子计算·智能手表
程序猿阿伟5 小时前
《量子比特:解锁人工智能并行计算加速的密钥》
人工智能·量子计算
盖丽男6 小时前
机器学习的组成
人工智能·机器学习
Agile.Zhou6 小时前
.NET 依赖注入中的 Captive Dependency
.net
风一样的树懒7 小时前
Python使用pip安装Caused by SSLError:certificate verify failed
人工智能·python
9命怪猫7 小时前
AI大模型-提示工程学习笔记5-零提示
人工智能·笔记·学习·ai·提示工程