架构
状态:草案 · 最后更新 2026-11-05 · 长图:assets/architecture-long.png(源:.mmd)
点击任一层打开其 JSON Schema 契约 · 时间尺度即抢占优先级:L1 > L2 > L3 > L4 · 窄屏可横向滑动
一句话
L1 说"我饿了" → L3 说"那我现在想去找吃的" → L4 说"路径这样规划,话这么说" → L2 说"路上有坑我躲了"。
分工总表
| 层 | 时间尺度 | 职责 | 上级可抢占 | LLM 参与 |
|---|---|---|---|---|
| L1 内感受/稳态 | 10–100 ms | 电量、温度、关节应力、任务进度;设定点偏离检测;全局广播 | 无(最高) | 不参与 |
| L2 反射 | 10–100 ms | 避障、平衡、力控、接触修正;硬否决权 | L1 | 不参与 |
| L3 情感/动机 | 0.1–1 s | 连续情绪向量;目标候选与优先级;调制 L2 参数 | L1 / L2 | 不参与(可调本地小模型) |
| L4 规划协调 | 1–10 s+ | 接收目标候选,协调任务分解,调用 LLM,下发执行 | L1 / L2 | 主场:调用异步 LLM 服务 |
| 外部 LLM | 秒级,不可靠 | 语义规划、对话 | 不适用(可断线) | 它就是它自己 |
L1 · 内感受 / 稳态
唯一职责:定义"正常"是什么,并检测偏离。
- 监控变量(v0.1 范围):电量、关节/驱动器温度、关节应力/电流、任务进度。
变量清单是提案,需在仿真里标定后再定稿——见下方 TBD 表。
- 设定点:每个变量有目标区间;偏离程度归一化为 0–1 的
severity。 - 输出:
homeostatic_broadcast(可抢占全局),见 interfaces.md。 - 只实现内感受的 homeostatic 分支:allostatic(按不确定性在偏离发生前重评估设定点)未实现, 因此本层严格说是"稳态层"而不是完整的"内感受层"。理由与回来做的条件见 ADR-0004。
- 不做:路径规划、语义理解、对话。
为什么它必须在最底层:如果需求由 L4 或 LLM"想起来",那么 LLM 一断线,需求就消失了—— 而需求的中断恰恰最危险(没电不会因为模型掉线而停止没电)。
L2 · 反射
唯一职责:在毫秒级把危险动作掐掉。
- 避障、平衡、力控、接触修正。
- 微秒到毫秒级的本地控制器(PID、阻抗控制、轻量网络)。具体选型 TBD。
- 硬否决权:任何情绪或规划状态下的动作,触碰阈值一律截断。阈值语义见 safety.md。
- 输出:
reflex_override(硬中断)、outcome_event(事件)。 - 不做:决定"去哪"。
L3 · 情感 / 动机
唯一职责:把"状态"翻译成"想干什么"。
- 连续情绪状态向量(效价 / 唤醒 / 支配 / 好奇 / 恐惧),取值范围见
contracts/affect_vector.schema.json。 - 两类输出:
- 调制 L2 参数(探索率、避障距离、交互频率、任务优先级)——只调参数,不改阈值;
- 生成
goal_candidate("我想干什么" + 优先级)。
- 不做:语义推理、长程规划、安全决策。
为什么用连续向量而不是标签:标签是离散的、回合制的,而调制必须是连续的—— 情绪的作用方式是"让某个动作更容易发生",不是"宣布进入悲伤模式"。
L4 · 规划协调
唯一职责:把目标候选变成可执行计划,并在需要时向外部求助。
- 接收
goal_candidate,排序、分解、下发。 - 需要语义时调用外部 LLM 服务(
semantic_plan_request→semantic_plan_result)。 - L4 不是 LLM。L4 是规划协调器;LLM 是被它调用的外部服务。
- 断线策略:请求超时 → 回退到本地策略 → 若本地无策略则上报
outcome_event。具体超时值 TBD。 - 不做:实时控制、稳态判断。
外部 LLM 服务
- 异步、可插拔、可断线。
- 不持有设定点,不生成需求,不改安全阈值。
- 返回的规划结果可被 L1/L2 抢占——它是建议,不是命令。
耦合原则
| 原则 | 含义 |
|---|---|
| 向上异步 | 上层向下的信号不阻塞下层 tick |
| 向下抢占 | 下层向上必须是"可以打断"的,不是礼貌通知 |
| 单一所有权 | 每个变量只归一层写,其他层只读 |
| 可断线 | 任何一层的上游断掉,本层必须有降级行为 |
TBD 表(需要实测才能定)
这里刻意空着。填这些数需要仿真数据,不接受"看起来合理"的估计。
| 参数 | 建议起点 | 依据 | 谁来定 |
|---|---|---|---|
| L1 采样率 | TBD | 取决于传感器带宽 | 仿真实现者 |
severity 归一化曲线 | TBD | 线性/分段/指数待对比 | L1 实现者 + 评价 |
| 各变量设定点与死区 | TBD | 平台相关(电池化学、电机热模型) | 平台适配者 |
| L2 阈值(力 / 距离 / 限位) | TBD | 必须来自硬件安全规格,不能拍脑袋 | 安全负责人 |
| L3 情绪向量衰减时间常数 | TBD | 与交互节律相关 | L3 实现者 |
| L4 LLM 请求超时 | TBD | 需实测 LLM 延迟分布 | v0.2 实验 |
| 抢占恢复延迟上限 | TBD | 需实测 | v0.3 评估 |
待补
- [ ] L1–L2 实时层拆分图(
assets/architecture-realtime.png) - [ ] L3–L4 认知层拆分图(
assets/architecture-cognitive.png) - [ ] 各层内部模块图与线程/进程模型
- [ ] 与 ROS 2 / DDS 的执行模型映射(决定用话题还是共享内存)