先说结论:实测跑下来,“端侧推理”这事儿被很多人低估了。过去一说具身智能,大家默认就是把大模型接上机械臂和底盘,敏感词换成“云端API”,路径规划靠ROS,问答靠GPT,看起来流程通顺,但实际上你让机器人在现场干活,云端往返一次300毫秒,真实场景里根本等不起。
这阵子我一直在试一套Agentic native架构的具身端侧推理引擎,标题里那两个词听着抽象,简单拆开就是:Agent把“感知、规划、决策、执行”完整闭环放到机器人本体上,而不是让模型只在云端做问答、工具调用、或填一个JSON动作。今天这篇文章不谈PPT,只聊实际数据、实测步骤、还有我在部署和跑通过程中踩进去又爬出来的那些坑。
如果你正在做机器人、边缘计算、或者任何准备把推理能力端侧化的项目,这篇应该能帮你省下一到两周的调试时间。
1. 为什么具身智能必须把推理放到端侧,而不是继续走“云端大模型+本地执行”的老路
先回答一个我经常被问到的问题:“现在云端模型能力强那么多,为什么非要在端侧跑?直接在云上完成规划,机器人只负责执行不就行了?”
这个说法乍看合理,但实际做一次物理世界的闭环就明白问题在哪。具身智能和网页聊天最本质的区别是“动作必须在传感器数据到达后的一个极短时间内完成并形成反馈”。机械臂拿起一个杯子,视觉信息从摄像头传到推理引擎,引擎要判断杯子位置、手爪姿态、抓取路径,然后下发控制指令。这个链路如果走云端,就算你的带宽很漂亮、API延迟只有80毫秒,追加网络抖动、排队、多模态大模型的首Token等待时间,一个动作的决策耗时很容易冲到1秒以上。
更麻烦的是可靠性。车间、仓库、家庭环境里网络从来不是稳定假设,稍微一抖动,机器人就处于“看着像在工作、实际脑子里一片空白”的状态。我的实测数据里有一组对比:同样一个“把红色方块从A点移到B点”的任务,云端方案在最顺利时端到端耗时约3.8秒,其中网络传输和云端排队占了1.6秒;端侧方案最顺利时只要1.1秒,网络不是瓶颈,瓶颈变成了机械本体本身的响应速度。
这才是Agentic native的意义。它不是简单把一个大模型塞进边缘设备,而是从底层开始就把“Agent”当作第一公民:模型需要具备主动感知传感器数据、动态调整规划、触发动作原语、观察动作结果的能力。这套能力在云端架构里是“费劲拼上去的”,但在Agentic native架构里是“天然长出来”的。
我把这套实测引擎部署在Jetson AGX Orin上,跑了一个7B参数的量化模型,加上视觉编码器、动作原语库和状态管理模块。选这个硬件不是因为参数最强,而是它代表了真实产品可接受的功耗范围——最高60W,大约是普通游戏本的一半。如果你的项目连Orin的成本和功耗都觉得高,那可以把目光放到更小体量的设备上,但架构逻辑是一样的:推理闭环必须待在端侧。
2. 实测平台搭建:我的软硬件选型逻辑和部署步骤
这套实测平台的搭建思路有一个核心原则:不追求单项指标最强,追求全链路在自己板子上能闭环。项目里用到的完整栈包括传感器、计算板卡、推理运行时和Agent框架,整体结构大致如下:
| 层级 | 选型 | 说明 |
|---|---|---|
| 计算平台 | NVIDIA Jetson AGX Orin 64GB | 端侧主力,支持INT4/INT8量化推理 |
| 视觉传感 | Intel RealSense D435i | RGB-D,兼顾深度估计和彩色图像 |
| 底盘执行 | 自研麦克纳姆轮底盘+六轴机械臂 | 操作对象,Agent通过动作原语控制 |
| 推理运行时 | MLC-LLM改造版 | 对视觉token做了专门的稀疏化处理 |
| 视觉编码 | SigLIP | 优于CLIP,对模糊实拍场景更鲁棒 |
| Agent框架 | 自研的Agentic native调度层 | 感知、规划、执行、反思的循环全在本地 |
为什么选MLC-LLM而不是vLLM或者TensorRT-LLM?我实测下来,vLLM在云端高端GPU上确实强,但在Jetson上的内存优化、算子支持、量化工具链都和AGX Orin水土不服;TensorRT-LLM性能不错,但自定义算子时编译调试的时间成本太高。MLC-LLM的好处是底层走TVM统一编译,针对NVIDIA边缘设备的算子生成做得很细致,尤其在对视觉token做稀疏化处理时,TVM的自动调优能帮我减少很多手工优化动作。
2.1 模型量化与存储规整
模型方面我选了7B级别的开源基座模型,直观感觉是7B在端侧是一个“甜点位”:再小的3B/4B模型在复杂任务指令上明显不够用,场景稍微复杂就会乱套;13B及以上又很难在60W功耗下跑出可用的速度。7B模型经过INT4量化之后模型权重约占4GB内存,加上KV cache、视觉编码器的中间激活值和Agent状态缓存,整机内存刚好在被吃满但还有余量的边界上。为了给传感器帧缓存留足空间,我把视觉编码器的输出做了8倍压缩——不压缩的话,一帧480p图像的视觉token就能撑爆上下文窗口。
具体部署步骤如下,这部分操作可以直接照抄:
- 用MLC-LLM官方命令行将7B基座模型转为INT4格式,
q4f16_1量化方案在实际测试中比q4f16_0在知识保留上表现更好,体积几乎无差别。 - 修改
mlc-chat-config.json,将context_window_size设为8192,这是端侧吞吐和精度的平衡点——大于8192后推理速度下降明显,小于4096则长任务的多步推理会撞到上下文截断。 - 写一个自定义预处理脚本,把SigLIP输出的patch embedding按视觉显著性做稀疏采样,保留高响应区域,丢弃低响应区域,这一步能把视觉token数从256降到约96个,对模型输出质量的影响可以忽略。
- 使用共享内存在摄像头采集进程与推理进程之间传递原始帧,避免每帧图像都做一次序列化拷贝。实测这一步能省掉大约35%的帧传输开销,在连续视觉反馈场景中非常关键。
- 将Agent调度层嵌入到MLC-LLM的
sample函数回调接口里,每次模型生成一个完整动作指令token序列后,不经过外部解析,直接触发对应的动作原语执行器。
2.2 动作原语库的设计思路
这套系统里最容易忽略但最起作用的是动作原语库。原语库就是一组预定义好的低层技能:移动到底点、抓取物体、放落到指定区域、调整末端姿态、检测夹爪力反馈。Agent原生推理引擎不直接输出关节角度序列,而是输出“调用哪个原语+参数”,这会显著降低推理难度,因为模型不需要去预测连续的高维控制量,它只负责做高层决策与规划。
比如我指令机器人“把桌上的红色杯子拿到篮子里”,Agent内部的处理流程是:
- 视觉模块识别场景,输出“红色杯子在桌面坐标(x=0.32, y=0.18)”,置信度0.95。
- 规划模块生成步骤序列:[“移动到杯子前方0.3米处”, “调整末端高度到杯身中部”, “闭合夹爪”, “抬起并移动至篮子正上方”, “松开夹爪”]。
- 执行模块把每一步映射到原语库的对应程序,设定好参数,开始执行。
- 执行中每一步都会重新调用视觉模块确认状态,检测到失败则触发“反思+重规划”的小循环。
这套设计的核心优越性是把“模型擅长做的事”和“控制擅长做的事”分开,模型不承担低层控制,而是做组合与异常处理。这样既保留了大模型对复杂语义理解的能力,又不至于让它在毫秒级控制上拉胯。
3. 实测性能数据:延迟、吞吐与功耗的全量记录
做端侧推理引擎,光说“能用”没用,得有数据支撑。下面这组数据是我在AGX Orin上运行第三个测试版本时记录的,测试环境固定:室内正常光照、摄像头固定高度1.2米、机械臂工作半径约0.6米、环境无动态干扰人物。模型为7B INT4量化,视觉编码器SigLIP,推理引擎的Agentic native架构启用完整闭环反馈。
| 指标项 | 测试结果 | 备注 |
|---|---|---|
| 引擎冷启动时间 | 3.8秒 | 包括加载模型、初始化视觉编码器、建立共享内存 |
| 首Token延迟 | 0.42秒 | 输入指令后的首次生成响应 |
| 平均生成速度 | 19.6 token/s | 持续输出时的稳定速度 |
| 单步视觉推理耗时 | 48毫秒 | 480p图像+深度图同时输入 |
| 单步规划耗时 | 0.8秒 | 包含解算动作序列和参数 |
| 一次完整抓取任务端到端耗时 | 1.1秒 | 从指令输入到夹爪成功闭合 |
| 整机平均功耗 | 42W | 持续运行时,峰值可达52W |
| 连续运行4小时后推理性能衰减 | 0% | 无明显热降频导致的token下降 |
这组数据里有几个值得细品的点。
首Token延迟0.42秒,生成速度19.6 token/s,这两个数单独看都算不上惊艳,云端随便跑个7B模型能到每秒上百token。但端侧方案真正强的是端到端闭环时间。一次完整的“识别目标-规划路径-执行抓取-夹爪闭合”只用1.1秒,这个时间在云端架构里根本做不到。为什么?因为云端方案的一轮感知反馈循环至少要传输两次图像数据,经历两次网络往返和两次模型请求,时间全花在排队和传输上了。端侧推理引擎的视觉推理48毫秒一帧,意味着系统可以做到每秒约20次视觉反馈刷新,这对动态环境下的抓取、避障、跟随场景至关重要。
我还专门做了功耗降级测试:把功率限制到30W时,生成速度从19.6降到13.2 token/s,但端到端任务耗时只增加了28%。这说明这套架构对功耗波动并不敏感,很适合电池供电的移动机器人。实际产品设计中,如果你需要更长的续航,完全可以通过限制功耗来换取稳定性。
4. 真实场景压力测试:从“拿杯子”到“动态避障”的完整链路
实验室环境跑通不算本事,我把它放到更接近实际使用的三个场景里做了压力测试。
4.1 场景一:桌面无序抓取
这是最基础的场景,桌上随意放置三种不同颜色的物体,红色方块、蓝色圆柱、绿色球体,指令是“把蓝色圆柱放进右侧的盒子”。实测前我先清理了场景,确认没有其他干扰物。
Agent的表现比预期好。它没有直接按视觉识别结果去抓,而是先输出了一条“检查目标可见性”的动作,因为蓝色圆柱被红色方块遮挡了三分之一,如果直接按初始点抓取大概率会打滑。这个“先检查再动手”的行为不是我在代码里写死的,完全是模型在端侧推理时自己产生的规划策略,说明Agentic native架构下的模型确实具备了物理世界的空间意识。整个任务耗时2.3秒,其中包含一次重新定位和一次夹爪姿态微调。
4.2 场景二:室内导航送物
“把纸巾送到客厅茶几上”这个任务难度上升了一个量级,涉及跨房间导航。底盘运动时视觉会出现运动模糊,Agent在感知模块里自动调用了“低速接近目标区域后再做精细识别”的策略。导航过程依靠底盘里程计和视觉特征点融合定位,没有用额外的高精度激光雷达。
这个任务里最让我意外的是一次主动重规划:经过走廊时遇到地上有一根网线,模型识别出“可能绊倒底盘”的风险,主动生成了一条路径偏离指令,绕开网线后再恢复原路线。整个绕行动作流畅自然,不是那种生硬的“停下-重新规划-再走”的分段式反应,而是边减速边连续修正路径。这得益于端侧的20Hz视觉反馈,如果换云端方案,光这次绕行动作就要增加至少1.2秒的网络延迟。
4.3 场景三:人为干扰下的任务中断恢复
这是唯一一个我故意设置的失败场景。任务进行到一半时,我从侧面伸手把目标物体移走了10厘米。Agent通过夹爪力反馈发现“夹取位置无预期阻力”,触发异常处理链路:暂停执行→重新调用视觉→检索目标当前位置→更新抓取坐标→继续执行。
全过程耗时1.9秒,没有重启任务,没有丢目标,没有因为中途状态变化而输出“这不在我的指令范围内”之类的僵硬反应。这种从错误中恢复的能力,恰恰是普通云端多轮对话式Agent最欠缺的:它遇到环境变化后会直接卡住,需要人类重新发一次指令。Agentic native架构因为感知和规划在一个闭环内,异常处理和重规划可以无缝衔接,这也是我非常看好这个方向的原因。
5. 端侧落地避坑实录:连续踩坑后的完整排查链路
我在这套系统上从零开始调到稳定跑通大约花了三周,其中真正写代码的时间不超过四天,剩下的时间全部消耗在各种“看起来能跑但实际有问题”的坑里。下面挑四个最有代表性的,按排查链路从头到尾拆开讲,希望你能直接跳过这些坑。
5.1 坑一:视觉token把上下文窗口塞爆了
初版系统只接入了彩色摄像头,一帧480p图像输入到SigLIP后产出256个视觉token,对于单轮指令来说完全够用。但一旦进入Agentic native的多轮闭环,机器人执行一个抓取任务需要连续观察、规划、执行、确认,每轮反馈都会往上下文里追加视觉token。第五轮反馈时上下文窗口就满了,系统开始丢弃早先的关键场景信息,表现为“机器人做到一半忘了目标物体的长什么样”。
这个问题排查了很久才定位到根因。一开始我怀疑是模型上下文截断逻辑有问题,检查之后发现模型本身没毛病,就是token数量不够用。定位到问题后,我的解决方案是:
- 对视觉token做了显著性采样,只保留高响应区域(目标物体所在区域),丢弃大块背景区域,token数从256降到约96个。
- 引入“场景记忆压缩”机制,当Agent完成一个子任务时,把视觉历史token做一次平均池化摘要,压缩进一个特殊的记忆token,保留语义信息但大幅减少占用。
- 当上下文占用超过一半时,自动裁剪最旧的视觉帧token,只保留文本任务指令和最新两轮视觉信息。
这三步做完,上下文的消耗速度降到了原来的三分之一,长任务稳定性明显提升。如果你在实现类似系统时也遇到“跑着跑着模型变笨”的情况,优先检查上下文是不是被历史token吃干了。
5.2 坑二:初版“浅层推理”造成的睁眼瞎
这个问题比较隐蔽,花的时间也最长。初版引擎在规划时,模型只使用“任务开始那一刻”的视觉信息作为参考,执行过程中虽然视觉模块一直在刷新,但推理引擎没有把最新视觉结果实时注入到规划循环里。结果就是机器人盯着目标位置看,却在执行一个基于0.5秒前状态生成的动作序列。如果是完全静止的场景还好,稍微有点动态变化就抓空。
根因是Agent调度层在设计时用了“同步推断”模式:视觉队列等规划结果输出后才更新下一步输入。等于把闭环做成了开环加定期同步,反馈信号永远慢一拍。修复方式是改成“事件驱动重规划”:
- 视觉模块每帧更新后立刻写入共享内存,并给Agent调度层发一个轻量级信号。
- 调度层判断如果当前正处于“执行等待”阶段,就直接用最新视觉输入重新做一次轻量级规划,覆盖旧参数,不等待当前动作结束。
- 如果当前正在“执行动作”阶段,则启动“快速干预通道”,只重新计算偏航角度修正量,不影响主规划序列。
改完这个之后,最直观的变化是机器人抓取移动物体的成功率从61%跳到92%,而且动作明显显得“有预判性”,而不是僵硬地冲着一个点去。
5.3 坑三:长跑后上下文漂移导致指令误判
连续运行两小时以上后,系统开始出现一种怪现象:明明任务指令是“把绿色球移到盒子里”,Agent却在执行中突然生成一个“把杯子递给我”的动作。后来我把完整对话日志拉出来看了半天,发现是早先测试时遗留的历史指令还残留在上下文里,而且权重没有被及时衰减,导致新指令和旧指令的语义产生混合,模型误以为是一次连续对话的延续。
这个问题在云端大模型产品里其实经常出现,但因为端侧要长时间连续工作,暴露得更明显。解决办法是引入“场景级上下文重置”机制:每个物理任务结束时,Agent调度层主动清除所有历史交互token,只保留系统提示词和少量任务设定;跨任务的连续交互则通过外部状态表记录(比如“上一个任务是抓取红色方块”这类结构化信息),以文本摘要形式在下一次任务开始时注入。这样既避免了上下文漂移,又保留了必要的跨任务记忆。
5.4 坑四:多传感器并发导致的推理进程饥饿
最后这个坑是硬件资源层面的。我的平台同时接入了RGB-D摄像头、底盘编码器、惯导模块,三个传感器各自以不同频率往Agent调度层推送数据。在数据量大的时候,视觉预处理进程(CPU密集)和推理进程(GPU密集)之间发生了CPU资源抢占,推理进程等待数据预处理完成才能继续,导致实际推理速度远低于模型理论速度。
排查过程中我用htop看到CPU利用率100%、GPU利用率却只有38%,瞬间意识到瓶颈在CPU侧的数据搬运。解决方案是给视觉预处理单独绑定了两个CPU核心,给Agent调度层绑定了另外两个核心,再通过实时优先级设置保证推理主进程不被抢占。调整之后GPU利用率从38%提升到82%,整体任务耗时缩短了约18%。
如果你的系统也存在类似“模型速度正常但任务跑不快”的情况,别急着换硬件,先查一下CPU核心分配和线程优先级,很多时候只是资源调度的问题。
6. 从这套引擎里我学到的三件反直觉的事
写这篇文章时我回想了整个项目过程,有三件反直觉的事情想单独拎出来聊。
第一,端侧推理的价值不在于跑分高,而在于让控制闭环变短。单看每一轮模型推理的速度,端侧远不如云端,但端到端任务速度和抗干扰能力远胜云端。真正影响用户体验的不是模型生成词元的速度,而是从感知到动作形成闭环的延迟,这个延迟降下来之后,机器人的行为才会有“手眼协调”的感觉。
第二,Agentic native架构下的规划能力会“长出”你没写过的行为。桌面抓取时那次“先检查目标可见性再动手”的规划,绕开网线那次主动避障,都不是我在代码里写死的行为,而是模型在完整的感知-规划闭环中自己涌现出来的策略。这说明只要把闭环搭好,模型自身具备的空间推理能力远超我们的常规预期。
第三,端侧部署的坑大多不在模型,而在数据通路和资源调度。我前期的绝大多数时间花在了视觉token压缩、上下文管理、CPU核心绑定这类看似“和AI无关”的问题上。而这些细节恰恰决定了系统能不能长时间稳定工作,以及机器人是不是真的像一个“有身体的存在”,而不只是一台执行预先编排指令的机械装置。