跳到主要内容

VLM 与 Agent 端侧形态

建议学时

4 学时。

建议拆成四段:

时段内容课堂产出
第 1 学时VLM 推理链路和端侧瓶颈VLM 组件拆解图
第 2 学时Local Agent 的规划、工具和权限Agent 权限边界表
第 3 学时端云协同、多模型路由和 fallback端云协同架构草图
第 4 学时VLM/Agent 案例评审系统级风险清单

学习目标

  • 区分 VLM 的感知理解链路和 Agent 的规划执行链路。
  • 理解 VLM 端侧瓶颈不只在 LLM,还包括图像分辨率、视觉 token、vision encoder、projector 和多模态对齐。
  • 理解 Agent 的关键问题包括工具权限、状态管理、失败恢复、本地数据边界和端云协同。
  • 能把单模型优化扩展到系统级部署判断。
  • 能判断哪些 VLM/Agent 能端侧化,哪些只能局部端侧化。
  • 能为最终项目报告写出 VLM/Agent 扩展路线,而不是只给概念性描述。

问题背景

VLM 与 Agent 的端侧部署已经从单模型优化扩展到系统架构优化。

VLM 要处理图像预处理、vision encoder、projector、LLM、tokenizer、多轮上下文和输出后处理。Agent 则包含 planner、tool registry、executor、memory、permission manager、safety policy 和交互循环。任何一个组件不稳定,系统就可能表现为“模型不好用”,但真实原因可能是输入、工具、权限、状态或 fallback 设计有问题。

因此,端侧 VLM/Agent 的瓶颈不只是模型大小,还包括输入管线、工具链稳定性、权限边界、本地上下文、失败恢复和端云协同策略。

本章不要求学生从零训练 VLM 或完整 Agent。课程目标是建立系统设计能力:看见组件、识别瓶颈、定义边界、设计可验证的端侧路径。

公开资料怎么转成本章内容

Hugging Face 多模态任务页、Transformers 文档、OpenAI Function Calling、OpenAI Agents SDK、Jetson AI Lab 和 ML Systems Book 都能补强本章。但这些资料更新快、框架差异大,本章只吸收稳定的系统概念:VLM 拆成输入、vision encoder、projector、LLM 和后处理;Agent 拆成 planner、tool registry、permission manager、executor、state 和 fallback。

外部资料中的经典内容本章吸收什么课程里的落点
Hugging Face image-text-to-text / TransformersVLM 输入输出、processor、多模态模型形态VLM 链路图、视觉 token 估算和组件风险表
Qwen / llama.cpp 多模态路线GGUF + mmproj 的本地 VLM 形态llama-mtmd-cli smoke test 和 projector 谨慎量化提醒
OpenAI Function Calling工具 schema、参数边界和调用结果校验Agent 权限边界表和工具白名单
OpenAI Agents SDKagent、tool、handoff、guardrail、tracing 等系统概念作为架构参考,不要求学生改用云端 SDK
Jetson AI Lab / Jetson docs边缘视觉、功耗、温度和节点分工Jetson 作为采集、预处理、小模型和权限节点
ML Systems Book可靠性、状态、失败恢复和系统复盘端云协同、状态管理和最终项目风险清单

Microsoft EdgeAI for Beginners 的 Local-first Agent 图适合作为系统参考:本地 SLM、工具编排、人类确认、多模态输出和 observability 不是单一模型能力,而是一组系统组件。本课程把它重画成下面的端侧 Agent 边界图。

把 Local-first Agent 资料放进章节后,需要立刻落到三张课程表:组件表、权限表和证据表。这样学生看到的是系统边界,而不是把 Agent 当成一个“会自动做事”的模型。

