iT邦幫忙

2025 iThome 鐵人賽

DAY 20
0
生成式 AI

當 .NET 遇見 AI Agents:用 Semantic Kernel × MCP 打造智慧協作應用系列 第 20

Day 20: 使用 Semantic Kernel 輕鬆為 Agent 換大腦 - 更換 LLM 模型

  • 分享至 

  • xImage
  •  

在 AI Agent 開發的世界裡,選擇正確的大型語言模型(LLM)就像為不同的 Agent 選擇合適的大腦。今天,我們來談談為什麼「輕鬆切換 LLM」是一個關鍵能力,以及 Semantic Kernel 如何讓這件事變得簡單。

為什麼要更換 LLM 模型?

不同的 LLM 模型有不同的特點和優勢,例如有些模型在生成文本方面表現更好,有些模型在理解上下文方面更強,有些模型在特定領域(如醫療、法律)有更深的知識,在實際的環境中,沒有一個 LLM 能完美解決所有問題。也可能因為成本、延遲或其他因素,我們需要根據任務需求靈活切換模型。

成本優化

有些 LLM 模型可能在某些任務上表現優異,但成本較高。透過更換模型,可以在保持性能的同時,降低運行成本。想像一下,你的 AI 客服系統每天處理數萬次對話,如果每次對話都使用最頂級的模型,成本會相當可觀,但如果能針對簡單的 FAQ 使用較便宜的模型,尤其搭配 RAG 時,通常只要在檢索階段使用高階模型,最後生成回答時往往使用較便宜的模型就可以回答的很不錯,此外也可能在複雜問題才升級到高階模型,這時候搭配不同的模型,就能降低營運成本。

效能與速度的取捨

有些模型可能在某些任務上表現優異,但推論速度較慢。透過更換模型,可以在需要快速回應的場景中使用較快的模型,提升使用者體驗。有時候,一個回應速度快的輕量級模型,比一個準確高 1% 但回應緩慢 10% 的頂級模型可能更適合。像是最近許多平台提供了不同程度思考的模型,一般問題或生成任務,可以使用速度優先於思考的模型,而需求深度思考的問題則可以使用更強大的模型。

服務穩定性與備援

在確保系統的高可用性和穩定運行,當某個模型的 API 發生異常或延遲時,可以迅速切換到備用模型,以確保服務不中斷。或是像Azure平台的模型服務是有速率限制的,當流量過大時,可能會遇到 429 的錯誤,這時候就可以切換到其他模型來確保服務不中斷。

法規與合規要求

不同地區可能有不同的資料隱私法規。某些機敏資料可能需要使用可以本地部署的開源模型,而非雲端 API。能夠輕鬆切換 LLM,讓你能快速因應這些需求。

各有所長的專業領域

就像人類有不同的專長,LLM 也是,不同的 LLM 模型在不同領域有不同的專長,例如某些模型在醫療領域表現優異,有些在程式碼生成方面表現優異,有些模型在邏輯推理方面表現突出。根據任務需求選擇最適合的模型,可以提升整體效能。

為什麼輕鬆換 LLM 很重要?

現在我們知道了需要換 LLM 的一些理由,接下來「輕鬆切換」這個能力也很關鍵,不同的 LLM 可能有不同的 API、參數和使用方式,如果每次更換模型都需要重新撰寫大量程式碼,這會大大增加開發和維護的複雜度。輕鬆切換 LLM 可以帶來以下好處:

  1. 靈活應對需求變化:在實際應用中,需求可能會隨時變化。能夠輕鬆切換 LLM,讓開發者能快速調整及測試。

  2. 降低開發成本:如果每次都需要從頭開始整合新的 LLM,將會耗費大量時間和資源。如果透過建立統一的接口和抽象層,可以大幅降低切換成本。

  3. 提升系統穩定性:在某些情況下,特定的 LLM 可能會出現不穩定或性能下降的情況。能夠快速切換到其他模型,可以確保系統的穩定運行。

  4. 促進創新:隨著新模型的推出,開發者可以快速試驗和評估不同的 LLM。

