120 lines
7.8 KiB
YAML
120 lines
7.8 KiB
YAML
name: office-process
|
||
description: |
|
||
Excel, Word, PowerPoint, PDF ファイルの読み取り・編集・変換・文書生成。
|
||
売上集計、議事録作成、スライド内容の抽出、PDF 読み取りなどに適する。
|
||
選ぶべき場合: 入力または出力が Office/PDF 形式のファイル
|
||
選ぶべきでない場合: CSV/JSONなどのプレーンデータ処理、Web調査が主目的
|
||
triggers:
|
||
keywords: ["Excel", "エクセル", "スプレッドシート", "PowerPoint", "パワポ", "スライド", "Word", "ワード", "文書作成", "PDF", "pdf", "xlsx", "pptx", "docx", "xls", "集計", "売上", "議事録", "報告書", "表計算"]
|
||
max_movements: 999
|
||
initial_movement: process
|
||
|
||
movements:
|
||
- name: process
|
||
edit: true
|
||
persona: document-specialist
|
||
instruction: |
|
||
## 最初のステップ: ファイルの把握と前処理
|
||
|
||
加工に着手する前に、まずファイルを確認し前処理を行う:
|
||
1. Glob でワークスペース全体のファイル一覧を確認する(`**/*.xlsx`, `**/*.docx`, `**/*.pptx`, `**/*.pdf`。input/ だけでなくルート直下も含む)
|
||
2. ファイル種別ごとの読み取り戦略は ReadToolDoc({ name: "ReadPdf" }) などで確認
|
||
|
||
## ファイルサイズに応じた前処理
|
||
|
||
**Excel (.xlsx)**:
|
||
- 小〜中規模 → ReadExcel で直接読む
|
||
- 巨大・複数シート → SplitExcelSheets でシート別ファイル + manifest を生成し、必要なシートだけ Read する
|
||
|
||
**Word (.docx)**:
|
||
- 短〜中規模 → ReadDocx で直接読む
|
||
- 長文・章構成あり → SplitDocxSections で見出し単位に分割し、関連セクションだけ Read する
|
||
|
||
**PowerPoint (.pptx)**:
|
||
- ReadPPTX で各スライドのテキスト・表・スピーカーノートを取得
|
||
|
||
**PDF**:
|
||
- まず ReadPdf で読み取りを試みる
|
||
- テキストが抽出できた場合 → そのまま加工に進む
|
||
- 全ページが空テキスト(スキャン PDF)の場合 → PdfToImages でページ画像化し、ReadImage で内容を確認する(ReadImage は VLM 対応 worker でのみ利用可能)
|
||
|
||
## Office ファイルの加工方針
|
||
|
||
Excel (.xlsx) の編集:
|
||
- python3 + openpyxl で編集できる(Bash で `python3 -c "..."` または `python3 << 'EOF'`)
|
||
- 元ファイルを直接上書き保存してよい。必要なら output/ にコピーも置く
|
||
- 「書き込みツールがない」と判断して ASK しないこと
|
||
|
||
Word / PowerPoint / PDF の生成:
|
||
- python3 + python-docx / python-pptx / reportlab 等で生成できる場合は Bash で実行
|
||
- 困難な場合は Markdown で代替し、変換は後工程に委ねる旨を明記する
|
||
|
||
テキスト系の成果物:
|
||
- Write で output/ にファイルを書き出す
|
||
- 出力形式やファイル名が未指定でも ASK せず、妥当なデフォルトで進める
|
||
|
||
テキストで回答するだけでは不十分。必ずファイルを生成・編集すること。
|
||
前のステップから指摘事項がある場合は、それに対応すること。
|
||
「これまでのレビュー指摘」「現在の変更状況」「変更差分」の付録がある場合は、そこに書かれた不足点から優先的に解消すること。
|
||
指摘事項は「問題点」「期待する修正」「合格基準」まで含めて渡される。各項目を漏れなく解消すること。
|
||
|
||
## 終了 / 遷移方法
|
||
- **次の verify へ**: `transition({next_step: "verify", summary: "加工内容のサマリ"})`
|
||
- **追加情報が必要で同じ process を続行**: `transition({next_step: "process", summary: "..."})`
|
||
- **対象が特定できずユーザー確認が必要**: `complete({status: "needs_user_input", missing_info: "...", why_no_default: "..."})`
|
||
- **読み取り不能・対応外フォーマット等の技術的失敗**: `complete({status: "aborted", abort_reason: "..."})`
|
||
allowed_tools: [Read, Write, Bash, Glob, Grep, ReadExcel, ReadDocx, ReadPdf, ReadPPTX, SplitExcelSheets, SplitDocxSections, PdfToImages, ReadImage, WebSearch, WebFetch, DownloadFile, SQLite, TranscribeAudio, SearchKnowledge, ListNamespaces, ListDocuments, ReadToolDoc, 'mcp__*']
|
||
default_next: verify
|
||
rules:
|
||
- condition: output/ に成果物を書き出した(または既存ファイルを編集した)
|
||
next: verify
|
||
- condition: 追加情報が必要
|
||
next: process
|
||
|
||
- name: verify
|
||
edit: false
|
||
persona: reviewer
|
||
instruction: |
|
||
output/ の成果物を確認する。
|
||
|
||
確認手順:
|
||
1. まず Glob で output/ 内のファイル一覧を確認する(既存 Office ファイルの編集の場合はそのファイルも対象)
|
||
2. 成果物が1つもなければ「修正が必要」と判断し process に差し戻す
|
||
3. 成果物があれば適切なツール(ReadPdf / ReadExcel / ReadDocx / ReadPPTX / Read 等)で内容を確認し、指示通りか・品質は十分かをチェックする
|
||
4. 不足や誤りがあれば、`transition({next_step: "process", summary: ...})` で差し戻す。summary は次の形式で書く:
|
||
[判定] needs_fix
|
||
## 問題点
|
||
- [ファイル名:行番号またはシート名・スライド番号など] 何が問題か
|
||
## 期待する修正
|
||
- 何をどう直すべきか
|
||
## 合格基準
|
||
- 再レビューで何を確認するか
|
||
## 次にやること
|
||
- process で最初に着手すべき具体的な修正
|
||
5. summary は抽象論で終えず、変更ファイル・不足点・期待する修正内容を必ず含める
|
||
6. 外部仕様や一次情報の確認が必要でも ASK しないこと。process は WebSearch / WebFetch を使えるので、確認すべき論点と修正方針を summary に具体的に書いて差し戻すこと
|
||
|
||
## チェックシート確認
|
||
GetChecklist でチェックシートが存在する場合、全アイテムが完了(done/failed/skipped)していることを確認する。
|
||
remaining が 0 でないまま完了してはならない。
|
||
|
||
## 合格時のユーザーへの返答(complete ツール)
|
||
output/ の内容で合格と判断したら、`complete({status: "success", result: ...})` を呼ぶ。
|
||
result はそのままユーザーに表示される最終回答。output/ のファイルを適切なツールで読み、その内容をベースに整形する。
|
||
- 「output/xxx.xlsx を確認してください」のようなファイル参照ではなく、内容そのものを回答として返すこと
|
||
- 【厳守】「✅ 完了」「成果物を作成しました」「確認しました」等のステータス表示・メタ説明・内部作業の報告は一切書かない。1行目からいきなり本題の内容を書き始めること
|
||
- 成果物の内容を会話調で分かりやすく伝える
|
||
- 表・リスト・見出しなど Markdown 書式を活用して読みやすくする
|
||
- 長大な成果物の場合は要点を構造化して提示し、詳細は省略してよい
|
||
- 補足や注意点があれば末尾に添える
|
||
|
||
## 終了方法のまとめ
|
||
- 合格: `complete({status: "success", result: "ユーザー向け最終回答"})`
|
||
- 修正必要: `transition({next_step: "process", summary: "差し戻し指摘"})` (上記形式で)
|
||
- 技術的失敗: `complete({status: "aborted", abort_reason: "..."})`
|
||
allowed_tools: [Read, Glob, Grep, ReadPdf, ReadImage, ReadExcel, ReadDocx, ReadPPTX, ReadToolDoc]
|
||
default_next: COMPLETE
|
||
rules:
|
||
- condition: 成果物がない、または内容に不足・誤りがある
|
||
next: process
|