公开开发日志 · D2/28

先让它真正有用,
再让它看起来完整。

我们正在制作一个能注意到你、自然与你交谈、记住长期目标,并在合适时机主动回来关心你的可移动 AI 伙伴。 第一期不追求外壳,只用四周回答最重要的问题。

注意力窗口 · 10s
本地感知 · 云端思考 · 结构化记忆
当前阶段第 1 周 · 桌面灵魂18:03 真人短测已证明 420 ms 等待与‘拒绝也收完整句’修复有效,并把当前瓶颈定位为视觉嘴声证据。后续自动修复 YuNet 同目标续跟与 uncertain 误清嘴部历史后,又发现‘头部正对’本身仍不足以保护下一次真人机会:脸太小、脸部过暗/过亮或画面模糊时,按钮可能亮起,但后面的嘴声门仍注定缺少可靠样本。现在一次短测使用 visualPreflight v2,在申请麦克风和创建短测收据之前,同时要求至少三份跨 800 ms 的连续正对证据,以及至少三份跨 180 ms、近期仍新鲜的可靠嘴部画面证据;批量到达、长间隔、转头、丢失、多人和故障都会重置。脸太小、光线不可用、画面模糊或仍在稳定中时,页面分别提示靠近、调整光线、保持自然坐姿或再等一秒,不要求用户说话。健康接口依旧只返回 version/state 两个字段,不包含画面、坐标、关键点、分数、原始原因或时间戳。新版四服务已全冷启动,当前用户不在画面,状态诚实返回 not-present;桌面与 390×844 手机首屏已实际检查,四步引导、唯一句子、隐私说明和主按钮都可见。为避免按钮未亮时还要用户凭记忆描述,本页现在会在当前标签页内保留最多 16 个固定准备状态;不含时间、画面、人脸框、分数、原因、音频、正文或 ID,关闭标签页即清除。页面检查未创建短测收据,本地录音仍只有此前唯一一份,没有打开麦克风或调用云端。Node 全仓 385/385、D7 209/209、Python 视觉 64/64、生产构建、全仓 ESLint 与差异检查均通过。仅 /lab/companion?test=short 经明确操作保存本地 WAV,不录视频;普通与正式模式默认不保存原始录音。公开同步标记:D7-PREFLIGHT-SESSION-V1。
验证完成度0%只按通过验收的证据计算
一期预算¥20,000目标实际支出 ¥8,000–¥12,000
最后更新2026-08-09 19:42 CST没有新证据,完成度不会上涨
01

现在正在做什么

每次只保留一至三件事,并提前写清“怎样才算完成”。

01待跨日复测

D2:本地注意事件抗抖验证

完成定义v3 正常光 3 轮首次试跑已保留;v4 已加入人工开始门与 1.2 秒连续稳定门,下一次只做 3 轮跨日复测,不立即重复消耗用户体力。

02真人复测 2/2 通过

D3:真实云语音闭环

完成定义D3-B 四轮真人验收 4/4 通过;D3-C 短句、长句真人延迟复测 2/2 通过。音频从开口起流式发送,本机账本只保存结论与阶段耗时,不保存音频或对话正文。

03已收口(自动证据+用户查看)

D4:计时器与 TDL

完成定义计时器与 TDL 全部核心路径、持久化和恢复边界已自动验证;用户查看操作页后确认没有问题,并明确免做简单人工脚本。未发生的真人重启测试不会被补写成已完成。

04自动基线已收口

D5:结构化记忆

完成定义来源、捕获置信度、时间、确认、纠正、删除、v1→v2 迁移和断电恢复边界均已自动验证;语义是否真的符合本人意思仍留给后续一次高价值真人判断。

05嘴声关联自动基线完成

D6:视觉注意+声学活动+嘴声关联门

完成定义五点头部正对代理、VAD、单人/断连/停帧保护和活动回合原子取消已接入同一控制器;现在又增加约 10 Hz 的本机嘴部运动标量,并在 ASR 之前校验嘴部由静到动与真实起声时刻是否相邻。拒绝音频不调用云端,画面、嘴部裁片和关键点不落盘、不上传。自动基线已能拒绝‘用户嘴部静止、电视或旁人出声’,但仍不宣称眼神、身份、声纹、活体或全部电视场景已解决。

06正对+嘴部清晰度自检 v2 已接入,等待自然入镜

D7:注意→对话→确认记忆→跨重启回忆

完成定义此前真人记住与确认已成功,已确认记忆也跨四服务重启恢复;18:03 真人短测又验证 420 ms 等待与拒绝后持续到自然停口。后续自动排查修复两层视觉连续性问题:YuNet 把首次获取保持在 ≥0.8,同一锚点续跟放宽到 ≥0.7,但强制 IoU ≥0.35、归一化中心距离 ≤0.05;浏览器 uncertain 只暂停新嘴样本,不再误清仍新鲜的历史,明确 turned、lost、ambiguous、fault 仍硬清。visualPreflight v2 现在还会在短测收据与麦克风之前要求连续正对和连续可用的嘴部画面,脸太小、光线不可用、模糊、批量样本或长间隔均不能开放按钮,并给出对应的无声调整提示。Node 全仓 383/383、D7 206/206、Python 视觉 64/64、构建、Lint 与差异检查通过;新服务冷启健康。因用户不在画面,当前状态为 not-present,不能宣称现场稳定性或完整 D7 已通过,也不要求用户立即再测。仅 ?test=short 经授权保存本地 WAV,不录视频;普通与正式模式默认不保存原始录音。

02

一期只证明三件事

不是四周做完一款商品,而是四周判断这条产品路线值不值得继续。

01

交流是否更自然

眼神、朝向和免唤醒能否让人忘记“打开一个 AI 应用”,直接开始说话。

02

关系是否真的有用

结构化记忆与克制的主动关心,能否在真实生活里产生具体帮助,而不是只显得新奇。

03

低价路线是否成立

不依赖机械臂、激光雷达、本地大模型和昂贵外壳,核心体验是否依然成立。

03

四周验证路线

第 1 周即有软件原型;关键能力不过闸门,不用更多硬件掩盖问题。

01第 1 周

先让 AI 活起来

在现有电脑上完成可用的“桌面灵魂”,不等待硬件。

进行中
  1. D1冻结范围、8 个核心场景、测试脚本、风险表与公开进度页
  2. D2事件总线与六种眼睛状态;连续运行 1 小时
  3. D3接通 VAD、ASR、LLM、TTS,支持流式回答与打断
  4. D4计时器与 TDL:增删改、完成、延期及重启恢复
  5. D5结构化记忆:来源、置信度、时间、确认与删除
  6. D6普通摄像头五点头部正对代理+正在说话的注意门控
  7. D7端到端联调、未剪辑演示与第一道继续/暂停闸门

阶段闸门能完成“注意 → 对话 → 记录目标 → 跨会话回忆”的闭环。

预算边界早期通用采购不超过 ¥3,500

02第 2 周

给它一副安全的身体

把软件装进无外壳裸机;听得清、停得住、不会失控。

待前序放行
  1. D8到货检查:电压、电流、接口、接线图与装配顺序
  2. D9主控接入屏幕、摄像头和麦阵;开机自动显示眼睛
  3. D10扬声器、增益、回声消除与 VAD 校准
  4. D11ESP32 控制电机:限速、缓启停、急停与心跳断联保护
  5. D12接入碰撞、悬空/跌落和被提起检测
  6. D13固定裸机架和线束;成品电池包、保险与总开关
  7. D14音频、视觉、电机联合测试与第二道预算闸门

阶段闸门真实设备连续运行 2 小时;提起、碰撞、悬空和失联均能停车。

预算边界累计支出不超过 ¥12,000

03第 3 周

建立关系闭环

它不只回答问题,还能记住、主动回来关心,并把信息送到手机。

待前序放行
  1. D15声源初始方向+摄像头校准;机器人原地转向用户
  2. D16空旷地面短移、避障与安全停车;失败则降级为原地转向
  3. D17主动调度:安静时段、每日上限、忽略和拒绝后的退避
  4. D18PWA:长答案、TDL、记忆查看、修改与删除
  5. D19网络中断、接口失败和重启恢复,不虚构结果
  6. D20完整场景测试;冻结新功能,只修最严重的三个问题
  7. D2124 小时稳定性测试,冻结 v0.1,开始七日家庭试用

阶段闸门隔天主动跟进一件真实目标;被拒绝后正确退让并延长间隔。

预算边界累计支出目标不超过 ¥15,000

04第 4 周

放进真实生活

七天不按功能清单表演,只记录它是否被自然使用、是否真正帮到人。

待前序放行
  1. D22登记真实目标、偏好与安静时段,开始自然使用
  2. D23每次互动标记“有用 / 一般 / 打扰”
  3. D24电视与他人交谈背景测试,采集误触发数据
  4. D25真实主动跟进;有意拒绝一次并验证降频
  5. D26真实使用计时器、TDL,并修改和删除一条记忆
  6. D27邀请 3–5 人体验;最后一天完全不安排脚本
  7. D28汇总数据、未剪辑演示、BOM、失败项与一期结论

阶段闸门形成公开成绩、失败项、实际成本和继续/调整/停止决定。

预算边界¥5,000 储备金默认锁定

裁剪顺序:先取消向前移动,保留原地转向;再取消手机推送,保留 PWA。记忆与主动跟进不得优先裁剪。新想法统一进入二期候选池。

04

里程碑与完成度

“已经实现”不等于“已经验证”。只有通过预先写明的测试,权重才计入总完成度。

M1

语音与表情闭环

六状态眼睛、真实人物位置跟随已运行;D3-B 真人四轮 4/4、D3-C 流式 ASR 真人两轮 2/2 均通过。18:03 真人短测已证明 420 ms 等待与拒绝后继续收音能完整持续到自然停口;后续视觉连续性修复及正对+嘴部清晰度自检 v2 已通过 Node 383/383、D7 206/206 和 Python 视觉 64/64。新服务冷启健康,但用户不在画面,未把 not-present 冒充现场通过,也不要求用户立即再说

15%进行中
M2

目标、进度与偏好记忆

D4 已按自动证据与用户产品查看收口;D5 结构化记录、迁移、确认/纠正/删除及五个中断窗口已通过。D7 已完成人声记住、确认和跨四服务重启恢复;错误候选已按授权清理,当前 confirmed=1、unconfirmed=0。仍待真人最后一句回忆确认完整语义闭环

20%进行中
M3

视觉/声音注意与自然开口

五点头部正对代理、VAD 与第一版本机嘴声时序门已接入同一控制器。针对真人短测同期 person.lost→person.detected,YuNet 现区分 ≥0.8 首次获取与受 IoU、中心距离约束的 ≥0.7 同目标续跟,浏览器 uncertain 只暂停新嘴样本而保留原时间戳内的新鲜证据;陌生人、多人、明确转头、丢失和故障仍不能继承。visualPreflight v2 在麦克风前额外要求三份跨 800 ms 的连续正对和三份跨 180 ms 的可靠嘴部画面,脸太小、光线不可用、模糊、批量样本或长间隔都保持关闭;健康边界仍只有固定状态枚举。Node 383/383、D7 206/206、Python 64/64 与冷启健康通过,但当前用户不在画面,尚无现场稳定性证据;M3 继续保持进行中

