a6f05ab2d5
- Phase 0: AGENTS.md cleanup (dedup quotes, renumber sections, merge qmd) - Phase 1: typed relations (manage-relations.py, graph-search.py, check-staleness.py, detect-conflicts.py) - Phase 2: frontmatter validator, weekly lint, knowledge promotion, git hooks - Fix .gitignore to track tools/ and .githooks/ - Fix git remote URL (remove plaintext token) - New wiki pages: 504 pages, 34 raw sources
6.8 KiB
6.8 KiB
categories, tags, created, source, type, aliases
| categories | tags | created | source | type | aliases | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
2026-04-28 | reading-club skill | tool |
|
ReadingClub — 多智能体阅读协作工具
一句话定义:三个 AI Agent(摘要者、批评者、提问者)与人类读者进行多轮对话,深入讨论书籍章节内容,最终生成 LLM Wiki 讨论记录页面。
基本信息
| 属性 | 值 |
|---|---|
| 类型 | opencode Skill |
| 位置 | .agents/skills/reading-club/SKILL.md |
| 版本 | v2(人类主位设计) |
| 依赖 | opencode + task dispatch + build subagent |
| 输出 | wiki/ 目录下的 Markdown 页面 |
核心理念
人类是主角,Agent 是对话伙伴。
传统 AI 阅读工具让 AI 做主分析师,人类只能旁观。ReadingClub v2 颠覆了这个模式:
- 每一轮都从人类的第一反应开始
- Agent 直接用"你"称呼人类读者
- Agent 必须回应人类的具体观点,不能泛泛而谈
- 每次发言以一个真诚的问题结尾,邀请人类继续思考
三个 Agent 角色
| 角色 | 认知偏见 | 思维方式 | 输出特征 |
|---|---|---|---|
| 摘要者 Summarizer | 同化偏见 — 在混乱中找秩序 | 结构化思维,梳理核心逻辑 | 核心论点、论证结构、隐含假设 |
| 批评者 Critic | 对抗性偏见 — 找缺陷和逻辑漏洞 | 批判性思维,质疑一切 | 质疑点、反向思考、被忽略的矛盾 |
| 提问者 Questioner | 好奇偏见 — 追问未回答的问题 | 苏格拉底式追问 | 深度追问、跨领域联想、开放性问题 |
[!tip] 角色设计原则 每个角色都编码了刻意设计的认知偏见。这不是缺陷,而是特性 — 让 Agent 的视角鲜明而互补,避免三个 Agent 说出一样的话。
讨论流程
graph TD
A[INIT: 验证输入] --> B[HUMAN_FIRST_READ: 展示开头]
B --> C{人类第一反应}
C --> D[SEED_ROUND: 3 Agent 并行回应]
D --> E[PRESENT_SEED: 对话式展示]
E --> F{人类发言}
F -->|观点/提问/反驳| G[Agent 回应]
F -->|pass/跳过| H[Agent 自行讨论]
F -->|停止| I[SYNTHESIS: 编译 Wiki]
G --> F
H --> F
I --> J[写入 wiki 页面]
J --> K[更新 index + log]
阶段说明
| 阶段 | 说明 | 人类角色 |
|---|---|---|
| INIT | 验证书籍和章节路径 | 选择书籍和章节 |
| HUMAN_FIRST_READ | 展示章节开头 3-5 句 | 必须发言 — 说出第一反应 |
| SEED_ROUND | 3 Agent 并行回应人类 | 静听 |
| PRESENT_SEED | 对话式展示 3 个视角 | 选择回应方向 |
| CONVERSATION_LOOP | 每轮 = 人类 → Agent | 主动参与 — 可以反驳、追问、换角度 |
| SYNTHESIS | 编译为 Wiki 页面 | 审阅 |
| DONE | 写入 wiki/ 目录 | 完成 |
四种讨论模式
| 模式 | 轮次 | Agent 回应长度 | 适合场景 |
|---|---|---|---|
browse |
4 轮 | 短(100-200字) | 快速浏览,获取概要 |
balanced |
8 轮 | 中(200-400字) | 标准讨论,平衡深度与效率 |
deep |
14 轮 | 长(300-600字) | 深度分析,批判性思考 |
human-led |
无上限 | 视情况 | 人类完全主导,说停才停 |
人类交互指令
在讨论中,你可以使用以下方式参与(自然语言即可):
| 意图 | 示例 | 效果 |
|---|---|---|
| 分享想法 | "我觉得这段其实是在说…" | Agent 回应你的具体观点 |
| 提问 | "为什么作者要这样写?" | 最合适的 Agent 回答 |
| 反驳 | "我不同意 Critic 的看法" | 与指定 Agent 辩论 |
| 追问 | "追问:一方水土养一方人" | 聚焦该话题深入 |
| 换角度 | "能不能从反面想想?" | Agent 从对立视角分析 |
| 跳过 | "pass" / "跳过" | 让 Agent 继续讨论 |
| 继续 | "继续" | Agent 继续上一话题 |
| 结束 | "停止" / "stop" | 结束讨论,生成 Wiki |
如何启动
方式 1:使用触发词
在 opencode 对话中输入:
/reading-club book_path="raw/《大国大民》王志纲" chapter="《大国大民》第一章-我是怎么读中国的.md"
方式 2:自然语言
我想用阅读俱乐部讨论《呼吸之间》的调息章节
方式 3:指定模式
/reading-club book_path="raw/呼吸之间_李谨伯" chapter="调息.md" mode="deep"
可用书籍
当前 raw/ 目录中已转换的书籍:
| 书籍 | 路径 | 章节数 |
|---|---|---|
| 《呼吸之间》李谨伯 | raw/呼吸之间_李谨伯/ |
20+ |
| 《大国大民》王志纲 | raw/《大国大民》王志纲/ |
15+ |
输出示例
讨论结束后自动生成 wiki 页面,包含:
- 读者的第一反应 — 原始记录
- 初始回应 — 3 个 Agent 的第一轮分析
- 深入讨论 — 后续轮次的对话记录
- 人类思考轨迹 — 追踪人类观点如何演化
- Agent 共识与分歧 — Agent 们在哪里一致、在哪里分歧
- 讨论总结 — 关键洞见和未决问题
设计决策记录
为什么人类必须先发言?
v1 中 Agent 先发言导致人类变成旁观者。人类的第一反应往往是最真实的 — 它不受 Agent 分析框架的影响,保留了直觉的锐利。Agent 的任务是回应和深化这个直觉,而不是替代它。
为什么给 Agent 编码认知偏见?
没有偏见的 Agent 会输出 bland、中庸的分析。编码认知偏见(同化、对抗、好奇)让每个 Agent 有鲜明的视角,产生真正的思想碰撞。
为什么不用 === 标记格式?
v1 使用 ===摘要=== / ===核心主张=== / ===END=== 刚性格式。v2 改为自然段落,因为:
- Agent 表达更自由、更自然
- 读者体验更像真实对话
- 减少格式解析的脆弱性
技术架构
| 组件 | 实现 |
|---|---|
| 编排器 | Sisyphus(主编排 Agent) |
| 角色区分 | Prompt engineering(同一 build subagent,不同 prompt) |
| 并行调度 | SEED_ROUND 3 个 Agent 并行 run_in_background=true |
| 顺序调度 | CONVERSATION_LOOP 每轮 1 个 Agent 同步 run_in_background=false |
| 上下文管理 | 3 层分层:最近 3 轮完整 + 更早压缩 + 章节首轮后仅引用路径 |
| 输出格式 | LLM Wiki 规范(AGENTS.md frontmatter) |
限制与未来扩展
当前限制:
- 仅支持单章节讨论
- 仅支持一个人类读者
- 章节内容需已在
raw/目录中
未来扩展:
- 跨章节讨论
- 多本书对比
- 自定义 Agent 角色
- 多人阅读俱乐部
相关页面
- LLM Wiki — Wiki 模式定义
- AGENTS.md — 仓库操作规范
- Obsidian-skills — Obsidian Skill 生态
- epub-to-markdown — EPUB 转换工具(准备书籍内容)