🏠 home › journal › 2026-05-15

2026-05-15 变更日志

IoT-Agent 能力协商架构 v5 决策(全天单线程迭代)

起点:用户提出 4 个相互关联的需求——① 物模型功能开发文档 / ② 设备控制协议开发文档 / ③ Demo App 多 DP 展示 / ④ IoT 与 SaaS 平台打通设备控制协议。

两轮调研: - Step 0a:iot-docs + Conversational-AI-IOT-Sample 现状摸底——MQTT 协议规范齐全,4 个 DP 已实现(switch / volume_set / battery_percentage / charge_status),无 capability 上报链路 - Step 0b:DragonFlow 平台调研——独立 Java 三件套中间件(不是 Sentino Agent 子模块);OpenAI tool calling schema + Product capability_config 已实现;控制下行走 Agora DataStream(不走 MQTT);P1 单向无反馈;能力交集逻辑未实现

5 版决策迭代(全部保留在 raw/notes 作历史): 1. v1(B+B'):IoT 平台为 capability source + 显式映射表 → 用户推翻:DragonFlow 团队希望维护 product 能力 + C 更灵活 2. v2(C+A):DragonFlow 维护 + 固件 dispatch + 独立 capability_report MQTT code → 用户揭示真实链路(Agora ConvoAI 透传机制),过度设计 3. v3(Agora customMetadata):复用 Agora 透传通道 → 看到真实 API doc 后发现更直接路径 4. v4(device_info + Sentino API conversation 上下文):完全在 Sentino API 内部解决 → 用户指出"跨团队接口"和"IoT 平台内部机制"应该分层 5. v5(两层分离 final):Layer 1 跨团队接口锁定(device_info.supported_executors)+ Layer 2 IoT 平台内部 X/Y/Z 自决

决策核心:设备实际能力 ∩ 产品定义能力 = agent 实际可用工具集;per-conversation 透传 + 零持久化 + 老 fleet 天然兼容。详见 iot-agent-capability-bridging

新建页面

关键知识提取

  1. DragonFlow ≠ Sentino Agent 平台——DragonFlow 是独立 Java 中间件(workflow-engine + workflow-api + workflow-web 三件套),是 Sentino Agent 的"事实核心实现"但概念上不同。意义:未来讨论 sentino-agent 能力时要区分"产品定位/API 契约"和"具体实现"两层。 → 与 sentino-agent 的连接:sentino-agent.md 应该提到 DragonFlow 是其当前事实实现(暂未在该页加链接,留作下次更新)

  2. 物模型 DP 与 agent capability 是两套语义独立体系——物模型 volume_set: int 0-10 是低级属性,DragonFlow capability display_emotion(emotion_type) 是业务级行为。中间没有自动映射。意义:DP↔Capability 映射决策必须显式做(v5 选 C:固件 dispatch)。 → 与 mqtt-device-protocol 的连接:MQTT 协议层的 DP 字段(switch/volume_set/etc.)跟 DragonFlow capability 是两个层次,不要混淆

  3. 设备控制协议有两个独立通道——物模型走 MQTT,agent 控制下行走 Agora DataStream(二进制广播)。意义:固件需要同时实现两套接收逻辑;MQTT 不承载 agent 控制 command。 → 与 agora-rtc-voice 的连接:DataStream 是 Agora RTC 频道里的辅助通道,不只是音频

  4. Per-conversation 透传是 sentino API 的设计模式——device_info 已经包含 battery / wifi / location 等"per-session 新鲜状态"字段,capability 加进去完全 idiomatic。意义:架构选型时要先看现有系统的设计模式,不要凭空创造新基础设施。 → v5 决策的关键思路转折就是这一点(v3 → v4 → v5 三版迭代后才看到)

  5. 跨团队接口和平台内部机制必须分层——v4 把"agent 平台需要什么 spec"和"IoT 平台用什么方式获取 capability"混在一起讨论,导致 A vs B 对比看似关键但其实是 IoT 平台内部决策。v5 拆开后 Layer 1 锁定+ Layer 2 IoT 团队自决,路径立刻清晰。 → 这个分层经验适用于一切跨团队架构讨论(不限于 capability 协商)

  6. 设备控制协议在 iot-docs 现状审计:5 份文档共 3209 行 - device-control-firmware-implementation-guide.md(927 行):直接用 ✅ - device-control-protocol.md(981 行,张鹏稿):从未实施 + 与 v5 架构冲突 → 已加 DEPRECATED banner - design.md(530 行):§4 改写为 v5 路径 + §9.5 v5 进展段 - product-capability-guide.md(548 行):保留主用 - Sentino Device Control Doc.md(223 行):历史保留

更新页面

配套修改 iot-docs/control/

不在 obs 知识库内但跟今日决策强相关,记录:

任务系统

新增 memory

事实核查记录

待办


蓝牙音频协议入库(晚间补充)

起点:用户问"蓝牙耳机蓝牙音箱和手机交互的协议"。知识库已有 ble-classic-vs-le(入门区分页)但缺 audio profile 这层细节,决定补一个 concept 页。

新建页面

更新页面

关键知识提取

  1. A2DP vs HFP 不同链路:A2DP 走 ACL(异步可重传,~700 kbps,单向音乐),HFP 走 SCO/eSCO(同步不重传,64-128 kbps,双向通话)。这是"AirPods 一接电话音质就崩"的物理层原因——切了链路。
  2. AVRCP 是控制信令通道:耳机按键能控制手机播放器,跑在 AVCTP 之上,跟音频流分开。1.6 之后支持 browsing。
  3. HFP AT 命令:跑在 RFCOMM 上,把蓝牙耳机当 modem 用。AT+CHUP 挂断、AT+VGS 调音量。这是早期 Headset Profile 历史包袱。
  4. LE Audio 推翻"BLE 不能跑高质量音频":5.2 引入 BAP + LC3 + Auracast,蓝牙音频整体在从 Classic 迁到 LE 侧。AirPods H2 / Galaxy Buds3 / Pixel Buds Pro 2 已支持,但 Classic 仍是当前事实标准。
  5. Sentino 反向决策:蓝牙音频只能 P2P 不能上云 + BLE 配网功耗优势 + RTC 才能接 LLM → Sentino 不实现 A2DP source / HFP AG。如果未来要做"蓝牙耳机直连 Agent"形态需双协议栈 + 仍需上行 RTC,工程量不划算。