Community寫作與編輯github.com

px-summarize-transcript

從會議記錄 (.vtt, Teams 複製貼上 .txt 或 Markdown .md) 中萃取出決策、陳述、行動項目與待解決問題,並附上發言者、時間戳與逐字證據,輸出成連結的組合包,存放在會議記錄旁。

px-summarize-transcript 是什麼?

此技能專門處理會議記錄,能自動辨識 .vtt、Teams 貼上格式的 .txt 或 .md 檔案,並從中提取四類關鍵資訊:決策、重要陳述、行動項目與待解決問題。每個項目都會附帶發言者標籤、時間戳記(若有的話)與逐字引用,確保可追溯性。它還能將行動項目指派負責人、追蹤前次會議遺留事項,並將會議記錄歸檔至系列資料夾中。支援平台包含 Claude Code 等終端機式 AI 代理,透過 Python 腳本(位於 ./scripts/)運作,無需額外依賴。此技能特別適合需要產出高品質會議記錄摘要、並與專案文件比對的開發團隊。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/prodagenx/px-summarize-transcript/tree/HEAD

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

px-summarize-transcript 是做什麼的?

將會議記錄轉換成有證據支援的記錄,包含決議事項、重要事實陳述以及後續負責人。每個項目均標示發言者、時間戳(若記錄有提供)與逐字引用。Python 腳本負責機械性工作(解析、檔案命名、前置資料與引用檢查),您則負責推理判斷。

使用時機

  • 當有 .vtt、貼上到 .txt 或 .md 的 Teams 會議記錄、[發言者] YYYY-MM-DD HH:MM:SS 格式的 Markdown 記錄,或是 姓名: 內容 行需要萃取出決策與行動項目時。
  • 有人問誰說了什麼、同意什麼、或誰負責後續追蹤時。
  • 有人問在週期性會議系列中,前次會議未解決的事項時。
  • 需要將會議結果與專案文件核對時。

組合包佈局(固定)

所有檔案均放置在會議記錄本身的資料夾中,並共用相同的檔案名稱,僅副檔名不同。您不能寫到其他位置。如果使用者要求另一個資料夾,請解釋組合包必須與其會議記錄共存。file_transcript.py 可將整個組合包移到系列資料夾中,且所有元件一定會一起移動。

檔案角色
<基底>.vtt / .txt / .md原始會議記錄。.md 與 .txt 會就地合併前置資料;既有的鍵值絕不修改。
<基底>.source.md僅限 .vtt:一個小型 Markdown「側車」檔案,用來存放 .vtt 的前置資料,因為 .vtt 檔案開頭必須是 WEBVTT,無法直接包含前置資料。
<基底>.turns.md發言索引。建立後絕不重寫,除非您傳入 --rebuild。
<基底>.summary.md報告。重新執行會寫入 <基底>.summary.v2.md、.v3,依此類推。

格式與鍵值:輸入格式、前置資料規格。

作業程序

腳本位於此 SKILL.md 旁邊的 ./scripts/ 目錄中。終端機起始目錄為使用者的工作區,因此請先解析技能資料夾的絕對路徑(個人安裝通常位於 ~/.claude/skills/px-summarize-transcript 或 ~/.agents/skills/px-summarize-transcript),並在每個終端機中設定一次:

$S = "<此技能的絕對路徑>\scripts"      # PowerShell
S="<此技能的絕對路徑>/scripts"          # bash / zsh

以下指令使用 PowerShell("$S\build_turns.py")。在 bash 中請寫 "$S/build_turns.py"。腳本僅使用標準程式庫(Python 3.10+)。請將路徑用引號包起來,因為檔案名稱常包含空格。

一次只處理一份會議記錄。如需處理整個資料夾或「所有待辦項目」,請參閱多份會議記錄。

  1. 歸檔會議記錄(選擇性)。 在使用者要求時,或當工作區將會議記錄存放在系列資料夾中(例如 transcripts/<系列>/)且此記錄尚未歸檔時執行。--root 預設為 ./transcripts。

    python "$S\file_transcript.py" --list --root "<根目錄>"
    python "$S\file_transcript.py" "<會議記錄>" --series "<系列>" --root "<根目錄>"
    

    重複使用合適的現有系列。若無合適的系列,請提出簡短的 kebab-case 名稱並在使用者確認後才建立。然後根據 status 執行對應動作:

    • moved:使用新的 source 路徑繼續。
    • already-filed:會議記錄已在根目錄下的某個資料夾內,或已在以系列命名的資料夾內。未移動任何檔案,因此請繼續。
    • duplicate:相同的會議記錄已存在於 duplicate_of。停止並詢問使用者要處理哪一份副本。請勿刪除任一檔案。
    • conflict(結束代碼 2):系列資料夾中已有同名但內容不同的檔案。停止並詢問使用者。
  2. 建立發言索引。

    python "$S\build_turns.py" "<會議記錄>"
    

    它會偵測格式,在 <基底>.turns.md 尚不存在時建立該檔案,蓋上來源(或側車檔案)戳記,並輸出 JSON。請保留 turns_path、turns_status、summary_path、has_timestamps、speakers、meeting_date、meeting_date_source、gaps、previous_meeting_summary 與 transcription。

    • turns_status: created 或 kept:繼續。kept 表示現有的發言索引已與會議記錄相符,因此未重寫任何內容。
    • turns_status: source-changed(結束代碼 3):會議記錄在發言索引建立後被編輯過,且現有的報告參照了舊的發言 ID。停止並詢問使用者,然後再以 --rebuild 重新執行。
    • 不支援的格式錯誤(結束代碼 2):告知使用者支援哪些格式並停止。
    • meeting_date 為 null:除非使用者提供日期,否則請寫「未指明」。
  3. 完整讀取發言索引,分段讀取直到結束。絕對不要從部分讀取中擷取內容。

  4. 對應發言者。 為報告的「發言者表格」中的每個發言者標籤建立一行:標籤、顯示名稱,以及您如何辨識該發言者。

    • 僅在有證據時才顯示不同名稱:該人被人以名稱稱呼、自我介紹,或該標籤是明顯的拼寫錯誤。請記錄證據。
    • 會議室裝置的標籤保留為該會議室。列出在該處被聽到或被稱呼的人,除非會議記錄明確指出,否則不要將其發言歸給單一某人。
    • 僅出現在 Transcription: 標題行中的人名代表有出席但未必有發言。
    • 列出被提及但未發言的人,並附上被提及的位置。
    • 僅在明確無歧義時才將名字解析為全名。
  5. 擷取項目,使用以下測試:

    • 決策: 在選項中做出或接受了選擇(「就用」、「同意」、「我們會做」,或無反對意見的提案)。狀態:已同意、暫定、或已提議。
    • 重要陳述: 若為錯誤則會改變範圍、設計、時程、成本或風險的內容:關於系統的事實、限制、依賴關係、數字、日期、承諾、已陳述的風險。不包含閒聊或重述。目標為 12 項或更少,透過合併相關陳述達成。
    • 行動項目: 包含動詞的未來任務,被人要求或自願承擔(「我會」、「你可以」、「我們需要」)。
    • 待解決問題: 在會議進入下個主題前被提出但未解決的問題。
  6. 指派負責人到每個行動項目。負責人可以是任何被提到的人,包含缺席者。

    • 明確: 被指名且被要求,且未拒絕。
    • 自願: 發言者說「我會……」。
    • 委派: 指派給缺席或未發言的人。標記為 (未出席) 並記錄指派者。
    • 推斷: 根據陳述的角色或擁有權推斷。請寫下推理過程。
    • 未指派: 以上皆非。絕不要憑空發明負責人。

    僅在有人明確說出時才記錄截止日期。

  7. 為每個項目附加證據:

    • 有時間戳時:[T042 00:12:31 發言者] "逐字引用"。
    • 無時間戳時(has_timestamps: false):[T042 發言者] "逐字引用"。
    • 發言者 必須與發言索引中的標籤完全相同,即使發言者表格顯示不同名稱。在其他所有地方使用顯示名稱。
    • 引用為 25 個字詞或更少,完全複製,包含 ASR 錯誤。使用 ... 表示省略。當決策橫跨多個發言時,引用多個發言。
  8. 檢查遺留事項(僅在設定了 previous_meeting_summary 時)。僅讀取那份報告的「行動項目」與「待解決問題」表格。對於每個項目,從此份會議記錄判斷其狀態為:已完成、進行中、仍待解決、已放棄、或未提及,並引用證明該狀態的發言。未經有人明確表示,絕不可將項目標記為「已完成」。

  9. 撰寫報告到 summary_path,使用範本。僅寫入主體,不要加入前置資料。務必填寫「一覽」。僅在使用者指名讀者時才加入「給 <姓名>」,例如「給我,我是 Dana Ruiz」。絕不要假設讀者是誰。

  10. 標記轉錄注意事項: 可能的 ASR 錯誤、您透過推斷對應的發言者名稱,以及 gaps 中的每個項目(內容可能遺失)。絕不要默默修正引用。

  11. 驗證引用,直到所有失敗的行被修正或移除:

    python "$S\verify_quotes.py" "<摘要路徑>"
    
  12. 完成組合包。 從會議內容衍生出簡短標題以及 3 到 6 個主題標籤(小寫、kebab-case)。transcript 與 meeting-notes 會自動加入。

    python "$S\finalize_bundle.py" "<會議記錄>" --summary "<摘要路徑>" --title "<標題>" --tags "標籤一,標籤二" --alias "記錄中的標籤=顯示名稱" --mentioned "姓名(脈絡)" --meeting-date YYYY-MM-DD
    
    • 步驟 4 中您對應的每個發言者標籤,使用 --alias 重複一次。出席者則預設為顯示名稱。
    • 每位人員使用 --mentioned 重複一次。
    • 當您需要覆蓋出席者清單時,對每位人員使用 --attendee "姓名" 重複一次。--attendees "A, B (room: C, D)" 也可運作,因為 () 或 [] 內的逗號不會造成分割。
    • 僅在 meeting_date 為 null 且使用者提供日期時,才傳入 --meeting-date。
  13. 在聊天中簡短回報。請勿貼出表格。

    • 計數:決策、陳述、行動項目、待解決問題,以及遺留事項。
    • 「一覽」的項目符號。
    • 任何需要人工檢查的項目:推斷的發言者名稱、推斷或未指派的負責人、缺口,以及 ASR 注意事項。
    • 報告與發言索引的連結。

多份會議記錄

python "$S\scan.py" "<資料夾>" --recursive

它會列出每份會議記錄的狀態:new、turns-only、summarized 或 not-a-transcript。向使用者顯示待處理的項目(new 與 turns-only)並在開始前獲得確認。一次處理一份,以最舊的會議優先,這樣每個項目才能在其系列中找到前次會議。對每一份執行完整程序並回報,然後才開始下一份。

相關專案文件

如果工作區有相關的架構或規劃文件(包含其他組合包的摘要檔案),請填入選擇性的「相關專案文件」表格。註明每個項目是確認、矛盾、還是延伸了這些文件的記錄。

品質檢查

  • verify_quotes.py 通過且失敗數為 0。
  • 發言者表格為發言索引中的每個標籤都有一行,且每個名稱對應都有其證據說明。
  • 沒有負責人是未經明確、自願、委派或經解釋的推斷證據而命名。
  • 標記為「已同意」的決策顯示接受訊號,而非僅是建議。
  • 意見與推測已明確標示。
  • 未出席會議的負責人標記為 (未出席)。
  • gaps 中的每個項目都出現在「轉錄注意事項」下。
  • 當有前次會議時,其每個行動項目與待解決問題都有一行「遺留事項」。

舊版組合包

若要對齊舊版組合包(例如 input.txt 與 <資料夾>.turns.md 並存),請執行 python "$S\backfill.py" "<根目錄>" 進行試執行,然後使用 --apply。接著對每個組合包執行 finalize_bundle.py 並提供標題與標籤。Backfill 絕不會重新產生現有的發言索引,因此現有的引用會保持有效。

相關技能