原图组件本章吸收成学生需要能说明
Local SLM本地低风险 planner、formatter、summarizer哪些任务必须本地,哪些任务本地能力不足
Tools / function calling静态白名单、schema、应用层执行工具参数如何校验,模型能否绕过权限
Human in the loop高风险动作确认点哪些操作必须确认,确认记录保存在哪里
Multimodal input/outputVLM 输入、图像预处理、文本输出图像大小、视觉 token、projector 是否成为瓶颈
Observability日志、trace、失败样例保存哪些请求、工具结果和拒绝原因
Cloud fallback脱敏后复杂推理或知识补全什么时候允许云端,断网时如何退化
外部 VLM/Agent 资料可以吸收的字段本章转成的检查项
HF 多模态任务页input type、processor、image size、generated textVLM 组件拆解和视觉 token 估算
Qwen-VL / llama.cpp mtmd 文档language model、mmproj、image flag、backendVLM smoke test 命令和 projector 风险
OpenAI tools / function callingtool name、description、JSON schema、tool resultAgent 工具契约和 policy validator
OpenAI Agents / tracing 概念agent、handoff、guardrail、trace本章只吸收系统概念,不改成云端 SDK 实验
Microsoft EdgeAIlocal-first、SLM/LLM 分工、人工确认端云协同路由和权限边界

OpenAI Function Calling 和 Agents SDK 文档里的概念可以直接转成 Agent 安全记录表。本课程不要求使用云端 SDK,但要吸收这些系统字段:

官方文档概念本章吸收什么本地/端侧记录字段
Function tools工具必须有名称、schema、参数和返回值tool name、JSON schema、参数校验、返回摘要
Strict / structured output输出格式应先被机器校验,再进入执行schema validator、失败重试、拒绝执行记录
Handoffs / agents as tools复杂任务可以委托给更合适的模型或子流程handoff 条件、目标 agent、回退策略
Guardrails输入输出都要有安全和策略检查blocked tools、confirm_required、policy result
Human in the loop高风险动作不应直接自动执行人工确认点、确认内容、超时策略
Sessions / memory状态会影响后续工具调用session id、可保存字段、敏感字段清理
TracingAgent 结论要能回放每一步trace id、tool call log、错误和恢复路径

所以,本章不是“搭一个完整 Agent demo”,而是让学生能判断:哪些组件适合本地,哪些需要云端或人工确认,哪些风险必须先写进报告。

VLM 端侧链路

VLM 的一次推理通常比纯文本 LLM 多出视觉侧处理。

每个环节都有端侧部署问题:

环节端侧风险需要记录
图像输入分辨率过高、帧率过高、摄像头延迟输入尺寸、帧率、预处理耗时
预处理CPU 占用、内存复制、格式转换resize/crop 策略、数据格式
Vision Encoder算子支持、显存/内存占用模型大小、runtime、推理耗时
Projector多模态对齐、精度敏感是否量化、输出质量变化
LLMKV Cache、低比特、首 tokenctx-size、tokens/s、质量样例
输出后处理格式不稳定、幻觉、坐标错误JSON 合法性、人工检查、失败样例

VLM 的端侧部署形态

VLM 不一定要完整放在端侧。常见形态如下:

形态端侧运行云端运行适用场景
纯端侧 VLM视觉侧 + LLM隐私强、输入规模小、任务简单
视觉端侧 + 云端 LLM图像预处理、视觉特征、OCR 初筛复杂语言推理图片含隐私但可上传脱敏文本
端侧小 VLM + 云端兜底快速识别、低风险问题高难问题、长上下文交互产品、巡检助手
端侧检测 + LLM 解释传统视觉模型语言总结、原因分析工业视觉、安防、设备巡检

课程建议先从“拆分组件”开始,而不是直接追求完整本地 VLM。对很多产品来说,端侧视觉前处理和本地隐私过滤已经能产生价值。

VLM 量化与加速关注点

VLM 量化不能只看语言模型部分。

优化对象常见方法风险
Vision EncoderINT8、TensorRT、ONNX、分辨率控制小目标、OCR、空间关系下降
Projector保持高精度或谨慎量化对齐质量下降,错误难以定位
LLMGGUF、AWQ、GPTQ、KV Cache 控制文本质量、长上下文、格式稳定性
输入管线resize、batch、缓存、零拷贝图像质量损失或工程复杂度上升
输出约束JSON schema、规则校验、重试延迟增加,错误恢复复杂

