Files
AIEC_Skills/.claude/skills/meeting-minutes-generator-v1/架构设计精要.md
2025-12-01 09:31:29 +08:00

12 KiB
Raw Blame History

工程类会议纪要生成系统 - 架构设计精要

一、核心设计原则

分阶段生成策略

核心思想:按照会议纪要的章节顺序,分阶段提取信息并生成,而不是一次性提取所有信息。

优势

  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: 读取周报和上周纪要(主窗口)

**执行**
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

**调用**
Task(
  subagent_type="transcript_indexer",
  description="构建会议转写索引",
  prompt="构建会议转写索引"
)

**Agent处理**
- 分块读取会议转写2000行/块overlap 100
- 为每块打语义标签
- 输出索引到 temp/transcript_index.json

**返回**
"✅ 索引构建完成共8块识别10个主题"

Phase 2: 分章节提取与生成

步骤 2.1: 生成"一、会议信息"(主窗口)

**数据来源**
- 会议时间:从会议转写文件名提取
- 参会人员:从周报文件名提取
- 记录人:固定"Claude"

**处理**主窗口直接生成无需Agent

**输出**
section_1 = """
一、会议信息
- 会议时间2025-11-18
- 参会人员:闫旭隆、江争达、...
- 记录整理人Claude
"""

步骤 2.2: 生成"二-1. 重点项目进展情况汇总"(主窗口)

**数据来源**
- 上周P0任务last_week_p0_tasks
- 本周P0任务members_data[*].p0_tasks

**处理**:主窗口直接处理
1. 取并集上周P0  本周P0
2. 对每个P0任务
   - 从周报提取进展情况
   - 如果周报无记录 → 标记"未完成"

**输出**
section_2_1 = """
### 1. 重点项目进展情况汇总
| 项目名称 | 负责人 | 截止时间 | 项目进展情况 |
|---------|--------|----------|-------------|
| ... | ... | ... | ... |
"""

**注意**此章节不需要会议转写仅展示P0追踪

步骤 2.3: 生成"二-2. 重点项目问题及解决方案"Agent + 主窗口)

**步骤 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 + 主窗口)

**步骤 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 + 主窗口)

**步骤 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 + 主窗口)

**步骤 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: 最终输出

**执行**:主窗口

**操作**
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失败不影响其他章节生成