15%进行中
M4

底盘、安全与抱起停轮

—

15%未开始
M5

主动跟进与拒绝降频

—

20%未开始
M6

七日真实使用与公开演示

—

15%未开始
05

一期验收线

公开目标、当前结果和测试方法。失败不会被删除,只会新增修正记录。

指标一期目标当前测试方法
看向设备并直接开口20 次中至少成功 18 次第一版本机嘴声关联已自动通过:正脸、嘴部由静到动且声音同期时只放行一次;视觉元数据不足或过期时保守拒绝。尚未做新版真人阈值校准,不能据自动样本计算成功率不重复、不触碰设备、不说唤醒词
家庭环境误回应连续 8 小时不超过 1 次已记录 1 次疑似背景语音误入门;新增自动负样本中,用户嘴部静止而电视或旁人出声时,协调器与 ASR 调用为 0。尚未进行 8 小时家庭专项,同步电视人脸仍是明确边界包含电视声和普通交谈
首次出声延迟中位数 ≤ 2.5 秒,P90 ≤ 4 秒旧真人链路 5 次 ASR 请求中位数 5.47 秒;真流式改造后两轮真人复测 2/2 功能通过。长句停口后 ASR 184 ms、LLM 首字 377 ms、首次播放等待 2847 ms,合计约 3.41 秒;两轮样本不足以宣称中位数与 P90 达标从用户说完到机器人首次发声
跨会话记忆正确率≥ 90%D7 自动真实 HTTP 样本已完成显式捕获、强确认、关闭并重开服务和唯一关键词回忆;未确认、已删除、无匹配与多匹配均 fail-closed,记忆命令 0 次调用云端对话模型。该自动样本不冒充真人语音语义正确率,当前仍无真人样本仅测试用户明确表达或确认的记忆
计时器 / TDL 恢复20 次至少 19 次正确自动文件重开 20/20 正确;双进程互斥、强杀/PID 复用后接管、损坏保护与端口冲突均通过。用户查看页面确认无问题,并明确免做简单人工脚本;未执行真人数据重启包含断网和重启
安全停车提起、碰撞、悬空、失联 100%尚未测试每类重复 20 次
稳定运行连续 72 小时无需人工重启尚未测试记录可用率与不可恢复故障
七日自然互动≥ 30 次,其中 ≥ 10 次非测试尚未测试用户主动发起且不是照脚本操作
06

预算不是额度,是约束

不为了用满预算而采购。追加额度不计入一期可用资金。

当前可用余额

¥20,000
已支付¥0已承诺¥0锁定储备¥5,000

原型成本不等于未来零售价。我们记录成本,是为了发现是否存在无法绕开的昂贵部件。

AD1–D2
¥3,500

只买通用、可复用或可转卖的长交期模块

G1D7
¥8,500

桌面闭环通过后,才放行主控、电池与安全传感器

G2D14
¥12,000

裸机音频和安全通过后,才允许外协与备件

G3D21
¥15,000

端到端闭环通过后,只购买替换件和演示必需品

一期通过后才解锁最高追加 ¥30,000

只用于第二台可复现样机、静音底盘、轻外壳或收轮概念实验;不用于挽救核心体验失败的一期。

07

最新更新

每次推进都同步完成、证据、问题、下一步和新增支出。

D7 测试负担继续下降

按钮没亮也不用复述:本页会记住固定准备状态,但不会记住画面

完成
在等待最后一次真人时序验证期间继续收口测试体验。短测页现在把 visualPreflight 的变化保存为当前标签页内的会话级面包屑,最多 16 个固定枚举,并自动去掉连续重复状态。它只在 ?test=short 生效;普通陪伴页不创建这份记录。页面同步明确提示‘按钮未亮时不用说话’,因此用户无需为了排查而试说,也不必凭记忆复述刚才经历了哪一种准备状态。
证据
存储结构严格只有 version 和 states 两个键;状态只能来自固定白名单,不包含时间、画面、视频、人脸框、关键点、位置、分数、原始原因、音频、转写、回答、错误正文或任何 ID。未知字段、未知状态、连续重复污染、过长或畸形 JSON 会整条擦除;标签页关闭后由 sessionStorage 自动清除。自动回归覆盖去重、16 项上限、内容字段污染与坏数据擦除。实际短测页已检查到新提示、禁用的‘等待看到你’按钮与‘不录视频’,普通陪伴页没有该提示且仍显示‘默认不保存录音’。Node 全仓 385/385、D7 核心 209/209、构建、ESLint 与差异检查通过,没有开启麦克风、生成录音或调用云模型。唯一标记:D7-PREFLIGHT-SESSION-V1。
问题
这份面包屑只解决‘按钮为什么没亮’时的复盘,不会也不应替代真人开口时的嘴部运动证据。它存在于当前标签页而不是服务端;关闭标签页会主动失去这份诊断信息,这是隐私优先的取舍。
下一步
继续保持服务就绪,不安排多轮、灯光或姿态脚本。用户方便时只需等按钮亮起后说一遍页面给出的自然短句;如果按钮始终不亮,完全不要说话,本页的固定状态序列已足以辅助下一步定位。
新增支出
¥0 硬件采购;仅增加本机当前标签页的无内容状态记录与自动回归,未新增真人或云端消耗
D7 真实样本离线复盘

不再让真人替我们区分:旧画面能识别,录音也确实收到了句尾

完成
继续使用用户此前已经提供的真实摄像头截图和唯一一份明确授权的短测录音做本机离线复盘,没有要求用户重新出镜或说话。旧截图分别以完整界面、被压扁的摄像头区域和仅在内存恢复纵横比的代理画面送入当前 YuNet、五点正对与嘴部质量链路;三种输入均只检出一张脸,检测置信度为 0.9063–0.9391,正对代理均为 frontal、分数 1.0,嘴部区域在建立基线后的第二个静态样本均为 reliable,没有触发脸太小、光线不可用或模糊。图片只在本机内存读取,没有复制、另存或上传。
证据
唯一测试 WAV 为 16 kHz、单声道、16-bit、5.58 秒。只分析 20 ms 音量包络、不转写也不听取正文:有效语音能量持续到约 4.26 秒,中间两次约 0.14–0.16 秒的自然短停顿没有结束录音,随后完整保留 1.30 秒安静尾部才由 VAD 正常收口。这证明此前‘刚开口就停止’的旧截断问题已经修复,也排除了这次样本只录到开头的可能。没有产生新录音、云端 ASR、LLM 或 TTS 调用。原有同步标记:D7-AUDIO-CAPTURE-420MS-V1;本次唯一标记:D7-OFFLINE-EVIDENCE-V1。
问题
单张历史图片只能证明当时的距离、清晰度、光线和画面压扁没有让当前静态模型失效;它不能制造真实说话时的连续嘴部运动,也不能证明修复后的直播目标续跟已经现场通过。现有证据把最后的不确定性收窄到实时视觉时序,而不是音频截断、历史坐姿或静态图像质量。
下一步
不再重复已经排除的灯光、距离、固定口令或多轮脚本。当前 visualPreflight v2 会先无声检查正对和嘴部画面,按钮未亮时不会创建收据、申请麦克风或消耗一次测试;按钮亮起后只需一次自然短句,系统会把整句录到自然停口。下一次真人参与只用于验证修复后的实时嘴部时序,这已经是无法用历史静态素材替代的最后一项证据。
新增支出
¥0 硬件采购;本轮仅本机只读图像与音量包络分析,没有新增真人体力、录音、视频或云模型调用
D7 开麦前嘴部质量自检

正对还不够:只有嘴部画面也连续可用,短测按钮才会亮

完成
继续审计上一版‘先看见你,再允许开始’后发现,单帧正对并不能证明嘴声门有成功条件:脸太小、光线不可用或脸部模糊时,五点朝向仍可能给出 frontal,但嘴部活动估计会持续不可靠。visualPreflight 因此升级为 v2:同一目标至少需要三份跨 800 ms、间隔真实的连续正对样本,同时还需要三份跨 180 ms、近期仍新鲜的可靠嘴部画面样本。短间隔批量包不会重复计数,长间隔、转头、丢失、多人和摄像头故障都会重置。只有两组证据同时满足才返回 frontal;其他情况在开麦前提示‘稍微靠近一点’、‘调整脸部光线’、‘保持一下自然坐姿’或‘很好,保持现在这样’。按钮点击时还会立即再读一次健康状态,避免轮询与点击之间的竞态创建短测收据或申请麦克风。
证据
视觉证据累计器只保存样本数量、单调时间和四种固定质量原因,health 响应仍严格只有 version/state,不返回原始原因、画面、坐标、人脸框、关键点、分数或时间戳。自动回归覆盖真实采样间隔、批量积压不计数、长间隔重开、转头硬清、未知原因不穿越边界,以及每种用户提示均不开麦。Node 全仓 383/383、D7 核心 206/206、Python 视觉 64/64、生产构建、全仓 ESLint 与差异检查全部通过。四服务从空端口冷启动并确认 visualPreflight.version=2、当前状态 not-present、响应键仅 version,state。桌面与 390×844 手机首屏已实际检查:唯一句子、四步引导、隐私说明和禁用按钮均可见。短测阶段收据仍为空,本地测试录音仍只有此前唯一一份,本轮没有打开麦克风或调用 ASR、LLM、TTS。公开同步标记:D7-AUDIO-CAPTURE-420MS-V1。
问题
这解决的是‘开始之前就能判断有没有成功条件’,并没有凭空补出真人现场证据。用户当前不在镜头前,因此还不能验证其日常坐姿下会稳定到 frontal,也不能证明说话时的嘴部由静到动与声音关联已经通过;五点代理仍不是眼神、身份、声纹或活体识别。
下一步
现在仍不要求用户说话。服务保持运行;用户下次自然回到镜头前时,页面会先把问题收敛成可操作的无声提示。只有正常调整后按钮仍长期不亮,才申请一次不说话的机位检查;只有 v2 条件稳定通过后,才使用下一次单句真人测试机会。
新增支出
¥0;复用现有摄像头和本机视觉进程,未新增硬件、录音、视频或真实云调用
D7 真人机会保护与易用性

先看见你,再允许开始:失败现在会在开麦前暴露

