
C# 與 Windows API 交互的“秘密武器”:結構體和聯合體
上個世界 60 年代,UNIX 操作系統率先使用系統調用(System Call),如文件讀寫
open()
、
write()
等,為應用程序提供了訪問操作系統資源的接口,成為 API 的雛形。隨著結構化編程的興起,API 逐漸演變為函數庫(Library),如 C 語言的標準庫
stdio.h
、
stdlib.h
等,提供了更高級的接口。
隨著計算機網絡的發展,不同計算機之間的通信也需要標準化接口,于是網絡協議誕生了,如早期的?CORBA 通用對象請求代理架構[1]、DCOM 分布式組件對象模型[2],再到上世紀末的?SOAP 簡單對象訪問協議[3]?為跨系統的通信提供了協議基礎。這些都是早期 Web API 的雛形。
進入新千年,Web 2.0 的興起,互聯網應用迅速發展,API 也進入了新的階段。RESTful API[4]?成為主流,它基于 HTTP 協議,使用 URL、HTTP 方法等標準化的方式,實現了資源的增刪改查等操作。
Web API 的爆發隨之而來的是開放平臺運動,如 Facebook、Twitter 等開放 API,讓第三方開發者可以訪問平臺數據,構建出豐富的應用生態。
現代 Web API 如 OpenAPI、GraphQL、gRPC 等,進一步提升了 API 的開發效率和易用性。隨著 API 的成熟,出現了一大批以 API 為核心商業模式的公司。API 即產品的出現,帶來了 API 經濟的崛起。
與此同時,通過標準化 API 解耦系統組件,實現了基礎設施的彈性、可觀測性和可擴展性,以此為核心的云原生技術帶來了現在基礎設施的變革。
隨著物聯網、5G 、邊緣計算等技術的發展,我們迎來了超大規模的 API 網絡。各種各樣的設備、傳感器、服務都通過 API 連接在一起,構成了數字化的生態系統。
風頭正盛大模型不只是通過 API 對外提供服務,還會通過 API 與其他服務進行交互,實現更高級的認知決策。
關鍵詞:系統、決策、熱插拔
大模型的出現,為 API 的智能化交互提供了新的機會,如自然語言處理、多模態交互、自主決策等。實現了 API 的交互模式完成了從機械式指令、資源化操作到語義化交互、認知型決策的演進。
這一轉變,將原本面向機器通信,強調功能和數據調用的 API,轉變為面向 AI 交互。
假設我們想將一個外部服務集成到我們的應用中,我們可以通過 API 調用的方式,將外部服務的功能引入到我們的應用中。此時,我們需要閱讀該服務公開的 API 文檔,了解 API 的功能、參數、調用方式等,然后編寫代碼調用 API,實現功能的集成。
如果需要集成更多的能力,我們需要調用更多的 API,編寫更多的代碼。由于 API 的生態多樣性,不同的 API 在協議、參數、調用方式等方面都有所不同,API 的巴別塔困局使得開發者需要花費大量時間和精力去理解和調用不同的 API、處理調用異常,還需要編寫大量的粘合代碼來實現不同 API 之間的數據轉換和調用。這一切都是在設計階段實現的,應用與 API 之間是強耦合的關系,擴展、升級、替換 API 都需要重新設計和開發。
大模型 LLM 可以理解自然語言,自然也可以理解結構化的 API 文檔并與之交互。學習 API 的負擔從開發人員轉移到了大模型,這一學習過程甚至可以在運行時進行,并持續進行。
這一方式有可能顛覆傳統的 API 集成模式,從“人工編碼適配”轉向“機器自主學習”,成為破解 API 巴別塔困局的關鍵路徑。
舉個例子,用戶輸入指令 “幫我查詢周末的天氣,如果下雨就推薦附近的電影院”。大模型可以自動識別這一需求,并調用設備 API 獲取位置信息、調用天氣 API 獲取未來的天氣狀況、調用地圖 API 根據位置信息獲取附近的電影院,最終將結果返回給用戶。
這個過程中,涉及了多種 API 的調用、決策邏輯的處理,以及上下文數據的傳遞。但要讓這一愿景真正落地,僅靠大模型的語義理解能力并不足夠。
當多個 API 的調用邏輯嵌套、上下文數據需要跨系統流轉時,如何確保不同協議的參數對齊?如何處理調用異常,避免流程的中斷,提供備選方案。
試想:當用戶說“如果下雨就推薦電影院”,大模型首先要理解各個 API 的能力,明確 API 的使用場景和調用方式。執行是要記住“下雨”狀態并傳遞給地圖 API,還需要確保這一狀態在設備定位、天氣服務與影院推薦服務之間無縫同步——**這才是跨越巴別塔的真正橋梁:既讓機器聽懂人言,又讓機器之間說同一種語言。
2024 年 11 月 Anthropic 公司發布了?MCP(Model Context Protocol)[5]?協議,這是一個開放協議,旨在為 AI 應用向大模型提供環境上下文建立標準化接口。
MCP 如同人工智能領域的 USB-C 接口,通過統一的數據接入標準,使各類 AI 模型能夠無縫對接多樣化數據源及功能工具。其核心價值在于構建通用連接規范,實現模型與外部系統的高效互操作性。
MCP 是典型的客戶端 – 服務器架構。服務器端提供特定的功能,應用程序通過客戶端來使用服務器端的功能。客戶端與服務器端是一對一的關系,維護者二者之間的通信(目前有兩種方式:標準輸入輸出和 SSE),使用?JSON-RPC[6]?2.0 作為消息格式。
MCP 的目標建立一個所有機器都能理解的“世界語”,通過標準化上下文傳遞、協議轉換和意圖映射,讓跨系統協作像單系統般自然流暢。這是實現“機器自主協作”而非“人工編碼適配”的關鍵基礎設施。
在跨服務的調用鏈中(如“查天氣→推薦影院”),MCP 自動維護上下文狀態(如用戶位置、天氣狀態、影院篩選條件),確保數據在流程中無損傳遞。
通過引入不同的 MCP 服務器,應用程序可以變身成為多面手。例如,通過引入天氣服務 MCP,應用程序可以查詢天氣信息;通過引入地圖服務 MCP,應用程序可以查詢地圖信息。這樣,應用程序可以通過 MCP 與不同的服務進行交互,實現更多的功能。
MCP 通過聲明式服務描述,將服務的能力、輸入輸出、調用方式等信息進行標準化,使得大模型可以獲取并理解服務的能力,自動調用服務,實現服務的智能編排。
{??"mcpServers": {? ??"amap-maps": {? ? ??"command":?"npx",? ? ??"args": [? ? ? ??"-y",? ? ? ??"@amap/amap-maps-mcp-server"? ? ? ],? ? ??"env": {? ? ? ??"AMAP_MAPS_API_KEY":?"KEY"? ? ? }? ? }? }}
只需將服務通過聲明的形式描述出來,大模型便可以自動獲取服務的能力。在應用連接到 MCP 服務器后,會自動從 MCP 服務器獲取服務的能力。所以,當我們詢問該服務器都有哪些能力時,可以即刻返回功能列表,無需調用任何工具。
通過 MCP,大模型可以獲取服務的能力,自動調用服務,實現服務的智能編排。例如,用戶輸入“幫我查詢周末的天氣,如果下雨就推薦附近的電影院”,大模型會自動編排決定功能的調用順序:
這讓我想起小時候看過的動畫片正義戰士(Centurions)中的裝備升級。每次戰斗前,他們可以根據不同的敵人和戰場情況,選擇不同的裝備。裝備通過太空中的空間站投送到戰場上,戰士們可以快速更換裝備,加入戰斗。
通過 MCP,應用程序可以動態添加、刪除服務,實現能力的熱插拔。這點與傳統 API 在設計階段的集成方式方式不同,MCP 可以實現在運行時動態添加服務,實現功能的快速擴展。
MCP 或將成為 AI 服務生態的“神經系統”:在更多場景中協調多模態設備/服務,在決策中串聯數據分析與認知模型,甚至成為通用 AI Agent 的底層協作協議。隨著工具生態的完善,MCP 將推動 AI 應用從“功能固化的程序”進化為“自主進化的智能體”,最終實現“所想即所得”的認知革命。
[1] CORBA 通用對象請求代理架構:?https://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture
[2] DCOM 分布式組件對象模型:?https://en.wikipedia.org/wiki/Distributed_Component_Object_Model
[3] SOAP 簡單對象訪問協議:?https://en.wikipedia.org/wiki/SOAP
[4] RESTful API:?https://en.wikipedia.org/wiki/REST
[5] MCP(Model Context Protocol):?https://modelcontextprotocol.io/
[6] JSON-RPC:?https://www.jsonrpc.org/
文章轉載自云原生指北。點擊這里閱讀原文了解更多。
申請 KubeCon + CloudNativeCon 最終用戶門票(免費邀請票數量有限,先到先得。)
贊助 KubeCon + CloudNativeCon(簽署的合同必須在 2025 年 4 月 18 日前提交。)
原文轉載自:https://mp.weixin.qq.com/s/krWo7LEA3rUDaZpmX6haqQ