Skip to content

Group 数据模型

字数
620 字
阅读时间
3 分钟

定义群聊系统的核心数据结构:配置、会话、角色间关系。

GroupConfig

群聊配置,控制群聊的行为参数。

python
from nbot.group import GroupConfig

config = GroupConfig(
    speaker_strategy="mention",
    max_chars_per_turn=800,
    allow_character_cross_talk=True,
    shared_memory=True,
    token_budget=4000,
    auto_narrate=True,
    narrate_interval=3,
    cross_talk_max_mentions=5,
    round_robin_mode="async",
)
字段类型默认值说明
speaker_strategystr"mention"发言策略(见 scheduler.md
max_chars_per_turnint800每轮最大字符数
allow_character_cross_talkboolTrue允许角色间 @mention 跨角色对话
shared_memoryboolTrue角色间共享记忆
token_budgetint4000单轮 Token 预算
auto_narrateboolTrue自动旁白
narrate_intervalint3每 N 轮触发一次旁白
cross_talk_max_mentionsint5每轮最多处理的 @mention 数量
round_robin_modestr"async"轮询模式:async(异步并行)或 sequential(顺序回复)

GroupConversation

群聊会话实体,包含角色列表、发言队列、关系矩阵等。

python
from nbot.group import GroupManager

gm = GroupManager.instance()
group = gm.create_group(
    name="咖啡馆闲聊",
    character_ids=["char_a", "char_b", "char_c"],
    narrator_id="char_a",
    config=config,
)
字段类型说明
group_idstr群聊 ID(自动 gc_ 前缀)
namestr群聊名称
character_idslist[str]参与角色 ID 列表
narrator_idstr | None旁白角色 ID(可选)
active_speakerstr当前发言者
speaker_queuelist[str]发言队列
configGroupConfig群聊配置
turn_countint回合计数
bound_channelstr绑定的频道 ID
relationsdict[str, InterCharacterRelation]角色间关系矩阵(key 为 a::b
created_atfloat创建时间戳
updated_atfloat更新时间戳

方法

python
# 获取两个角色的关系
relation = group.get_relation("char_a", "char_b")

# 设置关系
group.set_relation(relation)

# 获取关系矩阵(所有关系的列表)
matrix = group.get_relation_matrix()

# 推进回合
group.advance_turn()

InterCharacterRelation

角色间关系,四维模型,双向存储。

python
relation = group.get_relation("char_a", "char_b")
print(relation.familiarity)  # 熟悉度
print(relation.trust)        # 信任度
print(relation.affection)    # 好感度
print(relation.rivalry)      # 竞争度
字段范围说明
familiarity0-100熟悉程度
trust0-100信任程度
affection0-100好感程度
rivalry0-100竞争/对抗程度

关系键

关系使用归一化的键存储,确保 A→B 和 B→A 指向同一条记录:

python
a, b = sorted([char_a, char_b])
key = f"{a}::{b}"  # 例如 "char_001::char_002"

更新关系

python
relation.update("affection", 10, "一起经历了冒险")

每次变更自动记录到 history(最多保留 50 条):

json
{
  "dimension": "affection",
  "delta": 10,
  "old": 50,
  "new": 60,
  "reason": "一起经历了冒险",
  "ts": 1719000000.0
}

GroupManager

群聊管理器,负责群聊的 CRUD 和频道绑定。通过 instance() 获取全局单例。

详见 index.md 中的 GroupManager 章节。

页面历史