Files
AIEC_Skills/.claude/skills/meeting-minutes-generator-v1/架构设计精要.md
2025-12-11 14:19:36 +08:00

518 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 工程类会议纪要生成系统 - 架构设计精要
## 一、核心设计原则
### 分阶段生成策略 ⭐⭐⭐
**核心思想**:按照会议纪要的章节顺序,分阶段提取信息并生成,而不是一次性提取所有信息。
**优势**
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失败不影响其他章节生成