如果 VLM 任务涉及 OCR、小目标、图表理解或空间关系,低比特量化后的质量下降可能比纯文本任务更难通过主观观察发现。课程要求保留失败样例。

视觉输入的成本可以量化。图像经过 vision encoder 后变成视觉 token 拼进上下文,数量近似为:

nvisH×Wp2×mn_{vis} \approx \frac{H \times W}{p^2 \times m}

H×WH \times W 是输入分辨率,pp 是 patch 大小,mm 是 projector 的 token 合并因子(例如 Qwen2-VL 把每 2×2 个 patch 合并成 1 个 token,m=4m = 4)。一张 1024×1024 的图按 p=14p = 14m=4m = 4 计算约 1300 个 token——相当于一篇短文的 prefill 成本,而且全部进入 KV Cache。

这个公式解释了两个工程现象:分辨率是 VLM 延迟最直接的旋钮;多图或视频输入会很快撑爆端侧的上下文和内存预算。

Agent 系统链路

Agent 的端侧部署更像一个受控系统,而不是一个单模型推理任务。

Agent 端侧化的关键不是“模型会不会调用工具”,而是“工具调用是否可控、可回滚、可审计”。

Function Calling 工作流

Microsoft EdgeAI for Beginners 的 Function Calling 模块把工具调用拆成:工具定义、意图识别、参数抽取、JSON 输出、外部执行、结果回填。本课程采用同样的系统边界,但只要求学生实现可验证的本地白名单流程。

阶段最容易出错的点本课程最低检查
工具定义描述太宽泛,参数类型不明确每个参数有类型、范围和默认值说明
意图识别小模型误判需要调用高风险工具高风险工具不直接暴露给模型
JSON 输出格式合法但字段冲突或缺必填参数先跑 schema / policy validator
外部执行模型输出被当成可信命令直接执行应用层二次校验,不让模型绕过权限
结果回填工具失败被模型编造成成功工具返回必须带 status/error
日志记录保存了敏感路径或原始隐私数据日志脱敏,并保留失败原因

这个流程解释了为什么本课程的 Agent 实验只让模型生成策略草案,不让它直接操作系统。Function calling 的安全边界在应用层,不在模型文本里。

Agent 权限边界

端侧 Agent 接近真实系统操作,必须先定义工具权限。

{
"allowed_tools": ["read_local_note", "summarize_text", "search_local_index"],
"confirm_required": ["rename_file", "move_file", "send_request"],
"blocked_tools": ["delete_file", "send_email", "run_shell"],
"fallback": "cloud_model_when_task_requires_complex_reasoning"
}

推荐把工具分成四类:

类别示例默认策略
只读工具读取笔记、查询本地索引、查看图片元数据可允许,但要限制路径和范围
可逆写入新建草稿、生成报告、标记分类可执行,但要保留日志
高风险操作删除、发送、支付、设备控制默认禁止或必须确认
外部联网云端检索、远程 API、模型 fallback需要隐私和网络策略

端侧 Agent 的状态管理

Agent 经常失败在状态,而不是单次推理。

状态风险处理建议
对话历史上下文膨胀、隐私泄露摘要、截断、分级保存
工具结果旧结果被误用给每次工具结果加时间和来源
用户偏好过度个性化或错误记忆可查看、可删除、可关闭
任务进度中断后重复执行使用步骤状态和确认点
错误日志泄露路径或敏感内容脱敏后保存

端侧 Agent 的“记忆”不应该默认永久保存。课程建议先实现短期状态和显式项目记录,再讨论长期记忆。

端云协同 Agent

本地小模型适合处理隐私、低延迟和格式化任务;云端大模型适合复杂推理、长上下文和知识密集任务。

Microsoft EdgeAI 课程强调 SLM 更适合高频、结构化、工具型工作流,LLM 更适合开放式复杂推理。本课程把它落成下面这张路由表:

