iotta — 产品概述
面向外部的产品定位。工程愿景参见 design.md(中文版);商业化模式参见 commercialization.md。
iotta 是将嵌入式设备变成语音助手的自托管服务器,也是你的团队构建、测试和交付该助手的工作台——从第一个仿真原型,到现场部署的设备群。
面向谁
- 硬件/固件团队——一套忠实的设备协议、一个可供测试的软件设备,以及来自同一台服务器的安全更新。
- AI/应用团队——版本化的提示词和动作、完整的会话记录,以及自动化测试。
- 负责运维的人——单容器、一条命令、一个备份文件。
它能做什么
实时助手
- 运行实时语音对话,并允许用户中途插话打断。
- 语音转文字、AI 模型、文字转语音三者均可自由替换——通过修改配置即可使用 OpenAI、OpenAI 兼容服务,或运行在你自己硬件上的模型。
- 两种构建语音的方式,同一套设置。 既可拆成独立的几步(语音转文字 → AI 模型 → 文字转语音,便于替换或自行部署每个环节),也可使用单一的一体化语音模型(更快、活动部件更少)。无论哪种方式,设备和所有工具的用法完全一致,因此你可以将两者直接对比。
- AI 可以触发设备动作——读取传感器、调节音量、点亮 LED——通过一条独立的专用通道完成。
构建与测试
- 软件设备——真实硬件的替身,让你在任何硬件存在之前就能构建并测试完整体验。
- 浏览器模拟器——在浏览器中运行一次真实会话,无需安装:实时观察消息和音频的往来,触发 AI 的设备动作并查看其参数、结果与错误,并在连接出现问题时当场捕获。可将任意会话保存为可重复运行的测试。
- 用于调优的音频采集——采集设备的原始未压缩音频(而不仅是压缩流),用于调优语音识别和音频硬件;可让运行中的设备随时切入该高保真模式;并可在记录中直接回放任意一轮的音频。
- 会话记录 + 回放——每次会话,无论实时还是仿真,都会保存为详尽、可搜索的记录,可针对不同的提示词、模型或语音引擎进行回放,查看变化。
- 自动化测试——编写脚本化的测试对话,针对预期结果自动评分,并可对两种设置(独立几步或一体化)运行同一套测试——在上线前捕获回归问题。
- 版本化的提示词与动作——提示词和 AI 的设备动作定义都以版本形式保存,依次经过 草稿 → 暂存 → 上线;上线是一个有意为之的步骤,绝不会意外覆盖。
管理设备群
- 一份实时设备名册,显示此刻真正在线的设备——基于真实连接,而非陈旧的签到。
- 按分组将设备纳入管理,每组拥有自己的注册规则和默认助手设置。
- 安全的空中更新(OTA)——每个固件构建版本都是固定且带校验和的;可先向设备群中的一小部分发布、阻止过旧而无法接收的设备、用一条命令撤销发布,并让 iotta 自动撤回开始导致设备崩溃的构建版本。
观察运行状况
- 每轮与每次会话的数据——使用的 token 数、首次响应所需时间、每个步骤的耗时,以及与设备动作之间任何来回交互的时序——全部自动采集。
- 每次会话的完整记录:各步骤耗时、AI 的设备动作,以及内联音频回放。
- 设备健康状态随时间的变化,以及设备群中每个固件版本的崩溃率。
- 外部 AI 调用检查器——针对每一次对外部 AI 服务的调用:请求与响应、耗时、token 数、估算费用,以及任何错误。
- 日志和指标导出到你已在使用的标准监控工具。
运行服务器
- 以单容器运行,内置数据库;其所有数据都是主机上的普通文件。
- 一键检查存储、磁盘空间、安全设置和提供商密钥。
- 将所有内容备份到单个文件——并同样轻松地恢复。
- UI 中的系统状态页面,HTTPS 由内置代理为你处理。
Web 控制台
- 所有管理任务均可在浏览器中完成。
- 由平台自身提供该控制台——无需额外安装任何东西。
为什么选择 iotta
- 更快交付。 一个平台从第一天的仿真,贯穿原型到生产——没有独立的测试工具,阶段之间也无需重新接线。
- 团队并行开发。 AI 与固件共享同一份约定好的设备动作清单,任何一方都无需等待另一方。
- 全面可观测。 每次会话、每台设备的健康状态,以及每一次对外部 AI 的调用——时序、token 数、费用、错误——均有日志记录,均可查阅。
- 运维简单。 在一台小型主机上以单容器运行,没有额外的数据库或服务需要照看,默认开启 HTTPS,备份只需一个文件。
- 完全属于你。 自托管、源码可见,可使用 OpenAI 或运行在你自己硬件上的模型,无需任何对外的云服务。
- 更新安全。 渐进式发布配合自动回滚,意味着一个有问题的构建版本永远不会使现场设备变砖。
iotta 对比竞品
此处的参照物是 xiaozhi(xinnan-tech/xiaozhi-esp32-server),即 iotta 所替代的开源平台。xiaozhi 一列基于 xinnan-tech/xiaozhi-esp32-server(含其自身第 15 节“已知限制”)。
| 能力 |
iotta |
xiaozhi |
| 需运维的组件数 |
单个 Python 服务 + SQLite |
Python + Java/Spring + MySQL + Redis + NGINX + 独立 ASR 进程 |
| 部署方式 |
docker compose up,单主机 |
多服务;Redis 缓存刷新踩坑(§15.3) |
| 负载稳定性 |
无状态应用,会话干净排空 |
每日重启容器以规避 socket 泄漏(§15.2) |
| 认证/传输安全 |
按设备独立令牌,默认开启 TLS,常数时间比较 |
认证常被禁用;默认数据库凭据;“未经安全评估”(§15.8) |
| 真实设备在线状态 |
真实连接/断开状态 |
last_connected_at = OTA 轮询时间,非会话时间(§15.6) |
| 安全 OTA |
签名、分阶段百分比、最低版本门控,回滚 + 基于健康状态的自动回滚 |
平铺的 ai_ota 表;表为空时存在无限重试 bug(§15.4) |
| 会话追踪 + 回放 |
有(结构化,可回放) |
无(仅有性能测试器 + 测试音频页面) |
| 评测/回归测试 |
有(有评分的测试套件) |
无 |
| 工具/提示词版本管理 |
有(草稿 → 暂存 → 激活) |
运行时插件;无版本化契约 |
| 第三方 API 可见性 |
调用检查器 + 每轮 token 数、首字响应时间(TTFT)、各环节/多跳耗时 |
仅各组件延迟 |
| Web 开发模拟器 |
基于真实协议的浏览器客户端(消息往来、工具调用、错误均可见) |
仅浏览器音频测试页面 |
| 音频输入调试 |
无损 PCM 上行采集 + 会话中模式切换 + 追踪回放 |
仅浏览器测试页面 |
| 不绑定提供商 |
是(配置切换) |
是(适配器列表非常丰富) |
| 运行时形态 |
多步流水线或一体化语音到语音,可用同一套评测套件进行 A/B 对比 |
多步流水线(ASR → LLM → TTS) |
| AI 流水线 |
ASR → LLM → TTS + 工具;记忆/RAG/视觉可基于同一提供商接口扩展 |
今日已含 VAD、声纹、记忆、RAG、视觉 |
| 多用户/RBAC |
角色 + 审计日志(商业版功能) |
今日已有普通用户 + 超级管理员 |
| 生产就绪度 |
内置 TLS、备份、预检 |
“未经加固不适合生产使用”(§15.8) |
直白地说: iotta 押注于运维简洁性、更新安全性和全链路可见性——这恰恰是团队在交付产品时最容易在 xiaozhi 上吃亏的几个维度。xiaozhi 目前在 AI 流水线广度(记忆/RAG/声纹/视觉)上更胜一筹;在 iotta 中,这些能力位于相同的干净提供商接口之后,因此是对平台的扩展,而非重写。
版本规划
iotta 提供开放核心、自托管模式:
- 社区版——免费;完整开发平台;活跃设备数量有上限(面向演示、个人使用和评估)。
- 商业版——许可证提高/取消设备上限,并解锁团队功能(多用户角色 + 审计、高级灰度自动化、长周期保留分析)。
核心版本始终可在无需任何云依赖的情况下运行。商业模式、授权执行设计和定价/打包方案见 commercialization.md。