快速摘要: LongCat-Next 是美团龙猫团队最新开源的原生离散多模态模型,总参数量 68.5B,每次推理仅激活约 3B 参数。它的核心创新在于提出了 DiNA(离散原生自回归)范式和 dNaViT(离散原生任意分辨率视觉 Transformer)两大关键技术,将文字、图像和语音三种信号统一编码为离散 Token,然后用同一套"预测下一个 Token"的自回归逻辑来处理所有任务。 在多项权威测试中,LongCat-Next 的文档理解能力超越了多个主流模型,图像文字渲染得分 93.15(对比 FLUX.1-dev 的 60.7),语音推理测试 ReasoningQA 拿下 87.52 分排名第一。整个项目基于 MIT 协议开源,代码、模型权重和分词器均可免费获取。如果你对多模态模型的底层逻辑感兴趣,或者正在寻找一个工业级的全模态解决方案,往下看有更详细的原理拆解和上手教程。
本文由 莫潇羽@源码七号站 原创撰写,转载请注明出处:www.fuyuan7.com
一、为什么多模态模型需要"原生统一"
过去两年,多模态大模型快速迭代,从最初只能处理文字,到后来能看图、能画图、能进行语音对话,能力边界不断扩展。但如果你深入去看这些模型的底层架构,就会发现一个普遍存在的问题——绝大多数所谓的"多模态模型",本质上还是一个语言模型作为主干骨架,然后把视觉模块和语音模块当作外挂组件拼接上去。
这种"拼接式"架构带来的弊端非常直观。语言模型的训练目标是预测下一个文字 Token,视觉模块的目标可能是对齐图文语义,语音模块则关注声学特征的还原。三个模块各有各的优化方向,训练的时候互相拉扯、互相妥协,最终的效果往往是"什么都能做一点,但什么都做不到顶尖"。
举一个更具体的例子来帮助理解:假设你要训练一个既能"看懂图"又能"画出图"的模型。在传统架构下,看图(理解)需要一个视觉编码器把图像信息送进语言模型,画图(生成)则需要一个独立的扩散模型或者解码器。两个方向的数据格式不同、损失函数不同、梯度更新方向也不同,硬塞进一个框架里训练,双方的性能几乎必然会互相拖累。
正是在这样的背景下,美团龙猫团队提出了一个从根本上不同的思路:与其让不同模态的模块勉强共存,不如从一开始就把所有模态的信号变成同一种东西——离散 Token。一旦图像和语音也变成了跟文字一样的 Token 序列,那么整个模型就只需要做一件事:预测下一个 Token。这就是 LongCat-Next 的核心哲学。
莫潇羽在研究这个项目的时候,第一反应就是想到了语言本身的演化过程。中文、英文、日文看起来完全不同,但它们都能被 Unicode 编码成统一的数字序列,计算机处理起来就没有任何区别。LongCat-Next 对多模态信号做的事情,本质上和 Unicode 对自然语言做的事情是一样的——找到一套通用的编码规则,让不同类型的信号在模型内部变成"同一种语言"。
二、LongCat-Next 是什么:一句话概括
LongCat-Next 是美团龙猫团队开源的一个原生离散多模态基础模型。它基于 LongCat-Flash-Lite 这个 MoE(混合专家)架构作为语言骨干网络,总参数量约 68.5B(685 亿),但由于采用了稀疏激活策略,每次推理时实际激活的参数仅约 3B(30 亿)。在这个骨干网络之上,LongCat-Next 通过自研的 DiNA 范式,将文字、图像和语音三种模态的信号全部转化为离散 Token,然后在统一的自回归框架下完成理解和生成。
用一句话来概括就是:LongCat-Next 把"看图"、"画图"、"听声音"、"说话"这些看似完全不同的任务,全部简化为了"预测下一个 Token 是什么"这一个操作。
这个模型在 2026 年 3 月底正式开源,采用 MIT 许可协议发布,代码、模型权重、分词器(Tokenizer)以及完整的技术报告都可以在 GitHub 和 Hugging Face 上免费获取。
三、技术架构全拆解:DiNA 范式到底做了什么
3.1 DiNA:离散原生自回归范式
DiNA 的全称是 Discrete Native Autoregression,即"离散原生自回归"。理解这个名字需要先理解三个关键词:
"离散"是指信号的表示方式。在计算机里,文字天然就是离散的——每个汉字、每个英文单词都可以映射到词表中的一个编号。但图像和语音不是这样的,它们在物理世界中是连续信号。传统做法是用连续向量来表示图像特征(比如 ViT 编码器输出的 embedding),但这种表示方式跟语言模型的离散 Token 不兼容。DiNA 的核心思路是把图像和语音也编码为离散的 Token ID,就像文字一样。
"原生"是指这种多模态能力不是后天拼接的。不同于先训好一个语言模型、再外挂视觉模块的做法,DiNA 从架构设计阶段就把三种模态放在同一个框架里考虑。每种模态都有自己配套的分词器(Tokenizer)和反分词器(Detokenizer),但它们输出的 Token 都在同一个离散空间里,模型处理起来没有任何区别。
"自回归"是指模型的工作方式。和 GPT 系列一样,模型从左到右逐个预测下一个 Token,无论当前正在处理的是文字、图像还是语音。这意味着看一张图片的过程,就是把图片转换成一串离散 Token 之后,模型用同样的 next-token-prediction 机制来理解它们的含义;生成一张图片的过程,就是模型自回归地一个接一个产出视觉 Token,然后再由反分词器把这些 Token 还原成像素。
DiNA 范式带来的最大好处是架构极度简化。传统多模态模型需要为不同模态设计不同的编码器、不同的损失函数、不同的训练策略,而在 DiNA 框架下,所有模态共享同一个 Transformer 骨干网络、同一个训练目标(交叉熵损失)、同一套训练基础设施。这使得语言模型领域积累了多年的训练方法论和工程优化经验可以直接复用到图像和语音领域。
从工程实现的角度来看,DiNA 范式的简化效果是非常显著的。在传统的多模态训练流程中,视觉模块和语言模块往往需要分阶段训练——先预训练视觉编码器,再对齐视觉编码器和语言模型,最后再进行指令微调。每个阶段的超参数、学习率策略、数据配比都需要精心调优,工程复杂度非常高。而在 DiNA 框架下,由于所有模态都变成了统一的离散 Token,整个训练流程可以按照标准的语言模型训练范式来走——预训练阶段混合不同模态的 Token 序列进行 next-token-prediction 训练,微调阶段使用多模态对话数据进行指令对齐。不需要为不同模态设计不同的训练阶段,大大降低了研发成本和调试难度。
此外,DiNA 的"一切皆 Token"理念还为后续扩展到更多模态提供了天然的接口。假设未来需要增加对视频、3D 点云或者其他类型信号的支持,只需要设计对应的分词器和反分词器即可,骨干网络和训练流程完全不需要改动。这种极强的可扩展性,是 DiNA 相较于传统架构的另一个重要优势。
3.2 理解与生成的统一:对称预测问题
在大多数多模态模型中,"理解"和"生成"是两个分开处理的任务。比如看图回答问题(理解)和根据文字描述生成图片(生成),通常需要不同的模块来完成。人们普遍担心,把理解和生成塞进同一个模型里,两边会互相拖累,导致两边都做不好。
但 LongCat-Next 的实验数据给出了一个反直觉的结论。根据技术报告中的消融实验,当把视觉理解和视觉生成放在一起训练时,理解方向的损失仅仅增加了 0.006,而生成方向的损失反而降低了 0.02。这意味着两个方向不仅没有互相拖累,反而产生了正向的协同效应。
为什么会这样?技术报告给出的解释是:看图学到的"图像语义"和生图需要的"语义还原",本质上是同一件事的正反两面。理解是从图像 Token 到语义的映射,生成是从语义到图像 Token 的映射。当两个方向同时训练时,模型对"图像 Token 与语义之间的对应关系"理解得更加深刻,于是两个方向都受益了。这就好比一个翻译官同时练习中译英和英译中,两个方向的练习会互相促进,因为它们锻炼的是同一种双语理解能力。这个发现打破了之前学界对"多任务训练必然带来负迁移"的刻板印象,证明了只要任务之间的关系设计合理,统一训练反而可以产生正向的协同增益。
莫潇羽@源码七号站认为这是一个非常精妙的设计洞察。在 DiNA 框架下,理解和生成被重新定义为同一个预测问题的两种表现形式——理解是给定图像 Token 预测文字 Token,生成是给定文字 Token 预测图像 Token——它们共享同一套预测机制,只是方向不同。
3.3 dNaViT:让图像"说人话"的视觉分词器
如果说 DiNA 是 LongCat-Next 的整体设计哲学,那么 dNaViT(Discrete Native Any-resolution Vision Transformer,离散原生任意分辨率视觉 Transformer)就是让这套哲学在视觉领域落地的关键技术。
文字天生就是离散的,语音领域也早就有了成熟的离散化方案(比如各种音频编解码器)。但图像不一样——一张图包含的信息量巨大,如何在不丢失太多细节的前提下将其压缩为离散 Token,一直是多模态统一建模的最大难题。
dNaViT 的设计思路可以分为三个层面来理解:
第一层:语义完备的编码。 dNaViT 引入了一个叫做 SAE(Semantic-and-Aligned Encoder,语义对齐编码器)的组件。通过海量的图文配对数据进行训练,这个编码器能够把一张图像转换为富含语义信息的特征表示。通俗地说,模型看到一张猫的图片时,脑子里浮现的不是一堆像素数值,而是"这是一只猫,它在草地上,毛色是橘色的"这样的语义理解。这里的关键词是"语义完备"——编码器输出的特征不仅包含高层语义(比如"这是一只猫"),还通过内部的残差结构保留了底层视觉细节(比如猫毛的纹理),不需要额外的像素级训练就能同时支撑理解和重建。
第二层:分层离散化。 有了语义完备的连续特征之后,dNaViT 使用 RVQ(Residual Vector Quantization,残差向量量化)技术将其转换为离散 Token。RVQ 的核心思想是分层压缩:第一层量化捕获最重要的语义信息,然后计算残差(原始信号与第一层量化结果的差值),第二层量化再捕获残差中的信息,以此类推。dNaViT 使用了 8 层 RVQ,最终达到了 28 倍的压缩比。这意味着一张原始图像经过 dNaViT 处理后,其 Token 数量只有原来的 1/28 左右,极大地减轻了语言模型的处理负担。
第三层:任意分辨率支持。 传统的视觉分词器通常需要把输入图像缩放到固定尺寸(比如 224×224 或 512×512),这个过程不可避免地会造成信息损失或变形。dNaViT 支持原生任意分辨率的处理——不缩放、不裁剪,直接对原始尺寸的图像进行分词。在还原阶段,dNaViT 的解分词器采用了一种"先稳布局再补纹理"的策略,确保输出图像的整体结构正确,然后逐步填充细节。
这套设计的效果非常显著。在图片文字渲染测试 LongText-EN 中,LongCat-Next 拿到了 93.15 分,而专门做文生图的 FLUX.1-dev 只有 60.7 分。在文档理解测试 OmniDocBench-EN 中,LongCat-Next 的得分也展现出了极强的竞争力,超过了多个以纯视觉理解为主打的专项模型。
为了帮助大家更直观地理解 dNaViT 的工作流程,莫潇羽@源码七号站在这里做一个简化的描述:
想象你要把一幅风景画变成一段文字描述,以便将来可以从这段描述还原出画作。一个笨办法是把每一个像素的颜色值都记录下来——这样信息不会丢失,但记录量巨大。一个聪明的办法是先描述画面的整体构图("远处有群山,近处有湖泊,天上有云彩"),然后补充关键细节("山是青绿色的,湖面有倒影"),最后再精修纹理("远处的树木枝叶模糊,近处的水波纹清晰")。dNaViT 的 8 层 RVQ 就是在做类似的事情——第一层记录最宏观的语义结构,后续各层依次补充越来越精细的视觉细节。
另一个值得注意的设计选择是 dNaViT 对"原生分辨率"的坚持。在计算机视觉领域,绝大部分模型都需要把输入图片统一缩放到固定尺寸(比如 ViT 常用的 224×224 或 384×384),这对于自然图片来说损失不大,但对于文档图片、截图、表格等需要精确识别文字的场景来说,缩放带来的信息损失是致命的。dNaViT 直接在原始分辨率上进行分词,完全避免了缩放导致的信息损失,这也是 LongCat-Next 在文档理解任务上表现优异的重要原因之一。
3.4 语音模态的处理:分层压缩与双模式生成
LongCat-Next 对语音模态的处理思路与图像类似,同样遵循"连续信号 → 特征提取 → 分层离散化 → 统一自回归"的流程。
具体而言,语音信号首先通过音频编解码器(基于团队之前开源的 LongCat-Audio-Codec 技术)转换为多层离散 Token。这些 Token 同时保留了两类信息:一类是语义内容(说了什么话),另一类是声学特征(用什么语气、什么口音说的)。这种双重信息的保留,使得 LongCat-Next 生成的语音不仅内容准确,而且在语气、情感、停顿节奏等方面都表现得非常自然。
在语音生成方面,LongCat-Next 支持两种工作模式:
- 流式生成模式(Streaming Mode):模型一边思考一边输出语音 Token,实现低延迟的实时对话体验,适用于对响应速度要求较高的交互场景。
- 非流式生成模式(Non-streaming Mode):模型先完整生成文字内容,然后再将文字转化为语音输出,适用于对语音质量要求更高的场景。
这两种模式的设计背后有一个很有意思的工程权衡。流式模式的好处是用户不需要等待模型"想完"才能听到声音,对话体验更加流畅自然,类似于人类在对话时"边想边说"的模式。但代价是模型在说每一个字的时候,还没有看到后面的完整内容,所以在语调和节奏上可能不如非流式模式精确。非流式模式则正好相反——模型先把要说的内容全部想好,然后再统一转换为语音,整体的韵律和语调会更加连贯自然,但用户需要等待更长的时间才能开始听到声音。
除了合成标准普通话之外,LongCat-Next 还展现出了模拟地方口音的能力。这个能力得益于训练数据中包含了多样化的语音样本,以及音频分词器在离散化过程中同时保留了语义和声学两个层面的信息——声学特征中包含了说话人的口音、语速、音高变化等个性化信息,这些信息在离散化后被忠实地保留在 Token 序列中,从而使得模型能够学习并再现这些个性化特征。
值得一提的是,LongCat-Next 还具备语音克隆(Voice Cloning)的能力。给定一段目标说话人的参考音频,模型可以生成具有相同音色和说话风格的新语音内容。这个功能在虚拟数字人、个性化语音助手等场景中有着很大的应用价值。
在基准测试方面,LongCat-Next 在语音合成测试 SeedTTS 中达到了中文字错误率仅 1.90 的水平,在语音推理测试 ReasoningQA 中拿到了 87.52 分的成绩,位列测试排行榜首位。
3.5 MoE 骨干网络:用有限算力撑起全模态能力
LongCat-Next 的语言骨干网络采用的是 LongCat-Flash-Lite,这是美团龙猫团队此前开源的一个 MoE(Mixture-of-Experts,混合专家)模型。MoE 架构的核心思想是:模型内部有多个"专家"子网络,每次处理一个 Token 时,并不需要所有专家都参与计算,而是由一个路由机制动态选择最相关的几个专家来处理。
LongCat-Flash-Lite 的总参数量约为 68.5B,但每次推理时实际激活的参数仅约 2.9B 至 4.5B(取决于输入的复杂度),平均约 3B。这种稀疏激活的机制使得模型在保持大模型能力的同时,推理成本远低于同等参数量的稠密模型。
此外,LongCat-Flash-Lite 还集成了 N-gram Embedding 技术来提升推理效率。传统 MoE 模型在推理时的一个主要瓶颈是 I/O 开销——需要频繁加载和切换不同的专家网络。N-gram Embedding 将大量参数放在嵌入表中而非 FFN(前馈神经网络)专家中,从而有效缓解了 I/O 瓶颈,提升了推理吞吐量。
对于开发者来说,这意味着 LongCat-Next 虽然总参数量不小,但实际部署时的计算资源需求是可控的。根据官方文档,使用 3 张 80GB 显存的 GPU(如 H100 或 A100 80GB)即可运行 LongCat-Next 进行基本推理。
3.6 训练流程概述:从文本到全模态
LongCat-Next 的训练并不是从零开始一步到位的,而是遵循了一个渐进式的课程学习策略(Curriculum Learning)。理解这个训练流程,有助于你更好地把握模型各方面能力的来源。
整个训练过程可以分为几个主要阶段。首先,LongCat-Flash-Lite 作为骨干网络,在大规模纯文本数据上完成预训练,建立强大的语言基础能力。这一阶段使用了超过数万亿个文本 Token,涵盖了代码、数学、自然语言等多种类型的数据。在训练过程中,高质量推理数据(如 STEM 和代码相关内容)的比例会逐步提高,以增强模型的逻辑推理和编程能力。
有了扎实的语言基础之后,第二阶段开始引入多模态数据。视觉分词器 dNaViT 和音频分词器分别在各自的数据集上进行训练和对齐,确保它们输出的离散 Token 能够被骨干网络正确理解和处理。这个阶段的核心目标是让模型学会"读懂"新模态的 Token——就像一个已经会说中文和英文的人开始学习日语一样,需要建立新语言(新模态)的词汇和语法概念。
第三阶段是多模态联合训练。文字、图像和语音的 Token 序列被混合在一起,模型在统一的 next-token-prediction 目标下进行训练。这个阶段需要精心设计不同模态数据的混合比例——如果文本数据太少,语言能力会退化;如果视觉数据太少,图像理解和生成能力不够强。团队通过大量的消融实验找到了一个合理的平衡点。
最后是指令微调阶段,使用多模态对话数据对模型进行对齐训练,让模型学会按照用户的指令来完成各种多模态任务。这个阶段的数据质量至关重要——高质量的多模态对话数据直接决定了模型在实际使用中的"听话程度"和"做事准确度"。
整个训练流程中有一个特别值得关注的工程挑战:模态解耦并行训练(Modality-Decoupled Parallelism)。由于视觉编码器、音频编码器和语言模型骨干网络的计算模式完全不同(视觉处理是密集的矩阵运算,语言处理涉及稀疏的 MoE 路由),把它们混在一起用同一套并行策略来训练是非常低效的。团队设计了一种解耦方案——视觉和音频编码器使用混合分片(Hybrid Sharding)和激活重计算策略,语言模型使用流水线并行(Pipeline Parallelism)和专家并行(Expert Parallelism)策略,两者之间通过一个 ModalityBridge 组件来对齐嵌入和梯度。根据技术报告的数据,这套解耦方案在多模态监督微调阶段能够保持纯文本训练 90% 以上的吞吐量,工程效率非常出色。
四、性能数据总览:跟谁比、比什么、结果如何
空口无凭,下面我们通过几组关键的基准测试数据来看看 LongCat-Next 的实际表现。这里莫潇羽@源码七号站帮大家整理了一份清晰的数据对照:
4.1 视觉理解
在文档理解测试 OmniDocBench-EN 中,LongCat-Next 的得分为 0.152(该指标越低越好,代表错误率),而同级别的 Qwen3-VL 得分为 0.183。这意味着 LongCat-Next 作为一个全模态模型,在纯视觉理解任务上反而超过了部分以视觉为主打的专项模型。这一结果直接证明了 DiNA 范式下"理解与生成协同增强"的效果。
4.2 图像生成
在图片文字渲染测试 LongText-EN 中,LongCat-Next 得到了 93.15 分,而专门做文本到图像生成的 FLUX.1-dev 得分仅为 60.7。图像中的文字渲染一直是文生图模型的痛点之一——大多数模型生成的图像中,文字部分经常出现乱码、缺字或排版错误。LongCat-Next 在这个方面的大幅领先,主要得益于 dNaViT 分词器的语义完备性和 8 层 RVQ 的精细还原能力。
4.3 语音能力
在语音合成质量测试 SeedTTS 中,LongCat-Next 的中文字错误率低至 1.90,这个数字意味着每 100 个字中平均只有不到 2 个字出现错误,已经接近人类转录员的水平。在语音推理测试 ReasoningQA 中,LongCat-Next 拿到了 87.52 分。需要注意的是,语音推理测试考查的不仅仅是语音识别能力,还包括模型在听到语音后进行逻辑推理的能力,这对模型的多模态融合深度提出了很高的要求。
4.4 语言能力
作为一个多模态模型,LongCat-Next 在纯文本任务上也保持了不错的表现,包括编程、数学推理和工具调用等能力。这主要得益于 DiNA 范式的一个重要特性——新增的视觉和语音模态不会显著影响原有语言模型的核心能力。技术报告中提到,在统一多模态训练后,模型在核心语言任务上的性能下降微乎其微。
五、实际效果演示:LongCat-Next 能做什么
理论讲完了,下面我们来看几个 LongCat-Next 实际能完成的任务场景,帮助大家建立更直观的认识。
5.1 数学公式识别与整理
在一个典型的测试场景中,对着一张光线暗淡环境下拍摄的数学练习题照片,页面上密密麻麻排列着各种复杂的数学公式和符号。LongCat-Next 能够逐行扫描并精确还原,输出格式整洁的文档内容,包括分数、根号、积分符号等复杂的数学符号都不会遗漏。这个能力对于学生整理笔记、教师批改作业、科研人员数字化文献等场景都非常实用。
5.2 根据文字描述生成图像
输入一段中文描述,比如"国潮风 T 恤,白色正面印一条威风凛凛的中国龙,龙口火焰里藏着几个汉字,红金黑三色搭配",LongCat-Next 生成的图像不仅整体风格准确,更关键的是图像上的中英文字都清晰可读。前面提到的 LongText-EN 93.15 分的优秀表现,在这类实际场景中得到了充分体现。
5.3 高拟人度语音生成
LongCat-Next 生成的语音不仅支持标准普通话,还能模拟地方口音。更令人印象深刻的是语音中的语气变化、情感表达和停顿节奏,听起来非常自然流畅,已经很难分辨出是机器生成的。这种高拟人度的语音生成能力,在有声内容制作、智能客服、语音助手等场景中都有很大的应用空间。
5.4 工具调用与多步推理
LongCat-Next 继承了 LongCat-Flash-Lite 骨干网络在 Agentic(智能体)任务上的优势,支持函数调用(Function Calling)和多步工具调用。比如用户问"125679 加 234519 等于多少",模型可以自动识别这是一个计算任务,调用预定义的加法工具来完成计算,然后把结果返回给用户。这个能力在构建 AI Agent 应用时非常重要。
5.5 多模态混合任务
更有趣的是,LongCat-Next 可以在一次对话中自然地混合使用多种模态能力。比如用户可以先上传一张手绘草图,让模型理解草图内容,然后要求模型基于草图的风格生成一张精细的图片,同时用语音解释图片中的设计思路。这种"一次对话、多种模态无缝切换"的体验,在传统的"拼接式"多模态架构下是非常难以实现的,因为不同模态的模块之间缺乏深度的信息共享。而在 LongCat-Next 的统一 Token 框架下,不同模态的信号在模型内部是完全等价的,模态之间的切换就像在不同语言之间切换一样自然。
这种能力对于构建下一代的创意工具和生产力工具来说意义重大。想象一下,一个设计师可以对着电脑说"把这张海报上的标题换成红色的,字体放大一倍,然后帮我生成一段推广文案配上语音解说"——所有这些操作都可以在一个模型中一次性完成,不需要在多个工具之间来回切换。
六、上手实操:从环境配置到模型推理
下面进入最实用的部分——如何在你自己的机器上把 LongCat-Next 跑起来。莫潇羽@源码七号站在这里把官方文档中的关键步骤提炼出来,按照新手友好的方式重新梳理。
6.1 硬件要求
LongCat-Next 基于 Transformers 框架推理时,最低需要 3 张 80GB 显存的 GPU(推荐 NVIDIA H100 或 A100 80GB)。虽然模型总参数量有 68.5B,但由于 MoE 架构的稀疏激活特性,实际的显存需求主要由加载完整模型权重和 KV Cache 决定。如果你的硬件不满足要求,可以考虑通过 SGLang 框架进行优化部署(后文会介绍)。
6.2 环境配置
根据官方仓库的说明,推荐的软件环境如下:
- Python >= 3.10
- PyTorch >= 2.6
- Transformers >= 4.57.6
- Accelerate >= 1.10.0
官方提供了 environment.yml 文件用于一键创建 Conda 环境,具体操作命令如下:
# 第一步:创建 Conda 环境(包含 Python 3.10、ffmpeg 等基础依赖)
conda env create -f environment.yml -v
# 第二步:安装 PyTorch 及其他 pip 依赖
pip install -r requirements.txt && pip install -r requirements-post.txt --no-build-isolation
需要注意的是,安装完成后要修改 ./config.json 文件中的 WEIGHT_PATH_TO_LONGCAT_NEXT 路径,因为模型的解码器(Decoder)采用了懒加载(lazy loading)机制,需要知道权重文件的实际位置。
6.3 模型下载
LongCat-Next 的模型权重托管在 Hugging Face 上,可以通过以下方式获取:
# 方式一:使用 huggingface-cli 下载
huggingface-cli download meituan-longcat/LongCat-Next --local-dir ./LongCat-Next
# 方式二:使用 Git LFS 克隆
git lfs install
git clone https://huggingface.co/meituan-longcat/LongCat-Next
由于模型文件较大,建议在网络环境良好的条件下进行下载。如果在国内下载速度较慢,可以考虑使用 HuggingFace 镜像站点进行加速。
6.4 基础推理示例
下面是一个完整的推理代码示例,展示了如何加载模型并进行视觉理解任务(输入一张图片,让模型回答问题):
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, AutoProcessor
# ========== 加载模型 ==========
model_name = "meituan-longcat/LongCat-Next"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16,
device_map="auto",
trust_remote_code=True,
)
model.eval()
# ========== 加载分词器和处理器 ==========
tokenizer = AutoTokenizer.from_pretrained(
model_name,
trust_remote_code=True,
fix_mistral_regex=True
)
model.text_tokenizer = tokenizer # 动态绑定
processor = AutoProcessor.from_pretrained(
model_name, trust_remote_code=True
)
# ========== 构造消息 ==========
# 图片理解示例:输入一张图片并提问
messages = [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "这张图片里是什么?"
"<longcat_img_start>./your_image.png<longcat_img_end>"
}
]
# ========== 应用对话模板 ==========
text_input = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
# ========== 预处理 ==========
text_inputs, visual_inputs, audio_inputs = processor(
text=text_input, return_tensors="pt"
)
text_inputs = text_inputs.to(model.device)
if visual_inputs is not None:
visual_inputs = visual_inputs.to(model.device)
if audio_inputs is not None:
audio_inputs = audio_inputs.to(model.device)
# ========== 自回归生成 ==========
with torch.no_grad():
outputs = model.generate(
input_ids=text_inputs["input_ids"],
visual_inputs=visual_inputs,
audio_inputs=audio_inputs,
return_dict_in_generate=True,
)
# ========== 解码文字输出 ==========
output_ids = outputs.sequences
text_output = tokenizer.decode(
output_ids[0][len(text_inputs["input_ids"][0]):],
skip_special_tokens=True
)
print(f"模型回答: {text_output}")
上面这段代码的关键点有几个需要特别注意:
trust_remote_code=True参数是必须的,因为 LongCat-Next 使用了自定义的模型代码。在生产环境中使用前,建议先审查远程代码的内容。device_map="auto"会自动将模型分配到可用的 GPU 上。如果你有多张 GPU,Accelerate 库会自动处理模型的并行切分。- 图片路径需要用
<longcat_img_start>和<longcat_img_end>标签包裹,音频路径需要用<longcat_audio_start>和<longcat_audio_end>标签包裹。 return_dict_in_generate=True使得输出不仅包含文字 Token,还包含视觉 Token 和音频 Token,方便后续分别解码。
6.5 图像生成示例
如果想让 LongCat-Next 根据文字描述生成图片,只需要调整消息内容即可。生成的图像通过视觉 Token 解码得到:
# 修改消息内容为图像生成请求
messages = [
{"role": "system", "content": ""},
{
"role": "user",
"content": "一只小猫坐在长满青苔的森林地面上,"
"前爪搭在一块写有文字的木牌上,"
"表情平静好奇,直视镜头。"
"环境是一片茂密的森林,有高大的树木和柔和的阳光。"
}
]
# ... 后续预处理和生成代码与上面相同 ...
# ========== 解码图像输出 ==========
output_visual_ids = outputs.visual_ids
if output_visual_ids.size(0) > 0:
image_path_list = model.model.decode_visual_ids_and_save(
output_visual_ids,
save_prefix="./output_image",
**model.generation_config.visual_generation_config["custom_params"],
)
print(f"生成的图片已保存到: {image_path_list}")
6.6 语音生成示例
语音生成同样通过消息格式来触发。在用户消息末尾添加 <longcat_audiogen_start> 标记,可以强制模型输出语音:
# 修改消息以触发语音生成
messages = [
{
"role": "user",
"content": "请用温柔的语气念一段话:"
"今天天气真不错,适合出去走走。"
"<longcat_audiogen_start>"
}
]
# ... 后续预处理和生成代码与基础示例相同 ...
# ========== 解码语音输出 ==========
output_audio_text_ids = outputs.audio_text_ids
output_audio_ids = outputs.audio_ids
if output_audio_text_ids.size(-1) > 0:
audio_text = tokenizer.decode(
output_audio_text_ids[0],
skip_special_tokens=True
)
print(f"语音对应的文字: {audio_text}")
if output_audio_ids.size(0) > 0:
audio_path_list = model.model.decode_audio_ids_and_save(
output_audio_ids,
save_prefix="./output_audio",
**model.generation_config.audio_generation_config["custom_params"],
)
print(f"生成的语音已保存到: {audio_path_list}")
6.7 工具调用示例
LongCat-Next 支持 Function Calling 功能,适用于构建 AI Agent 应用。以下是一个