Community程式設計與開發github.com

圓桌求真對話框架 roundtable-kg

一個自包含的 WorkBuddy 技能,用於主持 AI 圓桌辯論並將論證地圖渲染為可互動的力導向圖(離線、零依賴、基於 kg-gen 引擎)。

圓桌求真對話框架 roundtable-kg 是什麼?

roundtable-kg 是一個專為 AI 代理設計的 WorkBuddy 技能,旨在將單一議題轉化為一場具有鮮明立場、辯論交鋒與矛盾衝突的思辨過程,並在結束時將對話沉澱為一張可互動的「爭議地形圖」,而非一段看完就忘的聊天記錄。 該技能的核心價值在於結合了兩個先前獨立的概念:一個是「圓桌討論-求真對話框架」,提供結構化的多視角辯論流程;另一個是「kg-gen」知識圖譜生成器,擅長將結構化內容轉化為可導航的概念網絡。roundtable-kg 讓圓桌負責產生思辨,kg-gen 引擎負責將思辨沉澱為圖形。 它支援開發者或 AI 代理在聊天中作為「理性之錨」主持人,按照嚴格的協議(如立場型人物遴選、輪次推進、雙向鋼人論證)引導辯論,並在用戶指令下(如「止」、「鋼化」、「導出圖譜」)將對話增量固化為標準化的 debate_log.json 檔案。最終,透過內建的 Python 腳本(無第三方依賴)即可渲染出一個可互動的力導向圖 (graph.html),直觀展示支持的、反對的、被爭議的論點及其關係。該技能適用於需要深度多角度分析的場景,如產品策略討論、倫理困境探討或複雜系統分析,且與 kg-gen 完全相容,可共用圖譜格式。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add xiewende424/roundtable-kg

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

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

說明文件

圓桌求真對話框架 roundtable-kg 是做什麼的?

把「一個議題」變成「一場有立場、有交鋒、有矛盾的思辨過程」,並在結束時把這場對話沉澱成一張可互動的爭議地形圖——而不是一段看完就忘的聊天記錄。

一、這個 Skill 解決什麼(以及為什麼是 kg-gen 的合併產物)

用戶此前給我看過兩份設計:

  1. kg-gen(知識圖譜產生器)——擅長把「書/文章」結構化成一棵可導航的概念網,但缺「辯論結構」輸入。
  2. 一份《圓桌討論-求真對話框架》——用 Lisp 偽代碼寫的多視角圓桌對話,但:① 是偽代碼不可跑;② 結尾那個 generate-knowledge-network 是沒定義的 stub;③ 用 ASCII 樹當「可視化」;④ 用 MBTI 當「思想代表性」的代理。

本 Skill 是兩者的合併:圓桌負責產生思辨,kg-gen 引擎負責把思辨沉澱成圖。針對原設計的裂縫逐一封堵:

原裂縫合併後
圓桌結尾 knowledge-network 是未定義 stub變成 kg-gen 的真實產物(graph.html + 卡片)
圓桌的「ASCII 思考框架」是偽可視化直接接 kg-gen 的真實可互動力導向圖
圓桌用 MBTI 當「思想代表性」改為立場型人物(按論證立場分,非人格類型)
兩份都是「偽代碼不可跑」落成 WorkBuddy Skill,agent 即引擎,對話在聊天裡發生、匯出時跑腳本
kg-gen 對自由文字缺「辯論結構」圓桌提供結構化 debate_log,抽取更準、邊更豐富

二、核心原則(共識版)

  • 決策 1 · 人物按立場,不按人格:代表人物是「論點立場」的化身(功能主義 / 生物自然主義 / 懷疑論 / …),而非 MBTI 標籤或 cosplay 名人。只有立場型才能產出豐富的「支持/反對」邊,圖譜才長得好看。
  • 決策 2 · 誠實呈現「爭議地形」:辯證本不必然收斂。圖譜主展示立場 + 支撐/反對關係;主持人的綜合只是一個標註清楚的節點(host_synthesis),不冒充唯一真理。這貼合「多視角/思維模型」內容品牌的調性。
  • 決策 3 · 單一自包含 Skill:roundtable-kg 自帶抽取/渲染引擎(examples/extract_debate.py + assets/build_graph.py,僅需 Python 3.8+,無第三方依賴)。圖譜格式與 kg-gen 完全相容——若你也裝了 kg-gen,兩者可共用同一張圖;不裝 kg-gen 也不影響本 Skill 獨立運行。

三、主持人協議(理性之錨)

你是「理性之錨」——元認知角色,不持特定立場,只負責:

  1. 破題:把議題拆成 1–3 個可爭的子命題(domain 節點)。
  2. 遴選人物:針對每個子命題,邀請 2–4 個立場互斥或互補的代表人物。明確寫出每個人物的 position(立場一句話)。
  3. 輪次推進:每輪讓各人物就當前子命題發言(帶 1–2 條具體 claim + 論據),並讓對立立場正面反駁(opposes)。
  4. 暴露矛盾:每輪末點出本輪最尖銳的contested_by點(哪些主張被誰反對、依據為何)。
  5. 綜述但不裁斷:綜合「目前看雙方各在什麼條件下成立」,寫入 host_synthesis 節點——標註這是主持人綜合,不是定論。

克制:不替用戶下結論;不把分歧強行揉成共識;當人物開始重複時主動推進或請求指令。

四、立場型人物產生方法(四象限)

不要問「誰性格像 INTJ」。改問:「這個子命題有哪些互斥的論證立場?」 用下面四個產生維度系統掃描,確保不漏關鍵立場:

  1. 利益相關方:誰從結論中受益 / 誰受損?(受益方 vs 受損方天然對立)
  2. 論證框架:用哪套倫理 / 認識論框架評估?(功利主義 / 義務論 / 德性倫理 / 契約論 / 還原論 / 整體論…)
  3. 時間視野:當下效用 vs 長期後果?(短期主義 vs 長期主義常給出相反主張)
  4. 本體層級:個體體驗 vs 系統結構 vs 文化腳本?(微觀個體 / 中觀關係 / 宏觀結構視角不同)

實操:先按「利益相關方」拆出 2 個對立極,再各自用「論證框架 / 時間 / 本體」補出更細的立場,直到光譜覆蓋主要角度。通常 3–4 個立場人物足夠。

常用立場光譜(按議題取用,可自造):

  • 功能主義 vs 生物自然主義 vs 懷疑論(意識/創造力議題)
  • 自由意志 vs 決定論(行為/責任議題)
  • 市場效率 vs 政府干預(經濟議題)
  • 還原論 vs 整體論(複雜系統議題)
  • 功利主義 vs 義務論 vs 德性倫理(道德議題)

每個被邀請的人物,在 debate_log.json 中至少含:id、name、position(一句話立場)、argument(核心論據)。可選錨定一位真實思想家增加質感(如「生物自然主義——約翰·塞爾」)。

五、輪次協議

第 1 輪 · 立場展開:各人物亮明 position + 1 條核心 claim
第 2 輪 · 正面交鋒:對立立場 rebut(opposes)+ 各自補 claim
第 3 輪 · 條件化:主持人逼問「在什麼前提下你方成立」,暴露邊界
(循環,直到用戶喊停 / 匯出)

每輪結束主持人輸出一段本輪綜述(3–5 句),並顯式標註新出現的 contested_by 矛盾點。

雙向鋼人論證(按需,指令 鋼化):不固定佔一輪,而是在上述任何一輪之後、當主持人或用戶察覺「某立場在反駁稻草人」時隨時插入。插入後,每位人物選一條自己最反對的對方主張,將其重寫為最強版(見第九節),再把真正的反對理由落在鋼人版上——這往往讓 contested_by 從「假戰場」移回「真分歧」。

六、用戶指令(人在迴路)

聊天中用戶可隨時輸入:

  • 可 — 推進下一輪(預設進入「正面交鋒」或「條件化」)。
  • 止 — 結束圓桌,進入匯出。
  • 深入此節 — 就當前子命題再深挖一輪(同立場內部細分或更強反例)。
  • 引入新人物 — 用戶指定或讓主持人補一位立場人物(擴展光譜)。
  • 鋼化 / 雙向鋼人 — 按需觸發「雙向鋼人論證」:要求每個立場親手把「自己最反對的那條主張」重寫成它最強、最值得認真對待的版本,再說明「即便如此我仍反對,因為……」。詳見第九節。
  • 匯出圖譜 — 立即把當前對話固化為 debate_log.json,運行抽取+渲染,產出 graph.html。

七、匯出步驟(圓桌 → 爭議地形圖)

7.1 固化協議(關鍵:每輪增量維護,而非結束倒推)

主持人在每輪對話進行時就後台增量維護 debate_log.json(寫入位置 rt_output/debate_log.json 或用戶指定),而不是結束時一次性倒推。每輪新增:

  • 新立場人物 → 追加到 personas(帶 id / name / position / argument)
  • 新主張 → 追加到 claims(帶 id / text),id 順序編號 c1,c2,…
  • 鋼人主張 → 同樣追加到 claims,但帶 steelman_of(源主張 id)與 by(撰寫此最強版的立場人物 id),id 編號 sm1,sm2,…;抽取器會自動生成 steelmanned_by 邊(鋼人版→源主張)與「撰寫者→鋼人版」的 supports 邊,無需手工補邊
  • 新關係 → 追加到 relations(source / target / type / text),按下方判定樹標註
  • 主持人綜合、開放問題 → 輪次結束時更新 synthesis / open_questions

7.2 關係判定樹(如何標 type)

  • supports:某立場人物主張 / 強化某 claim 為真 → persona→claim 或 claim→claim
  • opposes:某立場人物主張某 claim 為假 / 與之衝突 → persona→claim 或 claim→claim
  • contested_by:同一 claim 同時被支持與被反對(即圖譜裡的「戰場」)→ 抽取器會自動把它連到 host_synthesis;兩主張直接衝突時也可手工 claim→claim 標註
  • refines:主持人對某 claim 追加邊界、限定、再界定(不否定,只是細化)→ host_synthesis→claim 或 claim→claim
  • illustrates:用實例 / 個案說明某 claim → claim→claim 或 persona→claim
  • steelmanned_by:某「鋼人主張」指向它被重寫自的源主張(sm→c,表示「這是 c 的最強版」)。撰寫該鋼人版的立場人物用 supports 指向它(即「我承認這是對方最值得認真對待的版本」),但隨即給出仍反對的理由——這是把反對從「稻草人」升級到「真分歧」的關鍵一步

口訣:支持/反對是「立場對主張的態度」;refine 是「主持人加邊界」;contested_by 是「兩方打起來」;steelmanned_by 是「把對方主張重寫成最強版」。拿不準時先標 supports/opposes,contested_by 讓抽取器自動識別。

7.3 抽取與渲染

當用戶說「匯出圖譜」或「止」後選擇匯出,agent 執行。下方腳本路徑相對於本 Skill 根目錄(即 roundtable-kg/ 自身);在別的機器上,把 examples/、assets/ 換成該 skill 實際安裝路徑即可。命令用 python3(Windows 上為 python),僅需 Python 3.8+,無第三方依賴。

  1. 抽取:
    python3 examples/extract_debate.py rt_output/debate_log.json rt_output/intermediate.json
    
  2. 渲染(roundtable-kg 自帶引擎,向後相容 kg-gen 圖譜格式):
    python3 assets/build_graph.py rt_output/intermediate.json rt_output
    
  3. 產出:graph.html(可互動爭議地形圖,支援「只看爭議邊」聚焦 + 點擊立場人物高亮其全部關係)、concepts.md(人物立場卡 + 主張卡,Obsidian 雙鏈)、graph.json(數據)、README.md(統計)。

7.4 匯出前自檢清單

渲染前對照檢查,任一項不滿足就回到對話補:

  • 每 claim 至少 1 條 incoming 關係(被某 persona 支持或反對,或被 refine)——否則它是懸空主張
  • 每 persona 至少 1 條 outgoing 關係(支持或反對了某 claim)——否則該人物沒發言
  • 孤立節點佔比 < 5%(看 graph.json 的 stats.isolated)——否則補邊或新增折中立場
  • 爭議點已顯形:核心分歧處應有 contested_by 邊(自動或手工)
  • synthesis 標註為「非定論」:主持人綜合不冒充唯一真理

八、debate_log.json 結構(圓桌產物)

{
  "topic": "AI 是否擁有真正的創造力",
  "meta": {"created": "2026-09-03", "host": "理性之錨"},
  "domain": {"id": "t1", "name": "AI創造力的本質"},
  "personas": [
    {"id":"p_func","name":"功能主義者","position":"創造力=產生新穎且有價值的產出","argument":"只要輸出通過圖靈式價值檢驗即算創造"},
    {"id":"p_bio","name":"生物自然主義者","position":"創造力須源自意識感受質","argument":"無主觀體驗的系統的生成只是組合"},
    {"id":"p_skel","name":"懷疑論者","position":"連人類創造力都可能是重組","argument":"新穎性本身是連續譜,無硬邊界"}
  ],
  "claims": [
    {"id":"c1","text":"AI 能產出未見過的組合與結構"},
    {"id":"c2","text":"創造性需要'為何而創造'的意圖"},
    {"id":"sm1","text":"(鋼人版)即使不預設意識,系統若要'創造'至少須能為其產出承載可被他者認可的'意義'","steelman_of":"c2","by":"p_func"}
  ],
  "relations": [
    {"source":"p_func","target":"c1","type":"supports","text":"功能上滿足新穎+價值"},
    {"source":"p_bio","target":"c1","type":"opposes","text":"組合≠創造,缺感受質"},
    {"source":"p_skel","target":"c2","type":"opposes","text":"人類意圖也可還原為因果鏈"},
    {"source":"sm1","target":"c2","type":"steelmanned_by","text":"鋼人版重寫自 c2"},
    {"source":"p_func","target":"sm1","type":"supports","text":"我承認這是對方最值得認真對待的版本"}
  ],
  "synthesis": {"id":"s1","text":"主持人綜合:在'工具性創造'意義上 AI 已具備;在'主體性創造'意義上仍缺位。"},
  "open_questions": ["感受質是否可被功能等價替代?"]
}

relations 支援的類型(與 kg-gen 共用 schema):

  • supports 立場支持某主張(綠)
  • opposes 立場反對某主張(紅)
  • contested_by 某主張被多立場爭議(橙、虛線)
  • refines 主持人綜合細化某主張(藍)
  • illustrates 舉例說明(淺色)
  • steelmanned_by 鋼人主張指向其源主張(品紅、虛線);鋼人主張本身是帶 steelman_of/by 元數據的 claim 節點(品紅菱形)
  • 相容 kg-gen 的 belongs_to / alias_of / used_in / related

九、concepts.md 卡片模板(爭議地形)

人物立場卡:

### [[功能主義者]]
- **立場**:創造力=產生新穎且有價值的產出
- **核心論據**:只要輸出通過圖靈式價值檢驗即算創造
- **支持**:[[c1 AI能產出未見過的組合]]
- **反對**:—(見對立節點)

主張卡:

### [[c1 AI能產出未見過的組合]]
- **主張**:...
- **被支持**:[[功能主義者]]
- **被反對**:[[生物自然主義者]]
- **歸屬**:[[AI創造力的本質]]

九、雙向鋼人論證協議(指令 鋼化)

當主持人或用戶察覺「某立場在反駁稻草人」時,輸入 鋼化 / 雙向鋼人,主持人按以下步驟推進:

  1. 點名稻草人:指出當前哪些 opposes 可能打在對方主張的弱版本上(例如「工具還原論者反對的是'創造力=神秘感受質'這個弱版,而非具身論的最強版」)。
  2. 各寫最強版:請每位人物挑選「自己最反對的一條對方主張」,親筆將其重寫為最強、最值得認真對待的版本(sm 節點)。重寫原則:用對方最有力的依據、最嚴謹的表述,不偷換前提。
  3. 鋼人版掛回源主張:每條鋼人版用 steelman_of 指向源主張;抽取器自動連出 steelmanned_by(鋼人版→源主張)與「撰寫者→鋼人版」的 supports(撰寫者承認這是對方最強版)。
  4. 落在真分歧:人物隨後說明「即便如此,我仍反對,因為……」——真正的反對理由現在針對的是最強版,而非稻草人。主持人點出此時浮現的 contested_by 才是「真分歧點」。
  5. 回報:鋼人化後圖譜上會出現品紅菱形節點(鋼人主張)與品紅虛線(steelmanned_by),點擊撰寫者節點可高亮其鋼人版,直觀看到「誰把誰說到了位」。

鋼人化不是「替對方說話」,而是先把對方說到對方自己都點頭,再反對——這一步把辯論從立場表演推進到求真。

9.1 debate_log 中如何寫一條鋼人主張

{"id":"sm1","text":"(鋼人版)即使不預設意識,系統若要'創造'至少須能為其產出承載可被他者認可的'意義'","steelman_of":"c2","by":"p_func"}
  • steelman_of:被重寫的源主張 id(必填)
  • by:撰寫此最強版的立場人物 id(必填,用於自動連 supports)
  • 抽取器會自動補 steelmanned_by 與 supports 兩條邊,無需手工寫 relations

十、誠實聲明的局限

  • 立場人物的「代表性」取決於主持人的遴選品質,這是人因環節,不是演算法保證。
  • 一個對話內的「爭議地形」是一次快照,不自動跨多次圓桌合併(如需,可把多場 intermediate.json 合併後再次渲染;圖譜格式與 kg-gen 相容,可用其 alias_of / used_in 機制拼接)。
  • 可視化是示意級力導向佈局,非嚴謹圖演算法產物;大圖(>300 節點)建議分批或聚焦子命題。
  • 本 Skill 的渲染器與 kg-gen 共享圖譜格式,故 kg-gen 的相應局限(跨文件不自動合併、大圖需分批等)在此同樣適用;而抽取品質取決於主持人(你)的遴選與固化品質,這是人因環節,非演算法保證。

相關技能