YOLO26改进:C3k2嵌入RMBC_LA残差多分支卷积与局部注意力模块

发布时间:2026/10/22 9:49:09

YOLO26改进:C3k2嵌入RMBC_LA残差多分支卷积与局部注意力模块 1. 一个被C3k2卡住脖子的模型去年底我在调一个工业外观质检模型推理延迟卡得很死又不能换更大规模的网络只能在YOLO26这个内部代号版本上抠性能。连续跑了几轮baseline之后我去统计各模块的FLOPs占比发现C3k2这一族模块加起来占了整个模型接近三成的计算量而它的内部结构却还是最传统的“1x1降维、串接若干重参数卷积、再1x1融合”的老路子。当时我就知道这块地方值得动刀。先交代一下背景YOLO26对应的是ultralytics风格代码库的一个版本我们项目组内部用这个代号维护不是官方正式命名的发布版本。C3k2则是骨架和脖子部分重复次数最多的基础模块几乎隔两层就会遇到一次。它的职责是在不改变特征图空间尺寸的前提下做通道变换和特征加工可以理解成整个网络里最通用的“特征加工车间”。如果能在不显著增加推理开销的前提下把这个车间改造得更有提取局部细节的能力整个模型的收益将是结构性的而不是单个检测头或某个瓶颈层的局部优化。这次我最终选择在C3k2内部嵌入自研的RMBC_LA模块全称按工程习惯拆解为Residual Multi-Branch Convolution加Local Attention也就是残差多分支卷积配合局部注意力。这篇文章完整记录这个改进从设计、拆解、代码接入到训练验证的全过程最后还会把我在实际落地中踩过的坑一并写出来。如果你正想给自己手里的YOLO模型做类似的结构升级这篇文章可以直接照着抄至少能让你少走两轮弯路。文章默认你已经有可运行的ultralytics风格训练环境代码基于Python和PyTorch涉及的文件主要是nn/modules.py、nn/tasks.py以及模型yaml配置。无论你是刚接触YOLO改进的新手还是已经在做模型轻量化和精度调优的开发者整个接入流程都是同一套思路。2. C3k2到底做了什么为什么值得改2.1 结构与功能拆解C3k2不是凭空冒出来的模块它是从C3、C2f这一条线演化过来的。C3的基本形态是输入进来后兵分两路一路直接走快捷连接另一路先经过一个1x1卷积降维再串接若干个Bottleneck加工最后两路拼接再过1x1卷积融合输出。C2f在C3的基础上做了改进不再只做一次1x1降维而是先用一个1x1卷积把通道翻倍切分成两份一份直接进拼接列表一份进入子模块序列每个子模块的输出再依次进列表最后全部拼接起来统一融合。这样做的好处是梯度路径更短信息复用更充分。C3k2可以看成C2f的“套娃版”它继承C2f的外壳但把m序列里的Bottleneck换成了C3k子模块。而C3k自己又包含一个1x1分流和两个Bottleneck。换句话说C3k2的加工车间内部还有一条小型装配线结构和表达能力都比普通C2f更复杂。用生活化的类比C3k2像一条自动化流水线原料送进来后分成两股一股不加工直接走向终点另一股进车间被反复打磨最后两股汇合再统一包装。快捷分支保证了梯度信号能顺畅回传加工分支负责充分提炼特征。这个设计哲学在YOLO系列里被反复验证稳定且高效。2.2 为什么把改进点选在C3k2选择C3k2作为改造对象理由有三条。第一重复次数多收益面大。在YOLO26的默认结构里C3k2同时出现在backbone和neck的多个尺度层级从浅层到深层都有它的身影。改一个模块等于同时影响所有特征层级这和只改某个检测头或单独某个SPPF完全不同。第二结构规整替换成本低。C3k2的外壳是标准化的cv1、cv2、cv3加concat结构内部m序列的输入输出通道一致替换时不需要改动前后层的通道数也不影响整个网络的张量流动。改动风险被限制在一个很小的范围内。第三它承担的是通用特征加工任务不针对特定分辨率。注意力机制和感受野增强类设计放在这种通用模块里能对所有尺度的目标都产生作用而不是只对某类目标有效。2.3 一个关键取舍换m序列不重写外壳最开始我也考虑过直接写一个全新的重型模块把整个C3k2替换掉但很快就否掉了这个方案。原因有两个一是外围的cv1、cv2、cv3以及concat结构已经被大量训练验证过重写外壳等于改变整个特征流风险不可控二是改动越少后续代码升级维护的成本越低尤其是每次拉取新版本ultralytics仓库时改动面小就不会频繁冲突。所以最终方案定成只把C3k2内部m序列里的C3k子模块换成RMBC_LA外层完全不动。这个取舍是整个改进的核心思路——改进一个已经成熟的模块最好的方式往往不是推翻它而是在它内部最不影响主流程的位置植入一小块更高效的处理逻辑。3. RMBC_LA多分支卷积和局部注意力要怎么合体3.1 设计思路为什么是多分支加注意力RMBC_LA这个名字是我自己起的完全按照工程习惯来拆RMBC是Residual Multi-Branch Convolution残差多分支卷积LA是Local Attention局部注意力。整个设计围绕三个关键词展开。第一个关键词是残差。模块输入和输出之间保留一条恒等路径让梯度在反向传播时能跳过卷积层直接回传。这个设计已经被ResNet反复验证过尤其在网络加深之后没有残差路径的模块很难稳定收敛。第二个关键词是多分支卷积。目标检测任务里目标尺寸变化极大小目标需要小感受野来刻画精细边缘大目标需要更大的上下文范围。单个固定尺寸的卷积核只能覆盖一种尺度而多分支并行就能天然兼顾多尺度。我选择了3x3、5x5和1x1三个分支分别对应细节、上下文和线性组合。第三个关键词是局部注意力。多分支卷积让网络提取到了不同尺度的特征但模型还需要知道哪些位置、哪些通道的信息更重要。局部注意力做的事情就是在局部空间范围内对融合后的特征做重标定让模型把注意力放到真正有用的区域。3.2 模块内部逐层拆解RMBC_LA的完整计算流程可以拆成八个子步骤。第一步是输入调整。一个1x1卷积把输入特征调整到目标通道数这一步同时承担了通道对齐和特征线性变换的功能也是后续全局残差的落脚点。第二步到第四步是三个并行分支。3x3支路采用depthwise卷积加1x1点卷积的组合负责精细局部结构5x5支路同样采用depthwise加1x1负责稍大范围的上下文信息1x1支路是一个纯线性组合保留原始通道信息防止多分支叠加后信息结构被改变。第五步是多分支叠加。三个支路的输出直接相加而不是拼接。直接相加的好处是通道数不会膨胀后续注意力模块的计算量不会被放大。如果做拼接通道数会变成三倍局部注意力的计算量也会跟着涨这对移动端或工业部署场景是不友好的。第六步是局部注意力调制。先对特征做全局平均池化生成通道描述符再经过一个由两个1x1卷积构成的瓶颈结构产生通道权重并作用到特征上。随后对每个空间位置取最大特征和平均特征拼成两通道的局部描述图再用一个3x3卷积生成空间权重。这个空间权重本质上是在每个局部窗口内重新标定特征的重要性计算量非常小。第七步是融合投影。经过注意力调制后的特征再过一次1x1卷积把注意力重新分配的通道信息整合起来。第八步是全局残差连接把输入调整后的特征与融合结果相加完成整个模块的闭环。3.3 参数量与计算量的粗算很多人看到模块里有三个分支第一反应是参数量会不会爆炸。实际算一笔账就清楚。以中间通道数c等于256为例。一个1x1卷积的参数量是c乘以c也就是65536。3x3支路里depthwise卷积参数量是3乘3乘256即2304后面的1x1点卷积又是65536。5x5支路里depthwise参数量是5乘5乘256即6400后面的1x1点卷积同样是65536。1x1支路贡献65536。通道注意力部分两个1x1卷积大约各是16384空间注意力部分的3x3卷积只有2乘9等于18个参数。整体算下来一个RMBC_LA模块的参数量大概在30万左右。而C3k2原本的C3k子模块内包含两个Bottleneck每个Bottleneck又包含两个1x1和一个3x3卷积总参数量也在20万上下。替换之后的增幅大约在百分之十到十五但换来的是三路感受野和注意力调制能力这个交易是划算的。子模块参数量c256作用1x1输入调整65536通道对齐与线性变换3x3 depthwise 1x12304 65536精细局部结构5x5 depthwise 1x16400 65536大范围上下文1x1恒等支路65536保存原始通道信息通道注意力32768通道级重标定空间注意力18局部空间重标定1x1融合投影65536特征整合4. 动手接入完整代码实现与配置4.1 新模块类的完整定义我在ultralytics风格仓库里把新模块直接追加到nn/modules.py文件末尾。需要用到仓库里现成的Conv类它自带卷积、批归一化和激活函数不需要自己重新造轮子。先实现局部注意力模块。这里的空间注意力部分用3x3卷积在局部感受野内对每个位置重新分配权重从工程角度说就是一种非常轻量的局部注意力实现。它不涉及复杂的窗口划分或自注意力矩阵运算部署时不会遇到算子兼容问题。class LocalAttention(nn.Module): 极轻量的局部注意力通道注意力 3x3空间局部重标定 def __init__(self, c, r4): super().__init__() hidden max(c // r, 1) # 通道注意力全局池化 - 两个1x1卷积 - Sigmoid self.channel_mlp nn.Sequential( nn.Conv2d(c, hidden, 1, biasTrue), nn.ReLU(inplaceTrue), nn.Conv2d(hidden, c, 1, biasTrue), nn.Sigmoid(), ) # 空间局部注意力拼接最大/平均特征 - 3x3卷积生成权重 self.space_conv nn.Conv2d(2, 1, 3, 1, 1, biasFalse) self.space_sig nn.Sigmoid() def forward(self, x): # 通道注意力 y x.mean((2, 3), keepdimTrue) y self.channel_mlp(y) x x * y # 空间局部注意力 max_f x.amax(dim1, keepdimTrue) avg_f x.mean(dim1, keepdimTrue) w torch.cat([max_f, avg_f], dim1) w self.space_conv(w) w self.space_sig(w) return x * w然后是RMBC_LA主体。这个模块的输入输出通道设计为相同可以直接替换C3k2内部的C3k子模块不改变隔壁层的任何通道配置。class RMBC_LA(nn.Module): 残差多分支卷积 局部注意力 def __init__(self, c1, c2, nNone, shortcutNone, g1, biasFalse): super().__init__() assert c1 c2, RMBC_LA设计为同通道特征调整c1必须等于c2 # 输入通道对齐也是残差连接的落脚点 self.cv1 Conv(c1, c2, 1, 1, biasbias) # 3x3支路depthwise卷积 1x1点卷积 self.branch3 nn.Sequential( Conv(c2, c2, 3, 1, 1, groupsc2, biasbias), Conv(c2, c2, 1, 1, biasbias), ) # 5x5支路depthwise卷积 1x1点卷积 self.branch5 nn.Sequential( Conv(c2, c2, 5, 1, 2, groupsc2, biasbias), Conv(c2, c2, 1, 1, biasbias), ) # 1x1恒等信息支路 self.branch1 Conv(c2, c2, 1, 1, biasbias) # 融合投影 self.fuse Conv(c2, c2, 1, 1, biasbias) # 局部注意力 self.la LocalAttention(c2) def forward(self, x): x self.cv1(x) b3 self.branch3(x) b5 self.branch5(x) b1 self.branch1(x) out b3 b5 b1 out self.la(out) out self.fuse(out) return out x最后定义C3k2_RMBC_LA。这里直接继承C2f的外壳保留原有的cv1、cv2分支和concat结构只把m序列替换成RMBC_LA。C2f基类会在初始化时自动计算中间通道数self.c并按照缩放系数e对输出通道做压缩所以不需要额外计算。class C3k2_RMBC_LA(C2f): C3k2外壳 RMBC_LA内部加工模块 def __init__(self, c1, c2, n1, e0.5, g1, biasFalse): super().__init__(c1, c2, nn, ee, gg, biasbias) # 将C2f内部的Bottleneck序列替换为RMBC_LA序列 self.m nn.ModuleList( RMBC_LA(self.c, self.c) for _ in range(n) )4.2 注册到任务解析器新模块定义好之后还要让模型解析器认识它。文件在nn/tasks.py找到parse_model函数里处理C2f、C3k2那一串类的分支加上C3k2_RMBC_LA的处理逻辑。因为C3k2_RMBC_LA继承自C2f处理逻辑可以完全对齐C2f第一个参数是输入通道第二个参数是输出通道后面的参数原样透传。elif m in {C2f, C3k2_RMBC_LA}: c1, c2 ch[f], args[0] if c2 ! nc: c2 make_divisible(min(c2, max_channels) * width, 8) args [c1, c2, *args[1:]]记得在nn/modules/init.py的导出列表里加入LocalAttention、RMBC_LA、C3k2_RMBC_LA同时确认tasks.py文件顶部的import里包含这几个类名否则parse_model解析yaml时会直接报NameError。4.3 修改yaml并启用新结构模块接入之后只需要把模型yaml里的C3k2字样替换成C3k2_RMBC_LA。这里给出一个backbone部分的配置片段注意参数含义后面的数字3代表该模块重复次数方括号里第一个数字是输出通道第二个数字是通道缩放系数e。backbone: - [-1, 1, Conv, [64, 3, 2]] - [-1, 1, Conv, [128, 3, 2]] - [-1, 3, C3k2_RMBC_LA, [256, 0.5]] - [-1, 1, Conv, [256, 3, 2]] - [-1, 3, C3k2_RMBC_LA, [512, 0.5]] - [-1, 1, Conv, [512, 3, 2]] - [-1, 3, C3k2_RMBC_LA, [1024, 0.5]] - [-1, 1, SPPF, [1024, 5]]改完yaml之后一定要先做结构自检不要急着开训练。用YOLO类加载yaml文件打印模型结构确认每一层的输入输出shape正确再调用info方法查看参数量和计算量确认增幅符合预期。from ultralytics import YOLO model YOLO(yolo26_rmbc_la.yaml) model.info() # 打印参数量、GFLOPs和每层shape这一步能提前暴露90%的配置问题和维度问题。我见过太多人跳过这一步直接开训练然后在第几十轮报错白白浪费几个小时的算力。5. 训练验证效果到底提升了多少5.1 实验配置与对照方案为了验证RMBC_LA的实际收益我设计了三组对比实验。数据集用的是我手头一个八类工业外观缺陷数据集包含划痕、脏污、崩角、压伤等典型缺陷一共一万两千张图缺陷目标普遍偏小最长边多数在四十个像素以下。原始图像分辨率是1280训练时统一缩放到640。设备是一台单卡工作站显存24G。训练配置保持完全一致确保变量只来自模块结构。三百个epochbatch size为32输入尺寸640。优化器用SGD初始学习率0.01weight decay为0.0005预热三个epoch之后余弦退火。数据增强使用仓库默认的Mosaic加MixUp组合不做额外调整。三组实验分别是原版C3k2作为baseline全模型所有C3k2替换为C3k2_RMBC_LA只在backbone部分替换C3k2_RMBC_LAneck保持原版。第三种方案是为了观察模块在不同位置的作用差异判断它对浅层语义和深层语义的贡献程度。5.2 结果对比表整体训练过程还算顺利没有出现不收敛的情况。三百个epoch跑完之后各指标对比如下。模型mAP50mAP50-95参数量FLOPs单张推理耗时YOLO26 baseline92.174.68.2M24.1G5.8ms全模型替换RMBC_LA93.975.89.2M26.0G6.3ms仅backbone替换92.875.18.6M24.8G6.0ms全模型替换之后mAP50提升了1.8个百分点mAP50-95提升了1.2个百分点。参数量增加了大约12%FLOPs增加了8%单张推理耗时从5.8毫秒上升到6.3毫秒换来的精度收益在工业缺陷检测场景里是非常值得的。仅backbone替换的方案涨幅略小但代价也更低适合推理延迟约束更紧的部署场景。5.3 从热力图和采样结果看改进来源只看指标还不够我专门抽了几张困难样本做热力图对比。最明显的变化出现在划痕和崩角这两类缺陷上baseline的注意力响应比较发散模型会被背景纹理干扰加入RMBC_LA之后响应区域明显向缺陷边缘收拢且不再只聚焦在单个像素点而是覆盖到缺陷周围的局部上下文区域。这个现象和模块设计是自洽的。5x5支路提供了更大的感受野让模型能感知到缺陷边缘之外的上下文局部注意力又在这些信息中筛选出真正有效的位置抑制了背景纹理的干扰。多分支负责“看到更多”注意力负责“知道看哪”两者配合之后对局部特征模糊但边缘信息关键的小目标尤其有效。6. 常见问题与排查实录6.1 问题速查表改造模块这件事代码本身不难难的是改完之后遇到各种乱七八糟的问题。我把实际训练中遇到过的典型问题和排查思路整理成了一张速查表你可以直接对照处理。现象可能原因处理方法加载模型时报NameError新类没有在__init__.py导出或tasks.py未import检查modules/init.py和tasks.py顶部import训练报维度不匹配parse_model没有正确解析C3k2_RMBC_LA参数确认parse_model分支与C2f对齐加载预训练权重出现大量missing key新模块结构不存在对应权重直接从头训练或用yoloFalse关闭预训练显存占用比预期高很多多分支特征保留导致中间张量增多调低batch size或改用部分层替换精度不升反降学习率不适配或数据集本身对多尺度不敏感先做单分支消融配合学习率搜索导出ONNX时算子报错注意力实现使用了不可导出的操作本文的实现基于PyTorch原生算子一般可正常导出6.2 预训练权重加载与缺失键的处理这个坑几乎每个做模块改进的人都会踩。因为新模块的结构和原版C3k2完全不同当你想加载官方预训练权重时PyTorch会提示一大批missing key和unexpected key。很多人看到这个提示就慌了以为代码有问题。实际上这是完全正常的行为。RMBC_LA内部的LocalAttention、branch5这些层在官方权重里根本不存在自然匹配不上。处理方式有两种一种是不加载预训练权重从头开始训练本文的对照实验就是这么做的另一种是做权重迁移只加载骨干和head部分的权重跳过新模块对应的键。我更推荐第一种方式。因为结构变了之后即使是骨干部分的预训练权重分布也可能和随机初始化的新模块不匹配导致训练早期损失震荡明显。从头训练虽然多花一些时间但结果更可控。6.3 消融实验怎么定位收益来源如果验证效果不理想先不要急着怀疑模块无效做一轮消融实验把问题定位清楚。我把RMBC_LA拆成四种配置完整版、去掉5x5支路、去掉局部注意力、去掉全局残差。每个配置单独训练相同epoch对比结果。实际做下来我发现在部分数据集上5x5支路的贡献很小而在另一部分数据集上去掉局部注意力之后指标立刻掉0.8个点以上。这说明了改进模块的适用边界如果你的目标本身尺寸较大5x5支路带来的额外感受野就是冗余的如果目标纹理简单、背景干净注意力机制能发挥的空间也有限。所以我的建议是拿到任何一个新模块第一轮先全量替换验证上限同时一定要安排消融实验搞清楚哪些组件在你的数据上是真正的贡献者。这不仅能帮你判断模块是否值得保留也能为后续裁剪提供依据。6.4 训练收敛速度与学习率的配合还有一个细节容易被忽略。加入局部注意力之后网络对学习率变得更敏感。我试过直接把baseline的0.01初始学习率套上来跑发现前二十个epoch的loss收敛速度明显偏慢因为注意力模块的Sigmoid输出初期会压缩特征的幅度相当于变相削弱了梯度信号。后来把预热epoch从3增加到5并让初始学习率在预热期内线性爬升问题就缓解了。如果你遇到训练早期loss下降过慢先检查预热设置不要急着调大学习率。大的学习率配合不稳定的注意力权重很容易把训练带到沟里。最后一个建议别全模型无脑替换整套流程走下来我最大的感受是改进模块不是越多越好也不是替换位置越全越好。RMBC_LA这套设计在我这个缺陷检测数据集上表现优秀但换一个目标大而规整的数据集收益可能就打折。动手之前先想清楚你的瓶颈是什么。如果你的模型卡在局部纹理和小目标上多分支加局部注意力是值得尝试的方向如果你的目标本身很大、背景也很干净老老实实调数据增强和损失函数可能比改结构更有效。我现在的习惯是先只在backbone替换两到三层跑一个短训练比如五十个epoch快速看趋势再决定要不要全量替换。这样一轮验证成本很低也不至于把整个训练周期押在一个未经证实的想法上。改模型从来不是终局知道为什么改、改在哪、怎么验证才是真正能沉淀下来的能力。
延伸阅读

更多相关文章

2026/10/22 9:49:09

全双工视频交互:Griffin与Ultravox揭示Agent新方向

这两天的 Agent 圈子里,有两件事值得放到一起看:Tavus 发布了全双工视频交互模型 Griffin,主打"持续读懂表情动作",并且在 VideoFDB 的生成与感知两个榜单上都拿到了第一;另一边,Inworld 宣布收购…

2026/10/22 9:49:09

大模型拒答消除实战:权重消融与LoRA微调

2. 项目概述2.1 核心需求解析“让语言模型摆脱审查的秘密武器——Heretic”这个标题,核心指向一个技术方向:通过对开源大语言模型的权重进行后训练或微调,移除模型内部的拒绝机制与安全对齐约束,使模型在推理时不再对特定主题生成…

2026/10/22 9:43:53

电动车违规识别实战:多特征融合提升小目标检测精度

去年接手某智慧交通试验段项目时,甲方提了一个很具体的要求:识别电动车违规行为,包括不戴头盔、违规载人、闯红灯、逆行。我一开始挺乐观,毕竟目标检测这几年成熟得很,拿着现成的YOLO系列改一改应该就能交付。结果第一…

2026/10/22 10:54:41

Kubernetes容器优雅启动与终止:Probe配置与SIGTERM处理实战

1. 什么是容器的“优雅启动和终止”?它到底在解决什么问题?在 Kubernetes 生产环境里,我见过太多次这样的场景:一个服务刚上线,前端用户就疯狂报错“503 Service Unavailable”;或者运维半夜被告警电话叫醒…

2026/10/22 10:54:41

U8固定资产后台表详解:从fa_Card到折旧与处置的SQL查询实战

做U8固定资产模块的运维和二次开发这些年,被问得最多的就是各种数据对不上的问题:这个月的折旧金额跟总账差了几块钱、某张卡片的原值跟台账对不上、想查一个资产从入账到处置的完整轨迹根本不知道去哪找数据。界面上翻来覆去点不出结果,最后…

2026/10/22 10:54:41

前端安全实战:CSP配置、XSS防护与HTTPS改造完整指南

黑客攻防永远在被动的局面里循环,很多团队在安全上的心态是"先上线,出事了再补",我见过太多项目因为一个存储型XSS漏洞被刷走用户凭证,也见过改造全站HTTPS后噩梦般的混合内容报错。技术债迟早要还,前端安全…

2026/10/22 10:54:41

空间索引实战:从B-tree为什么失效到R-tree与Geohash选型

去年有段时间,我手头一张三千多万行的点位数据表一直跟接口较劲:业务方只要一个“以某点为中心,取半径三公里内全部点位”的功能,第一次跑出三秒以上的耗时,整个页面直接超时。那是我第一次真正意识到,空间…

2026/10/22 10:54:41

AI写Rust为何频频卡壳:所有权与生命周期难题及实战应对

1. 当AI生成的Rust代码开始“胡言乱语” 如果你最近让AI帮你写过Rust代码,大概率经历过这样的场景:它信心满满地吐出一段看似完美的实现,你复制到编辑器里一跑,编译器直接甩出几十行红色报错,从生命周期标注到借用检查…

2026/10/22 10:49:40

PHP依赖安全实战:从Composer审计到GitHub安全咨询的漏洞管理指南

搞PHP项目的人,迟早会跟Packagist打交道。这个默认的包仓库几乎是所有Composer项目的底座,框架、组件、工具脚本,一行composer require就能让对方多年维护的代码进入你的项目。可依赖引入得越轻松,风险藏得就越深。任何一个第三方…

2026/10/21 4:53:08

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/22 0:01:49

电商智能运营体系从0到1:架构设计、落地步骤与避坑指南

前两年我们团队接了一个电商平台的运营中台项目,目标很直白:把过去靠运营拍脑袋做的选品、定价、发券、推活动这些事,逐步用数据算法和自动化流程代替。项目名字内部就叫“电商智能运营体系”。最近有不少朋友问我当时是怎么设计的、踩过哪些…

2026/10/22 0:01:49

若依框架AI代码生成不稳定?用Agent Skill三层结构+五步法搞定

最近一段时间,我一直想把后台管理系统里那些机械重复的增删改查代码交给AI去写。框架用的是若依,按理说这类业务代码模式非常固定,应该是AI最擅长的事情。可真试下来却不是那么回事——你让AI生成一个用户管理模块,它给出的Contro…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