
Claw3D Agent行为驱动原理运行时事件如何实时驱动办公室3D动画【免费下载链接】Claw3DClaw3D is an open source 3D engine built on OpenClaw for creating games, simulations, and high-performance 3D applications.项目地址: https://gitcode.com/gh_mirrors/cl/Claw3D如果你用过 Claw3D一定见过这样的画面Agent 正在工位上敲键盘你说一句go review the pull requests它就起身走向机房说完lets go to the gym它又跑去健身房锻炼。Claw3D 是基于 OpenClaw 构建的开源 3D 引擎与 AI Agent 办公室平台把聊天中的运行时事件实时转化为 Agent 在 3D 办公室里的行为动画。这篇文章带你拆解从运行时事件到办公室动画的完整触发机制即使你是新手也能看懂。什么是行为驱动的 Agent传统 AI 助手是纯文本框你问它答界面上没有任何存在感。Claw3D 的 RetroOffice3D 用 Three.js 渲染了一座复古 3D 办公室每个 Agent 都是一个会走路的 3D 角色工位打字Agent 正在执行任务时坐在工位前敲击键盘机房评审聊到代码评审时它走向服务器机房健身房锻炼涉及技能构建时它去健身房举铁电话亭/短信亭Agent 之间可以打电话、发短信沟通晨会、打扫还有站会、保洁阿姨打扫等趣味行为。这些动画不是预先录好的而是由运行时事件流实时推导出来的——这就是行为驱动的核心思想办公室场景是 Agent 运行时状态的可视化投影。完整管线从 Gateway 事件到 3D 动画的四个阶段Claw3D 的触发机制设计成一条单向管线四个阶段各司其职事件接入 → 意图解析 → 状态对账 → 场景投影阶段一事件接入给 Gateway 事件分诊Agent 的所有活动都来自 OpenClaw Gateway 的 WebSocket 事件流。runtimeEventBridge.ts 中的classifyGatewayEventKind是分诊台把事件分成四类事件名分类动画含义chatruntime-chat有消息流 → 工作/流式输出动画agentruntime-agent有运行流 → 思考/工作动画presence/heartbeatsummary-refresh心跳保活不触发行为其他ignore忽略只要带runId的运行时事件到达就会把对应 Agent 的工作中锁存延长 5 秒见 eventTriggers.ts 中的WORKING_LATCH_MS 5_000。阶段二自然语言指令全办公室一个入口最有意思的部分在 deskDirectives.ts。它的注释写得很直白这是办公室移动与房间意图的唯一自然语言入口。resolveOfficeIntentSnapshot会对你说的一句话做一次意图快照同时解析出所有房间指令go to your desk → { desk: desk } → 回工位坐下 review the PRs → { github: github } → 走向机房评审 lets go to the gym → { gym: { directive: gym } } → 去健身房 write tests → { qa: qa_lab } → 进 QA 实验室 call Alice and tell her... → { call: { callee, message, phase } } send Bob a text that... → { text: { recipient, message } } standup time → { standup: standup } → 召集晨会注意一个优雅的设计每个房间只需在快照解析器里加一条规则聊天、办公室、3D 场景所有通道共享同一套命令语法避免了正则检查散落在各处。阶段三双重状态短命锁存 持久 HoldeventTriggers.ts 顶部有一段设计说明点破了整个机制的精髓事件削减reductionreduceOfficeAnimationTriggerEvent从新到的 Gateway 事件里记录短命锁存——比如流式输出 6 秒、思考 6 秒、健身房手动指令 60 秒对账reconciliationreconcileOfficeAnimationTriggerState从当前 Agent 状态和会话记录重建持久 Hold——比如它正坐在工位上不会因为某条事件丢失就消失。为什么要两道因为 WebSocket 消息可能丢失。对账是持久事实来源即使错过了 chat 事件只要会话历史里还有go to the server roomAgent 依然会乖乖待在机房。每次处理事件前还有pruneOfficeAnimationTriggerState做剪枝清理已删除 Agent 或已过期的定时器防止内存泄漏。阶段四最终投影3D 场景只消费现在时状态OfficeScreen.tsx 中每帧调用buildOfficeAnimationState把复杂的触发状态压缩成一个小而干净的现在时对象OfficeAnimationStateworkingUntilByAgentId → 谁正在敲键盘 streamingByAgentId → 谁正在输出中 thinkingByAgentId → 谁正在思考 deskHoldByAgentId → 谁占着工位 gymHoldByAgentId → 谁在健身房 phoneBoothHoldByAgentId → 谁在打电话 ...源码注释解释得很清楚这个投影故意比触发状态更小因为 3D 场景只需要布尔值 计时器不需要推导过程的簿记数据。最终 RetroOffice3D 通过animationState属性接收这份快照驱动角色寻路、坐下、敲键盘、接电话等动画。一次真实交互的完整旅程假设你对 Agent 说call Alice and tell her the build passed意图解析resolveOfficeCallDirective匹配到 call ... and tell ... 模式提取被叫方 Alice 和留言phase 为ready_to_calldeskDirectives.ts触发状态applyUserMessageTriggers把这条呼叫请求写入phoneCallByAgentId投影buildOfficeAnimationState发现 phase 是ready_to_call置位phoneBoothHoldByAgentId动画3D 场景让该 Agent 寻路走到电话亭、拿起听筒自动解除当会话中出现[phone booth] Call with Alice finished.这行助手回复时maybeResolveCompletedPhoneCallRequest用正则匹配并清除 holdAgent 自己走回工位——连结束也是从事件流里推导出来的。这套设计好在哪对想自己实现Agent 可视化的同学有 3 个可复用的模式事件驱动 锁存用带过期时间的锁存表达瞬时行为打字 5 秒、思考 6 秒天然抗事件抖动削减 对账分离实时性靠事件流可靠性靠状态对账两者互补而不是二选一单向投影场景层只读最终快照不接触推导逻辑3D 代码和 Agent 逻辑彻底解耦。关键源码与文档导航想深入源码的同学可以从这几个文件读起触发机制核心src/lib/office/eventTriggers.ts —— 锁存、对账、投影三合一自然语言指令解析src/lib/office/deskDirectives.ts —— 所有房间意图的单一入口事件分类与生命周期src/features/agents/state/runtimeEventBridge.ts事件接入决策src/features/agents/state/gatewayEventIngressWorkflow.ts3D 场景消费端src/features/retro-office/RetroOffice3D.tsx架构总览文档docs/agent-state-model-spec.md、docs/runtime-profiles.md办公室系统设计docs/office-systems-roadmap.md总结Claw3D 的行为驱动机制本质是把Agent 的运行时事件流当作 3D 场景的唯一数据源Gateway 事件负责现在发生了什么自然语言意图负责它该去哪状态对账负责别丢状态最终投影负责场景只需要现在时。四步管线让文字聊天和 3D 动画像同一枚硬币的两面——你敲下的每一句话都成了办公室里那串正在走动的脚步。【免费下载链接】Claw3DClaw3D is an open source 3D engine built on OpenClaw for creating games, simulations, and high-performance 3D applications.项目地址: https://gitcode.com/gh_mirrors/cl/Claw3D创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考