视觉理解 — Vision Insight — README

← 返回原型 · 飞书 PRD 原文 ↗

一、产品定位

面向企业实景场景(巡检、监控、协作直播、远程指挥等)与个人用户实景场景(盲人辅助、智能眼镜等),在通用多模态大模型基础上补齐两类核心能力:

本原型用方舟豆包 Doubao-Seed-2.0-lite(多模态)单一模型跑通端到端链路。

二、关键功能

  1. 多模态实时观察

    浏览器摄像头按 1 fps 抽帧(JPEG dataURL)上行 /observe。后端用豆包 VLM 为每帧生成 ≤60 字的客观描述,作为短期记忆条目。会话级 in-memory 索引,上限 30 分钟 / 256 帧,自动滚动淘汰。

  2. 历史记忆召回 (recall_history)

    问题文本与每帧 caption 转 256 维 hash-based 稀疏向量,余弦相似度召回 topK 帧(阈值 0.55),将其图片+描述与原问题拼装多模态 prompt,VLM 联合作答并明确引用时间点。命中失败时回退到当前帧或建议注册规则。

  3. 当前画面问答 (current_frame_vqa)

    "现在/这是什么/在哪里"等当前指代型问题直接以最新帧为输入做 VQA。无新帧时回退到记忆中最后一帧并向用户说明。

  4. 持续检测与主动反馈 (register_rule)

    "等到 X 出现告诉我"等口语化规则交由 LLM 抽取目标短语 + timeoutMs(默认 60s,最长 5 分钟),写入会话规则池。后台调度器每 500ms tick 一次,按 ≤2 QPS / 会话限流抽帧匹配,命中 / 超时 / 取消三态通过 SSE /events 主动推送到浏览器横幅。

  5. 意图路由 + 可观测

    每次对话先经 LLM 严格 JSON 意图分类(recall_history / current_frame_vqa / register_rule / chitchat),再分发到对应工具链;响应回包暴露 trace.intent、命中数、活动规则列表,便于调参与回归。

三、技术架构

3.1 分层视图

  ┌────────────────────────── 浏览器 (单页 SPA) ──────────────────────────┐
  │  Webcam → Canvas 抽帧 (1 fps, JPEG dataURL)                           │
  │  Chat 表单 → /api/chat (text + currentImage)                          │
  │  EventSource ← /api/events  (SSE: ready / hit / timeout / cancelled)  │
  └──────────────────────────────────┬───────────────────────────────────┘
                                     │ HTTP / SSE
  ┌──────────────────────────────────▼───────────────────────────────────┐
  │  IGA Pages Functions (Node, Express, api/[[default]].js)             │
  │  ┌─────────────────────────┐  ┌────────────────────────────────────┐ │
  │  │  路由层                 │  │  调度层 (RuleScheduler 500ms tick) │ │
  │  │  /health  /observe      │  │  · ≤2 QPS/会话                     │ │
  │  │  /chat    /rule/cancel  │  │  · active → hit/timeout/cancelled  │ │
  │  │  /events  (SSE)         │  │  · 命中 push SSE 给前端            │ │
  │  └────────────┬────────────┘  └──────────────┬─────────────────────┘ │
  │               │                              │                       │
  │  ┌────────────▼────────────┐    ┌────────────▼───────────────────┐  │
  │  │ Memory (in-memory)      │    │ Ark 调用层 (api/ark.js)         │  │
  │  │ · session              │    │ · describeImage  (多模态 caption)│  │
  │  │ · frames (img/cap/vec) │    │ · intentClassify (严格 JSON)    │  │
  │  │ · rules (taskId→state) │    │ · generateVqaAnswer             │  │
  │  │ · SSE clients Map      │    │ · matchRuleAgainstFrame         │  │
  │  └────────────────────────┘    │ · textEmbedding (256d hash 稀疏)│  │
  │                                 └──────────────┬─────────────────┘  │
  └────────────────────────────────────────────────┼────────────────────┘
                                                   │
                                ┌──────────────────▼───────────────────┐
                                │  方舟 Ark · doubao-seed-2-0-lite      │
                                │  POST {endpoint}/chat/completions    │
                                │  OpenAI-兼容 + image_url 多模态      │
                                └──────────────────────────────────────┘
        

3.2 关键时序

3.3 配置默认值

配置项默认值说明
抽帧速率1 fps前端 setInterval;可调
记忆容量30 min / 256 帧滚动淘汰
召回 topK3余弦阈值 0.55
规则带外限流≤2 QPS / 会话调度器 tick 500ms
规则超时60 s(默认)/ 300 s(最长)LLM 抽取 + 上界裁剪
SSE 心跳15 s: heartbeat 注释行
LLMdoubao-seed-2-0-lite-260428方舟 OpenAI 兼容

四、API 协议

MethodPath说明
GET/api/health探活 + ARK 配置状态
POST/api/observe{ sessionId, image, hint } — 写入一帧 + caption + vector
POST/api/chat{ sessionId, text, currentImage } — 路由到三种工具或 chitchat
POST/api/rule/cancel{ sessionId, taskId } — 取消活动规则
GET/api/events?sessionId=…SSE:ready / visual_rule_hit / visual_rule_timeout / visual_rule_cancelled

五、原型边界与开放问题