通过 .NET Aspire 使用本地 AI 模型
引言
在当今快速发展的 AI 领域,开发人员经常需要在本地环境中实验和测试 AI 模型,然后再将其部署到云端。使用本地 AI 模型不仅能够节省云资源成本,还能提供更快的迭代速度和更好的隐私保护。本文将介绍如何利用 .NET Aspire 框架结合 Ollama 在本地运行 AI 模型,并通过 Microsoft.Extensions.AI 抽象层实现从本地开发到云部署的无缝过渡。
正文内容
在 .NET Aspire 中设置 Ollama
Ollama 是一个出色的工具,它允许开发者在本地运行大型语言模型。要在 .NET Aspire 应用程序中使用 Ollama,最简便的方法是使用 .NET Aspire 社区工具包中的 Ollama 托管集成。
首先,我们需要通过 NuGet 安装 Ollama 托管集成包。可以通过以下命令行将其添加到应用程序主机项目中:
dotnet add package CommunityToolkit.Aspire.Hosting.Ollama
安装完成后,我们可以在 Program.cs 文件中配置 Ollama 托管集成。以下是一个典型的配置示例:
var ollama = builder.AddOllama("ollama")
.WithDataVolume()
.WithOpenWebUI();
这段代码使用了 AddOllama 扩展方法将容器添加到应用程序主机。WithDataVolume() 方法确保了模型数据在容器重启后仍然保留,避免了每次启动时重新下载大量数据的麻烦。而 WithOpenWebUI() 则添加了一个网页界面,让我们可以在应用程序之外与模型进行交互。
运行本地 AI 模型
配置好 Ollama 服务器后,我们需要为其添加具体的 AI 模型。Ollama 提供了 AddModel 方法来实现这一功能。例如,要添加 Llama 3.2 模型,可以使用以下代码:
var chat = ollama.AddModel("chat", "llama3.2");
如果需要指定模型的特定版本或标签,可以在方法中添加相应参数。例如,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);
在控制面板中,我们可以看到模型下载的状态。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");
对于需要使用嵌入模型的场景,可以使用 AddOllamaSharpEmbeddingsGenerator 方法注册 IEmbeddingsGenerator 服务。
为了充分利用 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 项目的配置,使其在云端运行时自动切换服务实现:
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();
这种设计模式充分体现了 Microsoft.Extensions.AI 抽象层的价值,它允许我们在不改变业务逻辑代码的情况下,灵活切换底层 AI 服务的实现方式。
结论
本文详细介绍了如何利用 .NET Aspire 框架在本地环境中设置和使用 AI 模型。通过简单的几行代码,我们就能配置 Ollama 服务器,指定所需的 AI 模型,并将其集成到应用程序中。更重要的是,借助 Microsoft.Extensions.AI 的抽象能力,我们可以轻松实现从本地开发到云部署的平滑过渡。
这种开发模式为 AI 应用开发提供了极大的灵活性和便利性。开发者可以在本地环境中快速迭代和测试模型,待功能成熟后再迁移到云端,既保证了开发效率,又兼顾了生产环境的性能和稳定性。对于 .NET 开发者而言,.NET Aspire 结合 Ollama 的方案提供了一条高效、便捷的 AI 应用开发路径。
通过 .NET Aspire 使用本地 AI 模型的更多相关文章
- 如何借助 JuiceFS 为 AI 模型训练提速 7 倍
背景 海量且优质的数据集是一个好的 AI 模型的基石之一,如何存储.管理这些数据集,以及在模型训练时提升 I/O 效率一直都是 AI 平台工程师和算法科学家特别关注的事情.不论是单机训练还是分布式训练 ...
- 二手车价格预测 | 构建AI模型并部署Web应用 ⛵
作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 机器学习实战系列:https://www.showmeai.tech/t ...
- Microsoft宣布为Power BI提供AI模型构建器,关键驱动程序分析和Azure机器学习集成
微软的Power BI现在是一种正在大量结合人工智能(AI)的商业分析服务,它使用户无需编码经验或深厚的技术专长就能够创建报告,仪表板等.近日西雅图公司宣布推出几款新的AI功能,包括图像识别和文本分析 ...
- 炸金花游戏(3)--基于EV(期望收益)的简单AI模型
前言: 炸金花这款游戏, 从技术的角度来说, 比德州差了很多. 所以他的AI模型也相对简单一些. 本文从EV(期望收益)的角度, 来尝试构建一个简单的炸金花AI. 相关文章: 德州扑克AI--Prog ...
- 让你的AI模型尽可能的靠近数据源
来源:Redislabs作者:Pieter Cailliau.LucaAntiga翻译:Kevin (公众号:中间件小哥) 简介 今天我们发布了一个 RedisAI 的预览版本,预集成了[tensor ...
- 最强云硬盘来了,让AI模型迭代从1周缩短到1天
摘要:华为云擎天架构+ Flash-Native存储引擎+低时延CurreNET,数据存储和处理还有啥担心的? 虽然我们已经进入大数据时代,但多数企业数据利用率只有10%,数据的价值没有得到充分释放. ...
- CANN5.0黑科技解密 | 别眨眼!缩小隧道,让你的AI模型“身轻如燕”!
摘要:CANN作为释放昇腾硬件算力的关键平台,通过深耕先进的模型压缩技术,聚力打造AMCT模型压缩工具,在保证模型精度前提下,不遗余力地降低模型的存储空间和计算量. 随着深度学习的发展,推理模型巨大的 ...
- AI模型运维——NVIDIA驱动、cuda、cudnn、nccl安装
目前大部分使用GPU的AI模型,都使用的英伟达这套. 需要注意的是,驱动.cuda.cudnn版本需要一一对应,高低版本互不兼容. 驱动和cuda对应关系:https://docs.nvidia.co ...
- AI 音辨世界:艺术小白的我,靠这个AI模型,速识音乐流派选择音乐 ⛵
作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 机器学习实战系列:https://www.showmeai.tech/t ...
- Meta AI 开源万物可分割 AI 模型(SAM)
开始 4 月 6 日,根据 Meta AI 官方博客,Meta AI 宣布推出了一个 AI 模型 Segment Anything Model(SAM,分割一切模型).据介绍,该模型能够根据文本指令等 ...
随机推荐
- KGDB调试Linux内核与模块
前言 内核 5.10 版本 openEuler 使用 yum install 下载了源码,并且通过两个 VMware 虚拟机进行调试 ubuntu 直接使用 git 拉取了https://kernel ...
- Electron 开发:获取当前客户端 IP
Electron 开发:获取当前客户端 IP 一.背景与需求 1. 项目背景 客户端会自启动一个服务,Web/后端服务通过 IP + port 请求以操作客户端接口 2. 初始方案与问题 2.1. 初 ...
- 🎀Docker下Dubbo服务优雅上下线实现
简介 在Docker容器环境中部署基于Dubbo的服务时,实现服务的优雅上下线是至关重要的.这通常涉及到两个关键步骤:首先,确保服务能够从注册中心摘除,停止接受新的请求:其次,等待所有正在处理的请求完 ...
- 探秘Transformer系列之(27)--- MQA & GQA
探秘Transformer系列之(27)--- MQA & GQA 目录 探秘Transformer系列之(27)--- MQA & GQA 0x00 概述 0x01 MHA 1.1 ...
- mac使用pptp的正确方式
环境:macos mojave 10.14.6 尝试的解决方案: mac自带vpn 结论:已经不支持pptp协议 使用shimo 结论:无用,连接的时候没反应 为了解决不能连接的问题,某老外写的ppt ...
- MaxKB中如何选择向量模型?
MaxKB内置的向量模型不足? 在MaxKB中知识文档Emdeding是很重要的一环,而这个过程就必须依赖向量模型.目前MaxKB内置的向量模型为text2vec-base-Chinese,一个针对中 ...
- 解析V8引擎底层原理,探究其优异性能之谜
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- pyqt点击右上角关闭界面但子线程仍在运行
现象: 通过右上角的叉关闭图形界面后,程序运行的子线程却不会被自动关闭,依然留存在系统中 原因: 子线程没有正确关闭 解决方法: 1.将子线程设置成守护线程 self.your_thread = th ...
- Django Formsets总结
formset是将多个表单用在同一个页面上的抽象层. 我们有: from django import forms class ArticleForm(forms.Form): title=forms. ...
- vue3和ts和vue-cropper 实现图片裁剪预览
Vue-Cropper 是一个基于 Vue.js 的图片裁剪组件库,专为 Web 应用设计.当你在网上搜索的时候发现还有一个叫cropper的库,下面是他们的区别: 二.快速上手 //npm ...