MNN编译安装全攻略:从源码构建到移动端部署实战
MNN这个名字做移动端AI的开发者应该不陌生。它是阿里开源的一个轻量级深度学习推理引擎主打在手机、嵌入式设备上高效跑模型。我第一次接触它是因为一个实际需求训练好的图像分类模型部署到安卓端用原生的TensorFlow Lite跑内存占用和推理延迟都不理想。换到MNN之后同样的模型单线程推理时间几乎砍半包体也小了不少。从那之后MNN就成了我移动端部署的首选方案。这篇教程不打算泛泛而谈直接聚焦编译与安装这个最关键的入门环节。我会从环境准备开始逐步拆解源码编译、交叉编译到移动端、以及编译产物的验证把每一步背后的原理和容易踩的坑都讲清楚。无论你是第一次接触MNN的初学者还是已经在部署路上摸爬滚打过的工程师这篇内容都能帮你少走弯路。1. MNN到底是什么凭什么值得花钱花时间编译它在动手敲编译命令之前先搞清楚我们编译的东西到底是什么、解决什么问题这比盲目执行命令重要得多。很多初学者上来就git clonecmake一路绿灯编译通过但根本不清楚自己拿到了什么后面遇到问题也无从排查。1.1 核心定位移动端的翻译官与加速器MNN本质上是一个推理引擎负责把训练好的深度学习模型比如PyTorch、TensorFlow产出的模型转换并优化成一种中间表示然后在移动端设备上高效执行。你可以把它理解成一个翻译官加速器的组合体——它把模型翻译成设备能听懂的语言各种算子的底层实现同时通过各种优化手段让翻译后的指令跑得更快。它最突出的几个特点是轻量级核心库体积小适合移动端集成不会给应用包体增加太多负担。MNN大约只有几百KB的增量取决于启用的功能和后端相比一些重量级框架优势明显。高性能针对ARM架构做了深度优化支持CPU、GPUOpenCL、Metal、Vulkan、NPU等多种后端能够充分利用设备算力。算子覆盖广支持TensorFlow、PyTorch、Caffe、ONNX等多种训练框架导出的模型覆盖面在开源框架中属于第一梯队。这意味着你训练好的模型大概率能顺利转换并运行。1.2 和其他框架的简单对比很多人在选型时会拿MNN和TensorFlow Lite、ncnn、ONNX Runtime等做对比。这里我不做绝对的优劣评判只聊聊我个人实测下来的体感框架优势亮点我感知到的短板MNN算子全、ARM优化强、多后端切换方便、会话管理灵活社区生态和文档相比TFLite稍有不足部分新算子需要自己补充实现TensorFlow Lite生态成熟、硬件加速委托Delegate丰富、文档详尽包体和二进制体积相对偏大模型转换有时会有算子不支持的情况ncnn极致轻量、纯CPU优化出色、腾讯维护活跃GPU/异构支持较弱Python工具链相对简陋这并不是说MNN一定比其他的好而是它更契合我在移动端部署时的需求一个是希望在有限的内存和算力下跑尽可能复杂的模型另一个是希望模型转换链路简单直接。如果你也是这种诉求MNN确实值得花时间研究。1.3 编译安装在大流程中的位置MNN的正式使用链路一般是这样环境准备 → 源码编译或直接下载预编译包→ 模型转换训练好的模型转成MNN格式→ 移动端集成调用 → 性能调优。其中编译与安装是整个流程的地基。地基没打牢后面的转换工具可能跑不起来集成到App里可能各种崩溃排查起来非常痛苦。我见过不少人在模型转换环节卡住结果发现是MNNConvert工具没编译好或者版本不对——这种问题一旦出现定位成本极高。所以把编译这一步走扎实是对自己后面的时间负责。2. 编译前的环境准备工具链和版本搭配是最大的隐形坑我最早编译MNN的时候以为环境准备就是装个CMake和GCC那么简单。结果一执行就报错提示找不到protobuf后来又遇到NDK版本和编译器不兼容的问题反复折腾了好几次。现在我把这套环境准备流程整理成一个稳定的组合按这个来基本不会出问题。2.1 所需依赖清单编译MNN主要依赖以下工具和库Git拉取源码。这个不用多说了安装方式各平台都简单。CMake构建工具建议3.10及以上版本。版本过低会导致部分选项无法配置。C/C编译器Linux/macOS上一般用GCC或ClangWindows上推荐Visual Studio的MSVC或者MinGW。protobufMNN的模型转换和几何计算依赖protobuf来做序列化。版本建议3.0以上低于这个版本会有API不兼容问题。如果你只是做移动端集成而不需要转换工具这个依赖可以不装后面我会具体说。Android NDK编译安卓版时需要建议使用NDK r21及以上版本并搭配对应的CMake工具链文件。Xcode Command Line Tools编译iOS版时需要macOS系统必须。2.2 版本搭配的实操建议我踩过这几个组合的坑给大家直接总结一套经过验证的版本搭配平台编译器CMake版本备注Ubuntu 20.04/22.04GCC 9.x/11.x3.16protobuf用apt安装即可需要3.0macOSClang 123.20建议用Homebrew安装protobufWindowsMSVC 2019/20223.18建议在Visual Studio的开发者命令行中操作Android交叉编译NDK r21内置的clang随NDK自带注意不要用NDK自带的CMake版本过低问题这里特别想提醒一点不要用系统自带的旧版protobuf。Ubuntu 18.04系统默认的protobuf是2.6.1直接编译MNN大概率报错。我当时就是卡在这个问题上编译到一半报错信息指向protobuf相关头文件排查了很久才发现是版本问题。解决办法是用源码编译安装新版本protobuf或者用Python的pip安装一个较新的protobuf版本并确保系统能找到具体后面我会给步骤。2.3 依赖安装的完整命令我以Ubuntu环境为例给出完整的依赖安装过程# 更新系统源 sudo apt update # 安装基础工具 sudo apt install -y git build-essential cmake # 安装protobuf编译器某些系统版本过旧可自行编译新版本 sudo apt install -y libprotobuf-dev protobuf-compiler如果你用的是macOS# 安装Homebrew如果还没装 /bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh) # 安装依赖 brew install git cmake protobufWindows环境的话建议直接走Visual Studio Installer安装C桌面开发工作负载然后打开开发者 PowerShell用Chocolatey或vcpkg安装protobufchoco install protobuf cmake装完依赖后先用cmake --version和protoc --version验证一下版本号。我一般会把这个习惯形成肌肉记忆——任何编译项目之前先确认工具链版本能避免后面一大半问题。3. 从源码编译MNN完整流程和核心配置项详解环境准备好之后真正的编译就可以开始了。这里我分两步走第一步是在本机编译出完整可用的MNN工具链和库主要是为了拿到模型转换工具和一些测试工具第二步才是交叉编译到移动端。如果你只需要在手机上集成可以直接跳过第一步的后半部分但我的建议是至少在本机完整编译一遍这样你能产出一个标准参考物后面交叉编译出问题时可以对照排查。3.1 拉取源码和分支选择MNN的源码托管在GitHub上直接克隆就行git clone https://github.com/alibaba/MNN.git cd MNN这里有个小知识点MNN的主分支对应最新的开发版本功能最全但也可能引入一些新问题。如果你追求稳定我建议你切换到发布版本标签。在GitHub的Release页面可以看到各版本号比如# 以某个版本为例列出所有标签后切换 git tag git checkout 2.5.0我个人的习惯是学习和初体验用自己的环境跑master生产环境用版本标签。因为master可能会有API变化而版本标签则是经过一段社区验证的相对稳定状态。这个习惯帮我避免过好几次莫名其妙的行为差异。3.2 创建构建目录并配置CMakeMNN官方推荐的构建方式是使用独立build目录这样不会污染源码目录也方便切换不同的构建配置mkdir build cd build cmake -DCMAKE_BUILD_TYPERelease ..这一步会生成Makefile或者Ninja文件。如果你执行后系统提示找不到protobuf那说明你的protobuf安装路径不在CMake的默认搜索路径中可以用-DCMAKE_PREFIX_PATH指定安装位置比如cmake -DCMAKE_BUILD_TYPERelease -DCMAKE_PREFIX_PATH/usr/local ..3.3 关键CMake配置项详解MNN的CMake配置项很多对于入门阶段这几个是最需要理解的配置项取值作用说明MNN_BUILD_CONVERTERON/OFF是否编译模型转换工具MNNConvert默认ON。如果你不需要转换模型可以OFFMNN_BUILD_TOOLSON/OFF是否编译benchmark、test等工具默认ON。建议保持ON方便验证MNN_BUILD_TRAINON/OFF是否编译训练相关代码。入门阶段建议OFF减少编译时间MNN_BUILD_QUANTIZERON/OFF是否编译量化工具。如果你打算做模型量化压缩建议ONMNN_BUILD_DEMOON/OFF是否编译示例程序。我建议ON跑通一个demo对理解MNN非常有帮助MNN_USE_OPENCLON/OFF是否启用OpenCL GPU后端。移动端GPU加速很依赖这个建议ONMNN_USE_VULKANON/OFF是否启用Vulkan后端。新设备支持度好可选择性打开MNN_BUILD_SHARED_LIBSON/OFF编译动态库还是静态库。移动端集成一般建议静态库便于裁剪体积我常用的一个配置组合是cmake -DCMAKE_BUILD_TYPERelease \ -DMNN_BUILD_TRAINOFF \ -DMNN_BUILD_QUANTIZERON \ -DMNN_BUILD_DEMOON \ -DMNN_USE_OPENCLON \ -DMNN_USE_VULKANON \ -DMNN_BUILD_SHARED_LIBSON ..注意一个容易被忽略的点如果打开了OpenCL和Vulkan但本机没有对应的开发环境编译可能会报错。比如纯服务器环境没有OpenCL头文件你就要先安装对应依赖或者在配置时先关掉这两个选项。后面需要GPU加速时再针对移动端交叉编译开启。3.4 执行编译和常见问题配置完成后开始编译make -j$(nproc)-j参数指定并行编译的核数。如果你的机器内存不是特别充裕建议先看下内存大小把并行数限制一下。我当时在一台只有8G内存的机器上直接-j16结果内存直接打满编译进程被杀白白等了十分钟。后来老老实实改成-j4就稳稳当当。编译过程大概需要几分钟到十几分钟不等取决于机器性能和编译选项。编译完成后在build目录下会生成libMNN.so/libMNN.a核心推理库MNNConvert模型转换工具这个后面会细说MNNBenchmark性能测试工具MNNTest功能性测试工具libMNN_CL.soOpenCL后端动态库如果开启了编译完成后第一时间跑一下测试验证./MNNTest如果测试顺利跑完没有报错恭喜你已经拿到了一个基础可用的MNN环境。这一步很重要不要跳过。我见过有人编译完直接扔到安卓上跑demo结果崩溃了排查半天发现源头是本机编译出的工具就有问题浪费了大量时间在错误的方向上。3.5 用MNNConvert转换第一个模型拿到MNNConvert工具后可以立刻做个实验来验证整个链路。比如把一个ONNX格式的模型转换成MNN格式./MNNConvert -f ONNX --modelFile /path/to/model.onnx --MNNModel /path/to/model.mnn转换成功后你会得到一个.mnn文件这就是MNN的模型格式。如果你转换的是PyTorch模型通常需要先导出为ONNX再转换路径是PyTorch模型 → ONNX导出 → MNNConvert转换。这一条链路是当前最主流也最稳定的方式。4. 交叉编译到移动端Android和iOS平台的差异处理真正的移动端部署场景中你几乎不会在本机编译出一个运行在安卓上的库而是需要交叉编译——在本机用针对目标平台的编译器编译出能在手机系统上运行的二进制。MNN对这块的支持做得比较到位但平台差异问题很值得单独拎出来说。4.1 Android平台交叉编译全步骤Android交叉编译的核心是使用NDK提供的工具链。具体步骤如下。首先下载并配置NDK。你可以从Android开发者网站下载最新NDK或者通过Android Studio的SDK Manager一键安装。我习惯用命令行方式这样更可控export ANDROID_NDK/path/to/your/ndk创建Android构建目录mkdir build_android cd build_android执行CMake配置关键是传入NDK的toolchain文件cmake -DCMAKE_TOOLCHAIN_FILE$ANDROID_NDK/build/cmake/android.toolchain.cmake \ -DANDROID_ABIarm64-v8a \ -DANDROID_PLATFORMandroid-24 \ -DMNN_USE_LOGCATON \ -DMNN_BUILD_TRAINOFF \ -DMNN_BUILD_DEMOON \ -DMNN_USE_OPENCLON \ ..这里的几个关键参数解释一下ANDROID_ABI目标CPU架构。现在的主流是arm64-v8a对应64位ARM芯片如果你需要兼容老设备或32位可以加一个armeabi-v7a的构建。ANDROID_PLATFORMAndroid API级别一般设置android-24以上覆盖大多数现代设备。MNN_USE_LOGCAT启用logcat日志输出调试时非常有帮助。编译make -j$(nproc)编译完成后你会看到生成了一批.so文件和静态库。特别注意的是如果开启了OpenCL你会多一个libMNN_CL.so集成时需要一起打包进App。我踩过的一个比较典型的坑是NDK版本太新导致和MNN源码中某个编译宏不兼容。解决办法就是选一个大版本稳定的NDK比如r21或r23不要盲目追新。另一个坑是arm64-v8a和armeabi-v7a的库不能混用集成到Android工程时只能选对应ABI的库如果同时放进jniLibs运行时会被系统直接忽略掉不匹配的ABI导致找不到native方法的诡异问题。4.2 iOS平台交叉编译要点和工具链iOS编译要比Android稍微复杂一些主要原因是iOS的构建和签名体系比较封闭并且MNN官方本身提供了一个专用的iOS工具链文件用起来更方便。基本步骤如下首先确保你已经安装了Xcode和Command Line Toolsxcode-select --install克隆MNN的iOS工具链通常MNN仓库本身就带cd MNN mkdir build_ios cd build_ios然后结合MNN项目自带的iOS构建脚本。实际上MNN仓库里有一个package_ios.sh脚本用起来很方便./package_ios.sh这个脚本会自动拉取对应的ARM工具链配置编译出iOS可用的静态库和资源文件。如果你要手动配置CMake也可以这样cmake -DCMAKE_TOOLCHAIN_FILE../ios.toolchain.cmake \ -DCMAKE_OSX_SYSROOTiphoneos \ -DCMAKE_OSX_ARCHITECTURESarm64 \ ..注意点iOS默认只支持静态库编译动态库在iOS上限制很多所以一般不用考虑.so这种形式。另外模拟器架构和真机架构是不同的你要区分编译x86_64模拟器和arm64真机版本调试时可能各需要一种。我经常在真机调试时忘了切换架构导致链接报错后来养成了先确认目标架构再编译的习惯。4.3 两种移动端的产物表格对照为了方便大家对比我把Android和iOS编译的产出物整理成一张表平台主要产物链接方式需打包内容AndroidlibMNN.so、libMNN_CL.so可选Java/Kotlin通过JNI调用或Unity、Flutter插件将.so放入jniLibs对应ABI目录iOSlibMNN.a静态库或MNN.frameworkSwift/OC直接链接将静态库或framework拖入工程5. 验证安装成果跑通一个完整的推理Demo编译安装的最直接价值就是能否顺利跑通一个推理流程。很多教程止步于编译成功但从编译成功到真正正确运行推理中间还可能隔着几步。这一节我分享一个最精简的验证路径。5.1 准备一个测试模型和输入数据一个最简单的验证方法是先用Python和某个训练框架比如PyTorch构造一个小小的网络结构导出成ONNX再用MNNConvert转成MNN格式。整个过程可以在五分钟内完成。PyTorch端构造一个简单网络并导出ONNX的示例import torch import torch.nn as nn class SimpleNet(nn.Module): def __init__(self): super(SimpleNet, self).__init__() self.conv nn.Conv2d(3, 16, kernel_size3, padding1) self.relu nn.ReLU() self.pool nn.AdaptiveAvgPool2d(1) self.fc nn.Linear(16, 10) def forward(self, x): x self.conv(x) x self.relu(x) x self.pool(x) x x.view(x.size(0), -1) x self.fc(x) return x model SimpleNet() model.eval() dummy_input torch.randn(1, 3, 32, 32) torch.onnx.export(model, dummy_input, simplenet.onnx, input_names[input], output_names[output], opset_version11) print(ONNX exported.)然后将导出的ONNX转换成MNN格式./MNNConvert -f ONNX --modelFile simplenet.onnx --MNNModel simplenet.mnn如果转换过程没有报错并且提示转换成功那么说明你的转换工具链是通的。5.2 用Python接口跑通推理MNN提供了Python绑定可以直接在本机验证模型的推理结果。编译完成后Python包是这样安装的# 在build目录下 cd pymnn pip install -e .如果pip安装顺利就可以写一个简单的推理脚本import MNN # 创建解释器会话 interpreter MNN.Interpreter(simplenet.mnn) session interpreter.createSession() # 获取输入输出张量信息 input_tensor interpreter.getSessionInput(session) output_tensor interpreter.getSessionOutput(session) # 构造输入数据这里用全0模拟一张图 import numpy as np fake_input np.zeros((1, 3, 32, 32), dtypenp.float32) tmp_input MNN.Tensor((1, 3, 32, 32), MNN.Halide_Type_Float, fake_input, MNN.Tensor_DimensionType_Caffe) interpreter.resizeTensor(input_tensor, (1, 3, 32, 32)) interpreter.resizeSession(session) input_tensor.copyFrom(tmp_input) interpreter.runSession(session) # 获取输出 output_tensor.copyToHostTensor(tmp_input) output_data np.array(tmp_input.getData()) print(Output shape:, output_data.shape)如果你能看到输出数据的shape和数值说明整个MNN的编译安装、模型转换、Python绑定、推理执行这一整条链路全部跑通了。这一步的成就感很强也是你对MNN建立信心的关键时刻。5.3 用benchmark工具做一次简单测试如果你希望进一步验证MNN的性能可以用编译产物中的MNNBenchmark./MNNBenchmark -m simplenet.mnn -f 1000这会运行1000次推理输出平均耗时、内存占用等信息。注意在移动设备上跑benchmark时最好用release模式编译否则性能数据会失真。6. 编译期常见报错与排查思路我踩过的坑都替你踩过了这一节全部是我自己实际遇到过的编译问题按出现频率排序每个都给出定位思路和解决方案。6.1 报错找不到protobuf头文件这段报错很典型fatal error: google/protobuf/xxx.h: No such file or directory原因系统protobuf版本过旧或安装路径不在CMake搜索范围内。排查顺序执行protoc --version如果版本低于3.0直接按源码安装新版protobuf。如果版本正常用cmake -DCMAKE_PREFIX_PATH/path/to/protobuf指定路径。再不行检查是否在conda或虚拟环境中编译环境隔离可能导致系统包不可见。我当时的解决方案是源码编译protobufwget https://github.com/protocolbuffers/protobuf/releases/download/v3.20.3/protobuf-cpp-3.20.3.tar.gz tar -xzf protobuf-cpp-3.20.3.tar.gz cd protobuf-3.20.3 ./configure --prefix/usr/local make -j4 sudo make install装完后记得sudo ldconfig刷新动态链接库缓存。6.2 报错NDK工具链和源码不兼容这个报错通常出现在使用过新版本NDK时表现为编译过程中出现某些宏未定义的错误或者链接阶段找不到某个标准库函数。原因NDK更新后部分API被移除或改名MNN源码没有及时适配。解决方案不要追新用NDK r21到r23之间的稳定版本。我目前长期用的就是r23b编译各种项目都很少出幺蛾子。6.3 报错OpenCL头文件缺失如果你在纯服务器环境或者某些精简Linux发行版上编译MNN且开启了MNN_USE_OPENCLON可能遇到fatal error: CL/cl.h: No such file or directory原因系统缺少OpenCL开发包。解决方案Ubuntusudo apt install opencl-headers ocl-icd-opencl-devWindows需要装显卡厂商提供的OpenCL SDK如果只是验证基础功能最简单的方案是先关掉OpenCL选项。6.4 编译过程被OOM杀掉这个问题前面提到过就是并行编译数量设置过多内存不够。现象终端提示类似于Killed或cc1plus: out of memory。解决方案# 先用free -h查内存然后根据内存大小适当减少并行数 make -j4如果内存依然吃紧可以降低编译优化等级改CMAKE_BUILD_TYPERelWithDebInfo调试信息会占更多内存。7. 进阶思考静态库与动态库选择以及模型格式内部发生了什么编译安装这个动作看似简单但背后牵扯的设计决策其实不少。这一节我把几个入门阶段不会主动关注、但迟早要面对的问题快速讲透。7.1 静态库还是动态库移动端集成时静态库.a和动态库.so的选择会直接影响包体大小和更新策略。静态库链接进App最终包体会增大但运行时不用额外加载动态库性能和稳定性相对更好控制。MNN官方比较推荐这种方式。动态库包体略微减小便于热更新或跨模块共享。但在Android上你要注意多个动态库之间的ABI一致性问题否则运行时可能出现奇怪的符号冲突。我个人的建议是App内部使用选择静态库如果你要做SDK提供给别人使用则动态库更合理因为宿主工程不需要处理头文件和编译参数。7.2 模型格式.mnn内部发生了什么用MNNConvert转出来的.mnn文件并不仅仅是一个网络结构的序列化。它内部包含了网络拓扑结构哪些算子、如何连接权重参数已经按MNN的布局优化排列算子融合信息例如ConvBNReLU的融合运行时无需额外计算后端调度信息在哪里执行、用什么后端说直白一点MNNConvert做的事情不仅是格式转换更是预优化。所以同一个模型用MNN转换出的文件大小可能和其他框架不一样推理性能差异可能很大。理解这一点你就明白为什么MNN能在移动端跑得比别人快。8. 最后分享一点实战体会编译安装MNN这件事说难不难说简单也不简单。在我经历了多次为不同项目编译MNN的过程之后有几个体会特别深第一维护一套固定的环境配置非常值得。我自己的开发机上至今保留着一份标准环境的shell脚本里面包含CMake版本、NDK路径、protobuf源码编译路径等。每次换机器或者重装系统跑一遍脚本就能恢复MNN的编译环境省去了大量重复排查时间。第二编译问题一定要学会看报错顺序。CMake编译的报错信息量很大但绝大部分问题的根源都在第一时间暴露。我踩坑多了之后发现90%的问题集中在工具链版本和依赖库缺失上跟MNN源码本身的关系并不大。遇到报错先看是编译哪个源文件、链接哪个可执行文件时出的问题顺着链路往前翻定位速度会快很多。第三动手编译之前目标要明确。你是要跑通demo要集成到App要做性能测试还是要做模型转换不同目标对应不同的编译选项组合。如果目标是集成到App那么本机的完整编译其实可以跳过直接交叉编译到目标平台即可。目标不明确容易在不需要的事情上浪费时间。最后给所有刚入门MNN的朋友一个建议编译安装阶段千万别怕踩坑每一次报错都是一次对MNN源码结构和构建体系更深入了解的机会。等你把编译这套流程跑熟后面的模型转换、推理加速、性能调优都会顺利得多。希望这篇教程能帮你顺利迈过MNN的第一道门槛。