任务类型本地 SLM 优先云端/大模型优先路由证据
固定格式抽取输出 schema 通过率、tokens/s、失败样例
本地日志摘要只在脱敏后兜底日志敏感级别、摘要质量、是否离线
工具参数生成是,但必须校验高风险任务需人工确认policy validator 结果
长文复杂推理只做摘要或预筛上下文长度、质量备注、超时记录
创意开放问答不作为主路径质量要求和用户体验
设备控制只读或建议仍需应用层权限工具等级、确认记录、回滚能力

端云协同需要明确三种规则:

  • 隐私规则:哪些内容只能本地处理。
  • 能力规则:哪些任务本地模型不应硬做。
  • 失败规则:本地失败、云端失败、网络失败时如何退化。

Jetson 上的 VLM/Agent 形态

Jetson 在 VLM/Agent 中更适合作为边缘节点,而不是所有能力的唯一承载点。

形态Jetson 职责其他组件适用场景
摄像头 + 视觉模型图像采集、检测、告警云端报表或人工复核工业巡检、安防
Jetson + 小 LLM本地问答、状态解释、轻量总结云端知识库或大模型设备运维助手
Jetson + VLM 初筛低分辨率理解、隐私过滤云端复杂视觉问答机器人、现场助手
Jetson Agent 节点本地工具调用、传感器状态、权限控制云端 planner边缘自动化

评估 Jetson 方案时要记录温度、功耗模式和长时间运行稳定性。VLM/Agent 通常比单次 LLM 推理更容易暴露系统问题。

代码/命令示例

本地服务是 VLM/Agent 的基础组件。先确认 OpenAI-compatible API 可被调用。

from openai import OpenAI

client = OpenAI(
base_url="http://127.0.0.1:8080/v1",
api_key="local-no-key",
)

response = client.chat.completions.create(
model="local-model",
messages=[
{"role": "system", "content": "你是一个只处理低风险本地任务的助手。"},
{"role": "user", "content": "把这段日志总结成三条问题。"},
],
)

print(response.choices[0].message.content)

llama.cpp 的多模态入口是 mtmd 工具。VLM 的 GGUF 由两个文件组成:语言模型主体和 mmproj(vision encoder 加 projector):

mkdir -p ~/edge-ai-lab/vlm ~/edge-ai-lab/logs

./build/bin/llama-mtmd-cli \
-m models/qwen/Qwen2-VL-2B-Instruct-Q4_K_M.gguf \
--mmproj models/qwen/mmproj-Qwen2-VL-2B-Instruct-f16.gguf \
--image ~/edge-ai-lab/vlm/test-chart.png \
-p "用三句话描述这张图表的主要结论。" \
-ngl 99 \
2>&1 | tee ~/edge-ai-lab/logs/vlm-smoke.txt

注意 mmproj 文件通常保持 f16,这正是“projector 谨慎量化”在工具链里的体现。多模态工具名和 flag 随版本变化较快(旧版本叫 llama-llava-cli),以当前版本 --help 为准。

Agent 工具注册建议先用静态白名单:

tools:
read_local_note:
mode: read_only
path_scope: ./workspace/notes
summarize_text:
mode: transform
network: false
run_shell:
mode: blocked
reason: requires explicit human approval

实跑记录:

本地小模型可以生成工具策略草案,但不能直接执行。实跑中模型两次返回了合法 JSON,却把同一个工具同时放进 allowed_toolsblocked_tools。因此 Agent 输出至少要经过结构和权限校验。

课程提供一个最小校验脚本:

python3 labs/scripts/validate_agent_policy.py agent-policy.json

它只检查三件事:必需字段存在、三个工具集合互斥、高风险工具不能直接允许。更复杂的业务权限应在应用层继续加规则。

配套实作

对应实作章节:本地 OpenAI-compatible 服务

