VSS子代理机制详解:report_agent与multi_report_agent如何协作生成视频报告
【免费下载链接】video-search-and-summarizationNVIDIA AI Blueprint for video search and summarization (VSS) is a GPU-accelerated reference architecture for building video analytics agents with real-time verified alerts, visual Q&A, and automated reporting. The VSS Blueprint uses vision language models (VLMs) such as NVIDIA Cosmos, LLMs such as NVIDIA Nemotron, RAG, and NVIDIA NIMs.项目地址: https://gitcode.com/GitHub_Trending/vi/video-search-and-summarization
在 NVIDIA 的 VSS(Video Search and Summarization,视频搜索与摘要)开源项目中,子代理(Sub-agent)机制是整个智能体的核心设计:顶层路由代理 top_agent 负责理解用户意图,再把"生成视频报告"这类专业任务分发给 report_agent(单事件报告)与 multi_report_agent(多事件报告)两个确定性子代理执行。本文面向新手,用最少代码、最多图示,讲清这套子代理协作机制的工作原理与配置方式。
一、VSS 整体架构:子代理站在哪里?
VSS 是一套 GPU 加速的视频分析智能体参考架构,集成了视觉语言模型(VLM)、大语言模型(LLM,如 Nemotron)、RAG 与 NIM 微服务。从架构图可以直观看到:智能体层(Agent)向上提供对话入口,向下调用视频分析 MCP 工具、视频理解工具与各微服务。
在智能体层内部,代理分为两类角色:
| 角色 | 说明 | 典型例子 |
|---|---|---|
| 顶层代理(Top Agent) | LLM 驱动,负责规划、路由、决定调哪个工具 | top_agent.py |
| 子代理(Sub-agent) | 预定义流程,被当作"高级工具"调用 | report_agent、multi_report_agent、search_agent、critic_agent |
| 普通工具(Tool) | 单一能力,直接返回数据 | video_understanding、vst_video_clip、get_sensor_names |
注册入口很简洁——导入即注册,见 register.py:
critic_agent / multi_report_agent / report_agent / search_agent / top_agent二、两个报告子代理的分工
1. report_agent:单事件深度报告
源码位于 report_agent.py。它的最大特点是确定性工作流:不使用 LLM 做决策,而是按固定工具序列执行,保证输出稳定可复现。它有两种运行模式,由配置自动检测切换:
- 模式一(事件模式):检测到事件 → 调用 Video Analytics MCP 的
get_incidents/get_incident拉取最近(或指定 ID 的)事件 → 调用template_report_gen生成含视频分析的 Markdown + PDF 报告; - 模式三(上传视频/RTSP 流模式):未配置事件库时,直接基于上传视频或实时流做分析,支持多视频并行处理。
生成的报告会通过side_effects返回下载链接(Markdown/PDF)和媒体链接(事件快照、视频片段),并自动附加到最终回复中——子代理还会附一条artifact_note,提醒顶层 LLM"链接已自动展示,不要重复贴"。
在 UI 中,向助手提出"帮我生成一份视频报告",就会触发 report_agent 走完整流程:
2. multi_report_agent:多事件汇总报告
源码位于 multi_report_agent.py。它只对应一条更短的工具链:调用multi_incident_formatter一次完成"拉取多个事件 → 补充 URL → 格式化列表 → 生成图表"。
关键输入参数:
source/source_type:按传感器或地点过滤(sensor或place);start_time/end_time:ISO 时间范围,缺省时取最近事件;max_result_size:返回事件数量上限,未指定时回落到配置项max_incidents(默认 10000,UI 展示前几条,图表统计全部)。
它的side_effects输出chart_html(图表)与formatted_incidents(格式化事件列表),顶层代理会指示 LLM 不要重复粘贴已自动展示的完整列表。
三、协作机制:top_agent 如何调度子代理
这是子代理机制最核心的部分。调度逻辑全部在 top_agent 中完成,可以概括为五步:
- 绑定:初始化时把普通工具和子代理合并为一个列表绑定给 LLM(
llm.bind_tools(subagents_plus_tools)),因此 LLM 眼里子代理就是一个"功能强大的工具",但实际执行走原生流式接口; - 规划:开启
planning_enabled时,先用不绑定工具的 LLM 起草编号执行计划,再按计划执行,避免模型漏步; - 识别与调用:LLM 发出工具调用后,
tool_or_subagent_node检查工具名是否在subagent_names中,若是则发出SUBAGENT_CALL事件,并用astream原生流式执行子代理; - 流式透传:子代理执行中产生的
TOOL_CALL、THOUGHT等中间步骤(如"Tool: get_incidents…")被逐块转发给前端,用户在 UI 里能看到子代理内部的每一步推理; - 结果回收:子代理的
FINAL块被解析为统一的AgentOutput(messages / side_effects / metadata / status,定义见 data_models.py),其中下载链接、媒体 URL 等 side_effects 会累积到state.subagent_side_effects,在最终回复时统一追加展示。
子代理执行期间还会发出 TOOL_START / TOOL_END 遥测事件,接入 OpenTelemetry 链路追踪,方便排查性能与错误。
另外,top_agent 内置了"相同工具调用去重"机制:同一名称+参数的调用最多重试 2 次,防止 LLM 陷入重复调用循环——对长耗时的报告生成任务尤为重要。
四、在哪里配置子代理?
不同开发配置(dev profile)通过subagent_names字段声明启用的子代理。例如告警配置 config.yml 中:
workflow: _type: top_agent planning_enabled: true tool_names: - video_understanding - rtvi_vlm_alert ... subagent_names: - report_agent而搜索配置 dev-profile-search config.yml 只启用search_agent。可见:子代理机制让同一个 top_agent 框架在不同业务场景下"插拔"不同能力——同一份调度代码,换一份配置就是不同的智能体。
五、小结
- report_agent负责单事件/上传视频的"深度报告",multi_report_agent负责多事件"列表+图表"的"广度汇总",两者都是确定性工作流,输出统一走
AgentOutput模型; - top_agent把子代理包装成工具绑定给 LLM,通过原生流式接口调用、逐块透传中间步骤、集中收集 side_effects 后统一呈现,实现了"LLM 负责决策、子代理负责执行"的清晰分工;
- 想扩展自己的子代理,只需仿照 agents/ 目录下的实现注册,并在 dev profile 的
subagent_names中声明即可,更多细节可参考官方文档 VSS-Agent-Overview.mdx 与 VSS-Agent-Configuration.mdx。
【免费下载链接】video-search-and-summarizationNVIDIA AI Blueprint for video search and summarization (VSS) is a GPU-accelerated reference architecture for building video analytics agents with real-time verified alerts, visual Q&A, and automated reporting. The VSS Blueprint uses vision language models (VLMs) such as NVIDIA Cosmos, LLMs such as NVIDIA Nemotron, RAG, and NVIDIA NIMs.项目地址: https://gitcode.com/GitHub_Trending/vi/video-search-and-summarization
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考