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