技术速递|通过 .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 结合使用的完整示例。

相关推荐
Fuweizn2 分钟前
在工业生产中,物料搬运环节至关重要,搬运机器人开启新篇章
人工智能·智能机器人·复合机器人
AL.千灯学长1 小时前
DeepSeek接入Siri(已升级支持苹果手表)完整版硅基流动DeepSeek-R1部署
人工智能·gpt·ios·ai·苹果vision pro
LCG元2 小时前
大模型驱动的围术期质控系统全面解析与应用探索
人工智能
lihuayong2 小时前
计算机视觉:主流数据集整理
人工智能·计算机视觉·mnist数据集·coco数据集·图像数据集·cifar-10数据集·imagenet数据集
政安晨2 小时前
政安晨【零基础玩转各类开源AI项目】DeepSeek 多模态大模型Janus-Pro-7B,本地部署!支持图像识别和图像生成
人工智能·大模型·多模态·deepseek·janus-pro-7b
一ge科研小菜鸡2 小时前
DeepSeek 与后端开发:AI 赋能云端架构与智能化服务
人工智能·云原生
冰 河2 小时前
‌最新版DeepSeek保姆级安装教程:本地部署+避坑指南
人工智能·程序员·openai·deepseek·冰河大模型
维维180-3121-14552 小时前
AI赋能生态学暨“ChatGPT+”多技术融合在生态系统服务中的实践技术应用与论文撰写
人工智能·chatgpt
終不似少年遊*3 小时前
词向量与词嵌入
人工智能·深度学习·nlp·机器翻译·词嵌入
杜大哥3 小时前
如何在WPS打开的word、excel文件中,使用AI?
人工智能·word·excel·wps