第2系列_第2期_.NET C# 多AI Provider统一接入方案_工厂模式实战
.NET C# Kernel 构建实战:多AI提供商统一接入方案系列:.NET C# Semantic Kernel 集成深度解析 ②/6难度:⭐⭐⭐(进阶源码,需.NET基础)源码仓库:github.com/zongge0812/zonggeAgent适用环境:.NET 9.0 + WPF一、引言一个桌面AI工作台要支持多个AI模型,最直接的挑战是:每个AI提供商的API签名、认证方式、连接器都不相同。对接方式问题直接硬编码每新增一个模型就要改一遍调用代码if-else 分支6个Provider → 6个分支 → 代码膨胀不可维护各自对接流式/非流式逻辑重复实现本项目的方案是工厂模式 + 模板方法模式的组合:┌──────────────────────────────────────────────────────────────┐ │ IAIProviderService(接口契约:统一 SendMessageAsync) │ │ ↑ implements │ │ BaseAIProviderService(抽象基类:模板方法定义骨架) │ │ ↑ extends │ │ DeepSeek / OpenAI / Claude / Qwen / Ollama / Custom │ │ │ │ AIProviderFactory(工厂:根据类型返回对应Provider实例) │ │ IAIProviderFactory(工厂接口:CreateProvider + 注册) │ └──────────────────────────────────────────────────────────────┘二、统一接口契约:IAIProviderService先从顶层接口看起。所有Provider都实现同一个接口:// IAIProviderService.cspublicinterfaceIAIProviderService{AIProviderTypeProviderType{get;}stringDisplayName{get;}boolCanHandle(AIProviderConfigconfig);// 非流式调用TaskChatMessageSendMessageAsync(stringuserMessage,ChatHistorychatHistory,AIProviderConfigconfig,CancellationTokencancellationToken=default);TaskChatMessageSendMessageAsync(stringuserMessage,ChatHistorychatHistory,AIProviderConfigconfig,PromptExecutionSettings?executionSettings,CancellationTokencancellationToken=default);// 流式调用(IAsyncEnumerable)IAsyncEnumerableChatMessageSendMessageStreamAsync(stringuserMessage,ChatHistorychatHistory,AIProviderConfigconfig,CancellationTokencancellationToken=default);IAsyncEnumerableChatMessageSendMessageStreamAsync(stringuserMessage,ChatHistorychatHistory,AIProviderConfigconfig,PromptExecutionSettings?executionSettings,CancellationTokencancellationToken=default);}设计要点:设计决策理由流式与非流式各提供2个重载一个使用默认ExecutionSettings,一个支持自定义配置参数传递AIProviderConfig统一配置对象包含 BaseUrl、ApiKey、ModelId、MaxTokens、Temperature返回ChatMessage(自定义模型)避免直接暴露SK的ChatMessageContent,解耦外部依赖三、工厂模式:AIProviderFactory工厂类的完整源码已在第①期提及,这里做逐行拆解:3.1 工厂接口publicinterfaceIAIProviderFactory{IAIProviderService?CreateProvider(AIProviderTypeproviderType);IAIProviderService?CreateProvider(AIProviderConfigconfig);IReadOnlyListIAIProviderServiceGetAvailableProviders();}三个方法的定位很清晰:方法用途适用场景CreateProvider(AIProviderType)按枚举类型创建用户在UI下拉菜单选择了"DeepSeek"CreateProvider(AIProviderConfig)按配置自动匹配从配置文件读取provider配置GetAvailableProviders()获取所有可用Provider列表UI展示可用模型列表3.2 工厂实现// AIProviderFactory.cspublicclassAIProviderFactory:IAIProviderFactory{private

相关新闻

Replit 代码输出接近翻三倍,审查时间与事故率保持平稳

Replit 代码输出接近翻三倍,审查时间与事故率保持平稳

