05 路由与会话键
模块目标
理解系统如何把“某条消息”稳定地路由到“某个 agent + 某个会话”。
步骤一:实现拆解(执行链路)
- 读取绑定规则:
src/routing/bindings.ts - 计算路由结果:
src/routing/resolve-route.ts - 生成 session key:
src/routing/session-key.ts(由 resolve-route 调用) - 下游使用 session key 做并发和持久化分区
步骤二:细粒度讲解(小白版)
- 输入不是只有 channel
- 还包括
accountId,peer,parentPeer,guildId,teamId,memberRoleIds - 这就是为什么路由能支持私聊/群聊/线程/组织角色
- 匹配有优先级(很关键)
- peer 精确匹配
- parent peer 继承匹配
- guild+roles
- guild
- team
- account
- channel
- 最后才 default agent
- 输出不只是 agentId
- 还返回
sessionKey和mainSessionKey - 以及
matchedBy(记录是怎么匹配到的,便于排错)
- session key 设计的价值
- 同一会话消息能串起来
- 并发队列按 session 隔离
- 存储文件按 session 定位
- 性能优化点
- 对 binding 结果做了缓存(按 channel+account)
- 避免每条消息都全量遍历 bindings