IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    通过 .NET Aspire 使用本地 AI 模型

    Eddie Chen发表于 2025-01-10 06:50:05
    love 0

    本文翻译自Aaron Powell的Using Local AI models with .NET Aspire

    使用本地 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 托管集成安装到我们的应用程序主机项目中:

    dotnet add package CommunityToolkit.Aspire.Hosting.Ollama

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

    var ollama =
            builder.AddOllama("ollama")
                   .WithDataVolume()
                   .WithOpenWebUI();

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

    运行本地 AI 模型

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

    var chat = ollama.AddModel("chat", "llama3.2");

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

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

    builder.AddProject<Projects.MyApi>("api")
           .WithReference(chat);

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

    builder.AddProject<Projects.MyApi>("api")
           .WithReference(chat)
           .WaitFor(chat);

    Image downloading models

    在上面的控制面板截图中,我们可以看到模型正在下载。Ollama 服务器正在运行但处于非正常状态,因为模型尚未下载完成。api资源也尚未启动,因为它正在等待模型下载完成后进入正常状态。

    在应用程序中使用模型

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

    dotnet add package CommunityToolkit.Aspire.OllamaSharp

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

    builder.AddOllamaSharpChatClient("chat");

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

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

    builder.AddKeyedOllamaSharpChatClient("chat");
    builder.Services.AddChatClient(sp => sp.GetRequiredKeyedService("chat"))
                    .UseFunctionInvocation()
                    .UseOpenTelemetry(configure: t => t.EnableSensitiveData = true)
                    .UseLogging();

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

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

    云托管模型支持

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

    if (builder.Environment.IsDevelopment())
    {
        builder.AddKeyedOllamaSharpChatClient("chat");
    }
    else
    {
        builder.AddKeyedAzureOpenAIClient("chat");
    }
    
    builder.Services.AddChatClient(sp => sp.GetRequiredKeyedService("chat"))
                    .UseFunctionInvocation()
                    .UseOpenTelemetry(configure: t => t.EnableSensitiveData = true)
                    .UseLogging();

    结论

    在本文中,我们了解了如何通过几行代码来使用 .NET Aspire 设置 Ollama 服务器,指定我们要使用的模型,为我们下载该模型,然后将其集成到客户端应用程序中。我们还了解了如何使用 Microsoft.Extensions.AI 的抽象功能在本地模型和云托管模型之间轻松切换。这是一种强大的方式,可以在将 AI 模型部署到云端之前在本地计算机上对其进行试验。

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

    The post 通过 .NET Aspire 使用本地 AI 模型 appeared first on .NET中文官方博客.



沪ICP备19023445号-2号
友情链接