[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69A188SF8T667RS59TSZJ32":3,"skill-same:01M69A188SF8T667RS59TSZJ32":48},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":29,"ownerHtmlUrl":30,"ownerBlogUrl":31,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M69A188SF8T667RS59TSZJ32","deploying-scalable-agents",null,"microsoft\u002Fai-agents-for-beginners","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M6998ZK2275KMJE6Y5SEA2X2",79423,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-MO\u002F.agents\u002Fskills\u002Fdeploying-scalable-agents\u002FSKILL.md",[],[18],"deploying scalable agents","2026-11-10 10:12:30",false,"---\nname: deploying-scalable-agents\nlicense: MIT\n---\n# 使用 Microsoft Foundry 部署可擴展代理\n\n> 與[第16課 – 部署可擴展代理](..\u002F..\u002F..\u002F16-deploying-scalable-agents\u002FREADME.md)相輔相成的技能。\n> 用於幫助學習者將代理從原型階段推進到可擴展且可觀察的\n> 生產部署。所有建議均基於課程內容和\n> 可運行的筆記本；不要編造 Foundry API。\n\n## 觸發條件\n\n在學習者希望進行以下操作時啟用此技能：\n- 將代理部署到 Microsoft Foundry 作為\u003Cstrong>託管代理\u003C\u002Fstrong>並使其具版本控制\u002F可觀察性。\n- 在\u003Cstrong>客戶端託管、託管代理和代理工作流\u003C\u002Fstrong>部署模式間進行選擇。\n- 添加\u003Cstrong>模型路由\u003C\u002Fstrong>、\u003Cstrong>響應緩存\u003C\u002Fstrong>或\u003Cstrong>有界併發\u003C\u002Fstrong>以控制延遲和成本。\n- 添加\u003Cstrong>評估門檻\u003C\u002Fstrong>，以防止錯誤代理版本上線。\n- 添加\u003Cstrong>人工審批\u003C\u002Fstrong>步驟，用於高風險操作。\n- 用\u003Cstrong>OpenTelemetry\u003C\u002Fstrong>追蹤儀器化代理，以實現生產可觀察性。\n- \u003Cstrong>煙霧測試\u003C\u002Fstrong>已部署的代理作為快速的後部署檢查。\n\n## 核心思維模型\n\n生產代理主要是環繞模型（約80%）的運營骨架，\n而非模型本身。將每個建議對應到以下關注點之一：\n\n| 關注點 | 原型 → 生產 |\n|---------|------------------------|\n| 託管 | 筆記本 → 具版本控制的託管服務 |\n| 身份 | 你的 `az login` → 託管身份 + 範圍 RBAC |\n| 狀態 | 內存中 → 外部線程\u002F記憶體存儲 |\n| 故障 | 回溯 → 重試、備援、警報 |\n| 成本 |「幾分錢」→ 追蹤、路由、緩存、預算控制 |\n| 質量 | 目測 → 自動化評估門檻 |\n| 信任 | 你批准 → 政策 + 人工介入審核 |\n\n## 部署模式（選一或組合使用）\n\n1. \u003Cstrong>客戶端託管\u003C\u002Fstrong> — 推理循環在你的過程中運行。最大控制權；你負責擴展\u002F狀態管理。\n2. **託管代理（Foundry Agent Service）** — Foundry 托管循環，存儲線程，執行 RBAC\u002F內容安全限制，在入口網站展示代理。控制較少，運營面積顯著降低。\n3. \u003Cstrong>代理工作流\u003C\u002Fstrong> — 多個代理\u002F工具組成帶有分支、審批節點和持久檢查點的圖形。\n\n## 生命周期（發布代理的循環）\n\n`create → version → evaluate (gate) → deploy hosted → observe online → collect failures → repeat`。\n**離線評估是一道門檻，而非事後考量** — 版本通過門檻才能發佈。\n在線可觀察性將真實失敗反饋至離線測試集。\n\n\n## 擴展與成本槓桿（優先級順序）\n\n1. \u003Cstrong>調整模型尺寸\u003C\u002Fstrong> — 使用通過評估門檻的最小模型。\n2. \u003Cstrong>按複雜度路由\u003C\u002Fstrong> — 簡單請求使用小\u002F快速模型，複雜推理使用大型模型（DIY 分類器或 Foundry 模型路由器）。\n3. \u003Cstrong>緩存\u003C\u002Fstrong> — 近重複請求不調用模型直接服務。\n4. **無狀態設計 + 有界併發** — 狀態外部化；帶退避機制重試。\n\n## 需要複製的關鍵模式\n\n指引用戶到筆記本中的以下內容\n[`16-python-agent-framework.ipynb`](..\u002F..\u002F..\u002F16-deploying-scalable-agents\u002Fcode_samples\u002F16-python-agent-framework.ipynb)：\n\n- \u003Cstrong>請求處理器\u003C\u002Fstrong>：緩存 → 按複雜度路由 → 追蹤跨度 → 運行 → 緩存。\n- \u003Cstrong>評估門檻\u003C\u002Fstrong>：對離線測試集打分；回傳 `pass_rate >= threshold` 且僅在為真時部署。\n- \u003Cstrong>人工審批\u003C\u002Fstrong>：`@tool(approval_mode=\"always_require\")` 用於大額退款等操作。\n- \u003Cstrong>追蹤\u003C\u002Fstrong>：將每個請求包裹在 `tracer.start_as_current_span(...)` 中，並設置 `routed.model`、`customer.id` 等屬性。\n\n## 煙霧測試已部署代理\n\n部署後，驗證端點確實有回應（部署成功不代表一定有回應）。\n使用[AI 煙霧測試](https:\u002F\u002Fgithub.com\u002Fmarketplace\u002Factions\u002Fai-smoke-test)\n操作，透過 [`.github\u002Fworkflows\u002Fsmoke-test.yml`](..\u002F..\u002F..\u002F..\u002F..\u002F.github\u002Fworkflows\u002Fsmoke-test.yml)\n搭配 [`tests\u002F`](..\u002F..\u002F..\u002Ftests\u002FREADME.md) 目錄。執行器將每個提示\nPOST 到 `POST {project_endpoint}\u002Fagents\u002F{agent_name}\u002Fendpoint\u002Fprotocols\u002Fopenai\u002Fresponses`，\n並對回復文本做斷言。身份需在 Foundry 專案範圍擁有 **Azure AI User** 角色；令牌受眾必須是 `https:\u002F\u002Fai.azure.com\u002F`。\n\n\n\n\n\n\n## 企業控管\n\n- **RBAC**：給每個託管代理一個擁有最小權限的託管身份。\n- **生產中的 MCP**：將每個 MCP 服務視為不受信任的邊界 — 鎖定版本、限定身份範圍、驗證輸出、限速、不暴露秘密。\n\n## 助手的防護措施\n\n- 優先採用課程中通用的 `FoundryChatClient(...)` + `provider.as_agent(...)` 模式。\n- 不承諾未驗證的即時 Azure 結果；建議使用煙霧測試工作流程確認部署。\n- 評估與成本建議需掛鈎：評估設定質量底線，路由\u002F緩存將成本控制在該底線附近。\n\n---\n\n\u003C!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**免責聲明**：\n本文件使用 AI 翻譯服務 [Co-op Translator](https:\u002F\u002Fgithub.com\u002FAzure\u002Fco-op-translator) 進行翻譯。雖然我們力求準確，但請注意，自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊，建議尋求專業人工翻譯。我們不對因使用本翻譯而引起的任何誤解或曲解承擔責任。\n\u003C!-- CO-OP TRANSLATOR DISCLAIMER END -->","# 使用 Microsoft Foundry 部署可擴展代理\n\n> 與[第16課 – 部署可擴展代理](..\u002F..\u002F..\u002F16-deploying-scalable-agents\u002FREADME.md)相輔相成的技能。\n> 用於幫助學習者將代理從原型階段推進到可擴展且可觀察的\n> 生產部署。所有建議均基於課程內容和\n> 可運行的筆記本；不要編造 Foundry API。\n\n## 觸發條件\n\n在學習者希望進行以下操作時啟用此技能：\n- 將代理部署到 Microsoft Foundry 作為\u003Cstrong>託管代理\u003C\u002Fstrong>並使其具版本控制\u002F可觀察性。\n- 在\u003Cstrong>客戶端託管、託管代理和代理工作流\u003C\u002Fstrong>部署模式間進行選擇。\n- 添加\u003Cstrong>模型路由\u003C\u002Fstrong>、\u003Cstrong>響應緩存\u003C\u002Fstrong>或\u003Cstrong>有界併發\u003C\u002Fstrong>以控制延遲和成本。\n- 添加\u003Cstrong>評估門檻\u003C\u002Fstrong>，以防止錯誤代理版本上線。\n- 添加\u003Cstrong>人工審批\u003C\u002Fstrong>步驟，用於高風險操作。\n- 用\u003Cstrong>OpenTelemetry\u003C\u002Fstrong>追蹤儀器化代理，以實現生產可觀察性。\n- \u003Cstrong>煙霧測試\u003C\u002Fstrong>已部署的代理作為快速的後部署檢查。\n\n## 核心思維模型\n\n生產代理主要是環繞模型（約80%）的運營骨架，\n而非模型本身。將每個建議對應到以下關注點之一：\n\n| 關注點 | 原型 → 生產 |\n|---------|------------------------|\n| 託管 | 筆記本 → 具版本控制的託管服務 |\n| 身份 | 你的 `az login` → 託管身份 + 範圍 RBAC |\n| 狀態 | 內存中 → 外部線程\u002F記憶體存儲 |\n| 故障 | 回溯 → 重試、備援、警報 |\n| 成本 |「幾分錢」→ 追蹤、路由、緩存、預算控制 |\n| 質量 | 目測 → 自動化評估門檻 |\n| 信任 | 你批准 → 政策 + 人工介入審核 |\n\n## 部署模式（選一或組合使用）\n\n1. \u003Cstrong>客戶端託管\u003C\u002Fstrong> — 推理循環在你的過程中運行。最大控制權；你負責擴展\u002F狀態管理。\n2. **託管代理（Foundry Agent Service）** — Foundry 托管循環，存儲線程，執行 RBAC\u002F內容安全限制，在入口網站展示代理。控制較少，運營面積顯著降低。\n3. \u003Cstrong>代理工作流\u003C\u002Fstrong> — 多個代理\u002F工具組成帶有分支、審批節點和持久檢查點的圖形。\n\n## 生命周期（發布代理的循環）\n\n`create → version → evaluate (gate) → deploy hosted → observe online → collect failures → repeat`。\n**離線評估是一道門檻，而非事後考量** — 版本通過門檻才能發佈。\n在線可觀察性將真實失敗反饋至離線測試集。\n\n\n## 擴展與成本槓桿（優先級順序）\n\n1. \u003Cstrong>調整模型尺寸\u003C\u002Fstrong> — 使用通過評估門檻的最小模型。\n2. \u003Cstrong>按複雜度路由\u003C\u002Fstrong> — 簡單請求使用小\u002F快速模型，複雜推理使用大型模型（DIY 分類器或 Foundry 模型路由器）。\n3. \u003Cstrong>緩存\u003C\u002Fstrong> — 近重複請求不調用模型直接服務。\n4. **無狀態設計 + 有界併發** — 狀態外部化；帶退避機制重試。\n\n## 需要複製的關鍵模式\n\n指引用戶到筆記本中的以下內容\n[`16-python-agent-framework.ipynb`](..\u002F..\u002F..\u002F16-deploying-scalable-agents\u002Fcode_samples\u002F16-python-agent-framework.ipynb)：\n\n- \u003Cstrong>請求處理器\u003C\u002Fstrong>：緩存 → 按複雜度路由 → 追蹤跨度 → 運行 → 緩存。\n- \u003Cstrong>評估門檻\u003C\u002Fstrong>：對離線測試集打分；回傳 `pass_rate >= threshold` 且僅在為真時部署。\n- \u003Cstrong>人工審批\u003C\u002Fstrong>：`@tool(approval_mode=\"always_require\")` 用於大額退款等操作。\n- \u003Cstrong>追蹤\u003C\u002Fstrong>：將每個請求包裹在 `tracer.start_as_current_span(...)` 中，並設置 `routed.model`、`customer.id` 等屬性。\n\n## 煙霧測試已部署代理\n\n部署後，驗證端點確實有回應（部署成功不代表一定有回應）。\n使用[AI 煙霧測試](https:\u002F\u002Fgithub.com\u002Fmarketplace\u002Factions\u002Fai-smoke-test)\n操作，透過 [`.github\u002Fworkflows\u002Fsmoke-test.yml`](..\u002F..\u002F..\u002F..\u002F..\u002F.github\u002Fworkflows\u002Fsmoke-test.yml)\n搭配 [`tests\u002F`](..\u002F..\u002F..\u002Ftests\u002FREADME.md) 目錄。執行器將每個提示\nPOST 到 `POST {project_endpoint}\u002Fagents\u002F{agent_name}\u002Fendpoint\u002Fprotocols\u002Fopenai\u002Fresponses`，\n並對回復文本做斷言。身份需在 Foundry 專案範圍擁有 **Azure AI User** 角色；令牌受眾必須是 `https:\u002F\u002Fai.azure.com\u002F`。\n\n\n\n\n\n\n## 企業控管\n\n- **RBAC**：給每個託管代理一個擁有最小權限的託管身份。\n- **生產中的 MCP**：將每個 MCP 服務視為不受信任的邊界 — 鎖定版本、限定身份範圍、驗證輸出、限速、不暴露秘密。\n\n## 助手的防護措施\n\n- 優先採用課程中通用的 `FoundryChatClient(...)` + `provider.as_agent(...)` 模式。\n- 不承諾未驗證的即時 Azure 結果；建議使用煙霧測試工作流程確認部署。\n- 評估與成本建議需掛鈎：評估設定質量底線，路由\u002F緩存將成本控制在該底線附近。\n\n---\n\n\u003C!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**免責聲明**：\n本文件使用 AI 翻譯服務 [Co-op Translator](https:\u002F\u002Fgithub.com\u002FAzure\u002Fco-op-translator) 進行翻譯。雖然我們力求準確，但請注意，自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊，建議尋求專業人工翻譯。我們不對因使用本翻譯而引起的任何誤解或曲解承擔責任。\n\u003C!-- CO-OP TRANSLATOR DISCLAIMER END -->",{"name":5,"license":14},"main","f09e94ffe170f8af6d3db7c42987bbe4db227723","translations\u002Fzh-MO\u002F.agents\u002Fskills\u002Fdeploying-scalable-agents",26019,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners","https:\u002F\u002Faka.ms\u002Fai-agents-beginners","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-07 12:51:12",{"source":7,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add microsoft\u002Fai-agents-for-beginners --skill deploying-scalable-agents",{"tool":40,"command":41},"bunx","bunx skills add microsoft\u002Fai-agents-for-beginners --skill deploying-scalable-agents",{"tool":43,"command":44},"pnpm","pnpm dlx skills add microsoft\u002Fai-agents-for-beginners --skill deploying-scalable-agents","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-MO\u002F.agents\u002Fskills\u002Fdeploying-scalable-agents\u002FSKILL.md",true,[],[49,67,78,86,94,99],{"skillNo":50,"name":51,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":64,"publishedAt":19},"01M69A206TRZ8KK0CW0HYJF5V5","testing-course-samples","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-TW\u002F.agents\u002Fskills\u002Ftesting-course-samples\u002FSKILL.md",[54,59],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":60,"categoryName":61,"taxonomyType":62,"taxonomyTypeDesc":63},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[65,66],"testing","testing course samples",{"skillNo":68,"name":69,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":75,"publishedAt":19},"01M69A1XRB2SFHYRMEH0K08EKZ","microsoft-docs","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-TW\u002F.agents\u002Fskills\u002Fmicrosoft-docs\u002FSKILL.md",[72],{"categoryNo":73,"categoryName":74,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000023","Skill与智能体开发",[76,8,77],"docs","microsoft docs",{"skillNo":79,"name":80,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":19},"01M69A1VPZFJQ1HNGTZQ5P3WSC","local-ai-agents","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-TW\u002F.agents\u002Fskills\u002Flocal-ai-agents\u002FSKILL.md",[],[84,85],"ai agents","local ai agents",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":19},"01M69A1S947N7MM6V9JF85S2E7","jupyter-notebook","當使用者要求建立、搭建或編輯 Jupyter 筆記本（`.ipynb`）用於實驗、探索或教學時使用；優先使用隨附範本並執行輔助腳本 `new_notebook.py` 來產生一個乾淨的起始筆記本。","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-TW\u002F.agents\u002Fskills\u002Fjupyter-notebook\u002FSKILL.md",[],[93],"jupyter notebook",{"skillNo":95,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":19},"01M69A1Q8EXPWKZSQK69V6WF22","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-TW\u002F.agents\u002Fskills\u002Fdeploying-scalable-agents\u002FSKILL.md",[],[18],{"skillNo":100,"name":101,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":19},"01M69A1MHZTH3RH9N8VYSYG74X","azure-openai-to-responses","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-TW\u002F.agents\u002Fskills\u002Fazure-openai-to-responses\u002FSKILL.md",[],[105],"azure openai to responses"]