feat: 完成 K 群組 — 對話模式:群聊與角色自聊
群聊/自聊子系統(apps/api/src/room/):在場者名冊與共用場景記錄(純記憶體, 同 C-1 工作記憶的設計)、發言權分配(點名/話題相關度/性格基線/情緒/角色間 關係/發言冷卻與冷落累積算衝動值)、群聊矜持(重用 G-3 親密度分層模板、 下修有效親密度而非另建模板庫)、隱私邊界(EpisodicMemory.isPrivate + KeywordMemoryRetriever.excludePrivate,天然呆為口風不緊例外)、群聊記憶 投影(各角色依自身視角固化,被虧的那位權重較高)、角色自聊(沿用發言權 機制、空轉偵測注入轉折或收尾、輪數硬上限、使用者插話切換群聊)。 新增 CharacterRelationship 表供角色間關係使用。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
3503cc0be6
commit
6125d6e27f
@@ -134,10 +134,29 @@ model Character {
|
||||
scheduleExceptions ScheduleExceptionLog[]
|
||||
tasks Task[]
|
||||
proactiveCareLogs ProactiveCareLog[]
|
||||
relationshipsToOthers CharacterRelationship[] @relation("RelationshipFrom")
|
||||
relationshipsFromOthers CharacterRelationship[] @relation("RelationshipTo")
|
||||
|
||||
@@map("characters")
|
||||
}
|
||||
|
||||
// K-2/K-4 角色間關係:群聊中「角色間關係上場」與發言權分配的「與發言者的關係」都吃這張表。
|
||||
// 有向邊(characterId 對 otherCharacterId 的觀感),故同作品兩角色互相的觀感可以不對稱。
|
||||
model CharacterRelationship {
|
||||
id String @id @default(cuid())
|
||||
characterId String
|
||||
character Character @relation("RelationshipFrom", fields: [characterId], references: [id], onDelete: Cascade)
|
||||
otherCharacterId String
|
||||
otherCharacter Character @relation("RelationshipTo", fields: [otherCharacterId], references: [id], onDelete: Cascade)
|
||||
affinity Int @default(50) // 0~100,越高越要好;50 為中性
|
||||
dynamic String? // 互動基調描述性標籤,例如 loyal-friend/rival/protective/crush
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@unique([characterId, otherCharacterId])
|
||||
@@map("character_relationships")
|
||||
}
|
||||
|
||||
// G-4 反差萌稀有度控制:記錄每次反差行為觸發的時間,供冷卻期判定。
|
||||
model ContrastTriggerLog {
|
||||
id String @id @default(cuid())
|
||||
@@ -210,6 +229,7 @@ model EpisodicMemory {
|
||||
weight Float @default(1) // 權重(供遺忘/檢索排序使用)
|
||||
relatedUserId String? // 這段記憶與哪位使用者相關(E-5 關係加權檢索用)
|
||||
relatedUser User? @relation(fields: [relatedUserId], references: [id], onDelete: SetNull)
|
||||
isPrivate Boolean @default(false) // K-3 隱私邊界:一對一聊過的私密內容,群聊中不主動洩漏(口風不緊原型除外)
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
@@map("episodic_memories")
|
||||
|
||||
Reference in New Issue
Block a user