使用 Semantic Kernel 快速對接國產大模型實戰指南(DeepSeek/Qwen/GLM)

文章目錄

  • 使用 Semantic Kernel 快速對接國產大模型實戰指南(DeepSeek/Qwen/GLM)
    • 一、引言
    • 二、環境準備
      • 2.1 開發環境
      • 2.2 模型服務配置
    • 三、核心代碼實現
      • 3.1 會話代碼封裝
      • 3.2 CurModelContext封裝
      • 3.3 DeepSeek對接示例
      • 3.4 Qwen對接示例
      • 3.5 GLM對接示例
    • 四、常見問題排查
    • 五、總結

使用 Semantic Kernel 快速對接國產大模型實戰指南(DeepSeek/Qwen/GLM)

一、引言

在人工智能應用開發中,統一對接不同大模型的能力至關重要。微軟推出的 Semantic Kernel 作為優秀的 AI 編排框架,能夠幫助我們快速對接各類大模型。本文將手把手教你如何使用 Semantic Kernel 對接國內三大主流模型:DeepSeek、通義千問(Qwen)和智譜AI(GLM),并提供可運行的代碼示例。文末提供完整代碼示例和注意事項。


二、環境準備

2.1 開發環境

? .NET 6+ SDK

? Visual Studio 2022

? NuGet包:

 ```bashdotnet add package Microsoft.SemanticKernel```

2.2 模型服務配置

模型接口地址示例API Key獲取方式
DeepSeekhttps://api.deepseek.com/v1DeepSeek平臺申請(需充值)
Qwenhttps://api.siliconflow.cn/SiliconCloud平臺申請(有免費額度)
GLMhttps://open.bigmodel.cn/api/paas/v4/chat/completions智譜AI開放平臺申請(有免費模型)

三、核心代碼實現

下述內容封裝兩種對話交互模式,采用統一的接口設計:

  • 非流式輸出:完整獲取響應后一次性輸出

  • 流式輸出:實時輸出響應片段,提升交互體驗

注:兩種模式都提供了對話歷史管理機制,確保多輪對話上下文連貫性。

3.1 會話代碼封裝

/// <summary>
/// 統一對話管理(非流式)
/// </summary>
/// <param name="kernel"></param>
/// <returns></returns>
private async Task StartChatSession(Kernel kernel)
{var chatService = kernel.GetRequiredService<IChatCompletionService>();var history = new ChatHistory();while (true){Console.Write("用戶 > ");var input = Console.ReadLine();history.AddUserMessage(input);var response = await chatService.GetChatMessageContentAsync(history);Console.WriteLine($"助手 > {response.Content}");history.AddAssistantMessage(response.Content);}
}/// <summary>
/// 統一對話管理(流式輸出)
/// </summary>
/// <param name="kernel"></param>
/// <returns></returns>
private async Task StartStreamingChatSession(Kernel kernel)
{var chatService = kernel.GetRequiredService<IChatCompletionService>();var history = new ChatHistory();while (true){///獲取用戶輸入Console.Write("用戶 > ");var input = Console.ReadLine();//將用戶輸入添加到歷史記錄history.AddUserMessage(input);//獲取流式響應var response = chatService.GetStreamingChatMessageContentsAsync(chatHistory: history,kernel: kernel);Console.WriteLine($"助手 > ");string resStr = "";//輸出流式響應await foreach (var chunk in response){resStr += chunk;//拼接聊天記錄Console.Write(chunk);}//將完整的響應添加到歷史記錄history.AddAssistantMessage(resStr);//輸出換行Console.WriteLine();}
}

3.2 CurModelContext封裝

將要獲取的模型,按如下方式封裝,也可直接寫死在代碼中,其中“sk-xx”和“Model”按需替換實際使用的key和模型。

/// <summary>
/// 全局參數
/// </summary>
public class Global
{/// <summary>/// 獲取模型配置/// </summary>public static ModelConfig CurModelContext(string model){switch (model){case "glm-4-flash":return new ModelConfig{Model = "glm-4-flash",EndpointKey = "https://open.bigmodel.cn/api/paas/v4",ApiKey = "sk-xxx"};case "glm-z1-flash":return new ModelConfig{Model = "glm-z1-flash",EndpointKey = "https://open.bigmodel.cn/api/paas/v4",ApiKey = "sk-xxx"};case "Qwen/Qwen2.5-72B-Instruct":return new ModelConfig{Model = "Qwen/Qwen2.5-72B-Instruct",EndpointKey = "https://api.siliconflow.cn",ApiKey = "sk-xxx"};case "deepseek-chat":return new ModelConfig{Model = "deepseek-chat",EndpointKey = "https://api.deepseek.com/v1",ApiKey = "sk-xxx"};case "deepseek-reasoner":return new ModelConfig{Model = "deepseek-reasoner",EndpointKey = "https://api.deepseek.com/v1",ApiKey = "sk-xxx"};default:break;}return null;}
}

3.3 DeepSeek對接示例

var modelConfig = Global.CurModelContext("deepseek-chat");// 1. 填充OpenAI格式LLM調用參數值
var modelId = modelConfig.Model;
var endpoint = modelConfig.EndpointKey;
var apiKey = modelConfig.ApiKey;// 2. 創建一個OpenAI聊天完成的內核
var builder = Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId,new Uri(endpoint),apiKey);// 4.構建內核
Kernel kernel = builder.Build();//5. 對話功能(流式)
await StartStreamingChatSession(kernel);//6. 對話功能(非流式)
//await StartChatSession(kernel);

在這里插入圖片描述

3.4 Qwen對接示例

var modelConfig = Global.CurModelContext("Qwen/Qwen2.5-72B-Instruct");
// 1. 填充OpenAI格式LLM調用參數值
var modelId = modelConfig.Model;
var endpoint = modelConfig.EndpointKey;
var apiKey = modelConfig.ApiKey;// 2. 創建一個OpenAI聊天完成的內核
var builder = Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId,new Uri(endpoint),apiKey);// 4.構建內核
Kernel kernel = builder.Build();//5. 對話功能(流式)
await StartStreamingChatSession(kernel);//6. 對話功能(非流式)
//await StartChatSession(kernel);

在這里插入圖片描述


3.5 GLM對接示例

var modelConfig = Global.CurModelContext("glm-4-flash");// 1. 填充OpenAI格式LLM調用參數值
var modelId = modelConfig.Model;
var endpoint = modelConfig.EndpointKey;
var apiKey = modelConfig.ApiKey;// 2. 創建一個OpenAI聊天完成的內核
var builder = Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId,new Uri(endpoint),apiKey);// 4.構建內核
Kernel kernel = builder.Build();//5. 對話功能(流式)
await StartStreamingChatSession(kernel);
//6. 對話功能(非流式)
//await StartChatSession(kernel);

在這里插入圖片描述
在這里插入圖片描述


四、常見問題排查

  • 401 鑒權失敗

    • 檢查 API Key 有效性
    • 確認密鑰傳遞方式符合平臺要求
  • 模型響應超時

    • 檢查網絡連通性

    • 確認 endpoint 配置正確

  • 輸出格式異常

    • 調整 temperature 參數

    • 檢查 max_tokens 限制

五、總結

通過 Semantic Kernel 的統一接口,開發者可以快速實現國內主流大模型的集成。建議根據實際需求選擇模型,并充分利用SK的插件系統、記憶機制和工具調用特性構建企業級AI應用。

  • 優先選用兼容 OpenAI 格式的模型
  • 對于特殊接口的模型需實現自定義OpenAI 格式封裝

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/78587.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78587.shtml
英文地址,請注明出處:http://en.pswp.cn/web/78587.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ai時代,運維人如何轉型

在AI時代,傳統運維向智能運維(AIOps)的轉型需要系統性重塑,以下是深度拆解的轉型路線圖和關鍵實施要素: 一、認知升級范式轉變 1. 演進路線模型(三階段) 被動響應階段:人工巡檢(→監控覆蓋率<30%)主動防御階段:規則引擎(→告警準確率70%~85%)預測自治階段:深…

