圓桌求真對話框架 roundtable-kg 是做什麼的?
把「一個議題」變成「一場有立場、有交鋒、有矛盾的思辨過程」,並在結束時把這場對話沉澱成一張可互動的爭議地形圖——而不是一段看完就忘的聊天記錄。
一、這個 Skill 解決什麼(以及為什麼是 kg-gen 的合併產物)
用戶此前給我看過兩份設計:
- kg-gen(知識圖譜產生器)——擅長把「書/文章」結構化成一棵可導航的概念網,但缺「辯論結構」輸入。
- 一份《圓桌討論-求真對話框架》——用 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–3 個可爭的子命題(domain 節點)。
- 遴選人物:針對每個子命題,邀請 2–4 個立場互斥或互補的代表人物。明確寫出每個人物的 position(立場一句話)。
- 輪次推進:每輪讓各人物就當前子命題發言(帶 1–2 條具體 claim + 論據),並讓對立立場正面反駁(opposes)。
- 暴露矛盾:每輪末點出本輪最尖銳的
contested_by點(哪些主張被誰反對、依據為何)。 - 綜述但不裁斷:綜合「目前看雙方各在什麼條件下成立」,寫入
host_synthesis節點——標註這是主持人綜合,不是定論。
克制:不替用戶下結論;不把分歧強行揉成共識;當人物開始重複時主動推進或請求指令。
四、立場型人物產生方法(四象限)
不要問「誰性格像 INTJ」。改問:「這個子命題有哪些互斥的論證立場?」 用下面四個產生維度系統掃描,確保不漏關鍵立場:
- 利益相關方:誰從結論中受益 / 誰受損?(受益方 vs 受損方天然對立)
- 論證框架:用哪套倫理 / 認識論框架評估?(功利主義 / 義務論 / 德性倫理 / 契約論 / 還原論 / 整體論…)
- 時間視野:當下效用 vs 長期後果?(短期主義 vs 長期主義常給出相反主張)
- 本體層級:個體體驗 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+,無第三方依賴。
- 抽取:
python3 examples/extract_debate.py rt_output/debate_log.json rt_output/intermediate.json - 渲染(roundtable-kg 自帶引擎,向後相容 kg-gen 圖譜格式):
python3 assets/build_graph.py rt_output/intermediate.json rt_output - 產出:
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創造力的本質]]
九、雙向鋼人論證協議(指令 鋼化)
當主持人或用戶察覺「某立場在反駁稻草人」時,輸入 鋼化 / 雙向鋼人,主持人按以下步驟推進:
- 點名稻草人:指出當前哪些
opposes可能打在對方主張的弱版本上(例如「工具還原論者反對的是'創造力=神秘感受質'這個弱版,而非具身論的最強版」)。 - 各寫最強版:請每位人物挑選「自己最反對的一條對方主張」,親筆將其重寫為最強、最值得認真對待的版本(
sm節點)。重寫原則:用對方最有力的依據、最嚴謹的表述,不偷換前提。 - 鋼人版掛回源主張:每條鋼人版用
steelman_of指向源主張;抽取器自動連出steelmanned_by(鋼人版→源主張)與「撰寫者→鋼人版」的supports(撰寫者承認這是對方最強版)。 - 落在真分歧:人物隨後說明「即便如此,我仍反對,因為……」——真正的反對理由現在針對的是最強版,而非稻草人。主持人點出此時浮現的
contested_by才是「真分歧點」。 - 回報:鋼人化後圖譜上會出現品紅菱形節點(鋼人主張)與品紅虛線(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 的相應局限(跨文件不自動合併、大圖需分批等)在此同樣適用;而抽取品質取決於主持人(你)的遴選與固化品質,這是人因環節,非演算法保證。