本教學課程示範如何將代理程式功能新增至現有的數據驅動 ASP.NET Core CRUD 應用程式。 它採用兩種不同的方法:Microsoft Agent Framework 與 Foundry Agent Service。
如果你的網頁應用程式已有實用功能,例如購物、飯店預訂或資料管理,透過將這些功能包裝成工具( Microsoft Agent Framework)或 OpenAPI 端點( Foundry Agent Service)來加入代理功能相對簡單。 在本教學課程中,您會從簡單的 to-do 清單應用程式開始。 最後,您將能夠使用 App Service 應用程式中的代理程式來建立、更新及管理工作。
Microsoft Agent Framework 與 Foundry Agent Service 皆能讓您打造具備 AI 驅動功能的代理式網頁應用程式。 下表顯示一些考慮和取捨:
| Consideration | Microsoft 代理程式架構 | 鑄造代理服務 |
|---|---|---|
| Performance | 快速 (在本機執行) | 速度較慢(受控、遠端服務) |
| Development | 完整程式代碼,最大控制 | 低程式代碼,快速整合 |
| Testing | 程序代碼中的手動/單元測試 | 用於快速測試的內建遊樂場 |
| Scalability | 應用程式受控 | Azure 受控、自動調整 |
| 安全護欄 | 需要自訂實作 | 內建內容安全與管理 |
| 身份 | 需要自訂實作 | 內建代理識別碼與認證 |
| Enterprise | 自訂整合需求 | 內建 Microsoft 365/Teams 部署及 Microsoft 365 整合工具的呼叫功能。 |
在本教學課程中,您將瞭解如何:
- 將現有應用程式功能轉換為 Microsoft Agent Framework 的工具。
- 將這些工具加入 Microsoft Agent Framework 代理程式,並在網頁應用程式中使用。
- 將現有應用程式功能轉換為 Foundry Agent Service 的 OpenAPI 端點。
- 在網頁應用程式中打電話給 Foundry 的代理人。
- 指派受控識別連線所需的許可權。
Prerequisites
- 具有有效訂用帳戶的 Azure 帳戶 - 免費建立帳戶。
- GitHub 帳戶用於使用 GitHub Codespaces - 進一步了解 GitHub Codespaces。
使用 Codespaces 開啟範例
最簡單的開始使用方式是使用 GitHub Codespaces,其提供預安裝所有必要的工具的完整開發環境。
流覽至 位於 https://github.com/Azure-Samples/app-service-agentic-semantic-kernel-ai-foundry-agent的 GitHub 存放庫。
選取 [ 程序代碼] 按鈕,選取 [ Codespaces ] 索引標籤,然後選取 [在 main 上建立程式代碼空間]。
請稍候片刻,讓 Codespace 初始化。 準備好時,您會在瀏覽器中看到完整設定的開發環境。
在本機執行應用程式:
dotnet run當您看到 應用程式在埠 5280 上可用 時,請選取 在瀏覽器中開啟,然後新增幾個任務。
檢閱代理程序代碼
這兩種方法都使用相同的實作模式,其中代理程式會初始化為提供者中的服務(Program.cs),並插入至個別的 Blazor 元件。
AgentFrameworkProvider在Services/AgentFrameworkProvider.cs中初始化。 初始化程式代碼會執行下列動作:
- 使用
IChatClient從 Azure OpenAI 建立AzureOpenAIClient。 - 取得封裝 CRUD 應用程式功能的
TaskCrudTool執行個體 (位於 Tools/TaskCrudTool.cs)。Description工具方法上的屬性幫助代理人決定如何呼叫它們。 - 使用
CreateAIAgent()創建 AI 代理,並通過AIFunctionFactory.Create()註冊指令和工具。 - 建立一個執行緒讓代理能在導航中持續對話。
// Create IChatClient
IChatClient chatClient = new AzureOpenAIClient(
new Uri(endpoint),
new DefaultAzureCredential())
.GetChatClient(deployment)
.AsIChatClient();
// Get TaskCrudTool instance from service provider
var taskCrudTool = sp.GetRequiredService<TaskCrudTool>();
// Create agent with tools
var agent = chatClient.CreateAIAgent(
instructions: @"You are an agent that manages tasks using CRUD operations.
Use the provided functions to create, read, update, and delete tasks.
Always call the appropriate function for any task management request.
Don't try to handle any requests that are not related to task management.
When handling requests, if you're missing any information, don't make it up but prompt the user for it instead.",
tools:
[
AIFunctionFactory.Create(taskCrudTool.CreateTaskAsync),
AIFunctionFactory.Create(taskCrudTool.ReadTasksAsync),
AIFunctionFactory.Create(taskCrudTool.UpdateTaskAsync),
AIFunctionFactory.Create(taskCrudTool.DeleteTaskAsync)
]);
// Create thread for this scoped instance (persists across navigation)
var thread = agent.GetNewThread();
return (agent, thread);
每次使用者發送訊息時,Blazor 元件(在 Components/Pages/AgentFrameworkAgent.razor)會呼叫 Agent.RunAsync(),並將使用者輸入與代理執行緒作為參數。 代理程式線程會追蹤聊天記錄。
var response = await this.Agent.RunAsync(sentInput, this.agentThread);
部署範例應用程式
範例儲存庫包含一個 Azure 開發者 CLI(AZD)範本,該範本可建立 App Service 應用程式並部署您的範例應用程式。 App Service 系統指派的管理身份會保留給 Azure AI 外撥通話。 獨立的使用者指派的受控識別與同盟識別認證,可讓 App Service 驗證做為產生的 Microsoft Entra 應用程式,而無需用戶端秘密。
在終端機中,請使用 Azure Developer CLI 登入Azure:
azd auth login請遵循指示來完成驗證程式。
使用 AZD 範本部署 Azure App 服務 應用程式:
azd up出現提示時,請提供下列答案:
Question Answer 輸入新的環境名稱: 輸入唯一名稱。 選取要使用的 Azure 訂用帳戶: 選取訂用帳戶。 挑選要使用的資源群組: 選取 [建立新的資源群組]。 選取要用來建立資源群組的位置: 選取 [瑞典中部]。 輸入新資源群組的名稱: 輸入 Enter。 在 AZD 輸出中,尋找您應用程式的 URL,然後使用瀏覽器開啟該網址。 另外,請複製 Foundry OpenAPI 管理身份受眾 的值以備後用。 輸出看起來像這樣:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL> Foundry OpenAPI managed identity audience: api://<generated-client-id>當 Microsoft 提示你時,請用部署租戶中的帳號登入,並確認任務清單是否載入。
在同一個認證過的瀏覽器中,附加
/openapi/v1.json到 App Service 端點。 複製或儲存產生的 OpenAPI 架構以備後用。Note
App Service 驗證會對未認證的瀏覽器要求傳回 HTTP 302 重新導向。 此範例包含瀏覽器介面與 API,因此重定向提供可用的登入體驗。 僅支援 API 的應用程式通常會使用 HTTP 401。
建立並設定 Microsoft Foundry 資源
在 Foundry 入口網站中,建立一個專案。
部署你選擇的模型(參見 Microsoft Foundry 快速入門:建立資源)。
從模型遊樂場頂端複製模型名稱。
在首頁複製 Azure OpenAI 端點以備後用。
指派必要的許可權
在 Foundry 入口網站中,請在頂方選單選擇 管理 。
在 專案詳細資料 中,選取您的專案的 父資源,然後選取 在 Azure 入口網站中開啟。
從 Azure 入口網站,你可以為該資源指派基於角色的存取權限。
為 App Service 應用程式的受控識別以及您搭配
az login使用的使用者新增以下角色:目標資源 必要角色 所需 鑄造廠 認知服務 OpenAI 使用者 Microsoft Agent Framework 中的聊天完成服務。 若需指示,請參閱使用 Azure 入口網站指派 Azure 角色。
在範例應用程式中設定連線變數
開啟 appsettings.json。 利用你之前從 Foundry 入口複製的數值,設定以下變數:
Variable Description AzureOpenAIEndpointAzure OpenAI 端點(從 Foundry 入口網站首頁複製)。 ModelDeployment部署中的模型名稱 (從新 Foundry 入口網站的模型遊樂場複製)。 Note
若要讓教學課程保持簡單,您會在 appsettings.json 使用這些變數,而不是在 App Service 中使用應用程式設定來覆寫這些變數。
Note
若要讓教學課程保持簡單,您會在 appsettings.json 使用這些變數,而不是在 App Service 中使用應用程式設定來覆寫這些變數。
使用 Azure CLI 登入 Azure:
az login這可讓範例程式代碼中的 Azure 身分識別客戶端連結庫接收已登入使用者的驗證令牌。 請記住,您稍早已新增此使用者的必要角色。
在本機執行應用程式:
dotnet run當您看到 在埠 5280 上執行的應用程式可用時,請選取 [在瀏覽器中開啟]。
分別驗證兩個樞軸:
- Microsoft Agent Framework:選擇 Microsoft Agent Framework Agent,並要求代理建立任務。 Microsoft Agent Framework 會呼叫正在進行中的任務工具。
-
Foundry Agent Service: 選擇 Foundry Agent Service,並要求代理程式建立任務。 遠端 Foundry 代理程式會使用受控識別來呼叫已部署且受保護的
/api/tasks端點。
Foundry 代理程式所建立的任務會出現在已部署的 App Service 實例中,而非本地的記憶體資料庫。 Foundry OpenAPI 工具始終使用嵌入在 OpenAPI 架構中的伺服器 URL。
回到 GitHub Codespace,部署您的應用程式變更。
azd up再次流覽至已部署的應用程式,並測試聊天代理程式。
截圖顯示已部署的 Microsoft Agent Framework 成功管理 Web 應用程式中的任務。
常見問題
我該如何將檢索增強生成(RAG)新增至 Foundry 代理程式?
本指南指引適用於本教學中的 Foundry Agent 服務 路徑。 它不會改變另一個分頁中顯示的 LangGraph、語意核心 或 Microsoft Agent Framework 實作。
建立或選擇一個 Foundry IQ 知識庫,然後 將該知識庫連接到 Foundry 代理服務代理程式。 連線以管理型 MCP 知識工具的形式暴露給代理。
App Service 程式碼會持續透過其現有的 Foundry 用戶端和 agent_reference,以名稱叫用同一個代理程式。 這個網頁應用程式不需要直接的 Azure AI 搜尋服務 整合或自己的 MCP 用戶端。 若使用者介面顯示來源,請處理代理回傳的引用註解。
清理資源
使用應用程式完成時,您可以刪除 App Service 資源,以避免產生進一步的成本:
azd down --purge
然後,如果該 Foundry 資源是你另外建立的,請將其刪除。
更多資源
- 將 AI 整合到 Azure App 服務 應用程式中
- 什麼是 Foundry Agent Service? (部分內容可能是機器或 AI 翻譯)
- Microsoft 代理框架文件