第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/10/20 18:14:01 阅读更多 →
2026正阶速拧主力选手技术解析与竞技格局展望

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

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

2026/10/19 21:47:02 阅读更多 →
2024-2026主流魔方速拧选购指南:磁力可调与轻量化趋势解析

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

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

2026/10/19 23:17:47 阅读更多 →

最新新闻

项目进度管理:资源优化与进度压缩方法及适用场景

项目进度管理:资源优化与进度压缩方法及适用场景

1、概述在项目进度管理中,资源优化解决的是“资源够不够、分配均不均匀”的问题,进度压缩解决的是“工期能不能再缩短”的问题。2、资源优化资源优化主要有两种:资源平衡和资源平滑。方法核心做法对工期影响适用场景资源平衡根据资源约束调整…

2026/10/21 2:27:54 阅读更多 →
C# 入门周记

C# 入门周记

1. 环境搭建 1.1C#简介 C#(读作“C Sharp”)是一种由微软开发的面向对象的、类型安全的编程语言,作为.NET框架的一部分,它旨在提供一种简洁、现代、面向对象的编程范式。自从2002年首次发布以来,C#经历了多次版本迭代&…

2026/10/21 2:27:54 阅读更多 →
宁波执业律师张娟:离婚时公司股权怎么分——确权、估值与分割的三道关

宁波执业律师张娟:离婚时公司股权怎么分——确权、估值与分割的三道关

结论先行:离婚时公司股权的分割要过三道关——确权、估值、分割。登记在一方名下的股权不等于个人财产,婚内取得及婚内增值部分原则上纳入分割;而分割方式受公司法与章程的双重约束,配偶未必能直接成为股东,折价补偿才…

2026/10/21 2:27:54 阅读更多 →
DINOv3 助力 YOLO26 攻小目标:召回 +6.2pt、参数零增加,收益从哪来、能用在哪

DINOv3 助力 YOLO26 攻小目标:召回 +6.2pt、参数零增加,收益从哪来、能用在哪

DINOv3 助力 YOLO26 攻小目标:召回 6.2pt、参数零增加,收益从哪来、能用在哪 工业质检线上有一个反复被验证的规律:大目标拼框得准,小目标拼检得出。一个 4040 的斑块,模型闭着眼睛也能框出来;可一条两三像…

2026/10/21 2:27:54 阅读更多 →
空中机器人竞赛备赛利器:从仿真平台到真机迁移的完整指南

空中机器人竞赛备赛利器:从仿真平台到真机迁移的完整指南

你们的队伍正在备战大学生机器人竞赛的空中机器人赛项?那大概率已经在真机上经历过几次“心碎时刻”:新调好的四旋翼第二次试飞就炸机,桨叶碎片弹到天花板上,剩下半架飞机只能躺在维修桌上。某高校的A同学跟我讲过,他们…

2026/10/21 2:27:54 阅读更多 →
scrcpy 录屏把码率从 8Mbps 降到 2Mbps,反而不再丢帧

scrcpy 录屏把码率从 8Mbps 降到 2Mbps,反而不再丢帧

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 2:26:53 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →