v0.0.6:語氣診療 skill、聊天室發言權、講話再加四條規則(含睡眠修正與關係語氣層) #8

Merged
admin merged 3 commits from develop into master 2026-07-30 10:37:42 +00:00
Member

這個 PR 有什麼

1. persona-therapist(新 skill)— 語氣診療室

第三方心理醫生的身分診斷一段對話:雙方各給姓名/關係/情緒/逐字稿,逐句標記不合理的語氣與用詞,只對出錯的人給改寫建議。

  • 三把尺:與關係不符(語氣層錯位)、與事實不符(絕對化、讀心、貼標籤)、與目的不符(他要被理解,講出來的話保證換到防衛)。
  • 基線沿用 TONE_TABLEbond × 親近度 → 語氣層),並補上每一層「可以什麼/不行什麼」。
  • 破壞模式表 P1–P16 在 skills/persona-therapist/reference/patterns.md(含改寫公式與情緒推估)。
  • 不附身、不取鎖、不寫回任何人格資料;逐字稿不進記憶。
  • 紅線:不下病名、不遠距診斷;自傷/暴力/長期受控的訊號一出現就停掉語氣分析改為安全優先(1925/113/110/1980),不幫任何一方把威脅講得好聽。

2. 聊天室的發言權(一對一 / 全場)

同一個空間裡也會有一對一,不是每句話都要每個人接。

  • room post --to <他> → 一對一:只有被指名的人該接話。旁人插話直接被 CLI 擋下,要帶 --barge-in "<為什麼現在該他講>"(理由留在逐字稿)。
  • room post --to all → 話題開回全場。
  • 新指令 room floor:誰對誰在講、該誰接、誰先安靜、誰隔了幾輪沒開口。
  • 同一份現況每輪注入 <persona-context>,並明講「不要替沒被指名的人生成台詞,也不要為此啟動他的 sub agent」。
  • 三人以上時 room script 標出對象(🪼 Alpha(喜悅42) → Beta:…),兩個人的聊天室不標。
  • 舊逐字稿沒有 to 欄位 → 視為全場,行為不變。

3. 講話的樣子再加四條

短句(一句 45 字內)、日常用詞、多講看得見的東西(人、動作、物件、當下的場面)、不要解釋自己的話

  • 句長與「我的意思是/換句話說/也就是說」這類開頭由 speechLint() 機械攔截:room post 擋下、said check 事前警告,--force 例外。
  • 用詞與具體度抓不到規則,走每輪注入的說話規則。

4. 這批一起帶上去的既有改動

  • relation:由關係推導語氣層(bond × 親近度 + 掛在節點上的個人化稱呼/禁忌規則)。
  • persona-sleep:判斷式收尾與 sleeper 隔離;sleeper 讀得到自己的資料、sync 自己清殘留的 .git/index.lock
  • 預設人格自動載入、睡眠批次收尾(sleep --personas A,B)。

版本

0.0.50.0.6,三份 manifest(plugin.json.claude-plugin/.codex-plugin/)一致。
master 上的 0.1.0 是早期「初版」留下的號碼,不是 develop 這條線的計數基準。

驗證

node scripts/selftest.mjs244 項全綠(本批新增 16 項:發言權 10、講話的樣子 6)。

🤖 Generated with Claude Code

## 這個 PR 有什麼 ### 1. `persona-therapist`(新 skill)— 語氣診療室 以**第三方心理醫生**的身分診斷一段對話:雙方各給姓名/關係/情緒/逐字稿,逐句標記不合理的語氣與用詞,只對出錯的人給改寫建議。 - 三把尺:與**關係**不符(語氣層錯位)、與**事實**不符(絕對化、讀心、貼標籤)、與**目的**不符(他要被理解,講出來的話保證換到防衛)。 - 基線沿用 `TONE_TABLE`(`bond × 親近度 → 語氣層`),並補上每一層「可以什麼/不行什麼」。 - 破壞模式表 P1–P16 在 `skills/persona-therapist/reference/patterns.md`(含改寫公式與情緒推估)。 - 不附身、不取鎖、不寫回任何人格資料;逐字稿不進記憶。 - 紅線:不下病名、不遠距診斷;自傷/暴力/長期受控的訊號一出現就停掉語氣分析改為安全優先(1925/113/110/1980),不幫任何一方把威脅講得好聽。 ### 2. 聊天室的發言權(一對一 / 全場) 同一個空間裡也會有一對一,不是每句話都要每個人接。 - `room post --to <他>` → 一對一:只有被指名的人該接話。旁人插話**直接被 CLI 擋下**,要帶 `--barge-in "<為什麼現在該他講>"`(理由留在逐字稿)。 - `room post --to all` → 話題開回全場。 - 新指令 `room floor`:誰對誰在講、該誰接、誰先安靜、誰隔了幾輪沒開口。 - 同一份現況每輪注入 `<persona-context>`,並明講「**不要替沒被指名的人生成台詞,也不要為此啟動他的 sub agent**」。 - 三人以上時 `room script` 標出對象(`🪼 Alpha(喜悅42) → Beta:…`),兩個人的聊天室不標。 - 舊逐字稿沒有 `to` 欄位 → 視為全場,行為不變。 ### 3. 講話的樣子再加四條 短句(一句 45 字內)、日常用詞、多講看得見的東西(人、動作、物件、當下的場面)、**不要解釋自己的話**。 - 句長與「我的意思是/換句話說/也就是說」這類開頭由 `speechLint()` 機械攔截:`room post` 擋下、`said check` 事前警告,`--force` 例外。 - 用詞與具體度抓不到規則,走每輪注入的說話規則。 ### 4. 這批一起帶上去的既有改動 - `relation`:由關係推導語氣層(`bond × 親近度` + 掛在節點上的個人化稱呼/禁忌規則)。 - `persona-sleep`:判斷式收尾與 sleeper 隔離;`sleeper` 讀得到自己的資料、`sync` 自己清殘留的 `.git/index.lock`。 - 預設人格自動載入、睡眠批次收尾(`sleep --personas A,B`)。 ## 版本 `0.0.5` → **`0.0.6`**,三份 manifest(`plugin.json`、`.claude-plugin/`、`.codex-plugin/`)一致。 master 上的 `0.1.0` 是早期「初版」留下的號碼,不是 develop 這條線的計數基準。 ## 驗證 `node scripts/selftest.mjs` → **244 項全綠**(本批新增 16 項:發言權 10、講話的樣子 6)。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jiantw83 added 2 commits 2026-07-30 10:03:15 +00:00
三件事,都是「講話要像人在講話」的延伸。