windows鼠標按鍵自定義任意設置

因為用慣了Linux的鼠標中鍵的復制黏貼&#xff0c;發現windows下有完全可以實現類似自定義功能的軟件&#xff0c;推薦一下&#xff1a; X Mouse Button Control。 免費版足夠好用。 軟件簡介&#xff1a; X Mouse Button Control是一款專業的重新映射鼠標按鈕的軟件工具&…

怎么看戶型好不好?

看房型好不好可從以下方面判斷&#xff1a; 空間布局 方正性&#xff1a;戶型方正為佳 &#xff0c;此時進深與開間比例在1:1.5左右。方正戶型空間利用率高&#xff0c;無采光死角。如手槍型、鋸齒型等異形戶型&#xff0c;易有拐角、長過道&#xff0c;空間浪費大。動靜分區…

基于WOA鯨魚優化TCN-BiGRU注意力機制網絡模型的時間序列預測算法matlab仿真

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 5.算法完整程序工程 1.算法運行效果圖預覽 (完整程序運行后無水印) 2.算法運行軟件版本 matlab2022a/matlab2024b 3.部分核心程序 &#xff08;完整版代碼包含詳細中文注釋和操作步驟視頻…

JAVA簡單走進AI世界~Spring AI

1、背景 現代 AI 正以前所未有的速度改變著世界。它是基于復雜算法和強大計算能力的技術體系,涵蓋了機器學習、深度學習、自然語言處理等多個領域。 在日常生活中,AI 廣泛應用于智能語音助手、圖像識別、推薦系統等。比如,智能音箱能理解并回應語音指令,為人們提供信息查…

stm32wb55rg (4) 啟用usart串口

code repo: 訪問gitee 上節課成功點亮了LED&#xff0c;這次來把usart 用起來&#xff0c;畢竟有交互才是系統。 技術準備 首先查看手冊&#xff0c;發現mcu有1個usart和1個 lpuart。 usart 的使用需要兩個pin&#xff0c;一個接收一個發送。繼續查看pin and ball definition…

Python生活手冊-NumPy數組創建:從快遞分揀到智能家居的數據容器

一、快遞分揀系統&#xff08;列表/元組轉換&#xff09; 1. 快遞單號錄入&#xff08;np.array()&#xff09; import numpy as np快遞單號入庫系統 快遞單列表 ["SF123", "JD456", "EMS789"] 快遞數組 np.array(快遞單列表) print(f"…

數據庫-數據類型,表的約束和基本查詢操作

一、數值類型 1. 整數類型 類型字節有符號范圍無符號范圍操作注意事項TINYINT1-128 ~ 1270 ~ 255默認有符號&#xff0c;UNSIGNED定義無符號SMALLINT2-32768 ~ 327670 ~ 65535無符號需顯式聲明INT4-2^31 ~ 2^31-10 ~ 2^32-1推薦優先使用INTBIGINT8-2^63 ~ 2^63-10 ~ 2^64-1存…

【C語言編譯】編譯原理和詳細過程

文章目錄 1. C 語言編譯原理和詳細過程1.1 預處理階段1.2 編譯階段1.3 匯編階段1.4 鏈接階段 2. 疑問點解析2.1 三地址碼是什么&#xff1f;有什么作用2.2 符號表是什么&#xff1f;有何作用2.3 重定位的含義與作用2.3 符號表和重定位在整個編譯過程中的作用2.4 動態鏈接庫.so和…

游戲引擎學習第251天:完成調試層級結構

運行游戲&#xff0c;查看當前調試層級的狀態。 我們正在直播中開發一個完整的游戲&#xff0c;目前正進行調試代碼的整理和清理工作。現在我們直接進入正題&#xff0c;雖然還不完全確定今天要完成哪些具體內容&#xff0c;但有幾個明確的目標&#xff1a; 首先&#xff0c;…

關于Python:9. 深入理解Python運行機制

