以OpenAI 的ChatGPT 所掀起的GenAI 快速創新浪潮,其中連線LLM 和 應用之間的橋樑的兩大開源專案:LangChain[1]和Semantic Kernel[2] ,在半年前寫過一篇文章 LangChain vs Semantic Kernel [3],這半年以來Semantic kernel 有了顯著改進,這篇文章反應了最新的更新。
Semantic Kernel (SK)是什麼?
Semantic Kernel (SK) 是一個開源的將大型語言模型(LLM)與流行的程式語言相結合的SDK,Microsoft將Semantic Kernel(簡稱SK)稱為輕量級SDK,結合了OpenAI,Azure OpenAI和Hugging Face等AI LLM的整合。它使開發人員能夠透過編排 AI 元件並將其與現有程式碼整合來建立 AI 應用。SDK 提供對 Java、Python 和 C# 的支援。它提供了用於新增記憶體和AI服務的聯結器,為應用程式建立模擬的“大腦”。語義核心支援來自不同提供商的外掛,為開發人員提供自己的 API,並簡化 AI 服務的整合,使開發人員能夠利用最新的 AI 進步並構建複雜和智慧的管道。SK 大約 是在 2023 年 3 月下旬開源,大約開源6個多月,比 LangChain 晚開源了5個月。
專為應用程式開發人員和 ML 工程師打造
Semantic Kernel 雖然與LangChain類似,但SK是為應用開發開發人員建立的。SK使構建企業AI編排器變得容易,這是Copilot Stack的中心[4]。Semantic Kernel的清晰文件和程式碼示例讓應用程式開發人員容易理解,很容易就可以將SK 整合到應用程式中。
SK 還支援 ML 工程師和資料科學家喜愛的功能。
- 將函式連結在一起[5]
- 使用 Jupyter 筆記本[6]進行實驗。 (注意:您可以使用適用於 Python 和 C# 的筆記本。對於 C#,請使用多語言筆記本[7])。
SK Planner :自動函式呼叫
使用 GPT4 的一個有用技術是生成一個計劃,其中包含解決問題的明確步驟。Planner 是一個函式,它接受使用者的請求並返回有關如何完成請求的計劃。它透過使用AI混合和匹配核心中註冊的外掛來實現,以便可以將它們重新組合成一系列完成目標的步驟。給定一個問題,SK Planner可以根據您指定的功能建立分步計劃,然後執行它們。
SK Planner 與LangChain Agents [8]非常相似。主要區別在於SK Planner 將從一開始就建立一個計劃,而LangChain Agent將在每一步確定下一步的行動方案。LangChain的方法聽起來更好,但代價是效能低和更高的Token 使用量。Planner 是SK的可擴充套件部分。這意味著我們有多個Planner 可供選擇,如果您有特定需求,您可以建立自定義Planner。有關Planner 更多資訊,請參閱此處[9]。
AI 外掛:語義和本機函式
“Plugins”只是SK用來表示一組函式的術語。為了推動整個行業的一致性,SK 採用了OpenAI外掛規範作為外掛[10]的標準。這將有助於建立一個可互操作的外掛生態系統,可用於所有主要的AI應用程式和服務,如ChatGPT,Bing和Microsoft 365。
對於使用SK 的開發人員來說,這意味著您可以匯出您構建的任何外掛,以便它們可以在 ChatGPT、Bing 和 Microsoft 365 中使用。這使您無需重寫程式碼即可擴大 AI 功能的範圍。這也意味著為 ChatGPT、Bing 和 Microsoft 365 構建的外掛可以無縫匯入到SK中。
大多數“外掛”將涉及與外部服務的整合,例如LLM,資料庫,MS Teams,SAP等。但是絕對可以建立純粹由函式組成的外掛,而無需任何外部服務整合。
您可以使用 SK 外掛編寫兩種型別的函式,語義函式和本機函式。
Semantic Functions
Semantic Functions是使用 LLM 提示語編寫的函式。以下是一些示例:
IsValidEmail
Respond with 1 or 0, is this a valid e-mail address format:"{email}"
or
LanguageTranslator
Translate this text from {from} to {to}:"{input}"
我非常喜歡SK的是把這些提示是寫在檔案中的,或程式碼中沒有多行魔術字串。
Native Functions
Native Functions是我們習慣的傳統程式碼函式(有關詳細資訊,請參閱此處[11])。下面是一個獲取數字字串平方根的本機函式的示例:
[SKFunction, Description("Take the square root of a number")] public string Sqrt(string number) { return Math.Sqrt(Convert.ToDouble(number, CultureInfo.InvariantCulture)).ToString(CultureInfo.InvariantCulture); }
LLM 通常只是自然語言處理方面的能手,比如通常數學不好,我們可以把 使用經過驗證的數學庫封裝為本地函式,SK 透過語義函式和本地函式將傳統的語法程式設計和語義程式設計結合起來構建強大的外掛。外掛之前叫做技能,將“外掛”視為“技能”更容易理解。我猜測SK 之後使用術語“外掛”來與OpenAI的術語保持一致。
開箱即用 (OOTB) 外掛
Semantic Kernel與LangChain相比,SK目前擁有一組較小的開箱即用外掛( LangChain 比SK開源時間早了4個月)。以下是目前一些值得注意的差異:
- LangChain的工具[12]主要是與其他系統整合。您也可以定義自定義工具[13],例如 SK 本機函式,但開箱即用的工具並不多。
- 由於SK來自Microsoft,因此它有一個用於Microsoft Graph [14]的OOTB外掛整合了大量的Microsoft 服務。
- LangChain與非Microsoft服務的整合更多(見列表[15])。
Semantic Memory
Semantic Memory 是“一個開源的 服務和外掛,專門用於資料集的有效索引(來源在這裡[16])它是SK的有力搭檔。 注入AI的應用程式的大多數實際用例都涉及處理資料,以便LLM可以使用資料。分塊、嵌入、向量儲存和向量搜尋是該領域討論的一些常見主題。有關詳細資訊,請參閱文件和儲存庫。
SK 沒有內建功能將聊天記錄儲存在檔案系統、Redis 快取、MongoDB 或其他資料庫等持久儲存中,這部分功能的演示包含在參考應用程式 Chat Copilot[17]。
Semantic kernel的應用開發
正如反覆提到的,SK是為開發人員而構建的。本節介紹一些這方面的工具:
VS 程式碼擴充套件
SK Semantic Function最好使用 VS Code 編寫,並使用官方語義核心工具擴充套件[18]。
Prompt flow
提示流[19]是一種開發工具,旨在簡化LLM應用程式的建立。它透過提供簡化原型設計,實驗,迭代和部署LLM應用程式過程的工具來實現這一點。最值得注意的是,提示流允許您編寫本機和語義函式鏈,並將它們視覺化為圖形。這使你和團隊的其他成員能夠在 Azure ML Studio和本地使用 VS Code 輕鬆建立和測試 AI 支援的功能。
Prompt Playground
Prompt Playground[20] 是一個簡易的 Semantic Kernel 語義技能除錯工具,建立新的語義函式並對其進行測試,而無需編寫任何程式碼
可觀測性
正如反覆提到的,SK是為開發人員而構建的,採用雲原生的可觀測性來建立有效的產品遙測,產品遙測是指從軟體應用程式收集和分析資料以深入瞭解以下內容的過程:
- 錯誤檢測和除錯:遙測支援近乎實時地監視應用程式,從而可以及時檢測和診斷問題或錯誤。這樣可以縮短解決速度並提高整體軟體質量。若要成功執行此操作,應用程式需要具有跟蹤功能。
- 效能最佳化:透過跟蹤應用程式效能指標,您可以確定瓶頸和需要最佳化的區域。這種資料驅動的方法可確保應用程式以最佳狀態執行,從而增強使用者體驗。
- 主動維護:遙測允許主動維護,因為您可以預測潛在問題並在問題升級之前解決它們,從而減少停機時間並提高產品可靠性。
- 資料驅動的決策:藉助遙測,決策可以基於資料而不是假設,從而制定更有效、更成功的產品開發策略。
使用Semantic Kernel記錄和計量請求有幾個主要好處:
- 您可以輕鬆跟蹤 API 使用情況和成本,因為每個令牌對應於一個計費單位。您還可以比較不同模型和引數的令牌使用情況,以找到適合您的使用案例的最佳設定。
- 您可以排查請求期間可能發生的任何問題或錯誤,因為每個請求都會記錄其提示、完成和令牌計數。您還可以使用日誌來分析完成的效能和質量。
- 您可以利用語義核心的強大功能和靈活性,透過其他 AI 服務或外掛編排您的請求,同時仍然完全瞭解和控制您的令牌使用情況。
Chat Copilot 應用程式
SK釋出了一個 Chat Copilot[17]參考應用程式。與許多 ChatGPT 儲存庫[21]不同,此示例應用程式充分展示SK 的上述各項特性:
- 微服務部署架構(即前端和後端服務是分開的),
- 如何為前端 SPA 和後端 API Web 服務配置 Azure AD
- 如何使用OpenAI或Azure OpenAI
- 上傳用於嵌入和向量資料庫儲存的文件(Semantic Memory實現)
- 聊天記錄儲存在檔案系統或者ComosDB中。
- 開箱即用的示例和自定義外掛整合。
- 使用Azure ApplicationInsight的產品遙測和記錄和計量請求。
除了Chat Copilot 參考應用程式之外,還有其他示例應用。這些應用展示:
- 使用 Azure 函式[22]實現的後端業務流程協調程式服務[23]
- 一組使用後端 orhestrator 的 TypeScript/React 示例應用程式[24]。
加入社群
Semantic Kernel 是一個強大的SDK,用於為您的Copilot Stack 構建AI編排器。 在這篇文章中,我向你介紹瞭如何使用SK完成各種任務的學習總結,例如建立和執行計劃,編寫語義和本機函式等等。我還向您展示了一些使用 SK 進行開發的實用資源,例如 VS Code 擴充套件、Chat Copilot 應用程式和其他示例應用程式。雖然目前的SK版本已經相當強大,馬上就要釋出1.0 版本了,但它正在不斷創新 。如果您想了解有關SK的更多資訊並加入SK社群。我在Github上為你準備好了開始探索SK的資源列表:https://github.com/geffzhang/awesome-semantickernel[25]
相關連結:
- [1]LangChain: https://blog.langchain.dev/announcing-our-10m-seed-round-led-by-benchmark/
- [2]Semantic Kernel: https://learn.microsoft.com/en-us/semantic-kernel/overview/
- [3]LangChain vs Semantic Kernel :https://www.cnblogs.com/shanyou/p/17338785.html
- [4]Copilot Stack的中心: https://learn.microsoft.com/en-us/semantic-kernel/overview/#semantic-kernel-is-at-the-center-of-the-copilot-stack
- [5]將函式連結在一起: https://learn.microsoft.com/en-us/semantic-kernel/ai-orchestration/chaining-functions?tabs=Csharp
- [6]Jupyter 筆記本: https://learn.microsoft.com/en-us/semantic-kernel/get-started/quick-start-guide/?tabs=Csharp
- [7]多語言筆記本: https://devblogs.microsoft.com/dotnet/polyglot-notebooks-december-2022-release/
- [8]LangChain Agents : https://docs.langchain.com/docs/components/agents/
- [9]與規劃器協調AI: https://learn.microsoft.com/en-us/semantic-kernel/ai-orchestration/planner?tabs=Csharp
- [10]OpenAI外掛規範作為外掛: https://platform.openai.com/docs/plugins/getting-started/
- [11]本地函式: https://learn.microsoft.com/en-us/semantic-kernel/ai-orchestration/native-functions?tabs=Csharp
- [12]LangChain的工具:https://python.langchain.com/docs/integrations/tools/
- [13]自定義工具:https://python.langchain.com/docs/modules/agents/tools/custom_tools
- [14]Microsoft Graph:https://github.com/microsoft/semantic-kernel/tree/main/dotnet/src/Plugins/Plugins.MsGraph
- [15]LangChain的工具列表: https://python.langchain.com/docs/integrations/tools/
- [16]Semantic Memory:https://github.com/microsoft/semantic-memory
- [17]Chat Copilot:https://learn.microsoft.com/en-us/semantic-kernel/chat-copilot/
- [18]語義核心工具擴充套件:https://marketplace.visualstudio.com/items?itemName=ms-semantic-kernel.semantic-kernel
- [19]提示流: https://learn.microsoft.com/en-us/azure/machine-learning/prompt-flow/overview-what-is-prompt-flow?view=azureml-api-2
- [20]Prompt Playground:https://github.com/xbotter/promptplayground
- [21]ChatGPT 儲存庫:https://github.com/search?q=chatgpt&type=repositories
- [22]Azure 函式:https://azure.microsoft.com/en-us/products/functions#:~:text=Azure%20Functions%20is%20an%20event,programming%20language%20of%20your%20choice.
- [23]業務流程協調程式服務:https://learn.microsoft.com/en-us/semantic-kernel/samples-and-solutions/local-api-service
- [24]TypeScript/React 示例應用程式:https://learn.microsoft.com/en-us/semantic-kernel/samples-and-solutions/#try-the-typescriptreact-sample-apps
- [25]SK的資源列表:https://github.com/geffzhang/awesome-semantickernel