# 第二幕：组建你的播客制作团队 🎬

![lab2](../../imgs/lab2.png)

## 情节加剧

Alex(你在第一幕中的 AI 助手)很棒,但一个智能体无法运营整个播客工作室。你需要一个*团队*:
- 🔍 **研究智能体**:搜索网络寻找新鲜信息
- ✍️ **脚本智能体**:将研究转化为引人入胜的对话
- 👤 **你(编辑)**:批准脚本或发回重写

欢迎来到 **AI 智能体编排** —— 你成为自己 AI 团队的导演。想想复仇者联盟,但用于播客制作。

## 什么是智能体编排?(简单版本)

想象你在经营一家餐厅。你不会自己做所有事情,对吧?你有:
- 🍳 厨师负责烹饪
- 👨‍🍳 副厨负责准备
- 👩‍🍳 服务员负责送餐

智能体编排是同样的想法,但用 AI。每个智能体都有专长,你协调它们实现更大的目标。没有单个智能体不堪重负,工作完成得更快。

### 乐队类比 🎸

你的 AI 代理就像一个乐队：
- **主唱**：处理面向客户任务的主要代理
- **鼓手**：保持节奏，处理后台处理
- **贝斯手**：支持每个人，获取数据
- **你（乐队经理）**：协调所有！

没有协调？只是噪音。有编排？美妙的音乐。

### 为什么这很重要

一个 AI 智能体试图做所有事情 = 倦怠。专业智能体一起工作 = 效率解锁!🚀

**实话实说**:还记得尝试独自研究、编写和编辑你的播客吗?是的,那很糟糕。通过编排,每个智能体处理它最擅长的。你只需做最终决定。

**现实世界的例子**：客户支持机器人知道何时处理账单 vs 技术问题 vs 何时呼叫人类。那就是编排！

## 智能体 vs 工作流:有什么区别?

这样想:

### 🤖 AI 智能体 = 爵士乐手
- **即兴决策**基于它听到的内容
- **即兴创作**使用它的工具解决方案
- **思考**用 LLM 大脑
- **适应**你扔给它的任何东西

### 🎵 工作流 = 管弦乐队演奏古典音乐
- **遵循乐谱**（预定义步骤）
- **可预测的**执行路径
- **协调**多个智能体、人类、系统
- **结构化**像食谱一样

**魔力**:工作流*编排*智能体!你构建一个工作流,告诉智能体何时发挥它们的作用。两全其美。🎭

## 三种协调你的 AI 团队的方式

### 1. 🎯 集中式（你是老板）

一个主智能体发号施令。把它想象成你管理一个团队 —— 你决定谁做什么以及何时做。

**优点**：
- ✅ 清晰的领导（没有混乱）
- ✅ 一致的决策
- ✅ 易于调试

**适用于**：
- 客户服务路由（"这是账单还是技术支持？"）
- 内容审批工作流（"这个脚本通过了吗？"）
- 播客制作（正是我们正在构建的！）

### 2. 🤝 去中心化(智能体自组织)

智能体直接相互交谈并作为一个群体解决问题。就像每个人都在协调的群聊。

**优点**:
- ✅ 易于扩展(随时添加更多智能体)
- ✅ 没有单点故障
- ✅ 智能体自然协作

**适用于**:
- 研究团队(每个智能体探索不同来源)
- 头脑风暴会议
- 分布式问题解决

### 3. 🔀 混合式（两全其美）

你设定总体方向,但智能体在任务上有自由自组织。就像一个信任团队的 CEO。

**完美适用于**：需要控制和灵活性的复杂项目。

## Microsoft Agent Framework：你的编排工具包 🧰

是时候构建了！这是你将使用的：

### 构建模块

#### 1. 🧱 执行器（你的工人）
- **它们是什么**：单独的处理单元 —— 可能是智能体或自定义逻辑
- **它们做什么**：接收输入，完成工作，产生输出
- **把它们想象成**：流水线上的工作站

#### 2. ➡️ 边（连接）
- **它们是什么**：执行器之间的路径
- **它们做什么**：控制消息流（"在 A 之后，去 B"）
- **把它们想象成**：流程图上的箭头

#### 3. 🗺️ 工作流（总体计划）
- **它们是什么**：执行器 + 边的完整图
- **它们做什么**：定义从开始到结束的整个过程
- **把它们想象成**：你的制作流程蓝图

### 你会喜欢的酷功能

**🛡️ 类型安全**:智能体之间的消息是类型检查的。没有"哎呀,错误的数据类型"惊喜。

**🔀 灵活路由**：
- If-then 条件（"如果批准，发布；否则，重写"）
- 并行处理（多个代理同时工作）
- 动态路径（工作流根据结果调整）

**🔌 外部集成**：
- 连接到 API
- 添加人工在环检查点（你在发布前批准）
- 构建请求/响应流

**💾 检查点**：保存进度！如果某些东西崩溃了，从你离开的地方继续。

**🤝 多代理协调**：
- 按顺序运行代理（A → B → C）
- 并行运行它们（A + B + C 同时）
- 代理之间交接
- 协作处理

## 最佳实践（专业提示）🎯

### 1. 保持模块化
每个智能体应该真正做好一件事。不要制作一个做所有事情的"超级智能体" —— 你在调试时会后悔的。

### 2. 为失败做计划
智能体会搞砸。网络会失败。构建错误处理和备用计划。你未来的自己会感谢你。

### 3. 监控一切
跟踪你的智能体在做什么。使用 DevUI(我们会介绍的!)查看运行中的工作流。

### 4. 优化消息大小
不要在智能体之间传递巨大的文件。保持消息精简以提高速度。

### 5. 选择正确的模式
需要控制？选择集中式。需要规模？选择去中心化。无法决定？选择混合式！

## DevUI：你的工作流调试器 🔍

### 什么是 DevUI？

DevUI 就像测试你的智能体和工作流的游乐场。这是一个 Web 界面,你可以:
- 👀 观看你的工作流运行
- 💬 直接与智能体聊天
- 🔍 当事情出错时调试
- 📊 查看跟踪和性能指标

> **重要**：DevUI 仅用于开发！不要在生产中使用它。把它想象成你的本地测试环境。

### 什么让它很棒

- **🖥️ 交互式 Web UI**：点击、输入、测试 —— 不需要命令行
- **📁 拖放就绪**：上传文件，用不同输入测试
- **📂 自动发现**:指向一个文件夹,它会自动找到所有智能体
- **📋 无需设置模式**:在代码中注册智能体,无需文件夹结构
- **🔌 OpenAI 兼容**:与 OpenAI SDK 兼容(兼容性万岁!)
- **👁️ 内置跟踪**:准确看到你的智能体在做什么

### 输入如何工作

DevUI 对输入很智能：

- **测试智能体?** 你得到文本框和文件上传按钮
- **测试工作流？** UI 根据你的工作流期望的内容自动生成输入字段

这就像魔法，但这只是好代码。✨

## 你的任务：构建播客工作室 🎬

### 任务 1：使用 DevUI 创建单个代理

📂 [01.AgentDevUI](../../code/02.Workflow/01.AgentDevUI/)

**挑战**：在构建完整团队之前，让我们用一个代理测试 DevUI：网络搜索专家。

**你正在构建什么**：
一个可以搜索互联网寻找播客主题的研究代理。你将使用 DevUI 的 Web 界面 `http://localhost:8090` 进行测试。

**你将学到的技能**：
- 🚀 在 DevUI 中启动代理
- 🔍 实时测试代理响应
- 🛠️ 构建自定义工具（网络搜索）
- 📊 启用跟踪以调试问题
- 🖥️ 使用交互式 Web UI

**代码**：
- `agent.py`：你的具有网络搜索超能力的 SearchAgent
- 使用 OllamaChatClient 连接到 Qwen
- 实现 `web_search()` 工具函数
- 使用 `serve()` 启动 —— 自动打开 DevUI

**胜利条件**：问你的代理"AI 领域有什么热点？"看它搜索网络！🎉

### 任务 2:构建多智能体工作流

📂 [02.WorkflowDevUI](../../code/02.Workflow/02.WorkflowDevUI/)

**挑战**:现在真正的乐趣开始了!构建一个完整的播客制作工作流:
1. 🔍 **搜索智能体** → 研究你的主题
2. ✍️ **脚本智能体** → 编写两个主持人之间的对话(用中文!)
3. 👤 **审查执行器** → 要求你批准或拒绝
4. 🔄 **循环回退** → 如果被拒绝,根据你的反馈重写

**你将学到的技能**:
- 🧱 为不同工作创建专门的智能体
- 🔗 使用 WorkflowBuilder 连接智能体
- 🔀 实现批准循环（人工在环！）
- 🚦 条件路由（如果批准 vs 拒绝）
- 🔧 为业务逻辑构建自定义执行器

**工作流**：
```
SearchAgent → ScriptAgent → ReviewExecutor
                             ↑          ↓ (如果被拒绝)
                             ←─────────
```

**代码**：
- `search_agent/agent.py`：你的研究专家
- `generate_script_agent/agent.py`：你的脚本作者（用中文写！）
- `workflow/workflow.py`：编排魔法在这里发生
- `main.py`：在 DevUI 中启动一切

**胜利条件**：给一个主题，审查脚本，拒绝一次以测试循环，然后批准！🎉

### 任务 3：构建控制台应用

📂 [03.Application](../../code/02.Workflow/03.Application/)

**挑战**：将你的工作流从 DevUI 转变为带有彩色输出、加载旋转器和文件保存的时髦终端应用。这是生产就绪的东西！

**你将学到的技能**：
- ⚡ 以编程方式运行工作流（无 DevUI）
- 📡 使用流式处理的事件驱动架构
- 🎨 创建漂亮的终端 UI（颜色、旋转器、进度条）
- 💾 将最终脚本保存到文件
- 🔄 使用 Python 的 asyncio 处理异步工作流

**它做什么**：
1. 询问你播客主题
2. 显示实时进度（"搜索智能体正在工作..."）
3. 用颜色显示生成的脚本
4. 请求你的批准
5. 将批准的脚本保存到 `podcast.txt`

**代码**：
- `podcast_app.py`：你的带有事件处理的主应用
- `workflow.py`：重用任务 2 的工作流
- 处理事件：`AgentRunUpdateEvent`、`RequestInfoEvent`、`WorkflowOutputEvent`
- 使用 ANSI 颜色进行终端样式

**胜利条件**：运行应用，创建播客脚本，看到它被保存！你已经构建了一个真正的工具。🚀

## 你已经掌握的 🏆

第二幕之后，你可以：

- ✅ 像老板一样编排多个 AI 智能体
- ✅ 构建具有顺序和条件逻辑的工作流
- ✅ 添加人工批准检查点
- ✅ 使用 DevUI 测试和调试工作流
- ✅ 创建生产就绪的控制台应用程序
- ✅ 在复杂系统中优雅地处理错误
- ✅ 为任何项目选择正确的编排模式

## 当事情出错时 🔧

### "我的工作流太复杂了！"
**解决方案**：将其分解为更小的子工作流。每个工作流应该做好一件事。如果需要，将它们链接在一起。

### "我无法跟踪正在发生的事情！"
**解决方案**：使用工作流检查点保存状态。在 DevUI 中启用跟踪以查看每一步。

### "一个智能体的错误会崩溃所有东西!"
**解决方案**:添加错误边界。每个智能体应该处理自己的失败并有备用行为。

### "这太慢了"
**解决方案**:有智能体可以并行运行吗?顺序工作流很容易但很慢。寻找并行化机会!

## 有用的资源 🔗

- [工作流文档](https://learn.microsoft.com/en-us/agent-framework/user-guide/workflows/overview) —— 官方 Microsoft 指南
- [编排模式](https://www.ibm.com/think/topics/ai-agent-orchestration) —— IBM 的看法
- [Agent Framework GitHub](https://github.com/microsoft/agent-framework) —— 浏览源代码
- [代码示例](https://github.com/microsoft/agent-framework/tree/main/python/samples) —— 从这里窃取模式

---

**准备好迎接大结局了吗？** 你有了脚本。现在让我们把它变成真实的音频！→ [第三幕：让你的播客活起来](03.Multi-SpeakerPodcastGenerationWithVibeVoice.md) 🎤

---

**卡住了？困惑了？兴奋了？** 在工作坊聊天中分享！我们一起学习。🚀