一、Python內存管理&#xff08;引用計數、垃圾回收&#xff09; Python&#xff08;CPython&#xff09;采用的是&#xff1a; “引用計數為主&#xff0c;垃圾回收為輔” 的內存管理機制。 也就是說&#xff1a; 引用計數機制&#xff1a;負責大部分內存釋放&#xff0c;簡…

【STM32單片機】#13 RTC實時時鐘

主要參考學習資料&#xff1a; B站江協科技 STM32入門教程-2023版 細致講解 中文字幕 開發資料下載鏈接&#xff1a;https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 單片機套裝&#xff1a;STM32F103C8T6開發板單片機C6T6核心板 實驗板最小系統板套件科協 目錄 Uni…

SecureCRT 使用指南:安裝、設置與高效操作

目錄 一、SecureCRT 簡介 1.1 什么是 SecureCRT&#xff1f; 1.2 核心功能亮點 1.3 軟件特點 二、SecureCRT 安裝與激活 2.1 安裝步驟&#xff08;Windows 系統&#xff09; 2.2 激活與破解&#xff08;僅供學習參考&#xff09; 三、基礎配置與優化 3.1 界面與編碼設…

3.5/Q1,GBD數據庫最新一區文章解讀

文章題目&#xff1a;Global burden of low vision and blindness due to age-related macular degeneration from 1990 to 2021 and projections for 2050 DOI&#xff1a;10.1186/s12889-024-21047-x 中文標題&#xff1a;1990年至2021年因年齡相關性黃斑變性導致的低視力和失…

【Hive入門】Hive安全管理與權限控制:基于SQL標準的授權GRANT REVOKE深度解析

目錄 引言 1 Hive權限模型概述 2 SQL標準授權基礎 2.1 核心概念解析 2.2 授權模型工作流程 3 GRANT/REVOKE語法詳解 3.1 基礎授權語法 3.2 權限回收語法 3.3 參數說明 4 授權場景 4.1 基礎授權示例 4.2 列級權限控制 4.3 視圖權限管理 5 權限查詢與驗證 5.1 查看…

無縫監控:利用 AWS X-Ray 增強 S3 跨賬戶復制的可見性

您準備好提升您的云和 DevOps 技能了嗎? ??《云原生devops》專門為您打造,我們精心打造的 30 篇文章庫,這些文章涵蓋了 Azure、AWS 和 DevOps 方法論的眾多重要主題。無論您是希望精進專業知識的資深專業人士,還是渴望學習相關知識的新手,這套資源庫都能滿足您的需求。 …

Python Cookbook-7.2 使用 pickle 和 cPickle 模塊序列化數據

任務 你想以某種可以接受的速度序列化和重建Python 數據結構&#xff0c;這些數據既包括基本Python 對象也包括類和實例。 解決方案 如果你不想假設你的數據完全由基本 Python 對象組成&#xff0c;或者需要在不同的 Python 版本之間移植&#xff0c;再或者需要將序列化后的…

2025.5.5總結

今日感悟&#xff1a;這假期就這樣結束了&#xff0c;玩了一次滑板&#xff0c;打掃了一次租房&#xff0c;出去逛了一次街&#xff0c;看完了一本書&#xff0c;追了一部劇。既沒有家人&#xff0c;也沒有能一同暢飲的同學&#xff0c;更沒有對象&#xff0c;顯得確實有些孤獨…

MySQL | DQL語句-連接查詢

MySQL | DQL語句-連接查詢 &#x1fa84;個人博客&#xff1a;https://vite.xingji.fun 什么是連接查詢 從一張表中查詢數據稱為單表查詢。從兩張或更多張表中聯合查詢數據稱為多表查詢&#xff0c;又叫做連接查詢。什么時候需要使用連接查詢&#xff1f; 比如這樣的需求&…

Vite簡單介紹

Vite 是一個現代化的前端構建工具&#xff0c;由 Vue.js 的創始人 Evan You 開發&#xff0c;旨在提供更快的開發體驗和更高效的構建流程。它的名字來源于法語單詞“vite”&#xff0c;意為“快速”&#xff0c;這也反映了它的核心優勢——極速的冷啟動和熱模塊替換&#xff08…