完成
把一次短测的视觉条件从‘点下开始后才发现’前移到申请麦克风之前。视觉服务只给网页一个粗粒度状态:未入镜、预热中、正对、转头、不确定、多人或陈旧;网页每 900 ms 在本机轮询,只有新鲜的单人正对状态才开放‘开始一次短测’。其余情况不会开麦,而是直接提示坐到镜头前、自然看向屏幕、等待画面确认或让画面只保留一人。短测页同时改成清楚的四步引导:镜头就绪、安全开始、自然说一句、保存并结束;桌面与手机首屏都能看到当前动作和主按钮。普通连续陪伴页不受短测门槛影响,仍可正常开始。
证据
视觉健康契约、浏览器二次健康检查、SSE 实时更新和短测呈现状态均有失败关闭回归;旧服务缺少新契约时不会被误复用。跨进程只传 version 与状态枚举,不传画面、坐标、人脸框、关键点、置信分数或时间戳。Node 全仓 382/382、D7 核心 206/206、Python 视觉 64/64、生产构建、全仓 ESLint 与差异检查全部通过。桌面和 390×844 手机页面均已实际检查,控制台错误为 0,主按钮位于首屏。本轮未点击开麦、未生成新录音、未调用 ASR、LLM 或 TTS。新四服务已冷启动;用户不在镜头前时健康状态正确返回 not-present,页面禁用开始按钮并显示‘请坐到摄像头前’。公开同步标记:D7-AUDIO-CAPTURE-420MS-V1。
问题
自动证据已经能防止在‘没看见人’时浪费一次开口,但当前用户不在画面,因此还不能证明这套机位下会稳定进入 frontal,也不能证明修复后的真人嘴声关联已通过。粗粒度正对仍是五点关键点代理,不是眼神、身份、声纹或活体识别。
下一步
现在不安排用户说话,也不要求立刻回到电脑前。服务保持运行;用户下次自然坐回镜头前时,页面会先自行显示视觉是否就绪。只有按钮在正常正对姿势下仍长期不亮,才申请一次不说话的机位检查;只有机位检查通过后,才考虑一次真正的单句短测。
新增支出
¥0;仅本地代码、自动回归与浏览器布局检查,未新增硬件、录音、视频或真实云调用
D7 视觉连续性自动修复

反复丢人不是一个阈值问题:目标锚点和嘴部历史都已分别修正

完成
基于 18:03 真人短测已经保存的 5.58 秒本地 WAV、无正文阶段收据和同期视觉日志继续自动研究,没有要求用户重说。根因有两层:Python YuNet 过去把首次获取与已有目标续跟都设为 0.8 置信度,单次 miss 又会清除跟踪锚点;浏览器收到 uncertain 时还会误清全部嘴部历史。修复后首次获取仍须 ≥0.8;已有同一目标可在 ≥0.7 继续,但必须同时满足 IoU ≥0.35、归一化中心距离 ≤0.05。远处陌生人不能继承锚点,第二候选仍按多人硬拒绝,person.lost 仍显式 reset。uncertain 现在只暂停新嘴样本,保留原始时间戳内仍新鲜的证据;turned、lost、ambiguous 和 fault 继续硬清。
证据
自动回归覆盖低于 0.8 但空间连续的同一目标续跟、远处陌生人拒绝、第二候选多人拒绝、显式 lost 后重新获取,以及 uncertain 不刷新时间戳、不制造新证据、证据自然过期和明确中断硬清。Node 全仓 380/380、D7 核心 206/206、Python 视觉 64/64、生产构建、全仓 ESLint 与差异检查均通过。新四服务已完成冷启动,网页、视觉、语音和记忆健康正常。公开同步标记:D7-AUDIO-CAPTURE-420MS-V1。
问题
冷启动后连续观察 30 秒时用户不在摄像头画面,目标计数始终为 0。这能证明空画面下服务健康且不会虚构人物,却不能证明修复后的真人连续跟踪、嘴部证据质量或完整免唤醒闭环已在现场通过;当前代理仍不是身份、声纹或活体证明。
下一步
不安排新的真人口令。先保留健康服务,继续用自动边界样本、只读运行指标和用户自然回到画面后的非脚本观察验证稳定性;只有这些证据仍无法区分问题时,才申请下一次高价值真人测试。
新增支出
¥0;复用既有真人证据与本机自动回归,未新增硬件、录音、视频或真实云调用
D7 真人截断修复与测试取证

开口截断已由真人验证修复,当前瓶颈转到视觉嘴声证据

完成
上一版真人短测中,用户刚开口页面就结束且没有录音。代码复盘确认,VAD 用 200 ms 确认起声后,活跃说话人门只再等待 180 ms;约 10 Hz 的摄像头证据若未及时满足嘴部关联,拒绝路径会立刻关麦。修复后等待窗口改为 420 ms,且关联被拒绝时继续收完整句。18:03 的新版真人短测已经完成:录音持续到自然停口并成功保存在本机,证明‘刚开口就立即关麦’已修复。经用户明确授权,仍只有 /lab/companion?test=short 保存本地 WAV;普通陪伴与正式模式默认不保存原始录音,所有模式都不录视频。
证据
本轮只生成 1 份新 WAV,格式为 16 kHz、单声道、16-bit PCM,数据 178,560 字节、时长 5.58 秒,不公开文件名或语音正文。无正文阶段收据为 test.started→permission→runtime.ready→visual.ready→attention.ready→vad.started→vad.ended→active-speaker.rejected-missing,状态为 rejected;它证明录音确实跨过完整说话阶段到达自然 vad.ended,同时表明嘴声门没有取得可靠视觉证据。同期本机视觉终端反复 person.lost→person.detected。服务端仍只接受回环页面的精确 Origin、专用测试头和合法 WAV,限制 8 MiB,使用服务端 UUID 与原子写入,不接受客户端路径,也不调用 ASR、LLM 或 TTS。D7 核心 201/201、完整构建与全仓 ESLint 通过。公开同步标记:D7-AUDIO-CAPTURE-420MS-V1。
问题
真人证据只验证了收音不再中途截断,并没有验证嘴声阈值通过。本轮最终是保守拒绝,视觉终端又反复丢失并重获人物;需要先区分摄像头目标稳定、关键点质量、嘴部活动质量或事件时序中的哪一层不稳定。WAV 也不证明嘴声来源、身份、声纹、活体或语义正确;同步电视人脸、口罩、侧脸、弱光和房间回声仍是明确边界。
下一步
不要求用户再说。开发端先结合这份本地 WAV、无正文阶段收据与同期视觉日志,自动研究 person.lost→person.detected 和嘴部证据缺失的原因;能够用重放、合成输入或摄像头只读指标回答的问题全部先自动完成,只有确实无法由证据判断时才再申请一次真人测试。
新增支出
¥0;未新增硬件或按量云调用,测试 WAV 仅保存在本机且不录视频
D7 一次短测与无正文收据

一次短测只记阶段,不记正文

完成
为最后一次高价值真人联合检查增加独立的一次短测模式。申请麦克风权限前先确认本机阶段收据可用;首个成功、失败、拒绝或取消终态出现后立即关麦并结束,不让用户为了排障重复说话。正常连续陪伴模式保持不变。只有终态记录得到本机确认,页面才显示“已记录”;如果未送达,会诚实说明记录没有送达,同时仍要求不要重试。刷新、关页或进入浏览器页面缓存也会失效正在启动的运行时并关闭收音。
证据
阶段收据只存在于本机语音进程内,仅包含固定阶段枚举和粗粒度耗时桶,最多 24 项、30 分钟过期,进程重启即清空;不含音频、视频、图像、嘴部坐标、转写、回答、测试口令、用户标识、绝对时间、哈希或长度。该边界只针对阶段收据,不改变“通过安全门的语音会发送阿里云转写”的既有说明。开始与结束均有服务端确认,开始确认失败不会申请麦克风,结束未确认不会伪装成已记录。桌面 1280×720 与手机 390×844 首屏均直接显示唯一一句与完整开始按钮,横向溢出 0、控制台错误 0,普通连续陪伴文案保持不变。完整构建、全仓 ESLint、Node 回归 368/368、D7 核心 194/194、D3 核心 122/122 与 Python 视觉回归 60/60 全部通过。
问题
自动回归只能证明短测状态机、隐私边界和送达提示一致,不能证明真实房间中的嘴声关联、声源、语义理解或陪伴感。真人短测尚未进行,因此 D7、M1、M3 与验证完成度均不提前标记通过。
下一步
冷启动本机四服务并完成页面视觉检查后,只安排一次自然开口真人短测;无论成功或失败都不要求用户重复,开发端依据无正文阶段收据定位结果。
新增支出
¥0;自动验证未新增硬件采购、录音落盘或真实云调用
D7 隐私收口与连续体验

普通体验不再具备录音落盘能力,上一轮对话也不会突然消失

完成
彻底移除此前只为故障取证存在的一次性诊断录音链路:浏览器端不再有 arm/status/cancel 客户端,本地语音服务不再接受 diagnosticCapture,不再复制 ASR PCM、写 WAV 或暴露 /diagnostics 路由;正常实时 ASR 内存流保持不变。陪伴页把当前转写和回答移动到主交互区之后,启麦时收起新手说明,并在新一轮开始前把上一轮归档到最多三轮的本机页面内存历史。服务断开文案现在明确要求先关闭麦克风再重检;读屏状态改为独立短句,避免整块内容反复播报。
证据
新版四服务从全空端口冷启动并显示 stack ready;本机 3000/8765/8766/8767 四项健康均通过,语音 /health 返回 audioRetention=none、rawAudioSavedByDefault=false 且不再含 diagnosticAudio,旧诊断 GET 与 POST 实测均为 404。历史私有目录 WAV 数量仍为 2,没有产生新文件。麦克风授权后的二次三服务检查有行为回归:失败事件仅为 health.check→microphone.stop,可调用 ASR 的 runtime 创建次数为 0。桌面 1280×720 与手机 390×844 已实际截图复核,手机首屏可见开始按钮,对话区紧跟主交互区;页面控制台错误为 0。完整构建、全仓 ESLint、当前有效 Node 347/347、D7 160/160、D3 115/115 与 Python 视觉 60/60 全部通过。
问题
最近三轮只保留在当前页面内存,刷新后不会恢复,这是刻意的隐私边界,不等于长期对话档案。自动证据仍不能替代真实房间中的嘴声阈值、麦克风权限主观体验与陪伴感评价;历史两份已授权诊断 WAV 未经用户许可不删除。
下一步
继续由开发端做断线、恢复、假音频和页面状态回归,不要求用户重复简单脚本。只有当自动证据无法判断真实嘴形与声源关联时,再邀请一次短真人体验。
新增支出
¥0;本轮未采购硬件、未打开麦克风、未调用真实云服务、未新增任何录音或视频
D7 测试体验产品化

体验页不再像诊断台:手机首屏现在就能看懂并开始

完成
将 /lab/companion 从固定口令、一次性诊断录音和工程面板主导的验收页,改成可连续对话的本地陪伴体验。首屏只保留价值说明、机器人脸、当前唯一动作、常显隐私边界和主按钮;三步指引、本地视觉/语音/记忆状态、示例语句、对话结果与折叠技术记录按使用顺序排列。桌面 1280×720 与手机 390×844 均已实际截图复核,“开始体验”无需跨多屏寻找;状态文案不要求测试者理解 ARMED、VAD、ASR 或端口号。普通回合结束后麦克风不会被永久锁死,用户仍可主动关闭,页面也不会自动重开。
证据
新增纯呈现状态表,覆盖检查、阻断、开始、等待视觉、等待安静、可说话、聆听、识别、思考、回答和错误;任何必需服务 offline/unknown 或相互矛盾的旧状态都不能显示可开始。每次真正启麦前重新检查三项服务的身份、摄像头新鲜度与默认不保存录音契约;预检开始、视觉故障、桥断开、麦克风失活或语音链路失败都会同步关闭运行时音频入口,不能只改 UI 文案。视觉桥不能单方面恢复聚合就绪,旧 SSE 回调也必须证明仍拥有当前连接。完整生产构建、全仓 ESLint、Node 回归 357/357、D7 核心 156/156 与 Python 视觉回归 60/60 全部通过;四项本机健康检查为 4/4,检查过程没有打开麦克风、保存新录音或调用真实云服务。
问题
自动状态与截图能证明流程清楚、布局可用和安全条件一致,但不能证明真实房间中的嘴声阈值、麦克风权限体验、真人语义理解或陪伴感已经通过。历史两份经明确授权保存的诊断音频仍留在本机私有目录,本轮没有擅自删除,也没有继续把诊断能力暴露给普通体验入口。
下一步
继续由开发端做断线、恢复和假音频回归;不让用户重复简单脚本。只有在自动证据无法判断真实嘴形与声源关联时,才邀请一次短真人体验:自然看向机器人,说一条普通问题或明确记忆指令,并评价提示是否容易理解。
新增支出
¥0;仅本地代码、自动测试与浏览器视觉检查,未采购硬件、未新增云调用、未录制新音视频
D6 活跃说话人自动基线

嘴部不动时,电视或旁人的声音现在会在 ASR 之前被挡住

完成
在不新增摄像头进程和浏览器视频权限的前提下,为现有 Python 视觉桥加入轻量嘴部活动估计。YuNet 五点只负责定位和对齐人脸,实际判断来自内存中的嘴部灰度变化,并扣除上半脸与整体移动残差;估计器对低光、模糊、脸太小、关键点缺失或越界保守返回不确定,控制器遇到侧脸或多人则直接关闭嘴声证据。视觉桥每个分析帧单独发送 person.mouth.activity,只含活动/静止、分数、质量、来源和临时目标编号,不发送或保存画面、嘴部裁片、关键点或身份字段。浏览器新增 ActiveSpeakerTemporalGate:把视觉样本与 VAD 估算的真实起声放到同一单调摄入时间轴,最多本地等待 180 ms;只有近期至少 3 个可靠样本、其中至少 2 个活动且活动本身跨越真实时间、出现由静到动的上升沿,才把回合交给语音协调器。
证据
完整生产构建、全仓 ESLint 与 git diff 检查通过;Node 回归 350/350、Python 视觉回归 60/60。专项覆盖嘴声同步通过一次、静嘴+背景语音 0 次协调器/ASR、连续正脸拒绝后不重开、pending 期间转头/换人/多人/桥重启/播报均取消、侧脸嘴动不积累、陈旧/持续张嘴/批量积压样本拒绝、矛盾输入契约拒绝、迟到相机证据、10 万条不可信元数据仍有界,以及静止、局部嘴动、整体亮度变化、整脸平移、暗光、模糊、小脸、缺失或越界关键点和显式 reset。实现不新增硬件、云调用、按量费用或大型模型,自动测试不调用真实云服务。
问题
这是‘嘴部运动与声音时序相邻’代理,不是身份、声纹、活体或绝对声源证明。摄像头若正对同步播放的人脸,电视画面嘴动仍可能与声音同时出现;口罩、遮挡、侧脸、低光或过远人脸会增加保守误拒。当前阈值来自自动合成基线,尚未经过新版真实房间短测,因此 D7、M3 和验证完成度均不提前标记通过。
下一步
先冷重启本机四服务,确认新版视觉桥声明 mouthActivityProxy、相机新鲜且活动事件速率正常;不让用户重复口令。待自动健康与阈值日志稳定后,只邀请一次短真人联合验收,同时观察用户说话放行、静嘴背景声拒绝与可理解的降级提示。若轻量代理仍有明显误接,再评估更丰富的唇部关键点或麦克风阵列,不提前购买昂贵硬件。
新增支出
¥0;复用现有摄像头、OpenCV、主控与云语音账户,未新增模型服务、硬件采购或真实云调用
D7 真人复测与误触发加固

ASR 已正常恢复,最新复测暴露的是非目标语音抢占回合

完成
用户明确授权下一句一次性本地音频诊断后,系统保存了一份 16 kHz、单声道、16-bit PCM,时长 6.30 秒。该回合 ASR 正常返回,证明独立 WebSocket 内唯一字符串 final 的协议修复已经生效;但音频和识别结果表明,注意门接纳的是约 5 秒非目标持续语音,而非预期短口令。最符合现有证据的解释是环境或扬声器背景语音,但单声道录音无法确认具体声源。公开进度只记录时长、格式和诊断结论,不包含转写正文、音频文件名或任何记忆内容。本机持久状态 revision 与 active confirmed/unconfirmed 数量均未变化,没有新增任何记忆。
证据
录音前段为连续高能语音,末尾 1.30 秒静音后由 VAD 正常收句;服务日志记录 ASR 流成功完成 6.3 audio-sec,随后进入普通对话路径。根因复盘确认:能量 VAD 只知道有语音,五点正脸代理只知道有人正对,两者没有证明是同一个人在说话;而视觉桥最长每 500 ms 的正脸心跳此前会不断刷新旧 1.2 秒证据。现在非播报状态下,同一次连续正脸只生成一个视觉资格,后续心跳只续人物租约;启动校准只学习合理房间噪声,高能语音不能抬高底噪;每轮 VAD 先累计 400 ms 真安静,再由声学就绪边沿开始完整 4 秒 ARMED。窗口用尽后 uncertain 抖动不能补发,只有明确 turned、lost、目标重获或新回合才能恢复。页面还区分等待安静与窗口过期,并允许主动关闭麦克风、撤销一次性授权。完整构建、全仓 ESLint 与 Node 回归 327/327 通过。
问题
这些修复可以阻止正脸长期静坐时把麦克风永久留在 ARMED,也能避免让真人在校准后只剩几百毫秒抢着开口,并降低已在进行的背景句抢占概率;但旁人或电视在新的 4 秒窗口内恰好开口,仍可能被单声道麦克风接纳。系统仍未实现真正的说话人绑定、口型与声音同步或麦克风阵列声源方向,因此 D7 语义闭环不标记通过,验证完成度保持 0%。
下一步
停止追加同类真人口令。先在本机增加可替换的活跃说话人证据,优先评估口部活动与 VAD 起点的时间相关;设备阶段再用麦克风阵列方向与人脸方位交叉验证。自动假声、持续正脸、转开再看回、播报重开与拒绝音频不进 ASR 全部通过后,才邀请一次高价值真人验收。
新增支出
¥0 硬件采购;本次新增一次真实 ASR 调用和一份仅存本机的诊断音频,后续 327 项回归不调用真实云服务
D7 单句取证与协议修复

录音证明用户确实说了:失败来自我们过严的 ASR 协议假设

完成
经用户明确授权,仅清理两条指定错误待确认候选,保留此前已确认且跨四服务重启恢复的记忆;状态核对为 revision 24、confirmed=1、unconfirmed=0。随后新增默认关闭的一次性本地音频诊断:按钮先 arm 再 GET 核验,只认领下一条被注意门接纳并实际送入 ASR 的 PCM,文件名由本机生成且目录固定在操作系统私有用户数据目录;不保存转写、客户端路径或视频,成功、失败、取消与超时都会撤销。陪伴页在第一句任何终态后立即关麦、关闭视觉租约并锁死第二次启动,同时明确显示录音是否保存。
证据
首份诊断录音为 16 kHz、单声道、16-bit PCM,时长 2.20 秒、PCM 70,400 字节,RMS 1,287、峰值 8,848、约 21.8% 样本处于活动区间,说明不是空录或坏文件;同轮错误为 QWEN_ASR_PROTOCOL_ERROR。代码复盘确认每回合已有独立 WebSocket,真正不兼容点是要求 committed 先到且 item_id/content_index 与 completed 完全匹配。修复后改为只信任当前独立连接上的唯一字符串 final,重复、缺失或畸形 final 仍拒绝,连续与并发 A/B 流仍隔离。完整构建、全仓 ESLint 与 Node 回归 313/313 通过。
问题
这份录音只用于故障定位,不能代替最终语义验收;没有在未经明确许可的情况下把文件再次提交给云端,也没有用缺少中文识别器的本机系统猜测正文。新版等待最后一句真人复测时摄像头持续未看到用户,因此在收音开始前主动取消并关麦,没有生成第二份录音。D7 尚不能标记通过,验证完成度仍为 0%。
下一步
用户回到摄像头前后只做一次:点击当时的一次性诊断入口,等页面允许开口后说指定回忆口令,然后停止。无论成功或失败,页面都会自动关麦并保留唯一一份本地诊断录音;开发端直接检查结果,不再要求重复前两句。
新增支出
¥0 硬件采购;新增一次真实 ASR 尝试,录音只保存在本机私有目录;自动回归不调用真实云服务
D7 失败取证与加固

“确认记忆”失败不是没听见:两段独立录音都在 ASR 之后变成了新的 capture

完成
按用户要求直接检查本机日志与持久状态,没有让用户再复述。两次失败均打开了独立 ASR 流并完成本机写入,录音时长分别 3.22 秒和 2.82 秒、相隔 74.36 秒;此前已确认且跨服务重启恢复的记忆仍保留,但新增了 2 条同测试主题的待确认候选。代码审计确认浏览器每轮新建 WebSocket,8766 每连接新建 provider stream,Qwen 适配器每轮新建 realtime session,当前不存在复用上一轮整段 PCM 或 final transcript 的直接代码路径。随后关闭了播报/识别阶段的 pre-roll 与 VAD 预热,加入 ARMED 前的本机底噪校准和 provider committed/completed item_id 唯一关联;重复 capture 不再新增候选,只写入不含正文与哈希的本机收据来占用本轮 commandId。陪伴页的暂停现在会禁用按钮和采集,而不只是显示说明文字。
证据
持久状态从 revision 20 变为 22,confirmed 仍为 1、unconfirmed 变为 2;两次写入分别发生于 23:14:21 与 23:15:35,turnId 不同且每次只升 1 个 revision。新增浏览器双 socket A/B PCM、错 turn final、8766 连续与并发双 WebSocket、Qwen 连续 session 与 item_id 越序/错项/重复 final、完整 coordinator capture→confirm 双回合,以及 500 ms 本机校准后 200 ms 短口令不会被吃掉的测试。重复 capture 的收据会令 revision 前进一次以持久占用 commandId,但不会增加记忆候选;完整构建与 Node 回归 301/301、Python 视觉 51/51、全仓 ESLint 通过。测试不调用真实云语音、不保存音频或对话正文。
问题
隐私设计没有保存现场音频或转写正文,因此现有证据无法再区分云 ASR 对短口令的误识别、扬声器/其他声源进入麦克风或浏览器输入异常;页面历史状态也无法事后恢复。两条错误待确认候选仍在应用受管状态中,精确确认会因候选不唯一而 fail-closed。删除会清除正文且无法通过应用恢复,未经用户明确授权不执行。自动测试证明隔离与保护逻辑,不冒充真人问题已经复现或最终解决。
下一步
先不让用户说任何测试口令。获得授权后,仅软删除 23:14 与 23:15 产生的两条错误待确认候选,保留此前那条已确认记忆;重启新版服务并核对 confirmed=1、unconfirmed=0。之后若用户方便,只做最后一次指定回忆口令,不重做记住与确认。
新增支出
¥0 硬件采购;调查复用既有两次真人语音日志,新增回归全部使用本地 fake PCM,未增加云 token 消耗
D7 真人续测

四个字完成确认,已确认记忆跨四服务重启恢复

完成
用户在修复后的页面只说“确认记忆”,机器人正常回答“好,我记住了”。开发端只读核对本机状态为已确认 1、待确认 0,随后停止并重启网页、视觉、语音与记忆四项服务;新进程再次报告健康后,同一条“安静提醒”记忆仍是已确认状态。测试前检测到两条正文完全相同的未确认“安静提醒”候选,一条来自较早遗留、一条来自本轮;系统按设计拒绝在多候选时猜测目标,因此开发端在验证正文、来源与创建顺序后,仅清除了较旧且已核对为完全重复的候选。旧候选正文已从应用受管状态中清除,无法通过应用恢复;最新且唯一的相同内容仍保留并已确认。
证据
真人第二句产生一次成功 ASR 流与一次本机记忆回复所需 TTS;确认后 revision 20、active confirmed=1、active unconfirmed=0。四服务完整停止并由新 supervisor 会话重启后,8767 companion v1 健康,active confirmed 仍为 1、active unconfirmed 仍为 0,主题仍匹配“安静提醒”。页面说明已由两套互相冲突的速冻饺子/安静提醒示例统一为同一组逐字口令,删除“不需要冒号”和取消能力提示;构建、全仓 ESLint、git diff 检查与页面渲染 6/6 通过。检查和日志均未输出记忆正文、音频或 API 密钥。
问题
跨重启持久化已经成立,但完整真人闭环还缺最后一次回忆,因此验证完成度仍为 0%。本轮为了可靠释放 8767,由 supervisor 一并重启了四项服务,而不是只重启单个子进程;这仍能证明记忆跨进程恢复,但不冒充整机重启。视觉日志中自然活动仍出现 person.lost→person.detected,说明长期自然交互稳定度尚未完成,不能由这次成功提前宣称解决。
下一步
不重做前两句。用户刷新当时的本地陪伴页、启用麦克风并等到页面允许开口后,只说指定回忆口令。回答中正确提到已确认内容即完成 D7 真人闭环,随后停止真人脚本并进入下一阶段。
新增支出
¥0 硬件采购;本轮新增一次真人 ASR 与一次本机回复 TTS,重启与状态核对均在本机完成
D7 真人缺陷修复

第一句成功后,第二句让我们发现“门已经接收”和“门还允许再开一句”不是同一个状态

完成
真人验收第一句“记住……”被正常识别并回答;第二句“确认记忆”一开口,页面却反复从 ARMED 变成“先不要说”。复盘确认,合法语句一旦入门就会消费一次性 ARMED,这是防止重复回合的正确内部状态,但旧页面把 eligible=false 直接渲染成 SAFE CLOSED;异步 admission 完成前也没有“已经检测到开口、请继续说完”的过渡。与此同时,视觉每 3 帧分析一次、连续 5 个分析帧漏脸即提交 person.lost,真实环境约 0.4–0.5 秒,嘴形和轻微头动足以让正在接收的语句被取消。现在开口后立即进入 LISTENING;识别、思考、回答各有独立状态,只有空闲且门未开时才显示“先不要说”。普通漏脸必须同时满足样本数和约 1 秒单调时间;短暂 uncertain 只在原始 1.2 秒窗口内保留已合格证据,不创建或续期证据,并立即重置正脸稳定计时。持续不确定过期后,即使重新出现一帧正脸也不能开门,必须重新完成完整稳定时间。明确 turned、多人、camera.fault 和断连仍立即关门。真人流程文案改成只说三句话,不再把系统支持的第四种取消能力混入本次验收。
证据
真实终端只记录到第一轮 ASR 成功,后续没有第二个 ASR 流,同时出现约三组 person.lost→person.detected;因此失败发生在第二句进入识别前,不是云模型或记忆服务返回错误。新增呈现层回归保证 listening 永不显示“先不要说”,撤销后主区域必须给出具体原因;新增不同分析帧率下的时间去抖、短暂漏检恢复、持续漏检单次 lost、uncertain 有界保留、持续 uncertain 过期后单帧正脸不得重开、播放期候选不续期和 turned 立即关闭测试。完整 Node/页面 267/267、D7 专项 96/96、Python 视觉 51/51、全仓 ESLint 与构建通过。修复后真实摄像头 12.55 秒读取 360 帧、分析 120 帧,检出率 100%、person.lost 0 次。启动器另改为相机被 OBS 等占用时只显示一行可操作中文提示,完整诊断留在本机文件,不再倾倒转义 traceback。
问题
本次真人闭环仍未完成,验证完成度保持 0%。12.55 秒稳定镜头只能证明当前静坐场景没有抖动,不能替代真人开口时的嘴形、自然头动、真实麦克风和第二轮重开门;声音方向、电视与旁人说话仍未解决。普通漏脸延长到约 1 秒仍受 1.5 秒浏览器人物租约兜底约束,没有放开多人、明确转头或故障边界。
下一步
不重做已经成功的第一句。确认本机仍只有一个待确认候选后,重新启动四服务;只让用户说“确认记忆”,开发端只重启 8767,再说“回忆速冻饺子”。回答出“七分钟”即结束。若仍失败,页面的新主区域原因和本地元数据应足以由开发端定位,不再让用户反复试。
新增支出
¥0 硬件采购;真人第一句产生一次真实 ASR 与本机回复所需 TTS,第二句未打开 ASR;自动回归未新增真人语音调用
D7 交互修复

把“第一句有反应、后面沉默”当成产品缺陷,而不是用户不会测试

完成
复盘一次非正式使用后确认:旧注意门在机器人播报结束时会清空视觉稳定证据,要求下一帧正对画面重新开门;静止目标的视觉上报最长约 500 ms,而 VAD 约 200 ms 就能确认开口,因此用户自然顺接第二句时,整句可能先被拒绝。现在进入播报会清除旧证据并开启新的连续观察期;播报期间同一目标持续正对达到 350 ms 后只生成待重开证据,robotSpeaking 硬锁仍优先拒绝任何开口并确保不调用 ASR;播报结束时若最后合格样本仍在 1.2 秒注意窗口和 1.5 秒人物租约内,就原子提升为下一轮证据,无需再等一帧。更高 targetEpoch 的 person.detected 会被视为换人,先清证据、撤销旧回合,新目标必须从零完成稳定时间。/lab/companion 首屏新增“页面已打开,这不是自动测试”“现在不需要说话”和主动启麦说明;可展开查看验收目的、三句话、何时开口与何时结束。主状态只在 ARMED 时提示开口,实际门控拒绝会给出醒目中文原因。双击启动器控制台也明确写明“页面打开不代表测试开始”。
证据
新增真实运行时多轮回归,串联 RobotStateMachine、WakeFreeAttentionGate、AttentionConversationController、ConversationCoordinator 与 fake 外部 ASR/LLM/TTS/播放器:第一轮打开 ASR 一次,播放中持续正对,播放中提前开口仍返回 robot-speaking 且 ASR 次数不变,播放结束后不补视觉帧即可立即开启不同 turnId 的第二轮;person.lost 后开口同样不增加 ASR。另覆盖播报前证据不继承、单帧不够、窗口边界、过期、侧脸/丢人、迟到播放结束和换人重置。D7 专项 85/85,完整 Node/页面回归 256/256,Python 视觉 48/48,ESLint 与构建通过。真实浏览器首次打开保持 MIC OFF,静态说明与三步展开内容均可见,console 无错误;未点击麦克风,也未发起任何云语音调用。
问题
这次用户已经实际说过话,但当时没有明确测试目的,后续语句又被静默拒绝,因此不能把它写成真人验收或失败样本。当前仍没有 AEC、近端说话人判别或可靠插话:机器人回答期间就是明确的不可说状态。页面能解释被注意门拒绝的语句,但扬声器回声与真人插话在单声道 VAD 下仍不可区分,所以 D10 以前不开放播报中插话。
下一步
先交付本次修复,不立即要求用户再说。下一次只在明确邀请时做一次约 1 分钟高价值验收:每句都等“可以说了(ARMED)”,依次完成记住→确认→开发端重启 8767→回忆;回答出“七分钟”即结束。启动、健康、换人、过期与重复边界继续全部由自动测试承担。
新增支出
¥0 硬件采购;本次仅本地自动测试与只读页面检查,未新增真人体力负担或云语音调用
本机可用性

每天开机后的四项服务收成一次双击

完成
在项目根目录新增“启动小机器人.cmd”。用户双击后,入口会从自身所在目录启动,不受当前工作目录、中文路径或空格影响;随后由 Node 输出中文状态并拉起网页 3000、视觉 8765、语音 8766、记忆 8767。四项服务全部通过原有语义健康检查后,才使用系统默认浏览器打开 /lab/companion。凭据仍只从 gitignored 本机配置读取,不写进启动文件、仓库或日志;失败窗口会保留安全错误码,日常停止仍由原启动窗口的 Ctrl+C 走 supervisor 所有权清理。Windows 重启后的冷启动也已绕开直接执行 npm.cmd 所触发的 EINVAL。
证据
在四个目标端口全部空闲的真实本机状态下,以和双击完全相同的 CMD 入口完成冷启动。控制台中文正常显示,3000 页面返回 200,8765 cameraFresh=true 且无摄像头故障,8766 服务健康且 rawAudioSaved=false,8767 持久化服务健康并声明 companionTurn v1;服务 ready 后出现第二次 /lab/companion 200 请求,证明自动开页实际发生。首次演练还捕获并修复了 Windows CMD 对无 BOM 中文批处理正文的解析故障:最终 CMD 保持纯 ASCII,只把中文交给 UTF-8 Node 脚本输出,并新增编码安全与凭据缺失回归。D7 专项现为 44/44,通过 ESLint 与差异检查。
问题
这不是后台 Windows 服务:运行期间仍需保留启动窗口,也不要重复双击;首次使用麦克风时,浏览器权限与音频解锁仍必须由用户亲自点击。自动开页和每日冷启动成功不代表真人注意→语音→记忆闭环已经验收,因此验证完成度不增加。
下一步
维持日常启动低负担,不再让用户替开发端检查脚本。继续只邀请一次高价值真人联合验收:自然看向设备,完成记住→确认→仅重启记忆服务→回忆;其余启动、健康、持久化和失败边界由自动测试承担。
新增支出
¥0 硬件采购;本次启动与健康验证没有发起真人语音回合
D7 自动闭环

