Skip to content

feat: 希望增加感知引擎参数可配置项以降低 token 消耗 #352

Description

@KevinZjYang

背景

miloco 感知引擎每 4 秒对摄像头画面调用一次 omni 模型进行视觉理解,这是 token 消耗的主要来源。当前很多影响 token 效率的参数在代码中硬编码,用户无法根据实际场景调整。

问题分析

感知管线流程:采集 → Gate(闸门)→ Identity(本地)→ Omni(云端 token)

Gate 层负责决定是否需要调 omni,有三个子闸门:

  1. 视觉闸门:帧差分检测画面变化,阈值 change_threshold=0.005(0.5%)
  2. 音频闸门:能量阈值 audio_energy_threshold=0.015
  3. Hold 滞回:视觉最近通过后 hold_duration_sec=360(6 分钟)内强制继续处理

实际使用中发现两个主要的 token 浪费:

1. Hold 时间过长(6 分钟)

从实际日志看,画面已经静止(gate_video_pass=0),但 hold 未过期(gate_hold_pass=1),导致持续调用 omni。家里有人走动一次后,接下来 6 分钟即使画面完全没变化,每 4 秒都在消耗 token。

2. 家庭环境持续有声音

家里电视/音箱一直在播放,导致音频闸门几乎始终通过(gate_audio_pass=1),视觉闸门本可以跳过的场景被音频拉回来继续调 omni。

实测 token 消耗对比

使用 mimo-v2.5 + media_resolution=default,单次 omni 调用:

  • default 模式:~598 video_tokens,总 ~3132 tokens
  • max 模式:~896 video_tokens,总 ~3819 tokens

按每 4 秒一次、一天 24 小时计算,即使大部分时间画面静止,hold + 音频触发下 token 消耗仍然很高。

建议

希望在配置文件或 miloco-cli config 中暴露以下参数:

Gate 层(直接影响是否调 omni):

  • gate.change_threshold — 视觉变化阈值(当前 0.005)
  • gate.hold_duration_sec — 视觉 hold 滞回时长(当前 360 秒)
  • gate.audio_energy_threshold — 音频能量阈值(当前 0.015)
  • gate.check_fps — 视觉检测帧率(当前 1)

输入层(影响每次调用的 token 量):

  • input.omni_fps — 送 omni 的视频帧率(当前 1)
  • input.period_sec — 感知周期(当前 4)

Omni 层:

  • omni.media_resolution — 帧解析精度(default / max
  • omni.max_completion_tokens — 最大输出 token(当前 512)

这些参数暴露后,用户可以根据自己的场景灵活调整,比如:

  • 家里没人时调大 hold_duration_secperiod_sec
  • 安静环境调低 audio_energy_threshold 避免误触发
  • 不需要精细识别时用 media_resolution=default + 降低 omni_fps

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions