Skip to content
Productivity
Skill

/live-transcript-summary

边听边总结:实时监听当前 WPS 笔记中的音频转写,每 60 秒自动循环一次,识别场景后按对应模板整理内容,并写回笔记。当用户提到正在录音、开会、听课、听播客、做采访、开始录制,或者希望 AI 帮忙整理、总结、记录当前正在发生的内容时使用此 skill。也适用于用户说「帮我跟着听」「你帮我记」「边听边整理」「录完帮我整理」「实时帮我总结」,或在笔记中输入 *** 希望 AI 结合录音补全内容的场景。

BOOST
From plugin
wpsnote-skills
18037 skills
Install
$ npx -y skills add wpsnote/wpsnote-skills --skill live-transcript-summary --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/live-transcript-summary

Context preview

The summary Claude sees to decide when to auto-load this skill.

边听边总结:实时监听当前 WPS 笔记中的音频转写,每 60 秒自动循环一次,识别场景后按对应模板整理内容,并写回笔记。当用户提到正在录音、开会、听课、听播客、做采访、开始录制,或者希望 AI 帮忙整理、总结、记录当前正在发生的内容时使用此 skill。也适用于用户说「帮我跟着听」「你帮我记」「边听边整理」「录完帮我整理」「实时帮我总结」,或在笔记中输入 *** 希望 AI 结合录音补全内容的场景。

SKILL.md

live-transcript-summary.SKILL.md
name: live-transcript-summary
description: 边听边总结:实时监听当前 WPS 笔记中的音频转写,每 60 秒自动循环一次,识别场景后按对应模板整理内容,并写回笔记。当用户提到正在录音、开会、听课、听播客、做采访、开始录制,或者希望 AI 帮忙整理、总结、记录当前正在发生的内容时使用此 skill。也适用于用户说「帮我跟着听」「你帮我记」「边听边整理」「录完帮我整理」「实时帮我总结」,或在笔记中输入 *** 希望 AI 结合录音补全内容的场景。
metadata:
  author: Yicheng Xu
  version: "2.3.0"
  tags: [audio, transcript, summary, real-time, wps-note]

边听边总结 Skill

实时监听当前 WPS 笔记中的音频录音转写,每 60 秒轮询一次,**只处理新增句子(增量模式)**,根据场景自动选择模板整理内容并写回笔记。

---

工具优先级

**优先使用 `wpsnote-cli`(CLI),不支持时才退回 MCP 工具调用。**

| 操作 | CLI 命令 | MCP 工具 | |------|----------|----------| | 获取当前笔记 | `wpsnote-cli current --json` | `get_current_note()` | | 获取大纲 | `wpsnote-cli outline --note_id ID --json` | `get_note_outline()` | | 获取转写 | `wpsnote-cli audio --shorthand_id ID --json` | `get_audio_transcript()` | | 搜索笔记 | `wpsnote-cli find --keyword KW --json` | `search_notes()` | | 搜索笔记内内容 | `wpsnote-cli search --note_id ID --query Q --json` | `search_note_content()` | | 插入内容 | `wpsnote-cli edit --json-args '...'` | `edit_block(op="insert")` | | 替换内容 | `wpsnote-cli edit --json-args '...'` | `edit_block(op="replace")` | | 批量编辑 | `wpsnote-cli batch-edit --json-args '...'` | `batch_edit()` |

> CLI 中 XML 含尖括号时,**统一用 `--json-args` 传 JSON 对象**,避免 shell 转义问题。

---

⚠️ 写入笔记时的强制规则

**`content` 参数必须是 XML 字符串,绝不能是数组或对象。**

// ✅ 正确
{ "content": "<h2>标题</h2><p>内容</p>" }

// ❌ 禁止——数组
{ "content": [{"type": "text", "text": "<h2>标题</h2>"}] }

// ❌ 禁止——对象
{ "content": {"type": "text", "text": "<h2>标题</h2>"} }

遇到 `BLOCK_NOT_FOUND` 或写入反复失败时,**第一步检查 `content` 是否为字符串**,再用 `outline` 刷新 block_id 后重试。

---

核心工作流

启动(仅一次):
  1. 检查 CLI 可用性
  2. 获取当前笔记 note_id
  3. 风格学习(搜索 3-5 篇历史同类笔记)
  4. 初始化状态文件
  5. 输出启动告知

loop(每 60 秒):
  1. 扫描笔记大纲,找 NoteAudioCard
  2. 全量拉取转写,过滤新增句子(start_time > last_end_time)
  3. 若无新增 → 检测临时区用户输入 → 更新状态 → sleep 60 → continue
  4. 首轮:场景识别 + 发言人推断
  5. 人名联动:提取人名 → 搜索笔记库 → 注入背景上下文
  6. 首轮:先输出内容地图,再开始写入
  7. 用新增句子生成摘要 XML
  8. 写回笔记(首轮在末尾插入;后续追加到 summary_anchor 之后,始终在临时区之前)
  9. 回扫大纲:核查新内容是否落在正确章节,发现位置错误立即修正
 10. 首轮:在笔记末尾创建临时区(hr + 提示块)
 11. 检测临时区用户输入 → 合并到正文 → 清空用户 block
 12. 检测 *** 补全请求
 13. 更新状态文件(last_end_time、summary_anchor_id、temp_zone_anchor_id 等)
 14. 输出本轮简报 → sleep 60 → loop

---

启动阶段

Step 1:检查 CLI 可用性

wpsnote-cli status
# 输出包含"连接中... 成功" → CLI 可用,否则退回 MCP 模式

Step 2:获取当前笔记

NOTE=$(wpsnote-cli current --json)
NOTE_ID=$(echo $NOTE | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['data']['note_id'])")
# MCP 备选
get_current_note() → { note_id, title }

若返回 `NO_ACTIVE_EDITOR_WINDOW`,提示用户打开笔记后重试。

Step 3:风格学习

搜索 **3-5 篇**历史同类笔记(会议纪要/课堂笔记/总结),每篇最多读 **3000 字**,综合归纳风格特征:

NOTES=$(wpsnote-cli find --keyword "会议纪要 纪要 会议总结 周会 月会" --limit 5 --json)

**归纳维度**(多篇投票取多数):语言风格(口语 vs 书面)、结构偏好(bullet list vs 分章节)、详略程度、是否中英混写、是否常用色块/分栏。

样本不足 3 篇时继续,标注「风格样本不足,参考有限」。

Step 4:初始化状态文件

state = {
    "note_id": note_id,
    "shorthand_id": None,        # 首轮扫描到 AudioCard 后填入
    "scene": None,               # 首轮场景识别后填入
    "last_end_time": -1.0,       # -1 代表从头开始
    "summary_anchor_id": None,   # 上轮最后写入的 block_id(临时区 hr 之前)
    "temp_zone_anchor_id": None, # 临时区 highlightBlock 的 block_id
    "round": 0,
    "speaker_map": {},           # {"发言人 1": "真实姓名"}
    "person_cache": {},          # {"张总": [{"note_title": ..., "snippet": ...}]}
    "started_at": time.time(),
}
# 保存到 /tmp/lts_state_{note_id}.json

Step 5:输出启动告知

已开始边听边总结 ✓

当前笔记:[笔记标题]
识别场景:等待录音开始后自动识别
参考风格:[找到 N 篇 / 未找到历史总结]
模式:增量(只处理新增转写)+ 人名联动
轮询间隔:60 秒

---
援助功能:
  ① 补全:在笔记任意位置输入 ***,AI 结合录音自动补全
  ② 临时区:笔记末尾灰色区域,写下想法,AI 下轮自动合并到正文
  ③ 停止:告诉我「停止总结」即可
---

---

轮询主循环

Step 1:扫描音频卡片

outline_data = json.loads(wpsnote_cli_outline(note_id))
audio_blocks = [b for b in outline_data["data"]["blocks"] if b["type"] == "note_audio_card"]

if not audio_blocks:
    # sleep 60, continue
    pass

audio_block = audio_blocks[0]  # 取第一个,或 status=recording 的那个
shorthand_id = audio_block["attrs"]["shorthand_id"]
status = audio_block["attrs"].get("status", "unknown")
# recording / paused / stopped 均继续处理

Step 2:增量获取转写

all_sentences = get_transcript(shorthand_id)  # 每个 sentence: {text, speaker, start_time, end_time}

# 只取新增句子
new_sentences = [s for s in all_sentences if s["start_time"] > state["last_end_time"]]

if not new_sentences:
    # → 跳到 Step 8(检测临时区),然后 sleep 60
    pass

> `wpsnote-cli audio` 只支持全量拉取,过滤在本地完成,每轮实际处理量恒定。

Step 3:场景识别(首轮)

if state["scene"] is None and new_sentences:
    sample = " ".join(s["text"] for s in new_sentences[:10])
    state["scene"] = detect_scene(note_title, sample)  # 见「场景识别表」

Step 4:发言人身份推断

for s in new_sentences:
    if "我是" in s["text"] or "我叫" in s["text"]:
        state["speaker_map"][s["speaker"]] = extracted_name
        # 若发现纠正,批量替换笔记中旧名称

Step 5:人名联动(跨笔记背景注入)

从新增句子和 speaker_map 中提取人名,搜索笔记库,将背景上下文注入本轮摘要 prompt。

**搜索策略**(依次降级):全名 → 后两字 → 名字单字(慎用)

每人最多取 2 篇 × 3 段,结果缓存在 `state["person_cache"]`,同一 session 不重复搜索。

> 详细代码见 [person-linking.md](person-linking.md)

Step 6:首轮输出内容地图

**仅首轮(`state["round"] == 0`)触发**:在写入笔记之前,根据全量转写梳理整体逻辑结构,以树形图展示给用户,然后直接开始写入。

📋 内容地图

[笔记标题]
├── 基本信息(时间、参与人等)
├── 第一部分:[主题名称]
├── 第二部分:[主题名称]
│   ├── [子主题]
│   └── [子主题]
├── 第 N 部分:[主题名称]
└── 行动项

展示后立即开始写入,大标题从 H2 开始,无需等待用户确认。

Step 7:生成摘要 XML

**输入给 AI 的 prompt**:

[场景: {scene}] [发言人映射: {speaker_map}]

新增转写({N} 句,{时长}秒):
{speaker}: {text}
...

[人物背景(来自笔记库,供参考)]:
- 张总(来自《Q4 复盘》):...

请按 {模板名} 模板提取要点,生成 WPS XML 格式的增量摘要。
只写本段新增内容对应的要点,不要重复已有内容。

**约束**:严格基于转写、跳过空章节、模糊信息标注「待确认」、参考用户风格、默认富文本排版。

Step 8:写回笔记

**核心原则:新摘要内容始终插入到临时区 hr 之前,临时区永远压底。**

**首轮写入**(临时区尚不存在):

# 1. 插入摘要内容到笔记末尾
wpsnote-cli edit --json-args "{
  \"note_id\": \"$NOTE_ID\",
  \"op\": \"insert\",
  \"anchor_id\": \"$LAST_BLOCK\",
  \"position\": \"after\",
  \"content\": \"<h2>转写摘要</h2><p>...</p>\"
}"
# 记录 summary_anchor_id = 本次最后插入的 block_id

# 2. 在末尾创建临时区
wpsnote-cli ed
Read more
Ships withwpsnote-skills

笔记,是思想落地的地方。 本仓库以 wps-note 为基础能力底座,让 Claude Code、Cursor、OpenClaw 等主流 AI Agent 直接驱动 WPS 笔记——往里写、从里读、让它有序、让它被找到。 笔记不再是你自己整理的地方,而是 Agent 替你打理的记忆层。

Get the whole plugin

Other skills on wpsnote-skills.

class-note-builder
Skill

class-note-builder

当用户希望把课堂逐字稿、OCR 笔记、截图资料或零散学习内容整理成结构化的 WPS 学习笔记时使用此 Skill。适合课堂记录整理、培训复盘、补课笔记汇总、课程主笔记构建等场景,尤其适合原始材料很乱、但最终需要一篇可复习、可回看、可继续补充的主笔记时。

coding-assistant
Skill

coding-assistant

多平台编码助手。遵循各平台官方文档做编码规范、单测与编译/lint;协助将核心技术梳理为完整 WPS 笔记技术文档。生成的笔记必须包含 7…

content-creator
Skill

content-creator

【内容创作起点】用户想要写文章/公众号/文案时的首选skill。 触发词:"帮我写""我想写""准备写""开始写""写个文章""写篇稿子""写公众号""写小红书""仿照这个风格写""分析我的写作风格""提取写作模板"。…

content-digest
Skill

content-digest

将任意内容提炼为结构化知识笔记,自动保存到 WPS 笔记。只要用户给出任何内容(链接、图片、本地文件、粘贴文字)并有保存笔记的意图,就应使用此…

doc-importer
Skill

doc-importer

将本地文档批量导入到 WPS 笔记。支持扫描 Obsidian Vault、思源笔记、微信公众号存档、 下载目录或任意用户指定目录,自动识别 HTML、Markdown、PDF、DOCX、PPTX、XLSX 等格式, 转换为 WPS…