没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:龚雪|2025-05-20 09:55:02.950|阅读 46 次
概述:本文介绍如何用DevExpress Blazor的AI聊天组件构建一个大型语言模型聊天应用程序,欢迎下载最新版体验!
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生Blazor UI组件(包括Pivot Grid、调度程序、图表、数据编辑器和报表等)。
AI服务提供各种量身定制的模型来满足用户需求、偏好和资源限制,模型有优点和缺点——有些是为编码任务而优化的,而另一些则更适合于创造性写作或实时信息检索。
为了选择合适的模型,您通常需要平衡性能和成本。例如,像GPT-4.1这样的高级模型可以提供出色的结果,但需要更多的计算资源。相比之下,GPT-4.1 Mini或Nano等较轻的模型提供更快的响应速度和更低的成本,使其成为追求效率和响应能力的理想选择。
对于企业应用程序来说,连接到基于云的AI服务能力——可以选择回退到在受限环境中运行的离线模型,这通常是必须的。
DevExpress技术交流群11:749942875 欢迎一起进群讨论
在这篇文章中,我们将向您展示如何使用DevExpress Blazor AI Chat和ComboBox组件构建一个多llm(大型语言模型)聊天应用程序,您将学习如何实现IChatClient接口来管理多个聊天客户端及其各自的会话历史(以及如何使用DevExpress Blazor ComboBox在聊天会话期间切换llm)。
要开始您必须首先将DxAIChat组件集成到应用程序中(有关这方面的其他信息,请参阅官方指南):。
在本指南中,我们将使用两个LLMs: 来自Azure OpenAI的GPT-4o和来自Ollama的本地运行的Phi4。
以下是从Program.cs代码单元中为两个聊天客户端注册的示例,请注意,我们将LLM凭据和设置存储在应用程序配置文件(appSettings.Development.json)中,您可以修改以下代码来满足具体要求:
using Azure; using Azure.AI.OpenAI; using Microsoft.Extensions.AI; ... var openAiServiceSettings = builder.Configuration.GetSection("OpenAISettings").Get<OpenAIServiceSettings>(); var ollamaSettings = builder.Configuration.GetSection("OllamaSettings").Get<OllamaSettings>(); IChatClient azureChatClient = new AzureOpenAIClient( new Uri(openAiServiceSettings.Endpoint), new AzureKeyCredential(openAiServiceSettings.Key)) .AsChatClient(openAiServiceSettings.DeploymentName); IChatClient ollamaChatClient = new OllamaChatClient( new Uri(ollamaSettings.Uri), ollamaSettings.ModelName);
注意:要安装、运行和下载Ollama模型,请参考帮助主题。
接下来,我们将实现用于跟踪每个客户端及其历史记录的基础设施。
首先,声明代表单个LLM会话的ChatClientSession类(包括用户友好的模型/服务名称,客户端实例和消息历史):
using Microsoft.Extensions.AI; //... public class ChatClientSession { public string Name { get; set; } public IChatClient Client { get; } public List<BlazorChatMessage> Messages { get; set; } public ChatClientSession(IChatClient client, string name) { Name = name; Client = client ?? throw new ArgumentNullException(nameof(client)); Messages = new List<BlazorChatMessage>(); } }
接下来,定义CompositeChatClient类,该类实现了IChatClient接口,并充当多个聊天客户端的容器。通过在单个接口实现中封装多个客户端,可以将此功能与DevExpress Blazor AI Chat组件(依赖于IChatClient接口)集成。
该类旨在支持LLM切换,同时保留个人对话历史。主要考虑因素包括:
下面是实现:
using Microsoft.Extensions.AI; //... public class CompositeChatClient : IChatClient { public List<ChatClientSession> AvailableChatClients { get; } public ChatClientSession? SelectedSession { get; set; } public CompositeChatClient(params ChatClientSession[] chatClients) { AvailableChatClients = chatClients.ToList(); SelectedSession = AvailableChatClients[0]; } public Task<ChatResponse> GetResponseAsync(IEnumerable<ChatMessage> messages, ChatOptions? options = null, CancellationToken cancellationToken = new CancellationToken()) { return SelectedSession?.Client.GetResponseAsync(messages, options, cancellationToken); } public IAsyncEnumerable<ChatResponseUpdate> GetStreamingResponseAsync(IEnumerable<ChatMessage> messages, ChatOptions? options = null, CancellationToken cancellationToken = new CancellationToken()) { return SelectedSession?.Client.GetStreamingResponseAsync(messages, options, cancellationToken); } public void Dispose() { for (int i = 0; i < AvailableChatClients.Count; i++) { AvailableChatClients[i].Client.Dispose(); AvailableChatClients[i].Messages.Clear(); } } public object? GetService(Type serviceType, object? serviceKey = null) { throw new NotImplementedException(); } }
最后,切换回Program.cs并注册CompositeChatClient,如下所示:
// Register both clients within a single instance of the IChatClient var compositeChatClient = new CompositeChatClient( new ChatClientSession(azureChatClient, "Azure Open AI — GPT4o"), new ChatClientSession(ollamaChatClient, "Ollama — Phi 4")); builder.Services.AddScoped<IChatClient>((provider) => compositeChatClient); builder.Services.AddDevExpressAI();
为了允许LLM选择,使用DxAIChat组件打开razor页面,并添加DevExpress Blazor ComboBox。主要考虑因素包括:
下面是实现的一个片段:
@page "/" @using DevExpress.AIIntegration.Blazor.Chat @using DXBlazorChatSelector.Services @using Microsoft.Extensions.AI <div class="main-container"> <div class="top-container"> <DxComboBox Data="@ModelsList" CssClass="selector-container-combo-editor" TextFieldName="@nameof(ChatClientSession.Name)" Value="ChatClientProvider.SelectedSession" ValueChanged="@((ChatClientSession session) => OnModelChanged(session))"/> </div> <DxAIChat @ref="DxAiChat" CssClass="my-chat"></DxAIChat> </div> @code{ [Inject] IChatClient? ChatClient { get; set; } CompositeChatClient ChatClientProvider => ChatClient as CompositeChatClient; DxAIChat? DxAiChat { get; set; } List<ChatClientSession> ModelsList => ChatClientProvider?.AvailableChatClients; private void OnModelChanged(ChatClientSession value) { SaveLastAssistantMessage(DxAiChat.SaveMessages()); ChatClientProvider.SelectedSession = value; DxAiChat.LoadMessages(ChatClientProvider.SelectedSession.Messages); } private void SaveLastAssistantMessage(IEnumerable<BlazorChatMessage> saveMessages) { if(ChatClientProvider.SelectedSession != null) { ChatClientProvider.SelectedSession.Messages.Clear(); ChatClientProvider.SelectedSession.Messages.AddRange(saveMessages); } } }
要清除所选LLM的消息历史记录并开始新的聊天会话,我们将添加DxButton并将其放置在Index.razor页面中的DxComboBox附近。主要考虑因素包括:
更新后的Index.razor页面代码:
@page "/" @using DevExpress.AIIntegration.Blazor.Chat @using DXBlazorChatSelector.Services @using Microsoft.Extensions.AI <div class="main-container"> <div class="top-container"> <DxButton RenderStyle="ButtonRenderStyle.Primary" RenderStyleMode="ButtonRenderStyleMode.Contained" IconCssClass="refresh" IconPosition="ButtonIconPosition.BeforeText" CssClass="refresh-button" Text="Start New Chat" Click="ClearHistory"/> <DxComboBox Data="@ModelsList" CssClass="selector-container-combo-editor" TextFieldName="@nameof(ChatClientSession.Name)" Value="ChatClientProvider.SelectedSession" ValueChanged="@((ChatClientSession session) => OnModelChanged(session))"/> </div> <DxAIChat @ref="DxAiChat" CssClass="my-chat"></DxAIChat> </div> @code{ [Inject] IChatClient? ChatClient { get; set; } CompositeChatClient ChatClientProvider => ChatClient as CompositeChatClient; DxAIChat? DxAiChat { get; set; } List<ChatClientSession> ModelsList => ChatClientProvider?.AvailableChatClients; private void ClearHistory() { ChatClientProvider.SelectedSession.Messages.Clear(); DxAiChat.LoadMessages(ChatClientProvider.SelectedSession.Messages); } private void OnModelChanged(ChatClientSession value) { SaveLastAssistantMessage(DxAiChat.SaveMessages()); ChatClientProvider.SelectedSession = value; DxAiChat.LoadMessages(ChatClientProvider.SelectedSession.Messages); } private void SaveLastAssistantMessage(IEnumerable<BlazorChatMessage> saveMessages) { if(ChatClientProvider.SelectedSession != null) { ChatClientProvider.SelectedSession.Messages.Clear(); ChatClientProvider.SelectedSession.Messages.AddRange(saveMessages); } } }
下面图片展示了我们的实现:
更多产品资讯及授权,欢迎来电咨询:023-68661681
慧都是⼀家⾏业数字化解决⽅案公司,专注于软件、⽯油与⼯业领域,以深⼊的业务理解和⾏业经验,帮助企业实现智能化转型与持续竞争优势。
慧都科技是DevExpress的中国区的合作伙伴,DevExpress作为用户界面领域的优秀产品,帮助企业高效构建权限管理、数据可视化(如网格/图表/仪表盘)、跨平台系统(WinForms/ASP.NET/.NET MAUI)及行业定制解决方案,加速开发并强化交互体验。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@dpuzeg.cn
文章转载自:慧都网可视化项目时间线对于有效规划和跟踪至关重要。在本篇教程中,您将学习如何使用 C# 在 Excel 中创建组合图,只需几行代码,即可自动生成动态、美观的组合图。
本文将为大家介绍DevExpress XAF将.NET Aspire集成到Blazor项目中后如何实现数据库依赖,欢迎下载最新版组件体验!
FP3 文件是使用流行的报表生成工具FastReport创建的报表。这种格式广泛用于存储可立即查看的报表数据,这些数据可以轻松共享或保存以供日后分析。但是,要打开和查看此类文件,需要一个特殊的程序——FastReport Viewer。
邮件合并功能让您能够轻松批量创建个性化文档,例如信函、电子邮件、发票或证书。在本文中,我们将向您展示如何使用 C# 从 Excel 执行邮件合并。
优秀的界面控件开发包,帮助企业构建卓越应用!
DevExpress DXperience Subscription高性价比的企业级.NET用户界面套包,助力企业创建卓越应用!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@dpuzeg.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