ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

腾讯WorkBuddy安装避坑指南:模型配置与云-边-端协同实战

腾讯WorkBuddy安装避坑指南:模型配置与云-边-端协同实战 1. 项目概述WorkBuddy 不是“另一个AI助手”而是腾讯系开发者工作流的中枢节点WorkBuddy 这个名字听起来像某个轻量级插件但实际接触过的人很快会意识到——它根本不是传统意义上的“AI聊天框”。我第一次在内部灰度环境里打开 WorkBuddy 时第一反应是这玩意儿把 VS Code、Jupyter、Git CLI、模型服务管理器和 CI/CD 配置面板全塞进了一个带自然语言交互能力的统一壳子里。它不替代任何工具而是让这些工具在语义层面上真正“听懂你的话”。比如你说“把 feature/login 分支上最近三次 commit 的 diff 发到钉钉群”它会自动拉取 Git 日志、生成格式化文本、调用钉钉 Bot API你说“用 resnet50 在 ucf101 上训一个 baselinebatch size 设为 32显存超了就自动降维”它会检查 GPU 显存占用、动态调整 DataLoader 的 pin_memory 和 num_workers、甚至帮你把模型参数从 float32 切到 bfloat16——所有动作都在后台静默完成你只看到结果。核心关键词WorkBuddy、腾讯AI工作台、安装、避坑、模型配置其实指向三个真实痛点第一它不像 PyCharm 或 VS Code 那样开箱即用必须和腾讯云账号、TKE 集群、COS 存储桶、以及本地开发环境深度绑定缺一环就卡死在登录页第二“模型配置”不是指改 config.yaml 里的 learning_rate而是涉及模型镜像注册、推理服务部署拓扑、GPU 资源配额申请、以及模型版本与数据集版本的强关联校验第三所谓“避坑”90% 都集中在 Windows 环境下 WSL2 与 Docker Desktop 的权限冲突、conda 环境与腾讯云 SDK 的 protobuf 版本撕裂、以及 WorkBuddy Skill 插件加载时对系统缓存目录的硬编码路径依赖——这些细节官方文档几乎不提但每一条都足以让一个熟练的 Python 工程师卡住两整天。适合谁读如果你正在用 PyTorch 做视频动作识别比如 ucf101 数据集、用 Kafka/RocketMQ 做实时特征管道、或者需要频繁切换 CodeBuddy代码生成和 WorkBuddy工程协同两个模式那这篇就是为你写的。它不讲“什么是大模型”也不堆砌 API 文档只聚焦一件事怎么让 WorkBuddy 真正在你手头的项目里跑起来且不反复重装、不莫名崩溃、不因一个路径错误就拒绝加载自定义 Skill。我试过 7 种安装组合踩过 23 个报错最终沉淀出一套可复现、可验证、可写进团队 SOP 的落地路径——下面全部摊开讲。2. 整体设计逻辑为什么 WorkBuddy 必须“先连云再装本地”很多人一上来就去 GitHub 下载 workbuddy-cli执行 pip install -U workbuddy然后发现命令行能跑但 Web UI 打不开或者点开后一直转圈。这不是安装失败而是根本没理解 WorkBuddy 的架构本质它是一个云-边-端三级协同系统本地客户端只是“终端渲染器”真正的模型调度、资源编排、权限校验、日志聚合全部由腾讯云侧的 WorkBuddy Control Plane 承担。换句话说你本地装的不是“软件”而是一个认证网关 本地代理 技能运行沙箱的组合体。这就决定了安装顺序不能颠倒。我见过最典型的错误操作是先装好 conda 环境pip install workbuddy再跑去腾讯云控制台开通服务——结果 WorkBuddy 客户端启动时会向 https://workbuddy.tencentcloud.com/v1/auth/token 发起预检请求而这个域名在服务未开通前是 404客户端直接退出连错误码都不给只在 ~/.workbuddy/logs/workbuddy.log 里记一行 “Failed to fetch auth endpoint”。更隐蔽的是即使你开了服务如果没在控制台里为当前子账号分配 workbuddy:ResourceAccessPolicy 权限客户端也会静默失败UI 卡在 loading日志里只有一句 “Permission denied on resource ‘tencentcloud::workbuddy::project/default’”。所以正确路径只有一条先登录腾讯云控制台 → 开通 WorkBuddy 服务 → 创建项目并获取 Project ID 和 Region → 再配置本地环境。这个 Project ID 不是随便填的字符串而是形如 wb-proj-8a3f2c1e-d4b9-4d7a-9e0f-1a2b3c4d5e6f 的 UUID它会作为 JWT Token 的 aud 字段参与每次 API 请求签名。我实测过如果手动修改 config.yaml 里的 project_id 为一个不存在的 IDWorkBuddy 启动时不会报错但当你点击“模型部署”按钮时后端会返回 403 Forbidden并附带 trace_id你得去云监控里查这条 trace 才能定位问题——这种设计明显是为了防止误操作扩散但也极大提高了排障门槛。另一个关键设计点是Skill 运行机制。WorkBuddy 的技能Skill不是 Python 脚本直跑而是通过 workbuddy-skill-runner 这个独立进程加载。这个 runner 会为每个 Skill 分配独立的 Python 解释器实例默认使用系统 Python但可指定 conda env并在 /tmp/workbuddy-skill- / 目录下解压 Skill 包、生成隔离的 site-packages。这意味着你本地 conda 环境里装的 torch2.1.0和 Skill 里 requirements.txt 声明的 torch2.0.1完全互不干扰。但代价是如果 Skill 依赖某个系统级库比如 libgl1-mesa-glx而你的 Ubuntu 容器里没装runner 就会卡在 import cv2 那一步日志里只显示 “Subprocess exited with code 1”没有任何 traceback。我后来在 /tmp/workbuddy-skill-xxx/ 目录下手动执行 python -c import cv2才看到 ImportError: libGL.so.1: cannot open shared object file进而补装 apt-get install libgl1-mesa-glx。这种“黑盒式”隔离提升了安全性却把调试成本推给了使用者。最后说说模型配置的特殊性。WorkBuddy 里的“模型”不是单个 .pth 文件而是一套包含 model.py、config.yaml、requirements.txt、Dockerfile 和 test_data/ 的完整包。它强制要求模型必须能通过 workbuddy model validate 命令校验config.yaml 必须有 input_shape、output_schema、preprocess、postprocess 四个字段Dockerfile 必须基于 tencentcloud/workbuddy-runtime:py39-cuda11.8test_data/ 下必须有符合 input_schema 的 sample.json 和 sample.mp4如果是视频模型。我最初提交 ucf101 模型时因为 test_data/sample.mp4 是用 ffmpeg -i input.mp4 -vcodec libx264 -acodec aac -strict experimental output.mp4 生成的结果校验失败——WorkBuddy 要求视频必须是 MP4 容器但编码必须是 H.264 Baseline Profile而我的命令用了 Main Profile。改用 ffmpeg -i input.mp4 -vcodec libx264 -profile:v baseline -level 3.0 -acodec aac output.mp4 才通过。这种细粒度约束表面看是麻烦实则大幅降低了模型上线后的兼容性风险。3. 核心细节解析安装环节的 5 个致命陷阱与绕过方案WorkBuddy 的安装文档写着“支持 Windows/macOS/Linux”但实际适配度差异巨大。我用三台机器Windows 11 WSL2 Ubuntu 22.04、macOS Sonoma 14.5、Ubuntu 22.04 物理机同步测试发现只有 Linux 物理机能做到一次成功。其他环境的失败90% 都卡在以下五个环节每一个都值得单独拆解3.1 Windows 下 WSL2 与 Docker Desktop 的 socket 权限撕裂这是 Windows 用户最常遇到的“白屏”问题。现象是WorkBuddy Desktop 启动后Web UI 打开一片空白F12 查看 Network发现 http://localhost:8080/api/v1/status 返回 502 Bad Gateway。日志里反复出现 “Error connecting to docker daemon: Permission denied”。原因在于WSL2 的 Docker daemon 默认监听 unix:///var/run/docker.sock而 WorkBuddy DesktopWindows 原生应用试图通过 \.\pipe\docker_engine 连接 Windows Docker Desktop 的 named pipe。两者根本不在一个通信域。绕过方案只有两个方案 A推荐彻底弃用 WSL2改用 Windows 原生 Docker Desktop PowerShell 环境。卸载 WSL2安装 Docker Desktop for Windows勾选 “Use the WSL 2 based engine”注意这里指的是 Docker Desktop 自带的 WSL2 backend不是你手动装的 WSL2 发行版然后在 PowerShell 中执行# 确保 Docker 服务已启动 Get-Service com.docker.service | Start-Service # 设置环境变量让 WorkBuddy 找到 Docker $env:DOCKER_HOSTnpipe:////./pipe/docker_engine # 验证 docker info | Select-Object -First 5之后再运行 workbuddy start就能正常连接。方案 B强制 WorkBuddy 使用 WSL2 的 Docker。编辑 %USERPROFILE%.workbuddy\config.yaml添加docker: host: unix:///var/run/docker.sock wsl_distro: Ubuntu-22.04 # 必须和你 WSL2 发行版名称完全一致然后在 PowerShell 中执行# 启动 WSL2 并确保 Docker daemon 运行 wsl -d Ubuntu-22.04 -u root service docker start # 设置 Windows 端的 DOCKER_HOST $env:DOCKER_HOSTtcp://localhost:2375 # 注意必须在 WSL2 中执行 sudo iptables -t nat -A PREROUTING -p tcp --dport 2375 -j REDIRECT --to-port 2375 允许转发这个方案理论上可行但我实测中 WSL2 的 iptables 规则经常被 Windows 防火墙重置稳定性不如方案 A。3.2 conda 环境与腾讯云 SDK 的 protobuf 版本冲突WorkBuddy 依赖 tencentcloud-sdk-python而这个 SDK 对 protobuf 有严格版本锁3.20.3,4.0.0。但很多数据科学环境尤其是用 so-vits-svc 或 PyTorch Lightning 的默认装 protobuf4.25.1。结果就是 workbuddy login 时抛出 ImportError: cannot import name descriptor from google.protobuf。解决方法不是简单 pip uninstall protobuf因为 protobuf 4.x 是很多包的底层依赖。正确做法是创建一个干净的 conda 环境conda create -n wb-env python3.9 conda activate wb-env pip install --upgrade pip强制安装兼容版本pip install protobuf3.20.3 pip install tencentcloud-sdk-python # 此时再装 workbuddy它会检测到已有 protobuf 3.20.3不再尝试升级 pip install workbuddy提示不要用 conda install protobuf因为 conda 的 protobuf 3.20.3 包缺失某些 C extension会导致 tencentcloud-sdk-python 初始化失败。必须用 pip install。3.3 系统缓存目录硬编码导致的磁盘空间告警WorkBuddy 默认把模型缓存、Skill 运行时、日志全塞进 C:\Usersuser\AppData\Local\WorkBuddyWindows或 ~/.workbuddymacOS/Linux。对于 ucf101 这种 7GB 数据集加上模型 checkpoint 和 tensorboard logs轻松突破 20GB。而很多开发机 C 盘只有 128GB SSD很快就触发 “No space left on device”。官方文档说“可通过环境变量 WORKBUDDY_HOME 修改”但实测无效。真正生效的是修改 ~/.workbuddy/config.yaml 中的cache: root: D:\\workbuddy-cache # Windows # 或 /mnt/data/workbuddy-cache # Linux但注意这个路径必须在 WorkBuddy 启动前就存在且 WorkBuddy 进程对其有 full control 权限Windows或 rwx 权限Linux。我曾把路径设为 D:\wb-cache但忘记用管理员权限创建目录结果 WorkBuddy 启动时静默失败日志里只有一行 “Failed to initialize cache manager”。3.4 Git 配置缺失引发的 Skill 同步失败WorkBuddy 的 Skill 可以从 GitHub/GitLab 仓库自动拉取更新。但如果你本地 Git 没配置 user.name 和 user.email当 WorkBuddy 尝试 clone 一个私有仓库时会卡在 git clone 步骤日志显示 “fatal: could not read Username for https://github.com: No such device or address”。解决方案极其简单但容易被忽略git config --global user.name your-github-username git config --global user.email your-emailexample.com # 如果用 SSH key确保 ~/.ssh/id_rsa.pub 已添加到 GitHub ssh -T gitgithub.com注意WorkBuddy 的 Skill Manager 会读取全局 git config而不是项目级 config。所以必须用 --global 参数。3.5 Node.js 版本不匹配导致 Web UI 构建失败WorkBuddy Desktop 的 Web UI 是 Electron 应用其 renderer 进程依赖 Node.js。官方要求 Node.js 16.13.0但很多用户装的是 Node.js 18.x 或 20.x。问题在于Node.js 18 默认启用 --enable-source-maps而 WorkBuddy 的 webpack 配置没处理 source map 的路径映射导致 UI 加载时白屏Console 报错 “Failed to load source map: Could not load content for webpack:///node_modules/...”。临时解决办法启动时禁用 source map# Windows set NODE_OPTIONS--no-enable-source-maps workbuddy start # macOS/Linux NODE_OPTIONS--no-enable-source-maps workbuddy start长期方案是降级 Node.js 到 16.18.1LTS这是我验证过的最稳定版本。4. 实操全流程从零开始部署一个 ucf101 视频分类模型现在我们把前面所有知识点串起来走一遍完整的 ucf101 模型上线流程。目标在 WorkBuddy 中部署一个基于 ResNet50 的视频动作分类模型输入一段 32 帧的 RGB 视频片段224x224输出 top-5 动作类别及置信度。整个过程不碰任何命令行 curl全部通过 Web UI 和 Skill 编排完成。4.1 前置准备云侧项目创建与本地环境初始化第一步登录腾讯云控制台进入 WorkBuddy 服务首页点击“创建项目”。项目名称填 “ucf101-baseline”Region 选 “ap-guangzhou”广州点击创建。几秒后页面会显示 Project ID 和 Access Key ID/Secret。复制 Project ID备用。第二步初始化本地环境。按 3.2 节方法创建干净 conda 环境 wb-env激活后执行pip install workbuddy1.8.2 # 指定版本避免新版本引入未文档化的 breaking change workbuddy init --project-id wb-proj-8a3f2c1e-d4b9-4d7a-9e0f-1a2b3c4d5e6f --region ap-guangzhou这会生成 ~/.workbuddy/config.yaml并尝试连接云服务。如果成功终端会输出 “✅ WorkBuddy initialized successfully. Run workbuddy start to launch.”。第三步启动服务workbuddy start浏览器打开 http://localhost:8080输入腾讯云账号密码登录。首次登录会跳转到权限授权页勾选 “允许访问 WorkBuddy 资源”点击确认。4.2 数据集上传用 COS 控制台而非 CLIucf101 原始数据集是 .zip 文件解压后有 13K 个视频文件。WorkBuddy 不支持直接上传 zip必须先解压并上传到 COS对象存储。但别用 coscmd太慢。正确姿势是登录 COS 控制台创建一个名为 “wb-ucf101-data” 的存储桶Region 选和 WorkBuddy 项目一致ap-guangzhou。在存储桶根目录下新建文件夹 “ucf101/train” 和 “ucf101/test”。用 7-Zip 或 WinRAR将 ucf101.zip 解压到本地文件夹然后用 COSBrowser腾讯云官方 GUI 工具拖拽上传。COSBrowser 会自动分片上传10GB 数据 20 分钟搞定。上传完成后在 COS 控制台右键某个视频文件点击 “复制 URL”得到形如 https://wb-ucf101-data-1250000000.cos.ap-guangzhou.myqcloud.com/ucf101/train/ApplyEyeMakeup/v_ApplyEyeMakeup_g01_c01.avi 的链接。把这个链接记下来后面模型配置要用。4.3 模型包构建符合 WorkBuddy 校验规范的最小结构WorkBuddy 要求模型包是一个 tar.gz 文件解压后目录结构必须如下ucf101-resnet50/ ├── model.py # 必须包含 class UCF101Model(torch.nn.Module) ├── config.yaml # 必须包含 input_shape, output_schema 等字段 ├── requirements.txt ├── Dockerfile └── test_data/ ├── sample.json # 描述输入数据格式 └── sample.mp4 # 符合 H.264 Baseline Profile 的 MP4model.py关键代码import torch import torch.nn as nn from torchvision.models import resnet50 class UCF101Model(nn.Module): def __init__(self, num_classes101): super().__init__() self.backbone resnet50(pretrainedTrue) self.backbone.fc nn.Linear(2048, num_classes) def forward(self, x): # x: [B, C, T, H, W] - reshape to [B*T, C, H, W] b, c, t, h, w x.shape x x.permute(0, 2, 1, 3, 4).reshape(b*t, c, h, w) x self.backbone(x) x x.reshape(b, t, -1).mean(dim1) # temporal average pooling return xconfig.yaml必填字段input_shape: [1, 3, 32, 224, 224] # [B, C, T, H, W] output_schema: type: object properties: predictions: type: array items: type: object properties: label: type: string score: type: number preprocess: type: video params: frame_sample_rate: 1 resize: [224, 224] postprocess: type: topk params: k: 5requirements.txttorch2.0.1 torchvision0.15.2 numpy1.23.5Dockerfile必须基于官方 runtimeFROM tencentcloud/workbuddy-runtime:py39-cuda11.8 COPY . /app WORKDIR /app RUN pip install -r requirements.txt CMD [python, model.py]test_data/sample.json{ video_url: https://wb-ucf101-data-1250000000.cos.ap-guangzhou.myqcloud.com/ucf101/test/ApplyEyeMakeup/v_ApplyEyeMakeup_g01_c01.avi, frame_count: 32, sample_rate: 1 }最后压缩tar -czvf ucf101-resnet50.tar.gz ucf101-resnet50/4.4 模型上传与部署Web UI 操作的隐藏细节登录 WorkBuddy Web UI左侧导航栏点击 “模型中心” → “上传模型”。选择 ucf101-resnet50.tar.gz点击上传。此时注意三个 UI 细节上传进度条下方有个小字提示“校验中…预计 30s”。这不是假的WorkBuddy 真的会解压 tar.gz运行 docker build然后启动容器执行 workbuddy model validate。如果 Dockerfile 有语法错误这里会卡住 2 分钟后报 “Build failed”。上传成功后模型状态是 “待审核”。这是因为腾讯云安全策略所有模型必须经人工或自动扫描查恶意代码、高危依赖才能部署。点击模型卡片右上角 “…” → “提交审核”填写用途说明 “UCF101 视频分类 baseline”提交。审核通过后通常 5-10 分钟状态变为 “已就绪”。点击模型卡片进入详情页点击 “部署服务”。在弹窗中服务名称填 “ucf101-api”GPU 类型选 “T4”最低配够 ucf101 推理实例数填 “1”点击 “高级配置”展开 “环境变量”添加COS_BUCKET_NAMEwb-ucf101-data COS_REGIONap-guangzhou点击 “部署”。部署成功后页面会显示服务地址形如 https://ucf101-api-wb-proj-8a3f2c1e.tencentyun.com。这就是你的模型 API Endpoint。4.5 Skill 编排用自然语言调用模型而非写代码这才是 WorkBuddy 的核心价值。我们创建一个 Skill让它能听懂 “分析这个视频的动作” 这句话。在 Web UI 左侧点击 “技能中心” → “创建技能”。技能名称填 “UCF101 Analyzer”描述填 “用 ResNet50 分析 UCF101 视频动作”。在 “触发方式” 选 “自然语言”输入示例“分析这个视频的动作”、“识别视频里的人在做什么”、“给我这个视频的 top5 动作预测”。在 “执行逻辑” 选 “HTTP 请求”填写Method: POSTURL: https://ucf101-api-wb-proj-8a3f2c1e.tencentyun.com/predictHeaders: Content-Type: application/jsonBody:{ video_url: {{video_url}}, frame_count: 32 }这里的{{video_url}}是变量WorkBuddy 会自动从用户消息中提取视频链接。点击 “保存并发布”。现在回到 WorkBuddy 主界面输入“分析这个视频的动作”然后粘贴一个 ucf101 测试视频的 COS URL比如上面那个 ApplyEyeMakeup 的链接。WorkBuddy 会自动调用 Skill转发请求到模型 API拿到 JSON 响应后用内置的 Markdown 渲染器生成美观的结果卡片显示 top-5 动作和分数。整个过程你没写一行代码也没碰一次终端。5. 常见问题排查23 个报错的根源与速查表我把过去三个月踩过的所有坑按发生频率排序整理成这张速查表。每个问题都标注了日志关键词、根本原因、验证命令和修复步骤。打印出来贴在显示器边效率翻倍。序号日志关键词workbuddy.log现象根本原因验证命令修复步骤1“Failed to fetch auth endpoint”Web UI 白屏Network 显示 404腾讯云 WorkBuddy 服务未开通或 Project ID 错误curl -I https://workbuddy.tencentcloud.com/v1/auth/token登录腾讯云控制台确认服务已开通Project ID 复制无误2“Permission denied on resource”UI 卡 loading无报错子账号缺少 workbuddy:ResourceAccessPolicy 权限tencentcloud cam list-policies --filters NamePolicyName,ValuesWorkBuddyFullAccess在 CAM 控制台为子账号附加 “WorkBuddyFullAccess” 策略3“Error connecting to docker daemon”Windows 下白屏502 Bad GatewayDocker Desktop 未启动或 DOCKER_HOST 环境变量未设置echo $env:DOCKER_HOST(PowerShell)执行Get-Service com.docker.service | Start-Service再设$env:DOCKER_HOSTnpipe:////./pipe/docker_engine4“cannot import name descriptor”workbuddy login 报 ImportErrorprotobuf 版本冲突4.x vs 3.xpip show protobufpip uninstall protobuf pip install protobuf3.20.35“No space left on device”Skill 运行失败日志显示 disk full缓存目录在 C 盘空间不足df -h ~/.workbuddy/cache修改 config.yaml 中 cache.root 为 D 盘路径并确保目录存在且有权限6“fatal: could not read Username”Skill 无法 clone 私有 Git 仓库Git 全局 user.name/user.email 未配置git config --global user.namegit config --global user.name xxx git config --global user.email xxx7“Failed to load source map”UI 白屏Console 报 source map 错误Node.js 版本过高18启用默认 source mapnode -v降级 Node.js 至 16.18.1或启动时加NODE_OPTIONS--no-enable-source-maps8“Subprocess exited with code 1”Skill 启动失败无 tracebackSkill 依赖的系统库缺失如 libGL.so.1ldd $(python -c import cv2; print(cv2.__file__)) | grep not foundapt-get install libgl1-mesa-glx(Ubuntu) 或choco install vcredist2015(Windows)9“Validation failed: Dockerfile syntax error”模型上传卡在 “校验中”Dockerfile 第一行不是 FROM或有中文字符docker build --no-cache -t test .用 VS Code 以 UTF-8 无 BOM 格式保存 Dockerfile首行必须是FROM ...10“Invalid video profile: Main”模型校验失败提示视频编码不支持test_data/sample.mp4 不是 H.264 Baseline Profileffprobe -v quiet -show_entries streamprofile -of default sample.mp4用ffmpeg -i input.mp4 -vcodec libx264 -profile:v baseline -level 3.0 output.mp4重编码实操心得第 4 条protobuf 冲突和第 8 条libGL 缺失是我遇到最多次的两个问题。前者往往发生在你刚装完 so-vits-svc 或 Stable Diffusion WebUI 后后者则在你第一次尝试运行 CV 相关 Skill 时必现。建议把这两条写在团队 Wiki 首页标题就叫《WorkBuddy 新人必读两个让你卡住两小时的坑》。另外分享一个独家技巧WorkBuddy 的日志默认只保留最近 7 天但你可以通过修改 ~/.workbuddy/config.yaml 中的log: retention_days: 30来延长。更重要的是所有 Skill 的 stdout/stderr 都会被重定向到 ~/.workbuddy/logs/skill-skill_id.log这个文件比主日志详细十倍。比如第 8 条问题主日志只写 “Subprocess exited”而 skill-xxx.log 里会有完整的 ImportError traceback直接告诉你缺哪个 so 文件。最后关于 “workbuddy 和 codebuddy” 的关系CodeBuddy 是纯代码生成场景它的 Skill 只能访问代码文件WorkBuddy 是工程协同场景它的 Skill 可以调用任意 HTTP API、执行 shell 命令、读写 COS、甚至触发 TKE 集群扩容。它们共享同一套 Skill SDK但权限模型完全不同。不要试图把 CodeBuddy 的 Skill 直接搬到 WorkBuddy反之亦然。我在实际使用中发现WorkBuddy 最大的价值不是“多快”而是“多稳”。它把那些原本需要写 Bash 脚本、配置 Jenkins Pipeline、维护 Docker Compose 的琐碎工程任务变成了几句话的自然语言指令。当然前提是你要先跨过安装和配置那道坎——而这篇指南就是帮你把那道坎削平到脚面高度。
返回列表