在工程管理者的长期经验里,提升代码交付量几乎必然带来审查队列堆积、回退风险上升和生产事故增加。这被视为团队规模化时无法回避的权衡代价。 Replit 过去六个月的内部数据却呈现出截然不同的结果:工程师代码输出接近翻三倍,代码审查延迟保…

2026/7/24 3:10:28 阅读更多 →
2026正阶速拧主力选手技术解析与竞技格局展望

2026正阶速拧主力选手技术解析与竞技格局展望

正阶速拧主力介绍(截至2026.7.7) 在魔方竞速领域,正阶速拧(通常指三阶、四阶、五阶等标准魔方)一直是核心项目。随着技术发展和选手迭代,主力选手阵容和他们的技术特点也在不断变化。本文将系统梳理截至202…

2026/7/23 9:23:11 阅读更多 →
2024-2026主流魔方速拧选购指南:磁力可调与轻量化趋势解析

2024-2026主流魔方速拧选购指南:磁力可调与轻量化趋势解析

这次我们来看一个关于魔方速拧的实用指南。如果你正在寻找当前主流的正阶魔方速拧主力魔方推荐,这篇文章会直接告诉你哪些型号值得关注、各自的性能特点、适合什么水平的玩家,以及如何根据预算和需求选择。从2024年到2026年7月,魔方市场有几个…

2026/7/24 4:35:49 阅读更多 →

最新新闻

AI Agent研究现状与未来发展方向

AI Agent研究现状与未来发展方向

1. 研究生搞agent还有搞头吗?最近实验室里几个师弟师妹都在纠结同一个问题:现在搞AI agent方向的研究还有没有前途?作为过来人,我特别理解这种焦虑。去年我毕业时也面临同样的困惑,经过一年在工业界的摸爬滚打&#xf…

2026/7/24 8:56:56 阅读更多 →
C++集合运算实战:从彩票摇奖题看模式匹配与数据结构选型

C++集合运算实战:从彩票摇奖题看模式匹配与数据结构选型

1. 项目概述:从一道题看编程的实战价值 最近在洛谷上刷题,又碰到了P2550这道“彩票摇奖”。说实话,第一次看到这个标题,很多人可能会觉得这不过是个简单的模拟题,无非是开奖、对奖、算奖金等级。但如果你真的动手去实现…

2026/7/24 8:56:56 阅读更多 →
企业该怎么做双软评估(要求/材料/流程)?

企业该怎么做双软评估(要求/材料/流程)?

双软评估并非单一证书,而是包含“软件产品评估”与“软件企业评估”两个独立环节。通常建议企业先完成产品评估,再申请企业评估。根据江苏省及苏州市2026年最新政策,软件产品评估已实行全流程无纸化(仅需线上申报)&…

2026/7/24 8:56:56 阅读更多 →
新能源并网 T 型三电平逆变器故障穿越与电能质量优化控制(Simulink仿真实现)

新能源并网 T 型三电平逆变器故障穿越与电能质量优化控制(Simulink仿真实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

2026/7/24 8:56:56 阅读更多 →
DeepSeek    LeetCode 3699. 锯齿形数组的总数 I Go实现

DeepSeek LeetCode 3699. 锯齿形数组的总数 I Go实现

go package mainfunc zigZagArrays(n int, l int, r int) int {const MOD int64 1_000_000_007m : r - l 1if n 1 {return m}// up[i]: 以值 i 结尾,且最后一步为上升的方案数// down[i]: 以值 i 结尾,且最后一步为下降的方案数up : make([]int64, m)…

2026/7/24 8:56:56 阅读更多 →
UVM验证中集成C++动态库:突破SystemVerilog局限,提升验证效率

UVM验证中集成C++动态库:突破SystemVerilog局限,提升验证效率

1. 项目概述:为什么要在UVM里引入C和动态链接库?在芯片验证领域,UVM(Universal Verification Methodology)是当之无愧的黄金标准。它基于SystemVerilog,提供了一套完整的验证框架,从激励生成到覆…

2026/7/24 8:55:56 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