微软生成式 AI 入门课第 17 课 vs 微软 AI Agent 入门课第 1 课:深度差在哪

2026-08-18

如果你同时在书签栏里存了 generative-ai-for-beginnersai-agents-for-beginners 两个仓库,很快会撞上一个尴尬:前者第 17 课叫 AI Agents,后者第 1 课叫 Introduction to AI Agents,标题几乎重叠。先读哪个?读完一个还要不要读另一个?

这个问题不该靠感觉答。两节课的正文和代码都在仓库里躺着,把它们摊开逐处比就行。下面只对照两边都白纸黑字写明的东西,一边有一边没有的地方,我会直接说不比。

第一处差别:两个定义不是同一个粒度

17-ai-agents/README.md 给的定义只有两个零件:AI Agent 是给 LLM 一个 state 和一批 tools,让它能完成任务。紧接着分别解释 state 是 LLM 工作所处的上下文、tools 可以是数据库、API、外部应用甚至另一个 LLM。这一节自述这么定义是为了「保持简单并覆盖大多数被称作 AI Agent 的工具」——这是文档自己写的取舍理由,不是我替它解释的。

01-intro-to-ai-agents/README.md 的拆法明显更细。它先把 Agent 说成一个系统,系统里点名了三个部件:Environment(Agent 工作的空间)、Sensors(读取环境状态的方式)、Actuators(施加动作的方式);然后才接上 LLM、执行动作、工具访问、记忆与知识这几层。它还多出两块 17-ai-agents/README.md 里没有的内容:一张按 Simple Reflex、Model-Based Reflex、Goal-Based、Utility-Based、Learning、Hierarchical、Multi-Agent Systems 分类的 Agent 类型表,以及「什么时候该用 Agent」的三种情形(开放式问题、多步流程、需要随反馈变好)。同一张旅行订票的例子贯穿全表。

所以粒度差是真实的:一个给你一句能背下来的定义,一个给你一套能往自己业务上套的分类。要注意 01-intro-to-ai-agents/README.md 自己也说了,用不用 Agent 的深入讨论要留到后面 Building Trustworthy AI Agents 那节。

第二处差别:示例的形态完全不同

这一处比定义更影响你的时间。

文件层面01-intro-to-ai-agents/ 下有 code_samples/ 目录,除了自己的 README.mdimages/,实现文件是 01-python-agent-framework.ipynb01-dotnet-agent-framework.md01-dotnet-agent-framework.cs 三份。17-ai-agents/ 目录下只有 README.mdimages/,没有 code_samples/ 目录,代码全是 README 里的内联片段,其中 AutoGen 那段 autogen.AssistantAgent(...) 是挤在一行里的,不是一份可以直接跑的文件。

同一个框架,两边的写法不一样。两节课都讲到 Microsoft Agent Framework,但落到代码上是两条路:

17-ai-agents/README.md 里是从 agent_framework 导入 Agent、从 agent_framework.openai 导入 OpenAIChatClient,工具就是一个普通 Python 函数,参数用 Annotated[str, Field(description=...)] 标注描述,直接塞进 tools=[get_weather]

01-python-agent-framework.ipynb 里是从 agent_framework.foundry 导入 FoundryChatClient,从 agent_framework 导入 tool,先建 provider 再调 provider.as_agent(name="TravelAgent", instructions=..., tools=[get_destinations])。工具函数上带装饰器:

@tool(approval_mode="never_require")
def get_destinations() -> list[str]:
    """Get a list of popular vacation destinations."""

approval_mode 这个参数在 17-ai-agents/README.md 里找不到对应说明,不比它们孰优;但值得记一句:ai-agents-for-beginners 仓库的 .agents/skills/deploying-scalable-agents/SKILL.md 写明 @tool(approval_mode="always_require") 用于需要人工审批的动作(举的例子是大额退款)。也就是说这个参数在同一个仓库里有另一半语义,只是第 1 课先给了不要审批的那一档。

装包命令也不一样17-ai-agents/README.md 写的是 pip install agent-framework-core,另附 agent-framework-openaiagent-framework-foundry 两个可选集成;01-python-agent-framework.ipynb 第一个代码单元是 %pip install agent-framework azure-ai-projects azure-identity -q。包名不同,照着一边的记忆去装另一边会卡住。两门课都在更新,装之前以仓库最新内容为准。

前置条件的交代深度差最大17-ai-agents/README.md 连 Azure 那段都是把 endpoint 当字符串直接写在 OpenAIChatClient(...) 里当示意;01-python-agent-framework.ipynb 则单开一节 Setup,要求先有 Microsoft Foundry 项目和已部署模型、先跑 az login、再设置 AZURE_AI_PROJECT_ENDPOINTAZURE_AI_MODEL_DEPLOYMENT_NAME,并且代码里带一段守卫,两个变量缺任一就 raise ValueError

.NET 侧的前置写得更细,而且分了平台。01-dotnet-agent-framework.md 给 zsh/bash 的是:

export AZURE_OPENAI_ENDPOINT=https://<your-resource>.openai.azure.com
export AZURE_OPENAI_DEPLOYMENT=gpt-5-mini
az login

给 PowerShell 的是另一段:

$env:AZURE_OPENAI_ENDPOINT = "https://<your-resource>.openai.azure.com"
$env:AZURE_OPENAI_DEPLOYMENT = "gpt-5-mini"
az login

以上两段原样抄自该文件,其中 gpt-5-mini 是仓库示例里的部署名,换成你自己的部署名即可。注意这里的变量名和 Python notebook 那两个不是一套,别混。运行方式上,Windows 用户直接看第二条:文件里的 chmod +x 放在 bash 块里,另外给了 dotnet run ./01-dotnet-agent-framework.cs 这条 CLI 写法。.NET 的工具注册也是另一套——用 [Description("Provides a random vacation destination.")] 标注静态方法,再由 AIFunctionFactory.Create(GetRandomDestination) 包成工具挂到 AsAIAgent(...) 上。

流式01-python-agent-framework.ipynb 有专门一节,用 agent.run(..., stream=True) 逐块打印;.NET 侧对应的是 agent.RunStreamingAsync(...)await foreach。流式这一点我们在 17-ai-agents/README.md 里没有找到对应示例,不比。

深度差不是一边倒的

前面比下来像是第 1 课处处更细,但在「一节课里提到多少能力面」这个维度上,方向反过来了。

17-ai-agents/README.md 的 Microsoft Agent Framework 那节,除了单个 agent 之外还铺开讲了好几层:状态由 threads 托管,消息历史(用户请求、工具调用与结果)逐轮累积,并且可以持久化后暂停再续;工具那边除了普通 Python 函数,还点名支持 Model Context Protocol(MCP)服务器与 code interpreter 这类托管工具;可观测性走 OpenTelemetry。多 agent 编排也直接给了代码,从 agent_framework.orchestrations 导入 SequentialBuilderConcurrentBuilder,一个按链路依次传上下文,一个并行扇出再汇总。

01-intro-to-ai-agents/ 这一课全程停在单 agent、一个工具、一次运行加流式输出,上面那些名字一个都没出现。原因在课程结构里:这些主题被拆到了后面各课,STUDY_GUIDE.md 的路径表把多 agent 系统指向第 08 课、把协议指向第 11 课、把生产化指向第 06 与第 10 课。

所以更准确的说法是:17-ai-agents/README.md 是一节课把能力面铺完、代码只到示意;01-intro-to-ai-agents/ 是一节课只做一件事、但这件事有可运行的文件。你要横向扫一眼有哪些概念,前者更省时间;你要今天写出第一段能跑的代码,后者更省事。

还有一处只有第 1 课这边有:它在正文末尾挂了一份可选的冒烟测试目录 tests/lesson-01-smoke-tests.json,配合第 16 课学到的部署方式,对部署后的 TravelAgent 做上线后健康检查。那份 JSON 里的断言是 contains_any 这类字面检查,检查回答里有没有出现工具返回的目的地名字,怎么跑写在 tests/README.md。这类「课后怎么验证」的配套,17-ai-agents/README.md 里没有,它给的是一段文字作业(用 Microsoft Agent Framework 模拟一场教育创业公司的跨部门会议)。

两处需要照实标出来的地方

一是 17-ai-agents/README.md 内部:它一边用 AssistantAgentUserProxyAgentinitiate_chat 讲 AutoGen 怎么用,一边在 Microsoft Agent Framework 那节写明「如果今天开新的 agent 项目,这是 AutoGen 的推荐后继者」。同一个文件里的两处并存,抄 AutoGen 片段前先知道这句话的存在。

二是 ai-agents-for-beginners 仓库根 README 说「每节课自成一题,从哪开始都行」,而 STUDY_GUIDE.md 写的是「如果你是新手,不要跳过 01–06 课」。两处口径不一致,按后者更稳。

至于 17-ai-agents/README.md 里并列讲到的 LangChain、Taskweaver、JARVIS,我只能引用这个 README 对它们的描述(比如 Taskweaver 用 Planner 管状态、把工具称作 Plugins 并以 embedding 形式存放)。这些项目本身的能力不在本次核对范围里,01-intro-to-ai-agents/README.md 也没有对应内容,不比。

按你的处境决定顺序

  • 完全没调过大模型 APIai-agents-for-beginners 的根 README 自己就给了答案——先去 Generative AI For Beginners 打底,再回来。
  • 只想尽快跑通第一个 agent:直奔 01-intro-to-ai-agents/code_samples/01-python-agent-framework.ipynb。它的前置条件写得完整,代价是要一个 Microsoft Foundry 项目和 az login
  • 暂时开不了 Foundry,但想练函数调用generative-ai-for-beginners11-integrating-with-function-calling/python/ 下有 oai-assignment.ipynbaoai-assignment.ipynb 两份可运行的作业本,而第 17 课没有配套 notebook。
  • 要的是框架全景与词汇表:读 17-ai-agents/README.md,但把它当地图看,别指望在里面找到能跑的工程。
  • 你是 .NET 开发者:只有 01-intro-to-ai-agents/code_samples/ 这边给了 .cs 与配套说明,第 17 课的片段是 Python。
  • 已经有 agent 在写,想直接找对应主题STUDY_GUIDE.md 里那张 Choose Your Learning Path 表按目标给了起点课与后续课,比从第 1 课顺读省事。

最后提一个抄代码时的小坑:04-tool-use/README.md 里有一处写的是 tools=get_current_time,没有包成列表,而同仓其它示例(如 02-explore-agentic-frameworks/README.md)写的是 tools=[book_flight]。两处并存,照抄前留意一下。以上路径与写法均以仓库最新内容为准。


本文依据 github.com/microsoft/ai-agents-for-beginners 仓库于 2026-08-18 的公开内容整理, 事实来自仓库内的课程正文与代码示例。我们没有跑过文中涉及的代码, 因此不涉及运行结果、耗时与 Agent 实际表现的任何描述。 该课程持续更新,文中涉及的文件路径、依赖与接口写法随版本变动,请以仓库最新内容为准。 文中涉及的云端服务调用会产生费用并可能上传数据,请自行评估密钥与数据边界。

本文涉及的另一方内容依据其公开仓库整理(github.com/microsoft/generative-ai-for-beginners)。 本文只对照各方公开写明的机制,不推断未公开的实现,也不对项目做优劣排名

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。