feat(relation): 記憶接回關係圖 + relation doctor 健檢(0.1.1) #14

Merged
admin merged 4 commits from develop into master 2026-08-03 03:24:08 +00:00
Member

這批做了什麼

feat(relation) 程式

  • 記憶寫入時把 --entities--about 的人名解析成節點 id(entity_idsabout_ids),之後認人才接得回關係圖;同名有多個候選視為歧義,兩邊都不寫。
  • front matter 注入防護:帶換行的節點 id 可以多插一行、覆寫 type,把一則普通記憶變成不該被遺忘的 canon--idsync pullimport 兩頭都擋。
  • graph.json 壞檔不再偽裝成空圖:會做決定的 action 以非零 exit 擋下,免得拿空圖覆蓋原檔。
  • 新增唯讀的 relation doctor:同名歧義、解析不到的 id、孤兒節點、對不上的人名,四類報告,一個檔案都不改。
  • recall 用節點 name 當關鍵詞但不用 id——user 這種 id 會命中每一則 about: [user],把顯著度 75 的正確答案擠出榜。
  • 關係圖一次讀完:原本 240 筆要讀 720 次 graph.json,2000 節點時單輪 1.2 秒。

docs(skills) 規則

  • persona-chat:新人物當場進關係圖改成硬規則,但屬於第 ⑥ 步記憶回寫,不佔回話句數。
  • persona-relation:補記憶指回節點的說明與 doctor 的四類報告。
  • 新增 reference/closeness.md:初次建節點時 bondclosenesstrust 怎麼從對話判斷。

chore 版本

三家 manifest 升 0.1.1(master 已在 0.1.0,這批是新的未合併批次)。

驗證

node scripts/selftest.mjs → 471 項全過(原 448,一項沒退)。

🤖 Generated with Claude Code

## 這批做了什麼 ### `feat(relation)` 程式 - 記憶寫入時把 `--entities`/`--about` 的人名解析成節點 id(`entity_ids`/`about_ids`),之後認人才接得回關係圖;同名有多個候選視為歧義,兩邊都不寫。 - front matter 注入防護:帶換行的節點 id 可以多插一行、覆寫 `type`,把一則普通記憶變成不該被遺忘的 `canon`。`--id` 與 `sync pull`/`import` 兩頭都擋。 - `graph.json` 壞檔不再偽裝成空圖:會做決定的 action 以非零 exit 擋下,免得拿空圖覆蓋原檔。 - 新增唯讀的 `relation doctor`:同名歧義、解析不到的 id、孤兒節點、對不上的人名,四類報告,一個檔案都不改。 - recall 用節點 `name` 當關鍵詞但不用 `id`——`user` 這種 id 會命中每一則 `about: [user]`,把顯著度 75 的正確答案擠出榜。 - 關係圖一次讀完:原本 240 筆要讀 720 次 `graph.json`,2000 節點時單輪 1.2 秒。 ### `docs(skills)` 規則 - persona-chat:新人物當場進關係圖改成硬規則,但屬於第 ⑥ 步記憶回寫,不佔回話句數。 - persona-relation:補記憶指回節點的說明與 doctor 的四類報告。 - 新增 `reference/closeness.md`:初次建節點時 `bond`/`closeness`/`trust` 怎麼從對話判斷。 ### `chore` 版本 三家 manifest 升 0.1.1(master 已在 0.1.0,這批是新的未合併批次)。 ## 驗證 `node scripts/selftest.mjs` → 471 項全過(原 448,一項沒退)。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jiantw83 added 4 commits 2026-08-03 03:18:58 +00:00
寫入時把 --entities/--about 的人名解析成節點 id(entity_ids/about_ids),
之後「提到誰」與 turnContext 認人才接得回關係圖;同名有多個候選視為歧義,
兩邊都不寫,不替使用者挑一個。

節點 id 會被原樣寫進 front matter 與 jsonl,所以兩頭都要防:帶換行的 id
可以在 front matter 裡多插一行、覆寫 type,把一則普通記憶變成不該被遺忘的
canon;`:` `[` `]` `,` `#` 也都會改變結構。injectSafeLine 把這些擋掉。

graph.json 壞掉時不再偽裝成空圖:要做決定的 action 直接以非零 exit 擋下
(放它過去等於拿一張空圖覆蓋原檔),relation doctor 自己會報告。

recall 用關係節點的 name 當關鍵詞,但刻意不用 id——id 是內部識別,命中率
高得離譜(關係圖有一個 id 為 user 的節點,就會命中每一則 about: [user]),
一個命中值 +10 會把顯著度 75 的正確答案擠出榜。about_ids 同理不進 haystack。

順手把關係圖改成一次讀完:原本每筆的每個 entity 各讀一遍 graph.json,
實測 30 節點/240 筆 = 720 次讀檔;2000 節點時單輪要 1.2 秒。

selftest 448 → 471 項,全過。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
persona-chat:人名要對得上關係圖(--entities/--about);新人物當場進關係圖
改成硬規則,但屬於第 ⑥ 步記憶回寫,不佔第 ⑤ 步的回話句數,也不要宣告。

persona-relation:補「記憶怎麼指回節點」與 relation doctor 的四類報告
(同名歧義、解析不到的 id、孤兒節點、對不上的人名),並說明壞檔會以非零
exit 結束而不是裝成空圖。

新增 reference/closeness.md:初次建節點時 bond/closeness/trust 怎麼從
對話判斷——一輪之內查完就填,不要憑感覺,也不要為了安全全部填 15。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
master 已經在 0.1.0,這批 relation 的改動是新的未合併批次,佔一個新版號。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
admin approved these changes 2026-08-03 03:24:05 +00:00
admin merged commit 677a82805e into master 2026-08-03 03:24:08 +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#14