注意、对话与跨重启记忆第一次连成完整桌面伙伴

完成
新增本地 /lab/companion 与 CompanionTurnService。页面完整复用 D6 注意门:一次启用麦克风后,只有视觉桥在线、单人目标新鲜、头部正对代理稳定且 VAD 确认开口,语音才进入 ASR。转写文本先送到本机 8767;“记住…”只建立候选,“确认记忆”才确认,“取消记忆”逻辑清除候选,“回忆…”只在唯一命中一条有效确认记忆时本机回答。普通问题才沿用原 Qwen 对话;无匹配或多匹配也由本机明确说不确定,不让云端猜测。四服务 supervisor 固定 3000 / 8765 / 8766 / 8767,复用前必须逐项通过语义健康,陌生端口拒绝接管,只清理自己启动的进程;阿里云凭据路径读取本机 gitignored 配置,不进入仓库、日志或证据文件。
证据
完整网页构建与 Node 回归 247/247、Python 视觉 48/48、全仓 ESLint 与 git diff 检查通过。D7 专项覆盖严格 HTTP 响应、CORS、请求中止与迟到回复、旧服务 capability 拒绝、问句误写、无冒号口语、回忆零/多命中、本机错误脱敏、确认/取消冲突不换目标、同 turnId 跨操作拒绝、取消后幂等重试、300 条普通命令后的旧确认重放、4096 条 companion 收据满池拒写,以及 supervisor 端口、进程所有权、超时和无正文有界证据。自动真实 HTTP 测试完成浏览器 wrapper→8767→本机 JSON 持久化→关闭并重开服务→关键词回忆,三条记忆命令对云端对话 delegate 调用为 0。真实本机四服务健康:8765 cameraFresh=true 且无故障,8766 rawAudioSaved=false,8767 声明 companionTurn v1,错误 Origin 返回 403;真实浏览器渲染 D7 页面、四条口令与隐私边界,8767 显示已连接且 console 无错误。
问题
自动闭环使用临时私有 JSON 与程序化 HTTP,没有替用户点击麦克风权限,也没有往用户真实记忆写测试 canary,因此不能替代真实语音识别、注意门体感和播报自然度。显式记忆文本包含在送往阿里云 ASR 的音频中;本机生成的回复为发声仍会送往阿里云 TTS。当前仍是单用户、单人目标假设,不具备身份识别、声纹绑定、家庭电视过滤或完整本地模型。验证完成度继续保持 0%,直到高价值真人闭环通过。
下一步
只做一次约 1 分钟真人联合验收:看向设备说“记住我煮速冻饺子一般七分钟”,听到候选回复后说“确认记忆”;由开发端只重启 8767;随后看向设备说“回忆速冻饺子”。不安排 CRUD、重复轮次、灯光或 20 轮矩阵。若这一条成立,就形成 D7 第一道继续/暂停闸门的真人证据。
新增支出
¥0 硬件采购;自动记忆路由未调用云端对话模型,真实语音验收尚未发生
D6 自动基线

普通摄像头和麦克风首次进入同一个免唤醒注意门

完成
保留 YuNet Nx15 原始输出中的五个人脸关键点,新增尺度、画面内旋转和水平镜像不变的保守头部正对代理,输出 frontal / turned / uncertain,且事件不包含关键点坐标。新增设备端可运行的 WakeFreeAttentionGate 和 AttentionConversationController:视觉桥 epoch、单人目标、视觉租约、正对稳定时间与 VAD speech.started 同时满足后,才创建唯一语音回合。person.lost、多人歧义、停帧过期、桥重启或断连会原子取消 listening / thinking / speaking 中的活动回合,迟到回调不能复活。新增本地 /lab/attention,用户一次启麦后不再需要每回合点击或唤醒词。
证据
完整 Node/页面构建与测试 208/208、Python 视觉 48/48、全仓 ESLint、git diff 检查均通过。专项覆盖无脸、侧脸/不确定、仅有人无声、多人重获、过期与停帧续接、SSE 重连不重放旧位置、重复/迟到、桥与目标 epoch、缺失能力声明、摄像头读帧故障及故障到断连前的即时撤销、SSE 慢客户端、启麦并发、AudioContext 构造失败、麦克风中途失活、自播报和 ASR/LLM/TTS 撤销竞态;100k 混合拒绝序列对语音协调器调用为 0。真实本机 8765 视觉桥与 8766 语音服务健康,本地 SSE 仅见低频位置、朝向分类、临时 epoch 和能力声明;真实镜头中的 turned / uncertain 样本正确保持关门。浏览器自动确认 D6 页面可渲染且无 console 错误,未代替用户点击麦克风权限;页面已明确画面和拒绝音频不上传,通过注意门的语音与文本会发送至阿里云百炼。语音代理的 HTTP 与 WebSocket Origin 也已收紧为本机 3000 页面,其他 loopback 端口不能借用云端代理。
问题
五点几何只是粗头部朝向代理,不是 gaze、眼神接触、身份识别或活跃说话人判断。当前单目摄像头+单声道 VAD 无法区分“一个人安静正对设备、旁人或电视正在说话”,也不能可靠识别电视画面中的正脸;这些限制不会被自动绿测掩盖。为避免扬声器自回声,D6 联合模式暂时禁用播报中插话;D3 的可取消插话骨架仍保留,待 D10 真实 AEC 后再开放。
下一步
自动项已结束,不追加 20 轮或灯光矩阵。只在用户方便时做一次约 1 分钟连续验收:自然看向设备直接说一句,不说唤醒词;机器人回答时安静观察是否自我误触发。只判断门槛是否自然、聆听时机是否像“它在听我”。电视、多人、背光和 8 小时误触发留到各自专项。
新增支出
¥0 硬件采购;本轮自动测试未新增云语音调用
D5 自动基线

结构化记忆完成可纠正、可删除的本机闭环

完成
实现 schema v2 结构化记忆:每条候选记录正文、来源、捕获置信度、创建/更新时间和确认状态;用户可确认、纠正或让机器人忘记。确认不会篡改原捕获置信度;纠正以用户新说法为准并累计不含旧正文的纠正次数;删除只保留无正文、无来源的 tombstone。旧 D4 schema v1 会纯、幂等地迁移到 v2,首次后续写入才原子落盘。
证据
D5 专项自动测试 16/16、D4 回归 60/60、完整构建与测试 159/159 通过。candidate、intent、backup、primary、cleanup 五个中断窗口均会在服务 ready 前收口,损坏恢复材料会保守拒绝启动。真实本机服务从 schema v1 revision 12 无损启动为 v2,自动走完捕获→确认→纠正→删除;主文件与 .bak 均扫描不到原始及纠正后的 canary,purge 残留为 0;再次重启后 revision 16、有效测试记忆为 0。
问题
本次证明的是数据结构、状态转移、持久化和应用受管文件清除,不是跨会话语义正确率,也不是 SSD 物理擦除。Loopback 与 CORS 不防同一 Windows 账户下的恶意进程;同一 commandId 换 payload 仍依赖本机 UI 不复用随机 UUID。公开进度因此仍保持验证完成度 0%,不提前宣称 M2 通过。
下一步
进入 D6,把已有视觉 person.detected / lost / position 与 VAD 组合成“面朝设备+正在说话”的注意门。记忆语义是否符合本人、纠正删除是否让人安心,等真实对话会使用这些记忆后再集中邀请用户一次判断。
新增支出
¥0;未新增云调用或硬件采购
D4 产品收口

用户确认页面没有问题,并免除低价值的简单人工脚本

完成
用户查看了本地 D4 操作页,明确反馈“这些都非常简单,不需要我测试,我看了都没问题”,并要求今后只在容易出问题、机器无法自行判断的环节再邀请真人。基于这一产品决策,D4 不再安排创建计时器、改名 TDL 等简单重复操作,直接进入 D5。
证据
D4 专项自动测试 58/58、完整构建与测试 141/141、真实文件仓库连续保存与重开 20/20 已通过;双进程互斥、强杀与 PID 复用后接管、原子写入、损坏恢复保护、端口冲突和不确定命令幂等重试均有自动证据。用户完成的是页面与产品逻辑查看,而不是一轮真人数据重启。
问题
原计划的真人 TDL 操作与服务重启没有执行,因此公开进度不会写成“真人重启通过”。D4 的收口依据是自动恢复证据充分、用户查看无问题,以及用户明确决定不把时间花在简单脚本上。
下一步
进入 D5 结构化记忆,先完成来源、置信度、时间、确认、纠正和删除的自动闭环。只有记忆语义是否符合本人意思、隐私删除是否让人安心等无法由机器代答的问题,才在成熟后集中邀请用户一次判断。
新增支出
¥0;未新增云调用或硬件采购
D4 自动基线

计时器与 TDL 已在本机跑起来,真实文件重开 20/20 正确

完成
完成厂商无关的 Organizer 核心、本机 127.0.0.1 服务和操作页。计时器支持创建、取消、到点、延期 10 秒和关闭提醒;TDL 支持新增、改名、日期、完成、恢复、延期一天和软删除。每条命令都有唯一 commandId 与 revision,未知网络结果会先查证再安全重试,不会静默重复创建或覆盖新状态。
证据
D4 专项自动测试 58/58、完整构建与测试 141/141 通过;真实文件仓库连续保存并重开 20/20 正确。额外验证了双 runner 只允许一个成功、进程强杀与 PID 复用后的陈旧锁接管、主文件缺失或损坏时拒绝伪装 ready,以及端口被占用时不提前修改过期计时器。前端在 POST 与查证同时断线后,会保留同一 commandId 最多安全补发一次;刷新只存不含任务标题的命令标识,不保存私人 payload。修改范围 ESLint 与 git diff 检查通过。
问题
当前提示音由本地操作页播放,只有页面保持打开且用户点过“启用提示音”时才会响;计时器状态本身在关页或服务重启后仍可恢复。未来装到机器人上时,提醒出口会换成设备扬声器和屏幕。自动证据不能替代一次真实使用,因此 D4 仍不标记为真人通过。
下一步
只安排一次连续体验:先启用声音,再新增一条真实 TDL、改名、完成并恢复;最后创建一个 30 秒计时器并立刻告诉开发端,由开发端只重启 Organizer 服务一次。重启后等计时器到点,延期 10 秒,第二次响起后关闭;不追加多轮测试。
新增支出
¥0;未采购硬件、未增加云调用
D3-C 真人通过

短句、长句两轮 2/2 通过,长句停口后 184 ms 完成识别

完成
用户完成 D3-C 两轮真人延迟复测,页面将短句与长句均标记为已完成,不需要增加轮次。长句最终转写与指定测试句逐字一致,回答正常生成并播放;本机验收账本只记录结论、阶段耗时和时间戳。
证据
短句录音 3.16 秒,服务端流式会话 3193 ms;LLM 首 token 487 ms、总计 586 ms,两个 TTS 片段均成功。长句录音 7.84 秒,服务端流式会话 7811 ms;页面测得停口后 ASR 184 ms、LLM 首字 377 ms、首次播放等待 2847 ms,约 3.41 秒首次出声。服务错误日志为空,未保存原始音频或对话正文。
问题
服务端 ASR 会话耗时包含用户说话本身,不能冒充停口后延迟;TTS 服务耗时也不等于浏览器真正开始播放,公开数据分别保留各自计时边界。两轮足以完成 D3-C 功能确认,但不足以计算可靠的中位数与 P90;视觉注意门尚未与语音合并,因此 M1 验证权重仍为 0。
下一步
停止追加语音轮次,进入 D4:先实现与界面和云厂商无关的计时器、TDL 领域核心和本地持久化,再做一次自动重启恢复测试,最后只安排一轮简短真人操作。
新增支出
本次两轮云语音调用估算 < ¥0.05;未采购硬件
D3-C 真流式 ASR

收句后不再重放整段录音,真实云端等待降到 234 ms

完成
将 ASR 从“用户说完后上传整段 WAV 并按实时速度重放”改为开口即建立每回合独立流:200 ms 预录音先送入,随后每 20 ms 发送一帧 PCM16;本地 VAD 收句后只提交一次并等待最终文本。浏览器、本地代理、ConversationCoordinator 与阿里云适配器共用 turnId 和 AbortSignal,插话或断线会取消旧流。
证据
D3 自动测试 79/79 通过,网页构建与目标 ESLint 通过。真实云端固定句第二次完全一致:2.08 秒音频,ASR 收句后 234 ms 返回 final;同一音频再经浏览器协议→127.0.0.1 WebSocket→云端适配器完整复测,收句后 228 ms 返回一致文本。第一次较难固定句出现 1 个同音近字,已如实保留为准确率提醒。
问题
固定合成语音不能替代真实麦克风、口音、环境噪声和扬声器回采;因此暂不宣称首次出声目标已经通过,也不增加 M1 权重。此前四轮发生在本机账本接入前,不能补造逐轮耗时。
下一步
刷新本地 /lab/voice,只做 2 轮:一句短句、一句长句,每轮最多重试一次。页面只在本机保存轮次、通过/失败、VAD/ASR/LLM/TTS/插话耗时与时间戳,不保存音频、转写、回答或 API Key。两轮确认后立即进入 D4 计时器与 TDL。
新增支出
新增真实云端烟测与一次本地桥复测估算 < ¥0.05;未采购硬件
D3-B 通过确认

用户确认四轮全部通过,语音最小闭环取得首份真人证据

完成
用户明确确认正常对话、1.2 秒自然停顿、播放中插话和降级界面四轮 4/4 全部通过。该主观结论与本地服务日志的 5 次 ASR/LLM 成功、插话时旧 TTS 终止后新回合继续完成相互印证。
证据
四轮主观结果 4/4;5 次 ASR 和 5 次 LLM 均成功;插话替代回合完成;原始音频、转写正文和回答正文均未保存。D3-B 的功能验收由“已完成但主观状态未知”升级为明确通过。
问题
功能通过不代表时延达标。ASR 请求中位数仍为 5.47 秒,远高于首次出声中位数 2.5 秒目标;语音尚未与视觉注意门完成联合验收,因此不能提前把完整 M1 权重计入验证完成度。
下一步
进入 D3-C:实现说话时流式上传 ASR,并自动保存无正文的通过/失败与时延证据。只安排 2 轮真人延迟对比,通过后立即进入 D4 计时器与 TDL。
新增支出
确认本身 ¥0;不新增云调用
D3-B 真人验收

四轮真人语音测试完成:插话链路成立,ASR 延迟成为首要问题

完成
用户完成 3 个真人语音回合与 1 个降级界面回合。本地代理记录到 5 次真实语音请求,包含插话产生的替代回合及一次额外语音回合;5 次 ASR、5 次关闭思考的流式 LLM 均成功。插话期间有 1 个旧 TTS 请求终止,随后新问题继续完成 ASR→LLM→TTS,时序符合旧回答被取消后的替代回合。
证据
ASR 音频长度依次为 5.72、2.26、4.48、9.08、3.86 秒,请求耗时依次为 7.04、3.23、5.47、10.46、4.69 秒,中位数 5.47 秒;LLM 首字依次为 397、247、389、336、297 ms,中位数 336 ms。成功合成 10 个 TTS 语音段;服务错误日志为空,原始音频、转写正文和回答正文均未保存。
问题
当前 ASR 在用户说完后才按实时速度上传整段录音,导致等待时间随句长增长,已明显超过首次出声中位数 2.5 秒的目标。页面只在浏览器内记录用户点击的逐轮通过/失败,测试结束后无法从服务日志还原主观评分,因此本次只能确认四轮完成与链路成功,不能擅自宣称所有体验指标通过。
下一步
先完成 D3-C:把 ASR 改为边说边传,目标是去掉整段录音重放时间;同时只持久化每轮通过/失败、ASR/LLM/TTS 时延与插话停声耗时,不保存音频和正文。随后再进入 D4 计时器与 TDL。
新增支出
本次真人语音调用估算 < ¥0.10;Token Plan 不抵扣应用调用
D3-B 云语音

真实大脑、嘴巴和耳朵已自动闭环,等待四轮真人验收

完成
普通百炼 Workspace Key 已接通 qwen3.7-flash(明确关闭思考)、qwen3-asr-flash-realtime 与 qwen3-tts-instruct-flash-realtime。新增只监听 127.0.0.1 的本地代理、浏览器麦克风采集、VAD、流式文字、语音播放、插话取消和 /lab/voice 四轮验收页;API Key 只留在本机 Node 进程,不进入浏览器、仓库或公开服务器。
证据
自动 LLM→TTS→ASR 闭环成功且转写完全一致:LLM 首字 464 ms、TTS 首音频 614 ms、2.72 秒音频的 ASR final 3727 ms,总计约 5.55 秒。全量网页与机器人测试 60 项、原有本地视觉测试 35 项均通过;另用浏览器确认本地验收页样式、中文内容和四轮限制正常。
问题
机器自动闭环不等于真人麦克风、扬声器回采、真实插话和 AEC 已通过,故验证完成度仍为 0%。当前 ASR 在用户说完后按实时速度重放整段录音,首次出声预计偏慢;第 4 轮目前只验证降级界面和记录结构,尚未真实中断云端服务。Token Plan 专属 sk-sp- Key 按官方用途不用于自建机器人后端,本次实际调用使用普通 Workspace Key。
下一步
打开本地 /lab/voice,只做 3 个真人语音回合:正常一句、带 1.2 秒自然停顿的一句、播放中插话;每轮最多重试一次。第 4 轮不说话,只点三个降级占位。记录真实首次出声与插话停声时间,再决定先做流式 ASR 降延迟还是 AEC。
新增支出
本轮按量调用估算 < ¥0.02;Token Plan 套餐金额未知且不能抵扣此应用调用,暂不计入项目已支付金额
D3-A 语音核心

零成本完成本地 VAD 与真正可取消的插话回合骨架

完成
新增厂商无关的能量 VAD、语音端口契约与 ConversationCoordinator。系统先校准环境底噪,连续 200 ms 确认开口;允许 1.2 秒自然思考停顿,连续静音 1.3 秒才收句。每轮使用唯一 turnId 和 AbortController,播报中插话会先作废旧轮、停止播放,再进入新一轮聆听。
证据
D3 核心 17 项自动测试全部通过:短促噪声不触发、1.2 秒停顿不断句、20 秒单句上限、ASR final 后才进入思考、首段音频实际播放后才进入表达、最多预缓存 2 个语音段、流式 token 按标点或约 30 字合并,以及迟到回调不能让被打断的旧回答复活。
问题
这还不是一次真实中文语音对话,因此验证完成度仍为 0%。本机当前没有中文本地 ASR/TTS、没有本地 LLM,也没有配置云 API 凭证;本轮没有启动麦克风、没有保存音频、没有调用云服务。模拟端口只用于证明控制逻辑,不能包装成 AI 能力已经完成。
下一步
进入 D3-B:先接真实麦克风端口,再在少量云 API 成本与下载本地模型之间选择真实中文 ASR/LLM/TTS;完成后只做 4 轮真人验收,覆盖正常对话、自然停顿、播放中插话与故障降级。
新增支出
¥0
D2 真人小测

正常光 3 轮首次试跑:右侧脸干净通过,两个流程缺陷已修正

完成
使用 1280×720 完整等比例预览完成正脸、左转和右转各 1 轮;三轮均正常结束,摄像头画面只在本机内存处理,未保存或上传。随后将协议升级到 v4:测试窗口先等待用户按空格,人物连续稳定 1.2 秒后才鸣响并进入 4 秒正式保持。
证据
首次尝试通过 1/3,状态闪烁 0、空场误报 0。右转轮检测确认约 0.10 秒、离场确认约 0.40 秒、保持识别率 100%、位置偏差 P95 为 0.004;左转轮同样完成检测和离场,但入场移动被旧流程计入保持阶段。相机实测 29.23 FPS;v4 的 35 项本地自动测试全部通过。
问题
本次整体未通过,验证完成度仍为 0%。正脸轮在首次自动开跑时整个 10 秒窗口内未观察到人脸;左转轮开始保持后人物仍从画面边缘走向中央,位置偏差 P95 达 0.2072。现场上下文表明两项首先暴露的是测试流程缺陷,但报告不能单凭无脸记录排除算法全漏,因此原始失败继续保留。
下一步
本轮不立即重做。下一次跨日测试仍只做正常光 3 轮,用 v4 验证人工开始门和稳定门;达到 3/3 且继续保持 0 闪烁、0 误报后,再安排单一灯光的 6 轮专项。
新增支出
¥0
D2 测试减负

不再每次做 20 轮:默认改为正常光 3 轮

完成
将人工测试拆成 3 轮日常冒烟、6 轮姿态专项、单一固定光线的 6 轮专项与 20 轮阶段验收;预览改为完整等比例画面和独立说明栏,不再用文字遮住上下 38.9% 的相机画面。
证据
29 项本地视觉测试通过;四种预设的计划轮数分别验证为 3、6、6、20。检测框与完整预览使用同一缩放、偏移和镜像映射;每次报告按时间戳新增,不覆盖历史失败。
问题
新布局与低负担流程尚未进行下一次真人 3 轮测试,因此不增加验证完成度。暗光和背光暂不打扰用户,等普通光线与姿态稳定后再使用专门灯具逐项验证。
下一步
只有视觉代码发生变化时才安排一次 3 轮测试,且每天最多一次;连续小测稳定后再进入单种光线 6 轮专项。
新增支出
¥0
D2 优化中

零成本换用轻量 YuNet,侧脸短测不断线

完成
将老式正脸/侧脸 Haar 级联替换为 OpenCV YuNet,并加入置信门槛、边界裁剪和单一目标连续选择;上层 person.detected / lost / position 事件接口保持不变。
证据
官方模型仅约 227 KB;本机 720p 平均单次推理约 37.5 ms。25 秒真人短测读取 750 帧,250/250 个抽样帧检出人脸,产生 45 条位置事件;23 项本地 Python 测试全部通过。
问题
短测过程中人物没有完全离开画面,因此只能证明正脸与左右转头期间未漏检,不能证明离场清除,也不能替代 20 轮矩阵验收。验证完成度仍不增加。
下一步
用完全相同的 20 轮矩阵正式复测,重点比较左侧脸、背光、状态闪烁与空场误报;仍坚持至少 18/20 和零闪烁的原门槛。
新增支出
¥0
D2 基线

20 轮正脸、侧脸与光照矩阵完成首测

完成
完成 20 轮真人进入、保持和离开测试,覆盖正常光、暗光、背光,以及正脸、左右约 45° 侧脸;摄像头画面只在本机内存中处理,没有保存或上传。
证据
共通过 9/20:正脸 5/8、左侧脸 0/6、右侧脸 4/6;正常光 4/8、暗光 4/6、背光 1/6。另记录 9 次状态闪烁、4 次跟踪中断和 6 次空场误报。
问题
当前结果未达到至少 18/20、每个矩阵格至少通过一次且状态闪烁为 0 的验收线,因此验证完成度不增加。左侧脸、背光、位置抖动及离场后的空场误报是主要短板。
下一步
优先替换或组合更稳健的轻量人脸检测,加入目标连续跟踪、位置平滑与空场误报抑制;随后用完全相同的 20 轮矩阵复测。
新增支出
¥0
D2 本地

真实人物位置已驱动机器人眼神跟随

完成
增加设备无关的 person.position 标准化坐标、平滑与节流;本机事件桥把坐标和状态送到机器人脸部页面,瞳孔会随人物移动。
证据
两分钟真实摄像头测试输出 124 条位置事件、33 次 accepted 状态转换,浏览器保持本地连接;5 项视觉逻辑测试与 8 项页面/状态机测试全部通过。
问题
本轮包含多次自然进出,但尚未按正脸、侧脸和不同光照完成规定的 20 次逐项验收,因此里程碑完成度仍不增加。
下一步
完成并记录 20 次人物进入/离开矩阵,调准漏检与闪烁阈值,然后接通真实语音链路。
新增支出
¥0
D2 本地

真实摄像头注意事件接入机器人状态机

完成
本地 Python 视觉进程实时输出 person.detected / person.lost,Node 事件桥将其送入同一机器人状态机;不再依靠网页按钮模拟注意。
证据
90 秒可见测试记录 4 次 detected、3 次 lost;随后 5 秒端到端测试完成 idle→attentive→idle,两次转换均被接受,0 次拒绝。
问题
当前仍是传统正脸检测,偶尔会短暂漏检或识别到第二张脸;尚未完成侧脸、逆光和 20 次进出抗抖测试。
下一步
完善注意力迟滞与人脸跟踪,在本地完成 20 次进入/离开测试,再让眼睛视线跟随人物位置。
新增支出
¥0
架构调整

公网只留进度,本地摄像头测试正式开始

完成
停止服务器稳定性任务并关闭公开 /lab;建立本地 Python/OpenCV 视觉环境,接入 Insta360 Link 2 Pro。
证据
本机连续读取 147 帧,分辨率 1280×720,实测 26.5 FPS;抽样 49 帧均检测到一张人脸,全程未保存或上传画面。
问题
首轮曾因中文路径导致 OpenCV 模型加载失败,已改为临时 ASCII 路径;还需验证人物离开、侧脸和不同光照。
下一步
把 person.detected / person.lost 本地事件接入六状态眼睛,并开启可见的原生调试窗口。
新增支出
¥0
D2 验证中

六状态眼睛与事件骨架首版完成

完成
实现待机、注意、聆听、思考、表达、恢复六种状态;本地实验界面、自动演示和事件日志全部由同一状态机驱动。
证据
8 项本地自动测试通过,其中包含 20 个模拟回合、120 次顺序转换和非法事件拒绝。
问题
这还不是 20 轮真实语音对话;随后确认开发与稳定性验证应留在本机,不在公网实验页运行。
下一步
接入本地摄像头注意事件,再接入 VAD、ASR、LLM 与 TTS 的最小语音闭环。
新增支出
¥0
基础设施

公开进度页迁移至自有服务器

完成
独立 Node 服务与 Nginx 虚拟主机已上线,robot.wangtugame.cn 已完成 HTTPS 和自动续期配置。
证据
正式地址 /progress 返回 HTTPS 200;HTTP 请求自动 301 跳转至 HTTPS。
问题
域名解析刚刚生效,少数地区的 DNS 缓存可能仍需短暂刷新。
下一步
建立桌面原型代码骨架与六状态眼睛,开始 D2 可运行交付。
新增支出
¥0
交付

一期公开进度页 v0.1 上线

完成
四周路线、预算闸门、里程碑权重、验收方法和决策日志完成首版。
证据
本页面及其完整历史记录。
问题
核心机器人软件尚未开始验收,因此验证完成度仍为 0%。
下一步
建立桌面原型代码骨架与六状态眼睛。
新增支出
¥0
决策

一期正式定义为四周验证冲刺

完成
将无外壳裸机、手机 PWA、七日使用数据和公开证据列为最终交付。
证据
D-001 至 D-006 已记录;新增想法统一进入二期候选池。
问题
四周不等于完成商品,只回答核心体验是否成立。
下一步
先用现有电脑证明体验,再释放硬件预算。
新增支出
¥0
08

决策日志

09

当前风险

D-001

一期只验证“注意—交流—记忆—主动跟进”闭环。

D-002

不制作商品级外壳;裸机不影响核心结论。

D-003

不实现电动收轮,先验证抱起停轮和桌面托座。

D-004

机器人屏幕负责眼神;长内容进入手机网页。

D-005

追加 ¥30,000 必须由一期证据解锁,不用于救火。

D-006

完成度按通过验收的里程碑权重计算,不按工时估算。

D-007

计时器与 TDL 等私人状态保存在操作系统用户数据目录,不进入浏览器缓存、OneDrive 项目目录或公开进度服务器。

D-008

真人测试是稀缺资源:自动测试、日志或开发端操作能可靠回答的问题不再交给用户;只保留真实感知、硬件安全和主观体验测试。

D-009

D5 的“删除”指旧正文和来源从应用受管主文件、备份、candidate、intent 与 tmp 中逻辑清除;不宣称 SSD 物理擦除,也不宣称能抵御同一系统账户下的恶意进程。

D-010

D6 基线在机器人播报期间完全关闭新语音入口;D3 已证明的软件插话取消保留,但真实房间回声分离完成前,不把自动插话与自回声抑制同时开放。

D-011

D7 记忆只接受四类显式口令;无匹配或多匹配的回忆也留在本机,云端模型不拥有记忆写权限,也不接收完整记忆上下文。长期幂等收据达到硬上限时拒绝新写,不淘汰旧收据。

D-012

注意门必须区分‘下一句可开口’与‘当前句正在接收’;普通检测漏帧按约 1 秒真实时间去抖,uncertain 只能在原有 1.2 秒证据窗内保留,明确 turned、多人、故障与断连仍立即关门。

D-013

真人验收说明只写逐字口令、开口时机和结束条件;解析器是否支持冒号等实现细节不得写进用户操作说明。

D-014

实时 ASR 每回合使用独立 WebSocket,只接受该连接内唯一一个字符串 final;重复、缺失或畸形 final 一律失败。供应商 committed/completed 的事件顺序和可选 item 元数据不再被当作稳定契约。

D-015

相同正文的重复 capture 必须持久去重:已确认内容不再生成候选,唯一同文候选只复用原记录;以不含正文或哈希的收据占用 turnId,重放安全失败关闭而不是伪装成结果级幂等。真人失败后不靠反复说话排查。

D-016

免唤醒注意采用视觉资格+声学就绪双条件:同一段连续正脸只发放一次视觉资格,心跳不得续期;每轮 VAD 必须先观察到 400 ms 真安静,随后才从该时刻开始完整 4 秒 ARMED。uncertain 抖动不能补发窗口,错过后需明确转开再看回、人物重获或新回合。该机制只降低背景误触发概率,不得表述为已经完成活跃说话人绑定。

D-017

一期活跃说话人先采用可替换的轻量嘴部运动代理,不新增摄像头所有者、云接口或大型模型。视觉进程只输出约 10 Hz 的有界标量;ASR 前必须在同一单调摄入时间轴上看到可靠的由静到动与起声相邻证据,否则保守拒绝。该代理不得宣传为身份、声纹、活体或全部电视场景识别。

高风险

免唤醒误触发

一次非目标持续语音误入门已经被真实复现,最可能来自环境背景声,但单声道无法确认具体来源。现在连续正脸不续期、启动校准不学习高能语音,每轮先等 400 ms 真安静,并在进入 ASR 前校验本机嘴部由静到动与起声时序;自动‘静嘴+背景声’样本已做到 0 次 ASR。它仍不是身份或声纹证明,摄像头正对同步电视人脸可能误接,口罩、遮挡、侧脸和弱光可能误拒;真实家庭专项与设备阶段声音方向仍待验证。

高风险

回声与自发声干扰

D6 基线播报期间完全关门;D10 再接真实 AEC 与近端插话判别,未通过前不开放自动插话。

中风险

移动噪音破坏陪伴感

限速、缓启停、隔振;必要时一期只保留原地转向。

高风险

主动交流令人厌烦

默认每天最多两次,拒绝后延长间隔,多次拒绝后暂停该话题。

中风险

硬件物流拖慢四周

电脑模拟器与硬件抽象接口先行,不用昂贵整机套件救进度。

中风险

本机记忆隐私边界被误解

记忆路由与持久状态留在本机 8767,浏览器 Origin 固定到本机 3000,API 不返回已删除 tombstone;但通过注意门的音频仍发送阿里云转写,本机回复为发声也会发送阿里云 TTS。公开说明仅承诺应用受管文件的逻辑清除,设备阶段再评估加密与账户隔离。

10

一期明确不做

“不做”不代表永远不会做,只代表它们不应抢走一期最核心问题的时间和预算。