作者:Jordan Matthiesen
排版:Alan Wang
想要开始 AI 开发,却不确定从哪里入手?我给您带来了一个好消息------我们全新的 AI 聊天 Web 应用模板现已提供预览版!😊 这个模板是我们持续努力的一部分成果,旨在让使用 .NET 进行 AI 开发变得更容易上手,并在 Visual Studio、Visual Studio Code 和 .NET CLI 中提供脚手架和指导。
AI-Template-Preview
请注意,该模板目前为预览版,未来版本可能会根据您的反馈和 AI 的快速发展进行调整。
立即安装模板
如果想要开始使用该模板的首个预览版,您需要在终端中安装 Microsoft.Extensions.AI.Templates。只需运行:
csharp
dotnet new install Microsoft.Extensions.AI.Templates
安装完成后,该模板即可在 Visual Studio、Visual Studio Code(需安装 C# Dev Kit) 中使用,或者您也可以在工作目录中运行命令 dotnet new aichatweb
来创建它。
入门指南:.NET AI 聊天模板
.NET AI 聊天模板旨在帮助您快速构建一个基于 AI 的聊天应用,与自定义数据进行对话。此次首个版本注重基于 Blazor 的 Web 应用,并使用 Microsoft.Extensions.AI 和 Microsoft.Extensions.VectorData 抽象库构建。该模板采用了常见的检索增强生成(RAG)模式,用于聊天应用开发。
关键功能和配置选项
-
与自定义数据聊天:该模板允许您创建基于聊天的 UI,并使用 RAG 模式与示例 PDF 或您的自定义数据进行交互。
-
本地与 Azure 集成:支持本地向量存储以进行原型开发,同时也支持 Azure AI Search 以实现更高级的配置。
-
可自定义代码:生成的代码包含用于聊天交互、引用追踪和后续建议的 UI 组件,您可以根据需要自定义或移除这些组件。
-
数据提取:模板包含数据提取、缓存和处理的代码,使您能够处理各种数据源和格式。
在 Visual Studio 中使用模板
通过命令行安装模板后,您可以在 Visual Studio 中通过文件 > 新建 > 项目菜单找到该模板。您可以搜索 AI Chat,或选择 AI 项目类型来查找该模板。

选择项目名称和存储位置后,您可以选择一个 AI 模型提供商和向量存储来开始使用。默认情况下,我们使用 GitHub Models 搭配本地向量存储,这是最简单的入门方式,几乎无需额外设置。
您可以从 .NET AI 模板文档中了解每个选项。
使用 Visual Studio Code 和 C# Dev Kit
要在 Visual Studio Code 中使用模板,请先安装 C# Dev Kit 扩展。然后,使用 .NET:New Project... 命令创建新项目:
默认情况下,这将使用 GitHub Models 模型提供商和本地向量存储创建一个新项目。您可以从 .NET AI 模板文档中了解更多选项。
与自定义数据聊天
此模板包含两个示例 PDF 文件,并提供数据提取代码来处理这些 PDF。此数据提取代码非常灵活,因此您可以替换示例 PDF。要使用您自己的数据,请执行以下操作:
-
如果项目正在运行,请停止它。
-
从 /wwwroot/Data 文件夹中移除示例 PDF 文件。
-
将您自己的 PDF 文件添加到 /wwwroot/Data 文件夹。
-
再次运行应用程序。
在应用程序启动时,数据提取代码(位于 /Services/Ingestion/DataIngestor.cs)将比较 Data 文件夹的内容;它会从配置的向量存储中删除旧文件,并添加新文件。注意:根据文件的数量和大小,您可能会遇到配置的 AI 模型提供程序的配额和速率限制。当达到限制时,您可能会看到错误消息,或在应用程序启动时出现较长的延迟。有关故障排除的帮助,请参阅 AI 模板文档。
扩展聊天机器人的行为
该代码使用 Microsoft.Extensions.AI 构建,这使得插入自定义行为变得非常简单。您可以授予聊天机器人调用任何 C# 函数的权限。这可以扩展其功能,包括检索其他数据或采取行动。
作为一个非常简单的示例,您可以尝试授予它访问"天气"数据的权限。在 Pages/Chat/Chat.razor 中,在 @code 块中定义一个 C# 函数:
csharp
private async Task<string> GetWeather([Description("The city, correctly capitalized")] string city)
{
string[] weatherValues = ["Sunny", "Cloudy", "Rainy", "Snowy", "Balmy", "Bracing"];
return city == "London" ? "Drizzle" : weatherValues[Random.Shared.Next(weatherValues.Length)];
}
然后,在 OnInitialized 方法中,更新 chatOptions.Tools 以包含您的方法:
csharp
chatOptions.Tools =
[
AIFunctionFactory.Create(SearchAsync),
AIFunctionFactory.Create(GetWeather)
];
现在尝试在 GetWeather 方法中设置断点,并向聊天机器人询问天气。您会发现它会调用您的方法,并在回答中使用结果。
您可以使用此方法从外部系统检索任何信息,包括通过异步调用。请记住,从 LLM 传入的参数应被视为不可信的输入。
查看实际效果
查看最新一期的 .NET AI Community Standup,在这期节目中,Alex、Bruno 和 Jordan 将概述全新的模板!
.NET AI Community Standup
未来展望 -- 分享您的想法
在未来的版本中,我们计划扩展模板库,新增 AI 控制台模板、Minimal API 模板,支持 .NET Aspire,并将这些模板默认包含在 .NET SDK 中。我们还将探索对 Azure AI Foundry 的支持,并与 Semantic Kernel 团队合作,为 Semantic Kernel 用户扩展模板选项。
我们希望听取您的反馈,帮助改进这些模板。请分享您关于模板的看法------哪些方面对您有用,以及您希望看到哪些改变!
感谢您,并祝您编码愉快!