相关新闻

内网离线安装Docker与docker-compose全流程及避坑指南

内网离线安装Docker与docker-compose全流程及避坑指南

简介:这份资源面向需要在无外网环境下部署容器服务的内网运维与开发人员,提供一套完整的离线安装方案,解决服务器无法访问公网、无法通过 yum 在线拉取 Docker 组件的痛点。压缩包共 22 个文件,约 120.91MB,以 20 个 r…

2026/10/16 4:01:12 阅读更多 →
HashMap put流程深度解析:从hash扰动到扩容的完整链路

HashMap put流程深度解析:从hash扰动到扩容的完整链路

写了不少年Java,HashMap的源码翻过好几遍,也面过不少人。问一句“HashMap是什么”,几乎都能答上来“数组加链表,红黑树优化”。但再往下问一句:“你往HashMap里put一个key-value,这一个键值对到底是怎么存进…

2026/10/16 4:01:12 阅读更多 →
OpenClaw 统一接入 QQ 与飞书:多平台消息网关实战指南

OpenClaw 统一接入 QQ 与飞书:多平台消息网关实战指南

聊点实在的。最近忙完的一件事,是把我自己维护的那套 OpenClaw AI 助手网关同时接进了 QQ-Bot 和飞书。原本 QQ 助手和飞书助手是两套互相独立的代码,一个跑在定时脚本里,一个挂在群机器人上,技能逻辑七零八落,改个提示…

2026/10/16 4:01:12 阅读更多 →

最新新闻

Java工程师不用学Python,用Spring AI构建生产级AI Agent

Java工程师不用学Python,用Spring AI构建生产级AI Agent

1. 项目概述:一个被严重误读的转型真相“Java老兵转AI Agent”这个标题,最近在技术社区刷屏了。但你点进去,十有八九看到的是“先学Python→再装Anaconda→抄几行LangChain代码→调通一个天气查询demo”,然后配一句“我已成功入坑…

2026/10/16 4:50:26 阅读更多 →
从零训练64M参数大语言模型:MiniMind单卡2小时全流程实战

从零训练64M参数大语言模型:MiniMind单卡2小时全流程实战

1. 为什么我要花时间折腾一个只有 64M 参数的“玩具模型”大语言模型这两年火得一塌糊涂,但大多数人的参与方式其实只有两种:要么调用云端 API,按 token 付费;要么下载几十 GB 的开源权重,然后发现自己手头那张消费级显…

2026/10/16 4:50:26 阅读更多 →
SQL注入绕过WAF的常见手法与防御实践

SQL注入绕过WAF的常见手法与防御实践

1. 为什么SQL注入与WAF的对抗一直没停过1.1 标题里的三层含义“SQL注入绕过WAF”这几个字,表面看是一次攻击技术的总结,实际上包含三个层面:SQL注入本身、WAF的检测逻辑、以及两者之间的对抗关系。很多人一看到“绕过”两个字,以为…

2026/10/16 4:50:26 阅读更多 →
性能测试实战指南:从指标设计到瓶颈定位与容量规划

性能测试实战指南:从指标设计到瓶颈定位与容量规划

做性能测试这几年,见过太多项目组把"压测"当成"跑脚本数TPS",结果上线后用户一多就血崩。性能测试从来不是工具操作,也不是出几份花哨报告,它本质上是一场针对系统极限能力的科学实验,是用可控的手…

2026/10/16 4:50:26 阅读更多 →
3块钱2小时从零训练64M参数大语言模型:全流程实操指南

3块钱2小时从零训练64M参数大语言模型:全流程实操指南

1. 项目缘起与核心价值拆解1.1 为什么“3块钱、2小时、64M参数”这三个数字值得认真对待第一次看到“3块钱、2小时、从零训练一个64M参数的大语言模型”这个描述时,我的第一反应是怀疑。在大模型动辄千亿参数、训练成本以百万美元计的当下,一个64M参数的…

2026/10/16 4:50:26 阅读更多 →
Uniapp如何驱动JLP352蓝牙热敏打印机:从BLE连接到位图打印的完整实践

Uniapp如何驱动JLP352蓝牙热敏打印机:从BLE连接到位图打印的完整实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 4:49:25 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →