2026年11月12日 星期四

[AI 分享] 讓 .NET MAUI App 不只會聊天,還能替使用者行動

[AI 分享] 讓 .NET MAUI App 不只會聊天,還能替使用者行動

摘要:介紹如何結合裝置端 AI、工具呼叫與 .NET MAUI,讓 App 理解需求並執行操作。



內容:


在 .NET Conf 2026 的這場分享中,微軟 .NET MAUI SDK 團隊的軟體工程師 Gerald 探討如何把 AI 加入 .NET MAUI 應用程式。他認為,AI 不該只是 App 裡的另一個聊天視窗。使用者真正需要的,是能理解意圖、找到資訊,並在適當確認後完成操作的 App。


行動裝置特別適合這類體驗,因為它可以透過相機、麥克風、定位及其他感測器提供情境資訊,也可能在取得適當授權後,運用行事曆或健康資料。例如,旅行時掃描菜單,結合所在地點,協助有芝麻過敏的使用者判斷需要留意的餐點。這些資訊讓 AI 的用途超越單純問答,轉向解決具體問題。


Gerald 以一款開放原始碼的 .NET Conf App 示範。使用者初次開啟 App 時,可以用自然語言描述感興趣的內容,例如指定講者、.NET MAUI 議程,或「更多 Copilot 內容」。也能設定希望觀看的時段;App 會依使用者時區和時間偏好推薦議程,經使用者檢查後加入個人行程。即使輸入有些微拼寫錯誤,模型也可能理解原意,但裝置端模型通常比雲端大型模型更需要明確的指令。


這款 App 的 AI 不只回覆文字。當使用者提出「找星期四的 Blazor 議程」,它會切換到星期四並套用 Blazor 篩選條件;提出「儲存所有 Aspire 議程」,它會直接將符合條件的場次加入個人行程;要求查看某位講者或特定議程時,也能導向對應的詳細頁面。App 另有尋找行程空檔的功能,可依既有安排和可觀看時段提出候選議程,讓使用者自行決定是否加入。


支撐這套設計的核心之一是 Microsoft.Extensions.AI。它提供 IChatClient 等抽象介面,讓 App 的頁面、ViewModel 和服務不必直接綁定單一模型來源。開發者可以接上裝置端模型、自帶模型或雲端服務,並視需要設定工具呼叫、函式執行與 OpenTelemetry 遙測。不同功能也可以使用不同的 AI 用戶端:較簡單、重視隱私的任務交給裝置端;需要更強能力的任務則交給遠端模型,而不必為整個 App 只選一種方案。


另一個重點是 .NET MAUI 團隊正在 MAUI Labs 實驗的 Essentials AI。它延續 Xamarin Essentials 將跨平台裝置能力整合為統一 API 的思路,嘗試為 iOS、Android 和 Windows 的裝置端 AI 模型提供一致的使用方式。開發者可依平台註冊對應的 IChatClient 實作,再讓應用程式其他部分透過共同介面呼叫。Gerald 說明,Essentials AI 目前以 MAUI Labs 預覽套件形式提供,方便團隊快速實驗並收集回饋;它受到團隊積極維護,但尚不等同納入正式產品支援承諾。


使用裝置端 AI 前,App 必須檢查裝置是否具備相應能力、模型是否已準備就緒,以及是否需要下載模型。不同平台與裝置支援的功能也不完全相同;以分享當時的情況來說,工具呼叫能力尤其需要逐一確認。這意味著開發者不能只因某台裝置「有 AI 模型」,就假設所有 AI 功能都能執行,仍須做好能力檢測、替代流程和實機測試。


模型部署各有取捨。作業系統內建的裝置端模型有離線、隱私及較低使用成本等優點,但能力與硬體支援可能受限;透過 ONNX 自帶模型,能針對特定任務選用模型,卻可能增加大量 App 體積與整合工作;雲端模型能力較強、App 本身也較輕量,但需要網路、持續付費,並須考量資料傳輸與隱私。若使用雲端 API,金鑰不應直接放在行動 App 中,而應妥善保存在後端。


要讓 AI「採取行動」,Gerald 展示了 AI attributes 的做法。開發者可在既有 C# 方法上標註匯出 AI 函式的屬性,替函式及參數寫出清楚描述,使模型能根據使用者語句判斷何時呼叫工具,以及該傳入哪些參數。例如,開啟講者頁面、搜尋議程或調整個人行程,都可以轉為模型可呼叫的工具。相關原始碼產生器會建立呼叫程式碼,避免在執行時依賴反射。工具最終仍透過 App 原本的 ViewModel、模型和服務執行,不必另建一套與既有介面脫節的操作邏輯。


讓 App 能行動,也必須讓使用者保持控制權。示範中,移除已儲存議程屬於可能造成損失的操作,因此 AI 會先列出將移除的項目並要求確認;使用者可以選擇移除或保留。Gerald 建議開發者驗證每項請求與工具參數、留意提示注入風險、清楚說明 AI 能做什麼,並只公開必要且願意讓模型操作的工具。AI 可以協助判斷意圖,但不應繞過安全檢查或替使用者擅自決定重大操作。


分享最後也提出更多延伸方向。語意搜尋可將文字轉成向量,讓使用者不必輸入完全一致的關鍵字,就能找到意思相近的議程。AI 也可能協助新使用者找到設定、推薦入門內容、說明觀看某場演講前應具備的背景知識,或將議程摘要翻譯成偏好的語言。MAUI Labs 中的 AI Wayfinding 實驗則進一步思考:如果使用者能直接表達目的,App 是否可以替他找到操作路徑,甚至呈現更符合個人偏好的介面?


整體而言,這場分享鼓勵開發者從「使用者想完成什麼」出發,而不是只在 App 裡增加聊天功能。Microsoft.Extensions.AI 提供連接不同模型的共同介面,Essentials AI 探索跨平台裝置端能力,AI attributes 則讓既有程式碼成為可呼叫的工具;三者結合後,AI 才能在明確邊界與使用者掌控之下,真正改善 .NET MAUI App 的使用體驗。

沒有留言:

張貼留言