一、引言:具身智能的\”安卓时刻\”
2026年WAIC现场,腾讯Robotics X与混元团队围绕Tairos平台,一口气开源了三套具身智能模型——Hy-Embodied-VLM-1.0(30B多模态视觉语言模型)、Hy-Embodied-RxBrain-1.0(62B世界模型)和Hy-Embodied-VLA-0.5(视觉语言动作模型),分别对应机器人的\”看懂、想象、行动\”三阶段。
这是全球首次由一个团队在同一技术框架下,同时开源感知、规划、执行三层的具身智能基础模型。如果把机器人行业比作智能手机时代,硬件公司负责造不同形态的\”手机\”,腾讯试图提供一套可以跨设备运行的\”通用智能软件栈\”——这可能是具身智能领域的\”安卓时刻\”。
本文深度解析三模型的架构设计、技术实现、代码实现细节和产业意义。
二、三模型架构全景
2.1 分层解耦的工程哲学
腾讯的拆法非常直接:VLM负责看,RxBrain负责想,VLA负责做。这套划分并非严格的神经科学结构,但极其适合工程落地:
┌──────────────────────────────────────────────────────────────┐
│ Tairos 具身智能平台 │
├──────────────────────────────────────────────────────────────┤
│ ┌─────────────────────┐ ┌───────┐ ┌─────────────────────┐ │
│ │ Hy-Embodied-VLM-1.0 │ │Tairos │ │ Hy-Embodied-VLA-0.5 │ │
│ │ 30B MoE 视觉语言 │ │ 框架 │ │ VLA 动作执行模型 │ │
│ │ 感知层 \”右脑\” │ │ 调度 │ │ 执行层 \”小脑\” │ │
│ └─────────┬───────────┘ └───┬───┘ └──────────┬──────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Hy-Embodied-RxBrain-1.0 62B 世界模型 │ │
│ │ 规划层 \”大脑\” — 语言推理+视觉预测 │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ 数据栈: 5万小时具身数据 + 1万小时UMI操作数据 │
│ 跨本体适配: 越疆/节卡/宇树/星尘/智元等 │
└──────────────────────────────────────────────────────────────┘
2.2 为什么需要三层分离?
一个语言模型可以告诉你\”杯子通常放在桌上\”,但机器人面对真实世界需要回答:
- 杯子离桌边还有多远?
- 杯柄朝哪?
- 手臂伸过去会不会撞到旁边的碗?
- 抓起来以后,水会不会洒?
这就是具身智能与聊天机器人的分水岭——前者的推理落在物理世界中,必须面对重力、摩擦、遮挡、碰撞、延迟和失败。将感知、规划、执行解耦成独立模型,每一层都可以被单独优化、替换、升级。
三、Hy-Embodied-VLM-1.0:30B的\”右脑\”
3.1 架构设计
Hy-Embodied-VLM-1.0是一套面向机器人场景的视觉语言模型,总参数约300亿,采用MoE混合专家架构,每个Token只激活约30亿参数。
// VLMConfig VLM配置
type VLMConfig struct {
TotalParams int // 总参数量 30B
ActiveParams int // 每Token激活参数 3B
NumExperts int // 专家数 8
TopKExperts int // Top-K 2
VisionEncoder string // 视觉编码器 \”SigLIP-G/14\”
ImageSize int // 输入图像尺寸 448
NumVisionTokens int // 视觉Token数 256
TextVocabSize int // 文本词表 128000
TextHiddenDim int // 文本隐藏维度 4096
}
// EmbodiedVLM 具身视觉语言模型
type EmbodiedVLM struct {
Config VLMConfig
VisionEnc *SigLIPEncoder // 视觉编码器
VisualProj *VisualProjection // 视觉投影到文本空间
TextEmb *TokenEmbedding // 文本嵌入
MoELayers []*MoETransformerLayer // MoE层
OutputHead *LMHead
}
// VisualProjection 视觉投影 — 将视觉Token映射到文本嵌入空间
type VisualProjection struct {
Linear *DenseLayer
LayerNorm *LayerNorm
PositionID *PositionEmbedding
}
func (v *VisualProjection) Forward(visualTokens [][]float32) [][]float32 {
// 1. 线性投影到文本空间
projected := v.Linear.Forward(visualTokens)
// 2. 层归一化
normalized := v.LayerNorm.Forward(projected)
// 3. 添加位置编码(区分不同视觉区域)
posEmbedded := v.PositionID.Forward(normalized)
return posEmbedded
}
// MoETransformerLayer MoE Transformer层
type MoETransformerLayer struct {
Attention *MultiHeadAttention
AttnNorm *LayerNorm
// MoE路由
Router *MoERouter
// 专家FFN
Experts []*FeedForward
SharedExpert *FeedForward
OutputNorm *LayerNorm
}
// MoERouter MoE路由
type MoERouter struct {
Weights [][]float32 // [hidden_dim, num_experts]
TopK int // 选择Top-K个专家
NoiseScale float32 // 训练时加噪
}
func (r *MoERouter) Route(hidden [][]float32) ([][]int, [][]float32) {
batchSize := len(hidden)
seqLen := len(hidden[0])
expertIndices := make([][]int, batchSize)
expertWeights := make([][]float32, batchSize)
for b := 0; b < batchSize; b++ {
for s := 0; s < seqLen; s++ {
// 计算路由分数
logits := matVecMul(hidden[b][s], r.Weights)
// 训练时加噪(鼓励探索)
if r.NoiseScale > 0 {
noise := make([]float32, len(logits))
for i := range noise {
noise[i] = float32(rand.NormFloat64() * float64(r.NoiseScale))
}
logits = add(logits, noise)
}
// 选择Top-K专家
type expertScore struct {
idx int
score float32
}
ranked := make([]expertScore, len(logits))
for i, s := range logits {
ranked[i] = expertScore{
idx: i, score: s}
}
sort.Slice(ranked, func(i, j int) bool {
return ranked[i].score > ranked[j].score
})
indices := make([]int, r.TopK)
weights := make([