本课程第一阶段不直接部署完整 VLM 或完整 Agent,而是先完成本地 LLM 服务化。它是后续 VLM/Agent 的基础组件:

  • VLM 可以把 LLM server 作为文本推理模块。
  • Agent 可以把本地小模型作为低风险任务 planner、summarizer 或 formatter。
  • 端云协同可以把本地 server 作为隐私优先路径。
  • Jetson 可以作为边缘节点承载采集、预处理、小模型推理和权限控制。

验收结果

产物验收标准
VLM 链路图能指出 vision encoder、projector、LLM、输入管线各自可能的瓶颈
Agent 权限表能区分允许、确认、拒绝、需要云端兜底的工具
端云协同图能说明本地、云端、fallback 和隐私边界
服务化基线本地 LLM server 可被后续 VLM/Agent 组件调用
风险清单至少覆盖权限、状态、输出格式、网络和日志脱敏

案例模板:VLM

## VLM 任务

- 输入类型:
- 图像分辨率:
- 输出类型:
- 是否涉及隐私:
- 是否需要实时:

## 组件拆解

| 组件 | 模型/工具 | 是否端侧运行 | 风险 |
| --- | --- | --- | --- |
| 预处理 | 待填 | 待填 | 待填 |
| Vision Encoder | 待填 | 待填 | 待填 |
| Projector | 待填 | 待填 | 待填 |
| LLM | 待填 | 待填 | 待填 |
| 后处理 | 待填 | 待填 | 待填 |

## 质量样例

- 成功样例:
- 失败样例:
- 需要人工复核的样例:

案例模板:Agent

## Agent 任务

- 用户目标:
- 本地数据范围:
- 可用工具:
- 禁止工具:
- 是否允许云端兜底:

## 工具权限表

| 工具 | 权限级别 | 是否需要确认 | 日志要求 |
| --- | --- | --- | --- |
| 待填 | 待填 | 待填 | 待填 |

## 失败恢复

- 本地模型输出格式错误:
- 工具调用失败:
- 网络不可用:
- 用户拒绝授权:

复盘问题

  • VLM 任务失败时,如何判断问题来自图像侧、projector、LLM 还是后处理?
  • 对 OCR、小目标和空间关系任务,为什么不能只看普通文本问答质量?
  • Agent 端侧运行时,哪些工具必须默认禁止?
  • 本地小模型不够聪明时,是换模型、降低任务复杂度,还是引入云端 fallback?
  • Jetson 作为边缘节点时,哪些组件应本地运行,哪些组件应放到云端?
  • 如何在日志里保留足够证据,同时避免泄露本地路径和敏感内容?

常见问题

  • 只压缩 LLM:VLM 的图像侧、projector 和输入管线也可能是瓶颈。
  • 忽略工具权限:Agent 端侧运行更接近真实系统操作,权限边界必须先定义。
  • 只检查 JSON 合法:合法 JSON 不代表权限策略安全,仍需检查集合冲突和高风险工具。
  • 把端侧当成全离线:很多产品更适合端云协同,而不是强行全端侧。
  • 没有失败恢复:工具调用失败、网络失败、输出格式错误都需要恢复策略。
  • 把 demo 当产品:一次成功调用不能证明权限、状态和日志策略可用。

作业

阅读题

  1. 查阅 Qwen2-VL 或同类开源 VLM 的模型卡,找出它的 patch 大小和视觉 token 合并方式,验证本章公式的参数取值。

检查题

  1. 用视觉 token 公式估算 512×512 和 1024×1024 输入的 token 数,说明分辨率对 prefill 成本的影响是几倍量级。
  2. VLM 三个组件(vision encoder、projector、LLM)中,为什么 projector 最不建议激进量化?
  3. Agent 工具白名单中 run_shell 被设为 blocked。从权限边界角度说明理由,并给出允许它的最小安全条件。

实验题

  1. llama-mtmd-cli 跑通一次本地 VLM 推理,从启动日志记录视觉 token 数、首 token 延迟和总耗时,与等长纯文本 prompt 对比。
  2. 用案例模板拆解一个你身边的 VLM 或 Agent 场景,标注端侧/云端分工、延迟预算和工具权限表。

参考资料

本章吸收方式: