会議音声の自動書き起こしと議事録生成システムです。
本システムの利用には以下が必要です。
- 音声データからの文字起こしに必要なライブラリ等を格納した Singularity コンテナ
- Speech-to-Text モデルの実行に必要な NVIDIA GPU
- 文字起こしデータの要約に必要な Claude.ai のアカウント
- プロジェクト情報を記述した Markdown 形式のファイル(
docs/project.md)
RIKEN R-CCS Cloud のユーザーであれば、以下の資源を利用できます。
- Singularity コンテナのレシピは RIKEN-RCCS GitHub で公開されています。
trans.shが GPU を搭載した計算ノード(L40S、GH200)を自動選択してジョブを投入します。
オーディオ/ビデオ
↓
[whisper_vad.py](SLURM ジョブ)
↓
文字起こしテキスト(発言者識別付き)
↓
[generate_minutes.py](Claude CLI) ← 推奨
または
[generate_minutes_local.py](ローカル LLM・vLLM)
↓
構造化議事録(決定事項 / アクションアイテム / 議事内容)
Minutes/
├── README.md # 本ファイル
├── CLAUDE.md # Claude Code プロジェクト説明
├── docs/
│ └── project.md # プロジェクト情報(概要・参加者・用語集)
├── scripts/
│ ├── trans.sh # SLURM バッチ書き起こしスクリプト
│ ├── whisper_vad.py # 主書き起こしスクリプト(Whisper + PyAnnote + VAD)
│ ├── generate_minutes.py # 議事録生成スクリプト(Claude CLI 使用)
│ └── generate_minutes_local.py # 議事録生成スクリプト(ローカル LLM 使用)
├── data/
│ └── input/ # 入力オーディオ/ビデオファイルおよび文字起こしテキスト(.md)
└── minutes/ # 生成された議事録
├── YYYY-MM-DD-timestamp-file-md-minutes.md
└── YYYY-MM-DD-timestamp-file-combined.txt # Stage 1 キャッシュ(再実行用)
docs/project.md にプロジェクトの概要・参加者・固有の用語などを Markdown 形式で記述します。
Claude CLI による要約の品質向上に活用されます。以下のセクションを含めると効果的です。
### プロジェクト概要
### ステークホルダー
### 主なプロジェクト参加者
### プロジェクト固有の用語
### 内部・外部の境界
### 会議の種類と頻度注意:
trans.shは R-CCS Cloud のログインノードから実行してください(SLURM ジョブ内からは実行できません)。
音声/動画ファイルを data/input/ に置き、R-CCS Cloud のログインノードから以下を実行します。
bash scripts/trans.sh data/input/meeting.mp4
# 冒頭 30 秒をスキップする場合
bash scripts/trans.sh data/input/meeting.mp4 --skip 30書き起こし完了後、自動で議事録も生成されます。
sinfo でパーティションの空き状況を確認し、以下の優先順位でジョブを投入します。
ai-l40sに空きあり →--gpus=1付きで投入ai-l40sが満杯・qc-gh200に空きあり → GPU 指定なしで投入- 両方混雑 →
ai-l40sにデフォルト投入
出力ファイル:
- 文字起こし:
data/input/meeting.md(入力ファイルと同名、拡張子を.mdに変換) - 議事録:
minutes/YYYY-MM-DD-timestamp-meeting-md-minutes.md
Claude CLI が使えない環境向けに、OpenAI 互換 API を持つローカル LLM(vLLM)で議事録を生成するスクリプトも用意しています。
単純な単一パス生成では会議後半が欠落しやすい問題(Lost in the Middle)を解決するため、以下の3ステージ方式を採用しています。
Stage 1: 文字起こしを 10 分チャンクに分割して各チャンクから事実を抽出
→ minutes/*-combined.txt にキャッシュ保存
Stage 2: 全チャンク要約を統合して議事内容(6-8 節)を生成
Stage 3: 同じチャンク要約から決定事項・アクションアイテムを抽出
| モデル | 評価 | 所要時間 | 備考 |
|---|---|---|---|
| Nvidia Nemotron-3-Super-120B | △ | 長い | 単一パス。Lost in the Middle で会議後半が欠落。--think は終了しなくなるため非推奨 |
| GLM-4.7-Flash(RiVault) | △ | 速い | chat template トークンが出力に混入。後処理でフィルタ追加で対応 |
| Qwen3-Swallow-32B-RL-v0.2(dense) | ○ | 約60分 | 高品質。常時 reasoning モード。--think --no-chat-template-kwargs が必要 |
| Kimi-K2-Thinking(RiVault) | ✗ | − | RiVault の 60 秒 gateway timeout により長文生成で 504 エラー。実用不可 |
| Qwen3-Swallow-30B-A3B-RL-v0.2(MoE) | ◎ | 約20分 | 現在の推奨。 dense 比約2倍速で品質は同等 |
| 観点 | Claude CLI | ローカル LLM(Qwen3-Swallow MoE) |
|---|---|---|
| プロジェクト文脈の活用 | CLAUDE.md を自動読み込み、プロンプト不要 |
docs/project.md をプロンプトに埋め込んで対応 |
| 議事内容の網羅性 | 安定して高品質 | マルチステージ方式で実用レベルに到達 |
| 固有名詞の正確性 | ほぼ正確 | 目視確認を推奨 |
| 実行環境 | Claude CLI が必要 | vLLM サーバーがあれば動作 |
| 所要時間 | 数分 | 約20分(MoE) |
生成結果の確認・修正コストを考慮すると、議事録生成用途では Claude CLI(generate_minutes.py)の利用を推奨します。ただし vLLM 環境が整っていれば generate_minutes_local.py も実用的な品質で動作します。