SuperAPI AI 工具集

vss-ask-video

数据与分析

查看项目

更新于 10-16 10:53

技能介绍

用途

vss-ask-video 用于对已录制的视频片段发起全新的视觉提问,借助 VSS 智能体的 video_understanding 工具调用 VLM 查看视频帧来回答。当智能体没有可用的既有答案、需要对某个片段的像素做一次全新观察时使用该技能。

何时使用

  • 用户询问视频中发生了什么,出现哪些物体、人物、动作、颜色、时间点、安全性,或其他需要观看片段才能回答的视觉事实。
  • 用户询问无法从已有消息、摘要、Elasticsearch/MCP 结果或文件名单独得出的细节——需要模型对视频做推理。
  • 在粗略摘要或报告生成之后,对内容细节的追问。

当数据库、MCP 或先前的工具输出已经能回答问题时不使用本技能,除非用户明确希望对照视频核验。

部署前置条件

本技能需要提供 video_understanding 工具的 VSS profile——通常为 base(推荐)或 lvs。任何请求之前:

探测 VSS 智能体:

curl -sf --max-time 5 "http://${HOST_IP}:8000/docs" >/dev/null

若探测失败,询问用户:

"No VSS profile is running on $HOST_IP. Shall I deploy base (recommended for per-clip VLM QnA) using the /vss-deploy-profile skill? If you prefer lvs, say so."

若同意 → 转交 /vss-deploy-profile -p base(若用户偏好则 -p lvs)。成功后回到本技能。

若不同意 → 停止。

若探测通过 → 继续。

传感器前置条件

在调用任何 /generate 之前,必须先列出 VST 传感器。即使用户明确指出了传感器名称、即使用户声称视频已上传、即使上一轮看似使用了同一视频,这一步都是必需的。不得跳过。

列出传感器:

curl -sf --max-time 5 "http://${HOST_IP}:30888/vst/api/v1/sensor/list" | jq '.[].name'

将返回的 name 值与用户提供的 <sensor-id>(或文件名主干,例如 warehouse_safety_0001)比对。

  • 若存在匹配的传感器 → 进入下方的智能体工作流。
  • 若不存在匹配的传感器 → 先上传视频,然后重新列出以确认新传感器出现:
# filename: must not contain whitespace
# timestamp: ISO 8601 UTC — default 2025-01-01T00:00:00.000Z if user did not specify
curl -s -X PUT "http://${HOST_IP}:30888/vst/api/v1/storage/file/<filename>?timestamp=<timestamp>" \
  -H "Content-Type: application/octet-stream" \
  -H "Content-Length: <file_size_in_bytes>" \
  --upload-file /path/to/<filename> | jq .

完整上传语义(v1 与 v2、冲突处理、删除流程)见 /vss-manage-video-io-storage。在交互式运行中,上传前需与用户确认。切勿在未先执行上述传感器列表检查的情况下无条件发出 PUT——这正是该前置条件旨在防止的失败模式。

智能体工作流

上述传感器前置条件必须已确认(或已使)传感器存在于 VST 上。然后:

  1. 片段——确定某个视频片段的传感器 id、文件名或 URL。若有歧义,询问用户。
  2. 以该传感器 id 调用 vss 智能体,并要求它调用 video_understanding 工具来回答用户的问题。
  3. 将 vss 智能体的答案返回给用户。

查询 VSS 智能体(/generate):

# Set from deployment (compose / .env / host where vss-agent listens)
export VSS_AGENT_BASE_URL="http://localhost:8000"

curl -s -X POST "${VSS_AGENT_BASE_URL}/generate" \
  -H "Content-Type: application/json" \
  -d '{"input_message": "Call video_understanding tool to answer the following question about <sensor-id>: <user query>"}' | jq .

响应约定与提取

/generate 返回 JSON 对象,助手输出位于 value 中,例如:

{"value":"<agent-think><agent-think-step ...>...</agent-think-step></agent-think>\n\n<final answer>\n\n"}

没有单独的干净答案字段。可用的答案是从 .value 中移除任何 <agent-think>...</agent-think> 块后的文本。

本技能(及任何下游调用方)所需的处理:

  1. 从 JSON 响应中读取 .value。
  2. 剥离任意位置出现的 <agent-think>...</agent-think> 部分。
  3. 仅将剩余的最终答案文本返回给用户。

提取示例:

curl -s -X POST "${VSS_AGENT_BASE_URL}/generate" \
  -H "Content-Type: application/json" \
  -d '{"input_message":"Call video_understanding tool to answer the following question about <sensor-id>: <user query>"}' \
| jq -r '.value' \
| python3 -c 'import re,sys; t=sys.stdin.read(); t=re.sub(r"<agent-think>.*?</agent-think>\s*", "", t, flags=re.S); print(t.strip())'

交叉参考

  • vss-manage-video-io-storage——VST 存储/回放 URL,使 VIDEO_URL 对 VLM 有效。
  • vss-generate-video-report——通过 Mode A(直接 VLM)或 Mode B(视频分析事件)生成带时间戳的报告;本技能是用于临时视频问答的 VSS 智能体 /generate。

限制

本技能的文档未提供关于收费、价格、平台支持范围、效果指标或使用时长限制等信息,此类事实暂未提供。