# 工程类会议纪要生成系统 - 架构设计精要 ## 一、核心设计原则 ### 分阶段生成策略 ⭐⭐⭐ **核心思想**:按照会议纪要的章节顺序,分阶段提取信息并生成,而不是一次性提取所有信息。 **优势**: 1. 每阶段任务量适中,Agent负载可控 2. 可逐步验证结果质量 3. 出现问题可重新搜索单个阶段 4. 符合人类编写纪要的思维习惯 --- ## 二、整体架构概览 ``` 主窗口 (SKILL.md) 职责:流程编排 + 分阶段调度 + 逐章节生成 Phase 1: 准备阶段 ├── 读取周报(主窗口) ├── 读取上周纪要(主窗口) └── 构建索引(Agent: transcript_indexer) 输出:temp/transcript_index.json Phase 2: 分章节提取与生成(主窗口调度 + Agent执行) ├── 2.1 生成"一、会议信息"(主窗口,无需会议转写) ├── 2.2 生成"二-1. 重点项目进展情况汇总"(主窗口,主要用周报) ├── 2.3 生成"二-2. 重点项目问题及解决方案" │ ├── 调用Agent提取问题讨论 │ └── 主窗口合并周报问题 ├── 2.4 生成"二-3. 下周工作安排" │ ├── 调用Agent提取任务安排 │ └── 主窗口合并周报计划 ├── 2.5 生成"二-4. 组内成员工作进展" │ ├── 并行调用多个Agent提取成员反馈 │ └── 主窗口整合周报+反馈+任务 └── 2.6 生成"三、会议总结" ├── 调用Agent提取决策 └── 主窗口从已生成内容归纳总结 Phase 3: 最终输出 └── 主窗口组装完整Markdown并输出文件 ``` --- ## 三、职责分配 ### 主窗口 (SKILL.md) **负责**: - 流程编排(按章节顺序调度) - 读取小文件(周报、上周纪要) - 跨源数据合并(会议 + 周报 + 上周纪要) - 逐章节生成Markdown - 最终文件组装输出 **不负责**: - 读取大文件(会议转写) - 分块处理逻辑 - 复杂语义分析 ### Agent 1: transcript_indexer **输入**:无(路径固化) **职责**:分块读取会议转写,构建语义索引 **输出**: - 文件:`temp/transcript_index.json` - 返回:摘要文字 ### Agent 2: transcript_searcher **输入**:搜索意图(自然语言) **职责**:基于索引提取特定信息 **输出**:JSON字符串(直接返回) **特点**:轻量级,可多次调用 --- ## 四、分阶段执行详细设计 ### Phase 1: 准备阶段 #### 步骤 1.1: 读取周报和上周纪要(主窗口) ```markdown **执行**: 1. Glob: `input/成员本周周报/*.md` 2. 提取每个周报:姓名、P0任务、问题、下周计划 3. Glob: `input/上周会议纪要/*.md` 4. 提取"下周工作安排"表格的P0任务 **输出数据结构**: members_data = { "闫旭隆": { "p0_tasks": [...], "problems": [...], "next_plan": [...] }, ... } last_week_p0_tasks = [...] ``` #### 步骤 1.2: 构建会议转写索引(Agent) ```markdown **调用**: Task( subagent_type="transcript_indexer", description="构建会议转写索引", prompt="构建会议转写索引" ) **Agent处理**: - 分块读取会议转写(2000行/块,overlap 100) - 为每块打语义标签 - 输出索引到 temp/transcript_index.json **返回**: "✅ 索引构建完成,共8块,识别10个主题" ``` --- ### Phase 2: 分章节提取与生成 #### 步骤 2.1: 生成"一、会议信息"(主窗口) ```markdown **数据来源**: - 会议时间:从会议转写文件名提取 - 参会人员:从周报文件名提取 - 记录人:固定"Claude" **处理**:主窗口直接生成,无需Agent **输出**: section_1 = """ 一、会议信息 - 会议时间:2025-11-18 - 参会人员:闫旭隆、江争达、... - 记录整理人:Claude """ ``` #### 步骤 2.2: 生成"二-1. 重点项目进展情况汇总"(主窗口) ```markdown **数据来源**: - 上周P0任务:last_week_p0_tasks - 本周P0任务:members_data[*].p0_tasks **处理**:主窗口直接处理 1. 取并集(上周P0 ∪ 本周P0) 2. 对每个P0任务: - 从周报提取进展情况 - 如果周报无记录 → 标记"未完成" **输出**: section_2_1 = """ ### 1. 重点项目进展情况汇总 | 项目名称 | 负责人 | 截止时间 | 项目进展情况 | |---------|--------|----------|-------------| | ... | ... | ... | ... | """ **注意**:此章节不需要会议转写(仅展示P0追踪) ``` #### 步骤 2.3: 生成"二-2. 重点项目问题及解决方案"(Agent + 主窗口) ```markdown **步骤 2.3.1: 提取会议问题讨论(Agent)** 调用: Task( subagent_type="transcript_searcher", description="提取问题讨论", prompt=f""" 提取会议中讨论的所有问题及解决方案。 已知问题(来自周报):{members_data[*].problems} 需提取字段: - 问题标题 - 问题描述 - 解决方案(列表) - 责任人 - 截止时间 返回JSON格式。 """ ) **步骤 2.3.2: 合并数据(主窗口)** 1. 接收Agent返回的problem_results 2. 与周报problems对比去重 3. 互补合并:周报简述 + 会议详细方案 **输出**: section_2_2 = """ ### 2. 重点项目问题及解决方案 #### 问题1: ... **问题描述**: ... **解决方案**: 1. ... **责任人**: ... **截止时间**: ... """ ``` #### 步骤 2.4: 生成"二-3. 下周工作安排"(Agent + 主窗口) ```markdown **步骤 2.4.1: 提取会议任务安排(Agent)** 调用: Task( subagent_type="transcript_searcher", description="提取任务安排", prompt=f""" 提取会议中讨论的下周工作安排。 已知P0任务:{last_week_p0_tasks} 需提取字段: - 任务名称 - 负责人 - 任务描述 - 优先级(从讨论语气判断P0/P1/P2) - 截止时间 返回JSON格式。 """ ) **步骤 2.4.2: 合并数据(主窗口)** 1. 接收task_results 2. 与周报next_plan合并去重 3. 冲突时会议优先 4. 排序:P0 → P1 → P2 **输出**: section_2_3 = """ ### 3. 下周工作安排 | 项目名称 | 负责人 | 下周会前目标 | 优先级 | 截止时间 | |---------|--------|------------|--------|----------| | 🔴 ... | ... | ... | P0 | ... | | ... | ... | ... | P1 | ... | """ **保存**:next_week_tasks(供后续章节使用) ``` #### 步骤 2.5: 生成"二-4. 组内成员工作进展"(并行Agent + 主窗口)⭐ ```markdown **步骤 2.5.1: 并行提取成员反馈(多个Agent)** 一次性并行调用: for member in members: Task( subagent_type="transcript_searcher", description=f"提取{member}反馈", prompt=f""" 提取会议中对 {member} 的反馈(表扬/批评/建议)。 {member}的周报内容:{members_data[member]} 需提取字段: - 反馈类型(表扬/批评/建议) - 反馈内容 返回JSON格式。 """ ) **步骤 2.5.2: 整合数据(主窗口)** 对每个成员: 1. 上周完成:从周报提取 2. 进行中:从周报提取 3. 收到反馈:从Agent返回提取 4. 下周任务:从next_week_tasks筛选该成员 + 周报计划去重 **输出**: section_2_4 = """ ### 4. 组内成员工作进展 #### 闫旭隆 **上周完成**: - ✅ ... **收到的反馈/学习建议**: - ... **下周任务**: - [ ] 🔴 P0|... - [ ] P1|... """ **并行优势**:成员反馈提取互不依赖,可同时执行(4-5个Agent并行) ``` #### 步骤 2.6: 生成"三、会议总结"(Agent + 主窗口) ```markdown **步骤 2.6.1: 提取决策(Agent)** 调用: Task( subagent_type="transcript_searcher", description="提取决策事项", prompt=""" 提取会议中的所有关键决策。 特征词:"决定"、"确定"、"采用"、"要求" 需提取字段: - 决策内容 - 决策上下文 返回JSON格式。 """ ) **步骤 2.6.2: 归纳总结(主窗口)** 1. 核心议题:从decision_results + next_week_tasks提取高频项目 2. 关键决策:从decision_results提取 3. 下周重点:从next_week_tasks提取P0任务 **输出**: section_3 = """ 三、会议总结 **核心议题**: ... **关键决策**: 1. ... **下周工作重点**: 1. ... """ ``` --- ### Phase 3: 最终输出 ```markdown **执行**:主窗口 **操作**: 1. 组装所有章节: final_content = section_1 + section_2_1 + section_2_2 + ... 2. 格式化检查 3. 写入文件:`output/工程类会议纪要_{date}_第X次周会.md` ``` --- ## 五、关键设计决策 ### 1. 为什么分阶段而不是一次性提取? ❌ **一次性提取(原方案)**: - 同时发起7-8个Agent(任务、问题、决策、4-5个成员反馈) - 任务量大,Agent负载重 - 难以验证中间结果 - 出错需全部重来 ✅ **分阶段提取(新方案)**: - 每阶段1-2个Agent任务(成员反馈可并行) - 任务量适中 - 可逐步验证 - 符合章节生成顺序 ### 2. 哪些阶段可以并行? **可并行**(步骤2.5): - 成员反馈提取(4-5个Agent同时执行) - 原因:每个成员独立,互不依赖 **必须串行**: - 其他章节(有数据依赖) - 例如:section 2.4生成的next_week_tasks被section 2.5使用 ### 3. 数据传递策略 **Agent → 主窗口**: - ✅ 直接返回JSON字符串 - ❌ 不写temp文件(除了索引) - 原因:单次提取结果<10k tokens,直接传递高效 **主窗口内部**: - 使用变量传递中间结果 - 例如:next_week_tasks在步骤2.4生成,步骤2.5使用 ### 4. 主窗口 vs Agent 决策原则 ⭐本项目专用 ``` 任务是否需要读取会议转写? ├── 否 → 主窗口直接处理 │ ├── 会议信息(从文件名提取) │ └── 项目进展(仅用周报,不参考会议转写) │ └── 是 → **必须调用 transcript_searcher Agent** ├── Agent读取语义索引(temp/transcript_index.json) ├── 定位相关块(基于has_*字段和语义匹配) ├── 精确读取会议转写片段(基于行号范围) └── 语义提取信息并返回JSON ⚠️ 重要: - 本项目所有会议转写信息提取都需要语义理解 - 不存在简单关键词搜索场景 - 不使用Grep工具(会议转写72k tokens,需深度语义分析) ``` --- ## 六、完整执行流程总结 ``` Phase 1: 准备 ├── 主窗口读周报、上周纪要 └── Agent构建索引 → temp/transcript_index.json Phase 2: 逐章节生成 ├── 2.1 会议信息(主窗口直接生成) ├── 2.2 项目进展(主窗口用周报生成) ├── 2.3 问题方案 │ ├── Agent提取会议问题 │ └── 主窗口合并周报问题 ├── 2.4 下周安排 │ ├── Agent提取会议任务 │ └── 主窗口合并周报计划 ├── 2.5 成员进展 │ ├── 并行Agent提取反馈(4-5个)⭐ │ └── 主窗口整合周报+反馈+任务 └── 2.6 会议总结 ├── Agent提取决策 └── 主窗口归纳总结 Phase 3: 输出 └── 主窗口组装Markdown并写文件 ``` **关键特点**: - ✅ 分阶段执行,任务量可控 - ✅ 仅成员反馈提取并行(4-5个Agent) - ✅ 其他阶段串行,确保数据依赖 - ✅ 主窗口负责跨源合并与生成 - ✅ Agent专注会议转写信息提取 --- ## 七、预估Token消耗 ``` Phase 1: - 读周报(4个×3k): 12k - 读上周纪要: 5k - Agent构建索引: 72k(读会议转写) 小计: ~89k Phase 2: - Agent提取问题: 5k(读索引) - Agent提取任务: 5k - Agent提取决策: 5k - Agent提取反馈×4: 20k(并行) - 主窗口处理: 10k 小计: ~45k Phase 3: - 主窗口生成输出: 5k 总计: ~140k tokens(远低于200k限制) ``` --- ## 八、后续优化方向 1. **动态调整**:如果某章节提取不理想,可重新搜索 2. **增量生成**:边提取边展示部分结果给用户 3. **质量检查**:主窗口可验证Agent返回的JSON完整性 4. **错误恢复**:某Agent失败不影响其他章节生成