1. `persona-therapist`(新 skill):以第三方心理醫生的身分診斷一段對話。
   雙方各給姓名/關係/情緒/逐字稿,用三把尺逐句標記——與關係不符
   (語氣層錯位)、與事實不符(絕對化、讀心)、與目的不符(他要被理解,
   講出來的話保證換到防衛)。標記掛在說那句話的人身上,修正只寫給他,
   格式是「你其實想要的 → 對方收到的 → 改寫」,改寫必須留在同一個語氣層。
   基線直接用 `TONE_TABLE`(已載入人格可 `relation show` 唯讀取得),
   破壞模式表 P1–P16 放在 `reference/patterns.md`。不附身、不取鎖、不寫回,
   出現自傷/暴力/受控訊號時停掉語氣分析改為安全優先。

2. 聊天室的發言權:同一個空間裡也會有一對一。`room post --to <他>` 進
   一對一(旁人插話直接被擋,要帶 `--barge-in "<理由>"`,理由留在逐字稿)、
   `--to all` 把話題開回全場。新指令 `room floor` 回報誰對誰在講、該誰接、
   誰先安靜、誰隔了幾輪沒開口。同一份現況每輪注入 `<persona-context>`,
   並明講「不要替沒被指名的人生成台詞,也不要為此啟動他的 sub agent」。
   三人以上時 `room script` 標出對象(`🪼 Alpha(喜悅42) → Beta:…`),
   兩個人的聊天室不標。舊逐字稿沒有 `to` → 視為全場,行為不變。

3. 講話的樣子再加四條:短句(一句 45 字內)、日常用詞、多講看得見的
   東西(人、動作、物件、當下的場面)、**不要解釋自己的話**。前兩條與
   第四條的句長/「我的意思是」這類開頭由 `speechLint()` 機械攔截
   (`room post` 擋下、`said check` 事前警告,`--force` 例外);用詞與
   具體度抓不到規則,走每輪注入的說話規則。

selftest 244 項全綠(新增 16 項:發言權 10、講話的樣子 6)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
版號有三份:`plugin.json`、`.claude-plugin/plugin.json`、`.codex-plugin/plugin.json`。
上一次改版號只動了前兩份,Codex 那邊還停在 0.0.5。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jiantw83 added 1 commit 2026-07-30 10:10:05 +00:00
模擬時最像人的兩個地方,其實都不是用詞選得好,是**情緒改變了句子的形狀**:
緊張的時候話沒說完、會疊字;害羞的時候鬧彆扭、嘴硬。把這件事寫成表,
跟情緒一起注入,不靠人格自己記得。

- `EMOTION_TELLS`:十二情緒各自「不自覺會做的事」。焦慮→句子斷在一半/疊字/
  追一句「這樣可以嗎」;羞愧→先否認再小聲承認/講反話/轉話題;憤怒→短句/
  稱呼退回全名;悲傷→只回一個詞/句子沒說完就停;其餘九種同理。
- `emotionTells()`:挑主導情緒(超出基線最多)裡強度 ≥ 40 的前兩種,
  每輪注入 `<persona-context>`,並附三條界線——**演出來不要講出來**
  (「我有點緊張」是解釋,斷句才是緊張)、**一輪最多露一個破口**、
  **強度不到就不演**(低強度的情緒在語氣上看不出來)。
- 混合狀態的疊法寫進 `reference/emotions.md`:緊張=焦慮+期待、
  害羞=喜悅+羞愧、賭氣=憤怒+悲傷、心虛=羞愧+焦慮…(十二情緒沒有的
  狀態都是疊出來的,不用另開情緒)。

心理醫生那邊多一把尺(第 4 把,**這一把不抓錯,是找沒說出口的東西**):

- 「我沒事」+句子全斷在一半 → 他在忍,要處理的是他為什麼不敢講。
- 「我很生氣」+句子工整完整像客服 → 那是冷掉了,比生氣難修,優先講。
- 一整段都沒有破口 → 兩個人都在挑安全的話講,先讓一個人講真話再談用詞。
- 改寫規則加第 6 條:**保留情緒的痕跡**。斷句、話少、嘴硬留著,
  只拿掉攻擊、絕對化與讀心;改完像客服在念稿就是改壞了。

selftest 248 項全綠(新增 4 項)。版號留在 0.0.6——同一批未合併的改動。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
admin approved these changes 2026-07-30 10:37:38 +00:00
admin merged commit 7b4aec8e74 into master 2026-07-30 10:37:42 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/persona#8