工程愿景及其背后的设计原则。面向客户的产品定位与功能目录参见 product.md(中文版);通信协议参见 protocol-spec.md(中文版)和 protocol-design.md(中文版)。
iotta 是一个自托管的语音 AI 服务器:它接收嵌入式设备发来的音频,通过语音识别 → 大语言模型 → 语音合成流水线进行处理,调度工具调用,并将合成语音流式返回。
同一台服务器同时也是构建该助手的团队所使用的开发环境。一套部署贯穿完整生命周期——从无硬件仿真、原型调试,到生产环境设备群——使某一阶段验证的行为可以无需重新集成地带入下一阶段。无需单独的测试工具。
iotta 不包含任何产品相关的特定知识。任何语音 AI 产品都可以构建于其上,无需修改平台本身。
完整的语音运行时。 会话管理、流式音频流水线、工具调用分发、设备管理——具备生产能力,而非演示品。
生命周期连续性。 同一套部署服务于开发的每个阶段,因此在仿真中验证的行为就是最终交付到现场的行为。
AI 与固件团队的共享契约。 工具 Schema 是 LLM 可调用的内容与固件可执行的内容之间的权威接口。iotta 将这些 Schema 作为版本化产物来管理,使两个团队能够基于同一真相来源并行开发。
不绑定提供商的运行时——流水线或一体化皆可。 每个 AI 组件——ASR、LLM、TTS——均可插拔;运行时既支持多步的 ASR→LLM→TTS 流水线(可替换任一环节、可本地运行),也支持背后基于同一接口的一体化语音到语音(speech-to-speech)模型。切换提供商或运行时形态只需修改配置,无需改代码——而且两者的追踪与评测方式完全一致。
小型团队可自行托管。 单容器、本地存储,核心运行无需任何云依赖。
同一个小团队即可在生产环境中运维。 持久化存储配以单文件备份/恢复,一键健康预检,结构化日志和指标导出到标准工具,以及默认开启 TLS 的一键部署。
多用户,并具备适当的权限。 应用角色——管理员、开发者、PM——登录后获得与其职责匹配的权限,由管理员配置,且每次管理操作均可溯源。(主机层面的操作——配网、安装、备份——由部署人体工学服务,而非应用登录。)
处处使用同一台服务器。 开发与生产运行完全相同的二进制和协议。软件设备客户端——以及浏览器内模拟器——使用与真实固件完全相同的通信协议,因此在任何硬件存在之前就能迭代完整流水线。
两条清晰的通道。 一次会话通过一条 WebSocket 承载音频和控制消息,通过另一条独立的 MCP WebSocket 承载 LLM 的设备侧工具调用。一切控制会话传输的内容都在会话通道上;一切 LLM 可能调用的内容都在工具通道上。工具通道是可选的——即使丢失它也绝不会中断对话。(设计原理见 protocol-design.md。)
版本化产物,有意为之的晋升。 提示词、工具 Schema 和运行时设置都是遵循 草稿 → 暂存 → 激活 生命周期的不可变版本。晋升是一个显式操作,而非覆盖写入——因此一次变更可审查、可锁定、可回退。
一切皆可观测。 每次会话——无论实时还是仿真——都成为结构化、可回放的记录,细至每轮的 token 数、首字响应时间(TTFT),以及各环节/多跳的耗时。变更在晋升前需通过有评分的评测套件验证。设备上报运行时健康状态,按固件版本统计的设备群崩溃率信号驱动安全发布。
默认安全。 对任何非环回客户端强制 TLS,按设备独立的会话令牌,以及分阶段、门控、并在健康回归时自动回滚的 OTA——一个有问题的构建版本永远不会使现场设备变砖。
每个子系统都复用同一种“存储 + 轻量接口层”的形态:一个依赖精简的核心配以稳定的 API,外面包裹一个 CLI、一个读写 HTTP 接口,以及一个运营 UI 视图。记录持久化到内嵌 SQLite;大型产物——固件镜像、采集的音频、追踪与评测 JSON——以文件形式保存在主机上。状态是单一目录下的普通文件,因此备份就是一个归档文件。
这些子系统提供的功能目录见 product.md(中文版)。授权与开放核心策略见 commercialization.md:iotta 在 Functional Source License(FSL-1.1-ALv2)下源码可见,自托管优先,并提供用于设备群规模化运营的付费版。