当前位置: 首页 > news >正文

第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);// 非流式调用Task<ChatMessage>SendMessageAsync(stringuserMessage,ChatHistorychatHistory,AIProviderConfigconfig,CancellationTokencancellationToken=default);Task<ChatMessage>SendMessageAsync(stringuserMessage,ChatHistorychatHistory,AIProviderConfigconfig,PromptExecutionSettings?executionSettings,CancellationTokencancellationToken=default);// 流式调用(IAsyncEnumerable)IAsyncEnumerable<ChatMessage>SendMessageStreamAsync(stringuserMessage,ChatHistorychatHistory,AIProviderConfigconfig,CancellationTokencancellationToken=default);IAsyncEnumerable<ChatMessage>SendMessageStreamAsync(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);IReadOnlyList<IAIProviderService>GetAvailableProviders();}

三个方法的定位很清晰:

方法用途适用场景
CreateProvider(AIProviderType)按枚举类型创建用户在UI下拉菜单选择了"DeepSeek"
CreateProvider(AIProviderConfig)按配置自动匹配从配置文件读取provider配置
GetAvailableProviders()获取所有可用Provider列表UI展示可用模型列表

3.2 工厂实现

// AIProviderFactory.cspublicclassAIProviderFactory:IAIProviderFactory{private
http://www.cnnetsun.cn/news/3466285.html

相关文章:

  • GitHub开源项目日报 · 2026年7月15日 · AI编码代理技能集爆火
  • 中国限定宝可梦魔方:收藏价值与鉴别指南
  • 三步实现手机号码自动定位:高效实用的号码归属地查询系统
  • 别只盯着 Agent 编排,权限与日志才是大模型上线的生死线
  • Claude Code本地部署全指南:Node.js+Git+VS Code三步打通AI编程通路
  • AI编程实战:7天零基础开发三个项目
  • 元初混沌 6G 全域通感一体化体系架构 第一卷三阶 第三十三篇 高频四象扰动失稳边界求解
  • 如何用KMS智能激活工具一键搞定Windows和Office永久激活?新手必看完整指南
  • 用Python自动跑China-PAR模型,10秒算出10年心血管发病风险
  • GMSK跳频通信系统MATLAB/Simulink实时仿真工程(含可部署C代码)
  • 中文短文本分类实战包:CNN模型直接跑垃圾邮件识别和情感分析
  • 每日一个开源项目(第161篇):Open Interpreter - 开源 AI 编程 Agent,用 Rust 重写,支持 Kimi、Qwen、DeepSeek
  • 如何用Win11Debloat实现Windows系统深度优化:架构解析与实战指南
  • 微信小程序开发平台哪家好?功能与性价比对比分析
  • Codex Skills 入门指南:五大核心工程决策模块解析
  • 测试时训练(TTT)深度解析:从测试时自监督学习到 TTT-Linear/TTT-MLP 的表达性记忆序列建模架构
  • AI Agent Harness Engineering:从大模型到智能体的系统工程实践
  • Cython突破Python GIL限制:实现多线程并行计算与性能优化
  • 卡梅德生物技术快报|纳米抗体库:10¹² 级天然噬菌体文库实操全流程:羊驼 VHH 基因扩增与电转化完整记录
  • 安卓逆向工程实战:Apktool解包、Smali修改与APK签名全流程详解
  • 智能检测小目标无人机、飞机、直升机检测数据集、摄像头视频图片检测、低空安防数据集、反无人机数据集小目标检测、无人机检测、飞机检测、直升机检测、低空目标识别、安防目标检测、飞行器检测数据集
  • 不会写代码也能做自动化测试?Skill + AI 帮你搞定重复性工作
  • 计算机毕业设计之jsp智能推荐算法的驾校管理系统
  • 科源制药医药主业筑基,脑机接口与具身智能打开成长空间
  • STM32嵌入式视觉开发:IPL人脸检测实战与资源优化指南
  • 手机全景摄影:低成本实现720度建筑与街景记录
  • Windows任务计划程序实现久坐提醒的简易教程
  • Hugging Face模型转Megatron格式的核心陷阱与验证方法
  • JetBrains IDE集成Luma MCP实现AI视频工程化
  • 三天打鱼两天晒网,用粉笔App怎么拉回进度