返回调度中心
Workflow 03 / Orchestration

会话编排:槽位分配

显存 LRU 淘汰、会话寻址与增量同步计数

Sequence / 会话调度内幕时序
            sequenceDiagram
                participant NPC as Actor (Level 3)
                participant SUB as Subsystem (Level 2)
                participant K as Kernel (Level 1)
                
                NPC->>SUB: 1. GetOrCreateSession(ptr)
                SUB->>SUB: 2. 查表 (SessionMap)
                alt 未命中有槽位
                    SUB->>K: 3. 申请新显存 Slot
                else 未命中槽位满
                    SUB->>SUB: 4. 执行 LRU 淘汰最久未用
                    SUB->>K: 5. 释放旧 Slot 并覆盖
                end
                K-->>SUB: 6. 返回物理句柄
                SUB->>SUB: 7. 初始化 LastSentCount=0
                SUB-->>NPC: 8. 交付 SessionKey (void*)
            
01 / 概念深度:复杂的资源仲裁

子系统是全插件的“记忆管家”。它必须在有限的 KV Cache 总量下,协调数百个 NPC 的对话请求。

LRU 淘汰算法 (Least Recently Used)

当显存 Slot 耗尽时,子系统会自动牺牲那个“最久没和玩家说过话”的 NPC 记忆,将其槽位腾挪给当前活跃的 Agent。

增量计数守卫 (Incremental Tracking)

子系统为每个指针维护一个 SessionMsgCountMap。这确保了业务层重复调用时,插件物理上只处理文本 Delta,不产生冗余计算。

02 / 源码实战 Demo (C++)

解析子系统如何管理多会话编排:

// 1. 利用 UObject 地址作为物理哈希键
void* Key = (void*)this;

// 2. 子系统内部编排 (LiteRtLmSubsystem.cpp)
void* Session = SessionMap.FindRef(Key);
if (!Session) {
    // 自动仲裁显存槽位并建立物理联系
    Session = Internal_AllocateSlot(Key);
}