Semantic Kernel:讓切換變得簡單

Semantic Kernel 提供了一個統一的接口來管理和使用不同的 LLM,讓開發者可以輕鬆在不同模型之間切換,無論是 OpenAI、Azure OpenAI、Anthropic、Cohere 還是本地部署的模型,都可以透過相同的方式進行呼叫,而不需要擔心底層的實作細節。

  • 傳統方式(直接調用 OpenAI API):
// 程式碼與 OpenAI 深度耦合
var openAIClient = new OpenAIClient(apiKey);
var response = await openAIClient.ChatCompletions.CreateAsync(
    "gpt-4o",
    new ChatMessage[] { ... }
);
// 如果要換成 gemini 或 Claude,需要大幅修改
  • 使用 Semantic Kernel:
    Semantic Kernel 支援多種 LLM,只需更改配置即可切換模型,商業核心程式碼保持不變。面對不同的平台的模型,semantic kernel 採用獨立套件的方式來支援,像是 OpenAI、Azure OpenAI、Anthropic、Google Gemini 等等,甚至連結現成的雲平台服務,像是 Azure AI Search服務、Qdrant向量資料庫等,也都是以 nuget 套件的方式來提供支援。
// 建立 Kernel 時指定 LLM (以 OpenAI 為例)
 Kernel kernel = Kernel.CreateBuilder()
                .AddOpenAIChatCompletion(
                    apiKey: Config.OpenAI_ApiKey,
                    modelId: Config.ModelId)
                .Build();

使用gemini模型,安裝 nuget 套件 dotnet add package Microsoft.SemanticKernel.Connectors.Google --prerelease 後:

// 建立 Kernel 時指定 LLM (以 Google Gemini 為例)
Kernel kernel = Kernel.CreateBuilder()
            .AddGoogleAIGeminiChatCompletion(
            apiKey: Config.GoogleAI_ApiKey,
            modelId: Config.GoogleAI_ModelId)
            .Build();

使用本機ollama部署的模型,安裝 nuget 套件 dotnet add package Microsoft.SemanticKernel.Connectors.Ollama --prerelease 後:

Kernel kernel = Kernel.CreateBuilder()
                .AddOllamaChatCompletion(
                endpoint: new Uri(Config.Ollama_Endpoint),
                modelId: Config.Ollama_ModelId)
                .Build();

注意事項

雖然 semantic kernel 提供方便切換 LLM 的封裝,但是在切換 LLM 時,仍需注意以下幾點:

  1. 模型特性差異:不同 LLM 可能在理解和生成文本方面有不同的特性,切換模型後,可能需要調整提示詞(prompt)以適應新模型的行為。
  2. API 限制:不同 LLM 可能有不同的速率限制和使用政策,切換模型時需要注意這些限制,以避免服務中斷。
  3. API 參數:不同 LLM 可能支援不同的參數和選項,切換模型時需要確認所使用的參數是否適用於新模型。例如:Gemini 便沒有 developer role,無法使用 DeveloperMessage 方式加入Message。

結語

在 AI 快速發展的時代,靈活性是成功的關鍵,如果我們的 LLM 應用能夠輕鬆切換 LLM ,這不僅僅是一個技術優勢,更可能是一個戰略優勢

控制成本:根據需求選擇最經濟的方案
提升品質:隨時採用最新最好的技術
降低風險:不被單一供應商綁定
保持敏捷:快速適應市場變化

不管有沒有使用 Semantic Kernel,切換 LLM 的能力都是一個重要的考量因素,如果你正在開發 AI Agent 或相關應用,強烈建議要考慮使用這樣的抽象層,不管是為了測試或比較模型效用,都是非常有幫助的。


上一篇
Day 19 - Semantic Kernel Multi-Agent 實戰 - Concurrent Orchestration Agent 併發協作多語言翻譯任務
系列文
當 .NET 遇見 AI Agents:用 Semantic Kernel × MCP 打造智慧協作應用20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言