Files
AIEC_Skills/.claude/skills/meeting-minutes-generator-v1/架构设计精要.md

518 lines
14 KiB
Markdown
Raw Normal View History

# 工程类会议纪要生成系统 - 架构设计精要
## 一、核心设计原则
### 分阶段生成策略 ⭐⭐⭐
**核心思想**:按照会议纪要的章节顺序,分阶段提取信息并生成,而不是一次性提取所有信息。
**优势**
1. 每阶段任务量适中Agent负载可控
2. 可逐步验证结果质量
3. 出现问题可重新搜索单个阶段
4. 符合人类编写纪要的思维习惯
### 三大核心规则 ⭐⭐⭐
1. **参会人员固定规则**:连云波(主持) 固定出现在参会人员首位 + 周报提交人员
2. **按项目维度合并规则**
- 以上周会议纪要"下周工作安排"中的项目为基准进行语义匹配
- 同一项目的多个子任务/问题合并为一项
- 由Claude自主判断是否属于同一项目不规定相似度阈值
3. **完成状态优先级规则**
- **会议讨论内容优先级 > 周报自述**
- 当会议反馈与周报状态冲突时,以会议为准
- 例如:周报写"已完成"但会议说"需要重写" → 进展应写"需要重写"
---
## 二、整体架构概览
```
主窗口 (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. 重点项目进展情况汇总"(主窗口 + Agent
```markdown
**数据来源**
- 上周P0任务last_week_p0_tasks作为项目基准
- 本周P0任务members_data[*].p0_tasks
- ⭐ 会议转写中的项目进展讨论Agent提取
**处理**
1.**以上周项目为基准,按项目维度合并**
- 本周P0与上周项目语义匹配
- 属于同一项目的任务合并为一行
- 由Claude自主判断不规定相似度
2. 调用Agent提取会议中的项目进展讨论
3.**完成状态优先级:会议讨论 > 周报自述**
- 会议有反馈 → 必须使用会议中的实际进展
- 会议无反馈 → 使用周报状态
- 都无 → 标记"未完成"
**输出**
section_2_1 = """
### 1. 重点项目进展情况汇总
| 项目名称 | 负责人 | 截止时间 | 项目进展情况 |
|---------|--------|----------|-------------|
| 会议纪要流程文档和现场测试 | 连云波/郝倩玉/闫旭隆 | 11月25日 | 郝倩玉完成需求文档撰写闫旭隆完成Skill第一版。会议讨论发现... |
"""
```
#### 步骤 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.**按项目维度合并问题**:同一项目的多个问题合并为一个问题块
3. 与周报problems对比去重
4. 互补合并:周报简述 + 会议详细方案
**输出**
section_2_2 = """
### 2. 重点项目问题及解决方案
#### 问题1: 会议纪要Skill相关问题
**问题描述**: (合并该项目的所有问题)...
**解决方案**:
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.**以上周项目为基准,按项目维度合并任务**
- 同一项目的不同子任务合并为一行
- 描述合并多个子任务内容
3. 与周报next_plan合并去重
4. 冲突时会议优先
5. 排序P0 → P1 → P2
**输出**
section_2_3 = """
### 3. 下周工作安排
| 项目名称 | 负责人 | 下周会前目标 | 优先级 | 截止时间 |
|---------|--------|------------|--------|----------|
| 🔴 会议纪要Skill优化 | 闫旭隆、郝倩玉 | 优化架构,尝试全量加载方案,简化流程 | P0 | 12月2日 |
| ... | ... | ... | 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失败不影响其他章节生成