🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度
在机器人、工业自动化和智能设备领域,视觉感知是实现“智能”的关键一环。无论是让机械臂精准抓取零件,还是让移动机器人自主避障,都需要一套稳定、快速且易于集成的视觉系统。Ultralytics YOLO 系列模型,特别是其最新的 YOLO26,凭借其“训练一次,随处部署”的特性,正在成为机器人视觉开发者的首选工具。它极大地简化了从数据标注、模型训练到边缘部署的全流程,让开发者能将更多精力聚焦于业务逻辑和系统集成,而非底层算法实现。
本文将以一个具体的工程实践为例,详细拆解如何利用 Ultralytics YOLO 框架,从零开始构建并部署一个用于机器人视觉感知的完整解决方案。我们将遵循“概念理解 -> 环境准备 -> 数据与训练 -> 模型导出与部署 -> 系统集成与优化”的路径,确保每一步都有明确的目标、可执行的操作和验证方法。通过这个过程,你将掌握如何将一个前沿的视觉 AI 模型,真正落地到实际的机器人项目中。
1. 理解 Ultralytics YOLO 在机器人视觉中的定位与优势
在深入代码之前,我们需要明确 Ultralytics YOLO 在机器人视觉技术栈中扮演的角色,以及它为何适合此类应用。
1.1 机器人视觉的核心需求与挑战
机器人视觉系统通常运行在资源受限的边缘设备上,如 NVIDIA Jetson、Intel NUC 或树莓派,并直接与机器人的控制系统交互。这带来了几个核心需求:
- 实时性:推理延迟必须足够低(通常要求毫秒级),以确保机器人能对动态环境做出及时反应。过高的延迟会导致机器人动作滞后,甚至引发安全事故。
- 准确性:检测、分割或姿态估计的精度直接影响任务成功率。例如,抓取位置偏差几毫米可能导致装配失败。
- 部署便捷性:机器人平台多样,硬件架构(ARM, x86)、操作系统、推理引擎(TensorRT, OpenVINO, ONNX Runtime)各不相同。模型需要能方便地转换和部署到这些异构环境中。
- 资源效率:在有限的 CPU、GPU 内存和功耗预算下,模型需要在性能和资源消耗之间取得良好平衡。
- 易用性与可维护性:从数据准备到模型迭代的整个生命周期应该工具链完善,降低开发和维护成本。
传统方法中,开发者可能需要在 PyTorch 训练框架、OpenCV 预处理、以及各种硬件厂商的推理 SDK 之间反复切换和适配,流程繁琐且容易出错。
1.2 Ultralytics YOLO 的解决方案
Ultralytics YOLO 框架正是为了解决上述挑战而设计的。它不仅仅是一个模型仓库,更是一个端到端的平台。其核心优势体现在:
- 统一的 API:从数据加载、训练、验证到预测,全部通过一套简洁一致的 Python API 或 CLI 命令完成,极大降低了学习成本。
- 丰富的模型变体:提供从纳米级(YOLO26n)到大型(YOLO26x)不同尺寸的模型,用户可以根据机器人的算力选择最合适的版本,在速度和精度间权衡。
- 强大的导出能力:这是其“为机器人而生”的关键。模型训练完成后,可以一键导出为超过 18 种格式,包括:
- TensorRT:用于 NVIDIA Jetson 等 GPU 设备,实现极致性能。
- OpenVINO:用于 Intel CPU/VPU,获得在 x86 架构上的优化推理。
- ONNX:通用的中间格式,可被多种运行时(如 ONNX Runtime)加载,跨平台兼容性好。
- CoreML:用于 Apple 设备。
- NCNN、TFLite、RKNN等:适用于其他移动端或嵌入式 AI 芯片。
- 内置的 Roboflow 和 SAHI 支持:方便处理大规模数据集和小目标检测问题,这在工业场景中很常见。
- 活跃的社区与企业支持:拥有庞大的用户群和持续更新,遇到问题更容易找到解决方案或获得官方支持。
通过 Ultralytics YOLO,开发者可以专注于视觉任务本身(如“检测传送带上的零件”),而将模型优化和跨平台部署的复杂性交给框架处理。
2. 项目环境准备与依赖配置
开始一个机器人视觉项目,第一步是搭建一个可复现的开发环境。我们将创建一个独立的 Python 环境,并安装必要的依赖。
2.1 创建并激活 Python 虚拟环境
使用虚拟环境可以避免项目间的包版本冲突。推荐使用conda或venv。
# 使用 conda (推荐,尤其涉及 CUDA 时) conda create -n robot_vision python=3.9 conda activate robot_vision # 或者使用 venv python -m venv robot_vision_env # Linux/macOS source robot_vision_env/bin/activate # Windows robot_vision_env\Scripts\activate2.2 安装 Ultralytics 核心包
安装最新版的ultralytics包。它会自动处理大部分依赖,包括 PyTorch(如果未安装)。
pip install ultralytics安装完成后,强烈建议同时安装opencv-python用于图像处理,以及ipython或jupyter用于交互式开发。
pip install opencv-python-headless ipython注意:
opencv-python-headless版本不包含 GUI 功能,更适合服务器或无头环境。如果需要在本地显示图片,可以安装opencv-python。
2.3 验证安装与基础功能
运行一个简单的命令,验证安装是否成功,并查看关键信息。
yolo checks这条命令会检查 Ultralytics 环境,包括 CUDA 是否可用、关键依赖版本等。输出应显示 “Ultralytics YOLOv8.2.xx … CUDA:0 (Tesla T4, 15102MiB)” 之类的信息,表明 GPU 可用。
我们也可以通过一个简单的 Python 脚本进行快速测试:
from ultralytics import YOLO # 加载一个预训练的 COCO 检测模型(YOLO26n) model = YOLO('yolo26n.pt') # 对一张图片进行推理 results = model('https://ultralytics.com/images/bus.jpg') # 显示结果 results[0].show()如果环境配置正确,这段代码会下载yolo26n.pt权重文件,并对示例图片进行检测,弹出显示检测框的图片。
2.4 硬件与驱动准备(针对边缘部署)
如果最终部署目标是 NVIDIA Jetson 或 Intel 计算棒等边缘设备,需要在目标设备上提前准备基础环境。
对于 NVIDIA Jetson:
- 刷写最新的 JetPack SDK(包含 L4T, CUDA, cuDNN, TensorRT)。
- 在 Jetson 上创建虚拟环境并安装 Ultralytics。由于架构是 ARM,某些包可能需要从源码编译,使用
pip install ultralytics通常可以自动处理。
对于 x86 工控机/服务器:
- 确保已安装对应硬件的驱动程序(如 Intel 显卡驱动)。
- 如果使用 Intel OpenVINO,需要额外安装 OpenVINO Runtime 或 Development Tools。
环境准备阶段的清单如下:
| 项目 | 开发机(训练/调试) | 边缘设备(部署) |
|---|---|---|
| 操作系统 | Windows/Linux/macOS | Linux (Ubuntu, JetPack) |
| Python | 3.8-3.11 | 3.8-3.11 (ARM 版本) |
| Ultralytics | pip install ultralytics | pip install ultralytics |
| 深度学习框架 | PyTorch (通过 ultralytics 自动安装) | 通常只需推理运行时(如 TensorRT, OpenVINO) |
| CUDA | 推荐安装(加速训练) | Jetson 已集成,x86 服务器可选 |
| 关键工具 | Git, IDE (VSCode/PyCharm) | SSH, 系统监控工具 |
3. 数据准备与模型训练实战
机器人视觉项目成功的关键在于高质量、有代表性的数据。本节将详细说明数据标注、数据集组织、模型训练和评估的全过程。
3.1 定义视觉任务与数据采集
首先明确机器人的视觉任务。例如:
- 任务A:零件抓取。需要检测传送带上特定类型的零件,并输出其边界框和中心点坐标。
- 任务B:自主导航避障。需要分割出可通行区域和障碍物(如人、货架、柱子)。
根据任务,采集或录制视频、图像数据。数据应尽可能覆盖实际场景中的所有变化:
- 光照变化:白天、夜晚、灯光阴影。
- 视角变化:摄像头高度、角度。
- 目标状态变化:零件不同朝向、遮挡、堆叠。
- 背景干扰:传送带纹理、地面图案、其他移动物体。
3.2 数据标注与格式转换
Ultralytics YOLO 训练需要的数据格式是特定的 YOLO 格式。每个图像对应一个.txt标注文件,文件内容如下:
<class_id> <x_center> <y_center> <width> <height>class_id:物体类别的整数索引,从 0 开始。x_center, y_center:边界框中心点的归一化坐标(除以图像宽度和高度)。width, height:边界框的归一化宽高。
你可以使用专业的标注工具,如:
- Roboflow:在线平台,支持团队协作,可直接导出为 Ultralytics YOLO 格式。
- LabelImg、CVAT:开源桌面/Web工具。
- Ultralytics 自带的标注工具:对于小规模或快速原型,可以使用其内置功能。
假设我们有一个“螺丝检测”任务,有两个类别:nut(螺母)和bolt(螺栓)。标注后,数据集目录结构应如下:
dataset/ ├── train/ │ ├── images/ │ │ ├── img001.jpg │ │ └── ... │ └── labels/ │ ├── img001.txt │ └── ... ├── val/ │ ├── images/ │ └── labels/ └── data.yaml关键的data.yaml文件定义了数据集的元信息:
# data.yaml path: /path/to/dataset # 数据集根目录 train: train/images # 训练集图像路径(相对path) val: val/images # 验证集图像路径(相对path) # 类别名称列表 names: 0: nut 1: bolt # 可选:类别数量 nc: 23.3 模型训练与参数调优
有了标准格式的数据集,就可以开始训练。Ultralytics 提供了极其简单的训练接口。
from ultralytics import YOLO # 加载一个预训练模型作为起点(迁移学习) model = YOLO('yolo26n.pt') # 使用轻量级模型,适合边缘部署 # 开始训练 results = model.train( data='dataset/data.yaml', # 数据集配置文件路径 epochs=100, # 训练轮数 imgsz=640, # 输入图像尺寸 batch=16, # 批次大小(根据GPU内存调整) device=0, # 使用GPU 0,如果是CPU则设为‘cpu’ workers=8, # 数据加载线程数 project='robot_vision', # 项目名称 name='screw_detection', # 实验名称 exist_ok=True, # 允许覆盖同名实验 # 更多高级参数... )训练过程中,Ultralytics 会实时输出损失曲线、精度指标(mAP50, mAP50-95),并保存最佳模型(best.pt)和最后模型(last.pt)到runs/detect/screw_detection/目录下。
关键训练参数解析:
| 参数 | 含义与调优建议 |
|---|---|
epochs | 训练总轮数。数据量少可适当减少(如50),数据量大或任务复杂可增加(如300)。观察验证集指标是否收敛。 |
imgsz | 模型输入的图像尺寸。越大通常精度越高,但计算量呈平方增长。640是常用平衡点,边缘设备可尝试480或320以提升速度。 |
batch | 批次大小。受GPU内存限制。增大batch可能使训练更稳定,但会减少参数更新频率。如果出现内存不足(OOM),减小此值。 |
device | 指定训练设备。0或‘cuda:0’表示第一块GPU,‘cpu’表示CPU(极慢)。 |
workers | 数据加载的并行进程数。可加快数据读取,但设置过高可能导致内存不足。通常设为CPU核心数。 |
patience | 早停耐心值。如果验证集指标在连续patience个epoch没有提升,则提前停止训练,防止过拟合。 |
lr0 | 初始学习率。最重要的超参数之一。太大可能导致训练不稳定,太小则收敛慢。默认值通常不错,可微调。 |
cos_lr | 使用余弦退火学习率调度。通常有助于模型收敛到更好的局部最优解,建议启用。 |
3.4 模型验证与性能评估
训练完成后,使用独立的测试集评估模型性能。
# 加载训练得到的最佳模型 model = YOLO('runs/detect/screw_detection/weights/best.pt') # 在验证集上评估 metrics = model.val() print(metrics.box.map) # 输出 mAP50-95 print(metrics.box.map50) # 输出 mAP50 print(metrics.box.maps) # 输出每个类别的 AP # 对单张图片或视频进行推理测试 results = model('path/to/test_image.jpg', save=True, conf=0.5)评估结果会生成一个包含 Precision-Recall 曲线、混淆矩阵等详细信息的报告。重点关注:
- mAP50-95:综合衡量模型在不同IoU阈值下的平均精度,是核心指标。
- mAP50:IoU阈值为0.5时的平均精度,更宽松,通常值更高。
- 推理速度 (FPS):在目标硬件上测试,确保满足机器人实时性要求。
- 每个类别的 AP:检查是否有某个类别识别效果特别差,可能需要补充该类别的数据。
4. 模型导出与边缘设备部署
训练出满意的模型后,下一步是将其部署到机器人的边缘计算单元上。Ultralytics 的模型导出功能是这一环节的核心。
4.1 导出为生产环境格式
根据目标硬件的推理引擎,选择合适的导出格式。以下是一些常见场景:
from ultralytics import YOLO model = YOLO('runs/detect/screw_detection/weights/best.pt') # 场景1:部署到 NVIDIA Jetson (TensorRT) # 这将生成一个 .engine 文件,需要先在目标设备上安装 TensorRT model.export(format='engine', imgsz=640, batch=1, workspace=4) # workspace单位是GB # 场景2:部署到 Intel CPU/VPU (OpenVINO) # 生成 .xml 和 .bin 文件 model.export(format='openvino', imgsz=640) # 场景3:部署到支持 ONNX Runtime 的任何平台 (ARM/x86) # 生成 .onnx 文件,兼容性最广 model.export(format='onnx', imgsz=640, opset=12) # 场景4:部署到安卓设备 (NCNN/TFLite) model.export(format='ncnn') # 适用于小米、华为等设备的 NCNN 后端 # 或 model.export(format='tflite') # TensorFlow Lite 格式 # 场景5:直接导出为 TorchScript,用于 PyTorch 原生环境 model.export(format='torchscript')导出命令会自动进行模型优化,包括图优化、算子融合、量化(部分格式)等,以提升推理速度。
4.2 在边缘设备上进行推理
模型导出后,需要编写推理代码加载模型并处理摄像头或图像输入。这里以ONNX Runtime和TensorRT为例,因为它们非常普遍。
使用 ONNX Runtime 推理 (Python):
import cv2 import numpy as np import onnxruntime as ort class YOLOInference: def __init__(self, model_path, conf_thres=0.5, iou_thres=0.45): self.conf_threshold = conf_thres self.iou_threshold = iou_thres # 初始化 ONNX Runtime 会话 self.session = ort.InferenceSession(model_path, providers=['CUDAExecutionProvider', 'CPUExecutionProvider']) self.input_name = self.session.get_inputs()[0].name # 获取输入尺寸 (e.g., [1, 3, 640, 640]) self.input_shape = self.session.get_inputs()[0].shape self.imgsz = self.input_shape[2] # 假设是正方形输入 def preprocess(self, image): """将OpenCV图像预处理为模型输入张量""" # 调整大小并保持长宽比填充 h, w = image.shape[:2] r = min(self.imgsz / h, self.imgsz / w) new_h, new_w = int(h * r), int(w * r) resized = cv2.resize(image, (new_w, new_h)) # 创建画布并填充 canvas = np.full((self.imgsz, self.imgsz, 3), 114, dtype=np.uint8) canvas[(self.imgsz-new_h)//2:(self.imgsz-new_h)//2+new_h, (self.imgsz-new_w)//2:(self.imgsz-new_w)//2+new_w] = resized # 转换通道、归一化、调整维度 blob = canvas.transpose(2, 0, 1) # HWC -> CHW blob = blob.astype(np.float32) / 255.0 # 归一化 blob = np.expand_dims(blob, axis=0) # 添加批次维度 return blob, (w, h), (new_w, new_h) def infer(self, image): """执行推理""" blob, orig_shape, new_shape = self.preprocess(image) outputs = self.session.run(None, {self.input_name: blob}) # outputs[0] 的形状通常是 [1, 84, 8400] (对于YOLO26) # 需要后处理(非极大值抑制 NMS)来解析出检测框 # 这里省略了NMS的具体实现,可使用ultralytics.utils.ops或自行实现 detections = self.postprocess(outputs[0], orig_shape, new_shape) return detections def postprocess(self, outputs, orig_shape, new_shape): """解析模型输出,应用NMS,将坐标映射回原图""" # 这是一个简化的示例,实际需要根据模型输出结构进行解析 # 建议直接使用 ultralytics 导出的模型自带的推理类,或参考其源码 pass # 使用示例 if __name__ == '__main__': detector = YOLOInference('best.onnx') cap = cv2.VideoCapture(0) # 打开摄像头 while True: ret, frame = cap.read() if not ret: break detections = detector.infer(frame) # 在frame上绘制检测框... cv2.imshow('Robot Vision', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()使用 TensorRT 推理 (Python):
对于 TensorRT(.engine文件),推理流程类似,但需要使用 TensorRT 的 Python API 来加载引擎。Ultralytics 导出的.engine文件通常可以直接用其内置的推理类加载,简化流程:
from ultralytics import YOLO import cv2 # 直接加载 .engine 文件,Ultralytics 会处理 TensorRT 的初始化 model = YOLO('best.engine') # 推理方式与 .pt 模型完全一致! results = model(frame, stream=True) # stream=True 用于视频流,效率更高 for r in results: boxes = r.boxes for box in boxes: # 获取坐标、置信度、类别 x1, y1, x2, y2 = box.xyxy[0].tolist() conf = box.conf[0].item() cls = int(box.cls[0].item()) # 在图像上绘制...这种一致性是 Ultralytics 的巨大优势,开发者无需为不同部署格式重写大量代码。
4.3 部署优化技巧
- 动态批处理 vs 静态批处理:在导出 TensorRT 或 ONNX 模型时,可以指定
batch参数。如果机器人每次只处理一帧图像,使用batch=1(静态)即可。如果需要处理多路摄像头或批量处理,可以设置为更大的值,但会增加延迟和内存占用。 - 精度与速度权衡:导出时可以使用
half=True参数进行 FP16 半精度量化,这能显著提升速度(尤其是 GPU),并略微降低精度。对于 Jetson 等边缘 GPU,FP16 是推荐选择。 - INT8 量化:对于极致性能要求且能接受一定精度损失的场景,可以探索 INT8 量化。这需要校准数据集,并且推理引擎(如 TensorRT)支持。
- 输入尺寸优化:训练时用的
imgsz直接影响模型复杂度和速度。在满足精度的前提下,尽量使用较小的输入尺寸(如 320x320)。 - 使用 TensorRT 的 FP16/INT8 和层融合:在 Jetson 上,确保 JetPack 中的 TensorRT 版本支持这些优化,Ultralytics 的导出通常会自动应用一些优化。
5. 系统集成、排错与最佳实践
将训练好的视觉模型集成到机器人系统中,并确保其稳定可靠运行,是最后的“临门一脚”。这里涉及软件架构、错误处理和性能监控。
5.1 机器人系统中的软件架构
一个典型的机器人视觉模块架构如下:
机器人主控系统 (ROS/自定义) | v [ 视觉服务模块 ] | | v v 相机驱动 模型推理 (OpenCV) (YOLO Engine) | | v v 图像采集 -> 预处理 -> 推理 -> 后处理 -> 结果发布 | v 坐标转换、滤波、决策关键集成点:
- 图像输入:通过 USB 相机、GigE 相机或 ROS 图像话题获取图像流。
- 推理服务:将上一节的推理代码封装成一个独立的服务或节点。这个服务应持续运行,监听图像输入,并发布检测结果(如边界框列表、类别、置信度)。
- 结果输出:将检测结果转换为机器人坐标系下的信息(这需要相机标定)。然后发布给机器人的路径规划、抓取控制等模块。
- 资源管理:确保视觉模块不会耗尽边缘设备的 CPU/GPU/内存资源,影响机器人其他关键功能(如运动控制)。
5.2 常见问题与排查路径
在部署和集成过程中,你可能会遇到以下典型问题:
| 问题现象 | 可能原因 | 检查与解决步骤 |
|---|---|---|
| 模型加载失败 | 1. 模型文件损坏或路径错误。 2. 推理引擎版本不兼容(如 ONNX opset 版本)。 3. 缺少必要的依赖库(如 TensorRT, OpenVINO)。 | 1. 检查文件路径和完整性。 2. 确认导出时的 opset版本与运行时 ONNX 版本兼容。3. 在目标设备上安装正确的推理后端,并验证其基本功能。 |
| 推理速度极慢 | 1. 使用了 CPU 模式而非 GPU。 2. 模型输入尺寸过大。 3. 未启用半精度(FP16)或 INT8 量化。 4. 预处理/后处理代码效率低下。 | 1. 确认代码中指定了 GPU 设备。 2. 尝试减小 imgsz并重新导出模型。3. 导出时添加 half=True参数。4. 使用 Profiling 工具(如 PyTorch Profiler, Nsight)定位瓶颈。 |
| 检测结果为空或不准 | 1. 训练数据与部署场景差异过大(域偏移)。 2. 推理时置信度阈值 ( conf) 设置过高。3. 预处理(缩放、归一化)与训练时不一致。 4. 相机图像色彩空间(如BGR/RGB)问题。 | 1. 在部署场景中采集少量数据做验证,检查模型表现。 2. 逐步调低 conf参数观察。3. 确保推理代码的预处理逻辑与 model.train()或model.predict()内部逻辑一致。4. 使用 cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)进行转换。 |
| 内存泄漏或溢出 | 1. 推理会话 (ort.InferenceSession) 在循环中重复创建。2. 图像张量未释放。 3. 批处理大小 ( batch) 设置过大。 | 1. 确保推理会话 (session) 和模型 (model) 在程序初始化时只加载一次。2. 检查代码,确保大的临时变量(如图像数组)在循环外复用或及时释放。 3. 减小导出或推理时的批处理大小。 |
| 多线程/进程冲突 | 多个线程同时调用同一个模型实例导致状态混乱。 | 为每个线程或进程创建独立的模型实例,或使用线程锁 (threading.Lock) 保护模型调用。更好的方式是采用生产者-消费者模式,一个专用推理线程处理任务队列。 |
5.3 生产环境最佳实践清单
为了确保机器人视觉系统在生产中稳定运行,请遵循以下清单:
健壮性设计:
- 心跳与超时:视觉服务应定期向主控系统发送“心跳”信号。主控系统设置超时机制,一旦视觉服务无响应,触发安全策略(如停机)。
- 异常捕获:推理代码必须被
try...except块包裹,捕获所有可能异常(如相机断连、模型加载失败、推理错误),并记录详细日志,避免整个程序崩溃。 - 降级策略:当视觉模块失效时,系统应有备用方案(如切换到预设路径、发出声光警报、进入手动模式)。
可观测性与监控:
- 日志记录:记录关键事件(服务启动、模型加载、每帧推理耗时、检测到的目标数、异常信息)。使用结构化日志(如 JSON 格式),便于后续分析。
- 性能指标:持续监控并记录平均推理延迟(FPS)、GPU/CPU 使用率、内存占用。设置阈值告警。
- 结果可视化:开发一个简单的调试界面,实时显示相机画面和检测框。这对于现场调试和问题复现至关重要。
模型迭代与更新:
- 版本控制:对训练代码、数据集、模型文件(
.pt,.onnx,.engine)进行严格的版本控制(如 Git + DVC)。 - A/B 测试:部署新模型时,可以先在小范围或测试环境中进行 A/B 测试,对比新旧模型的关键指标(精度、速度、稳定性),再全量更新。
- 持续学习:设计一个数据回流机制。当机器人在运行中遇到难以识别的场景(低置信度检测或人工纠正),可以自动或半自动地保存图像和标注,用于后续的模型再训练。
- 版本控制:对训练代码、数据集、模型文件(
安全与合规:
- 数据隐私:如果视觉系统会拍摄到人脸、车牌等敏感信息,需确保符合相关数据隐私法规。考虑在边缘端进行匿名化处理(如模糊化)。
- 功能安全:对于安全关键的应用(如与人协作的机器人),视觉系统的失效必须被安全地处理。可能需要冗余传感器(如激光雷达)或设计安全层。
通过遵循上述从环境搭建、数据训练、模型导出到系统集成和运维的完整流程,你将能够系统地构建并部署一个基于 Ultralytics YOLO 的、可用于真实机器人项目的视觉感知模块。这个流程不仅适用于“智能麻将机器人”这样的趣味项目,其方法论同样可以迁移到工业分拣、仓储物流、服务机器人等严肃的生产场景中。记住,成功的 AI 落地,是扎实的工程实践与对业务场景深刻理解的结合。
🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度