Chapter 03

自测与判别:把两套运行时用对地方

01 章给了部件,02 章给了机制与取舍。这一章只做一件事:逼你提取。三层梯度——概念层(回忆 01)、原理层(回忆 02)、判别层(综合两章做选择)。 判别层是重点:同一个场景该用哪套编排、哪种 thread、迁不迁移——这才是"学会了"的检验,不是读得顺。所有答案集中在文末一个折叠块里,先作答再展开。

这一章怎么用

  • 纸笔或编辑器作答,写完整句,别在脑子里"想一下就算"。
  • 判别层每题先给结论(选哪个),再写一句理由——理由比结论值钱。
  • 卡住的题,记下来回对应章节重读;卡壳的地方就是 schema 还没长牢的地方。

3.0三层梯度:你在爬哪一层

这套题库不是平铺的。它按认知梯度分三层,越往上越靠"迁移"——能不能把知识用到没见过的新场景里。

判别层 该用哪个 · 选型/迁移 原理层 怎么转 · 运行时/超步/取舍 概念层 是什么 · 部件清单 综合 02 章 01 章 迁移度 / 难度 ↑
图 3.1题库的认知梯度。 注意:大多数人在概念层和原理层会觉得"还行",真正分水岭在顶层判别层——那里没有标准复述,只有"这个场景到底该选哪套"。卡在顶层是正常的,也正是要练的地方。

3.1概念层(对应 01 章)

原子回忆题,每题只问一件事。提示:全部出自 01 章

  1. Chat Client 和 Agent,哪个负责"怎么连模型",哪个负责"用模型+工具完成一轮任务"?
  2. 一句话说清:MAF 的 Agent 是有状态还是无状态?
  3. 会话历史存在哪个对象里?
  4. @ai_function 装饰器从函数的什么信息生成模型看到的 schema?
  5. "MAF agent 默认多轮工具循环"——一次 run() 因此在成本/延迟上有什么风险?
  6. client-managed thread 与 server-managed thread,各自把历史存在哪?
  7. 截至 2026-06,MCP 和 A2A 在 MAF 里哪个已 GA、哪个还是 preview?

3.2原理层(对应 02 章)

机制题,要答出"为什么"。提示:全部出自 02 章

  1. actor 运行时的两种通信方式叫什么?一个点对点、一个一对多,分别对应哪个?
  2. 为什么把单机运行时换成分布式运行时,agent 业务代码几乎不用改?
  3. Workflow 的检查点为什么只能落在"超步屏障"处?
  4. 用一句话说清 AgentChat 模式 和 Workflow 图引擎在"确定性"上的根本差别。
  5. Magentic 的 Task Ledger 和 Progress Ledger 各管什么?停滞计数器触发什么动作?
  6. MAF 相对 LangGraph/CrewAI 最难被复制的差异是什么?(不是"Azure 集成"。)
  7. AutoGen v0.4 里的 AssistantAgent 迁到 MAF 叫什么?语义上多了哪个反直觉的变化?

3.3应用判别层(综合 01 + 02)

这是本章的重头。每题给一个场景,先给结论(选哪个),再写一句理由。结论错了不要紧,理由的逻辑链才是检验。

  1. 编排选型 A:一个内部工具,把用户问题先给检索 agent、再给总结 agent,两步固定、不要求中断恢复、不要审计。用 AgentChat 模式还是 Workflow 图引擎?哪个具体模式?
  2. 编排选型 B:一个采购审批流程,跨多天、要能从中断处恢复、要审计留痕、中间要人工签字。用哪套?为什么另一套不行?
  3. Thread 选型:一个无状态 web API,前面挂负载均衡、多实例,要支持用户多轮连续对话。thread 用 client-managed 还是 server-managed?为什么不能把 thread 放进程内存?
  4. 多 agent 模式:三个子场景各选 Handoff / GroupChat / Magentic:(a)客服分类后转给唯一一个专家;(b)多个专家就同一方案反复辩论到共识;(c)开放任务,步骤事先不知道、要边做边规划。
  5. 框架选型:团队是 Python 数据组 + .NET 业务组,想让两边的 agent 进同一个工作流协作。选 MAF、LangGraph 还是 CrewAI?换成"纯 Python 创业团队、要最快出 demo、不想绑云"呢?
  6. 迁移决策:两个 AutoGen v0.4 项目:(a)研究项目,在试前沿多智能体模式、没有新企业需求;(b)要上生产、需要可观测和可恢复的原型。各自现在该迁到 MAF 吗?
亲手画一张图

合上教程,在纸上或 Excalidraw 里画 MAF 的两套执行模型——只画 5 个元素就够:一个 actor 运行时、两个经它通信的 agent、一个 Workflow 超步、一个检查点。

画完回到 §2.1 和 §2.2 对照,只问自己两件事:你画的图里,agent 之间是直接调用还是经运行时投递?检查点落在超步中间还是屏障处?这两处画错,说明对应机制还没真进脑子。

§答案(全部题目,先做完再展开)

忍住"瞄一眼"的冲动。先把三层都写完,再展开——提前看答案,这一章就退化成又一次阅读。

展开全部答案

概念层(3.1)

  1. Chat Client 负责"怎么连模型"(纯连接器);Agent 负责"用模型+工具完成一轮任务"(带指令的执行单元)。两者都不存历史。
  2. 无状态。
  3. 存在 AgentThread 里,不在 Agent 里。
  4. 从函数签名(参数名、类型注解、默认值)加 docstring 自动生成。类型注解直接决定模型看到的参数类型。
  5. 一次 run() 可能多次往返模型、多次执行工具,所以 token 成本和延迟可能远超"一问一答"的直觉,需要为循环设上限。
  6. client-managed:历史在 thread 自身,放进可插拔的 ChatMessageStore(内存/Redis/Cosmos)。server-managed:历史在服务端,thread 只留远端 ConversationId。
  7. MCP 已 GA;A2A 绑定仍是 preview。

原理层(3.2)

  1. request/response(点对点、直接寻址)与 publish/subscribe(一对多、主题广播、解耦)。
  2. 因为 agent 只依赖"发消息/收消息"接口,消息怎么投递由运行时封装。actor 模型把通信机制与业务逻辑解耦,单机/分布式两个运行时 API 一致,所以可互换。
  3. 屏障是所有 executor 跑齐、统一推进的同步点,此刻图状态一致、可完整存档;只有一致快照才能安全恢复,所以检查点落在屏障处。
  4. AgentChat 偏非确定(让 agent 自由对话/规划);Workflow 是确定性的(图 + 超步 + 类型边,执行可预测、可复现)。
  5. Task Ledger 管已知事实 + 计划;Progress Ledger 管每个子任务的进度。停滞计数器超阈值 → 触发重规划(replan),重写 Task Ledger 的计划。
  6. Python 与 .NET 的 agent 能进同一个 workflow 跨语言互操作——来自底层语言无关的 actor 运行时。
  7. 叫 ChatAgent;反直觉变化:从"有状态"变成"无状态"(历史移到 thread),且默认多轮工具循环。

应用判别层(3.3)

  1. AgentChat 模式 · Sequential。两步固定、无条件分支、不要求恢复/审计——上 Workflow 图引擎是过度工程。落在图 2.3 决策树第一个菱形的"否"侧、第二个菱形的"否"侧。
  2. Workflow 图引擎。跨天 + 可中断恢复 + 审计 + 人工签字,正好对应超步检查点(恢复)、确定性(审计)、HITL(签字)。AgentChat 没有屏障检查点,崩了从头来、过程难审计,撑不起来。
  3. client-managed + 外部 store(如 Redis),或 server-managed;不能放进程内存。多实例负载均衡下,下个请求可能换实例,内存里的 thread 就丢了。要么按会话 id 从外部 store 取回(client-managed),要么交服务端托管(server-managed)。
  4. (a)Handoff——单向交给唯一一个专家;(b)GroupChat——多 agent 反复发言到共识;(c)Magentic——步骤未知、要 LLM Manager 动态规划。
  5. 跨语言协作选 MAF——Python↔.NET 同一 workflow 是它独家的护城河。换成纯 Python、最快出 demo、不想绑云,选 CrewAI(role-based、几小时出原型、不绑 Azure);LangGraph 也可,但 CrewAI 更快。
  6. (a)研究项目暂不迁——AutoGen 仍是前沿研究路径,且维护模式无硬性下线日期,没有新企业需求就没有迁移收益;(b)生产原型该迁——可观测、可恢复、Workflow 检查点正是 MAF 相对 AutoGen 的增量,这正是迁移收益所在。
进阶挑战 · 刚好够不着

给自己出一道判别题

挑一个你真实工作里的多 agent 需求(没有就虚构一个),按图 2.3 的决策树走一遍,写下:它落在哪个终点?如果把"要不要可恢复"那一项的答案反过来,选择会怎么变?能讲清这个"翻转",说明判别层的 schema 已经能迁移到新场景——这正是教程顶层想留给你的能力。