[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69A0M6QC4YPBWNMVABV7G6H":3,"skill-same:01M69A0M6QC4YPBWNMVABV7G6H":59},{"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":27,"publishedAt":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":40,"ownerHtmlUrl":41,"ownerBlogUrl":42,"ownerDescription":43,"updatedAt":44,"install":45,"resources":58},"01M69A0M6QC4YPBWNMVABV7G6H","testing-course-samples",null,"microsoft\u002Fai-agents-for-beginners","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M6998ZK2275KMJE6Y5SEA2X2",79374,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-CN\u002F.agents\u002Fskills\u002Ftesting-course-samples\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[28,29],"testing","testing course samples","2026-11-10 10:12:30",false,"---\nname: testing-course-samples\n---\n# 测试课程样例\n\n验证课程笔记本和代码示例是否能在实际运行的\nMicrosoft Foundry \u002F Azure OpenAI 环境下执行。仓库提供了一个运行脚本位于\n[`scripts\u002Fvalidate-notebooks.ps1`](..\u002F..\u002F..\u002F..\u002F..\u002Fscripts\u002Fvalidate-notebooks.ps1)，\n它可以无头执行每个 Python 笔记本，并打印通过\u002F失败矩阵。\n\n## 何时使用\n- “验证所有笔记本 \u002F 示例在我的 Azure 订阅下是否正常。”\n- “在升级包或更改模型后对课程做冒烟测试。”\n- “哪些课程依旧通过 \u002F 失败？”\n\n\u003Cstrong>不\u003C\u002Fstrong>要用此工具来替代 AI Smoke Test GitHub Action（用于验证\u003Cem>已部署\u003C\u002Fem>的\n托管代理 — 见 [`tests\u002FREADME.md`](..\u002F..\u002F..\u002Ftests\u002FREADME.md)）。本工具\n是本地执行笔记本。\n\n## 先决条件（先检查）\n1. **Python 3.12+** 及课程依赖：`python -m pip install -r requirements.txt`\n   还需要执行器：`python -m pip install nbconvert ipykernel`。\n2. 仓库根目录需要 **`.env` 文件**（从 [`.env.example`](..\u002F..\u002F..\u002F..\u002F..\u002F.env.example) 复制），至少包含：\n   - `AZURE_AI_PROJECT_ENDPOINT` — Foundry 项目端点\n     (`https:\u002F\u002F\u003Caccount>.services.ai.azure.com\u002Fapi\u002Fprojects\u002F\u003Cproject>`)\n   - `AZURE_AI_MODEL_DEPLOYMENT_NAME` — 一个未弃用的部署名称（例如 `gpt-5-mini`）\n   - `AZURE_OPENAI_ENDPOINT` (`https:\u002F\u002F\u003Caccount>.openai.azure.com`) 和 `AZURE_OPENAI_DEPLOYMENT`\n     用于直接调用 Azure OpenAI 的课程（课程 06、02-azure-openai、14 handoff\u002Fhuman-loop）。\n3. 完成 **`az login`** — 示例使用 `AzureCliCredential` 认证（Entra ID，无密钥）。\n4. 验证模型部署存在：\n   运行命令 `az cognitiveservices account deployment list -g \u003Crg> -n \u003Caccount> -o table`。\n\n## 运行验证\n```powershell\n# 所有Python笔记本（跳过.NET、.venv、site-packages、翻译、技能资源）\npwsh scripts\u002Fvalidate-notebooks.ps1\n\n# 单个课时，每个单元格有较长的超时时间\npwsh scripts\u002Fvalidate-notebooks.ps1 -Filter '08-*' -Timeout 600\n\n# 仅列出将要运行的内容（不执行）\npwsh scripts\u002Fvalidate-notebooks.ps1 -List\n\n# 显式指定解释器（如果`python`不在PATH中，例如Windows商店别名）\npwsh scripts\u002Fvalidate-notebooks.ps1 -Python \"C:\u002Fpath\u002Fto\u002Fpython.exe\"\n```\n该脚本会写出执行的副本、每个笔记本的日志、以及 `results.json` 到\n`$env:TEMP\\aiab-nbval`，并以失败数作为退出码。\n\n临时失败（共享订阅的 HTTP 429 速率限制、偶发的\n`AzureCliCredential` 令牌故障或超时）会自动重试\n（`-Retries`，默认 2 次，带 `-RetryDelaySeconds` 退避，默认 20 秒）。如果某个\n模型部署经常出现 429 错误，检查订阅的 GlobalStandard\nTPM 配额（`az cognitiveservices usage list -l \u003Cregion>`）——单个\n部署容量增加无效，因为是\u003Cem>订阅\u003C\u002Fem>配额用尽了。\n\n## 结果解读\n- `PASS` — 笔记本全程运行无单元格错误。\n- `FAIL` — 显示首个 `*Error` \u002F `*Exception` 行；查看输出目录中的对应\n  `log_*.txt` 获取完整回溯。\n- 单个笔记本的失败由 `-Timeout`（每单元格计时）限制，所以卡住的\n  人机交互单元格会抛出 `StdinNotImplementedError` 而非死锁。\n\n## 需要额外资源的课程（无资源时预计失败）\n| 课程 | 额外需求 |\n|--------|-------------------|\n| 05 Agentic RAG | Azure AI Search (`AZURE_SEARCH_SERVICE_ENDPOINT`, key) — 含内存回退路径 |\n| 11 MCP \u002F GitHub | GitHub MCP 服务器 + PAT |\n| 13 memory (cognee) | 配置好的 `cognee` 模型提供者 |\n| 15 browser-use | Playwright 浏览器已安装 (`playwright install`) + `AZURE_OPENAI_CHAT_DEPLOYMENT_NAME` |\n| 17 local agent | Foundry 本地运行时 + 已下载的 Qwen 模型（设备端，无云） |\n| `*-dotnet-*` 笔记本 | .NET Interactive 内核（默认排除；用 `-IncludeDotnet` 包含） |\n\n## 反馈报告\n按课程汇总为通过\u002F失败表。区分真实回归\n（需修复代码\u002F配置缺陷）与环境缺失（缺少 Search\u002FFoundry Local\u002FPAT），\n并引用每个真实失败对应的 `log_*.txt`。\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 -->","# 测试课程样例\n\n验证课程笔记本和代码示例是否能在实际运行的\nMicrosoft Foundry \u002F Azure OpenAI 环境下执行。仓库提供了一个运行脚本位于\n[`scripts\u002Fvalidate-notebooks.ps1`](..\u002F..\u002F..\u002F..\u002F..\u002Fscripts\u002Fvalidate-notebooks.ps1)，\n它可以无头执行每个 Python 笔记本，并打印通过\u002F失败矩阵。\n\n## 何时使用\n- “验证所有笔记本 \u002F 示例在我的 Azure 订阅下是否正常。”\n- “在升级包或更改模型后对课程做冒烟测试。”\n- “哪些课程依旧通过 \u002F 失败？”\n\n\u003Cstrong>不\u003C\u002Fstrong>要用此工具来替代 AI Smoke Test GitHub Action（用于验证\u003Cem>已部署\u003C\u002Fem>的\n托管代理 — 见 [`tests\u002FREADME.md`](..\u002F..\u002F..\u002Ftests\u002FREADME.md)）。本工具\n是本地执行笔记本。\n\n## 先决条件（先检查）\n1. **Python 3.12+** 及课程依赖：`python -m pip install -r requirements.txt`\n   还需要执行器：`python -m pip install nbconvert ipykernel`。\n2. 仓库根目录需要 **`.env` 文件**（从 [`.env.example`](..\u002F..\u002F..\u002F..\u002F..\u002F.env.example) 复制），至少包含：\n   - `AZURE_AI_PROJECT_ENDPOINT` — Foundry 项目端点\n     (`https:\u002F\u002F\u003Caccount>.services.ai.azure.com\u002Fapi\u002Fprojects\u002F\u003Cproject>`)\n   - `AZURE_AI_MODEL_DEPLOYMENT_NAME` — 一个未弃用的部署名称（例如 `gpt-5-mini`）\n   - `AZURE_OPENAI_ENDPOINT` (`https:\u002F\u002F\u003Caccount>.openai.azure.com`) 和 `AZURE_OPENAI_DEPLOYMENT`\n     用于直接调用 Azure OpenAI 的课程（课程 06、02-azure-openai、14 handoff\u002Fhuman-loop）。\n3. 完成 **`az login`** — 示例使用 `AzureCliCredential` 认证（Entra ID，无密钥）。\n4. 验证模型部署存在：\n   运行命令 `az cognitiveservices account deployment list -g \u003Crg> -n \u003Caccount> -o table`。\n\n## 运行验证\n```powershell\n# 所有Python笔记本（跳过.NET、.venv、site-packages、翻译、技能资源）\npwsh scripts\u002Fvalidate-notebooks.ps1\n\n# 单个课时，每个单元格有较长的超时时间\npwsh scripts\u002Fvalidate-notebooks.ps1 -Filter '08-*' -Timeout 600\n\n# 仅列出将要运行的内容（不执行）\npwsh scripts\u002Fvalidate-notebooks.ps1 -List\n\n# 显式指定解释器（如果`python`不在PATH中，例如Windows商店别名）\npwsh scripts\u002Fvalidate-notebooks.ps1 -Python \"C:\u002Fpath\u002Fto\u002Fpython.exe\"\n```\n该脚本会写出执行的副本、每个笔记本的日志、以及 `results.json` 到\n`$env:TEMP\\aiab-nbval`，并以失败数作为退出码。\n\n临时失败（共享订阅的 HTTP 429 速率限制、偶发的\n`AzureCliCredential` 令牌故障或超时）会自动重试\n（`-Retries`，默认 2 次，带 `-RetryDelaySeconds` 退避，默认 20 秒）。如果某个\n模型部署经常出现 429 错误，检查订阅的 GlobalStandard\nTPM 配额（`az cognitiveservices usage list -l \u003Cregion>`）——单个\n部署容量增加无效，因为是\u003Cem>订阅\u003C\u002Fem>配额用尽了。\n\n## 结果解读\n- `PASS` — 笔记本全程运行无单元格错误。\n- `FAIL` — 显示首个 `*Error` \u002F `*Exception` 行；查看输出目录中的对应\n  `log_*.txt` 获取完整回溯。\n- 单个笔记本的失败由 `-Timeout`（每单元格计时）限制，所以卡住的\n  人机交互单元格会抛出 `StdinNotImplementedError` 而非死锁。\n\n## 需要额外资源的课程（无资源时预计失败）\n| 课程 | 额外需求 |\n|--------|-------------------|\n| 05 Agentic RAG | Azure AI Search (`AZURE_SEARCH_SERVICE_ENDPOINT`, key) — 含内存回退路径 |\n| 11 MCP \u002F GitHub | GitHub MCP 服务器 + PAT |\n| 13 memory (cognee) | 配置好的 `cognee` 模型提供者 |\n| 15 browser-use | Playwright 浏览器已安装 (`playwright install`) + `AZURE_OPENAI_CHAT_DEPLOYMENT_NAME` |\n| 17 local agent | Foundry 本地运行时 + 已下载的 Qwen 模型（设备端，无云） |\n| `*-dotnet-*` 笔记本 | .NET Interactive 内核（默认排除；用 `-IncludeDotnet` 包含） |\n\n## 反馈报告\n按课程汇总为通过\u002F失败表。区分真实回归\n（需修复代码\u002F配置缺陷）与环境缺失（缺少 Search\u002FFoundry Local\u002FPAT），\n并引用每个真实失败对应的 `log_*.txt`。\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},"main","f09e94ffe170f8af6d3db7c42987bbe4db227723","translations\u002Fzh-CN\u002F.agents\u002Fskills\u002Ftesting-course-samples",25989,"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":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add microsoft\u002Fai-agents-for-beginners --skill testing-course-samples",{"tool":51,"command":52},"bunx","bunx skills add microsoft\u002Fai-agents-for-beginners --skill testing-course-samples",{"tool":54,"command":55},"pnpm","pnpm dlx skills add microsoft\u002Fai-agents-for-beginners --skill testing-course-samples","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-CN\u002F.agents\u002Fskills\u002Ftesting-course-samples\u002FSKILL.md",true,[],[60,67,78,86,94,101],{"skillNo":61,"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":62,"categories":63,"keywords":66,"publishedAt":30},"01M69A206TRZ8KK0CW0HYJF5V5","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-TW\u002F.agents\u002Fskills\u002Ftesting-course-samples\u002FSKILL.md",[64,65],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},[28,29],{"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":30},"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":20,"taxonomyTypeDesc":21},"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":30},"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":30},"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":96,"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":97,"categories":98,"keywords":99,"publishedAt":30},"01M69A1Q8EXPWKZSQK69V6WF22","deploying-scalable-agents","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fai-agents-for-beginners\u002Fblob\u002Fmain\u002Ftranslations\u002Fzh-TW\u002F.agents\u002Fskills\u002Fdeploying-scalable-agents\u002FSKILL.md",[],[100],"deploying scalable agents",{"skillNo":102,"name":103,"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":104,"categories":105,"keywords":106,"publishedAt":30},"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",[],[107],"azure openai to responses"]