1. 项目概述:WorkBuddy 不是“另一个AI助手”,而是腾讯系开发者工作流的中枢节点
WorkBuddy 这个名字听起来像某个轻量级插件,但实际接触过的人很快会意识到——它根本不是传统意义上的“AI聊天框”。我第一次在内部灰度环境里打开 WorkBuddy 时,第一反应是:这玩意儿把 VS Code、Jupyter、Git CLI、模型服务管理器和 CI/CD 配置面板,全塞进了一个带自然语言交互能力的统一壳子里。它不替代任何工具,而是让这些工具在语义层面上真正“听懂你的话”。比如你说“把 feature/login 分支上最近三次 commit 的 diff 发到钉钉群”,它会自动拉取 Git 日志、生成格式化文本、调用钉钉 Bot API;你说“用 resnet50 在 ucf101 上训一个 baseline,batch 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 为一个不存在的 ID,WorkBuddy 启动时不会报错,但当你点击“模型部署”按钮时,后端会返回 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 环境里装的 torch==2.1.0,和 Skill 里 requirements.txt 声明的 torch==2.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.8;test_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 Desktop(Windows 原生应用)试图通过 \.\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_HOST="npipe:////./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_HOST="tcp://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 的)默认装 protobuf==4.25.1。结果就是 workbuddy login 时抛出 ImportError: cannot import name 'descriptor' from 'google.protobuf'。
解决方法不是简单 pip uninstall protobuf,因为 protobuf 4.x 是很多包的底层依赖。正确做法是:
- 创建一个干净的 conda 环境:
conda create -n wb-env python=3.9 conda activate wb-env pip install --upgrade pip- 强制安装兼容版本:
pip install protobuf==3.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:\Users<user>\AppData\Local\WorkBuddy(Windows)或 ~/.workbuddy(macOS/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-email@example.com" # 如果用 SSH key,确保 ~/.ssh/id_rsa.pub 已添加到 GitHub ssh -T git@github.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.1(LTS),这是我验证过的最稳定版本。
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 workbuddy==1.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 控制台而非 CLI
ucf101 原始数据集是 .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_classes=101): super().__init__() self.backbone = resnet50(pretrained=True) 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(dim=1) # 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.txt:
torch==2.0.1 torchvision==0.15.2 numpy==1.23.5Dockerfile(必须基于官方 runtime):
FROM 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_NAME=wb-ucf101-data COS_REGION=ap-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: POST
- URL: https://ucf101-api-wb-proj-8a3f2c1e.tencentyun.com/predict
- Headers: Content-Type: application/json
- Body:
{ "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 Name=PolicyName,Values=WorkBuddyFullAccess | 在 CAM 控制台,为子账号附加 “WorkBuddyFullAccess” 策略 |
| 3 | “Error connecting to docker daemon” | Windows 下白屏,502 Bad Gateway | Docker Desktop 未启动,或 DOCKER_HOST 环境变量未设置 | echo $env:DOCKER_HOST(PowerShell) | 执行Get-Service com.docker.service | Start-Service,再设$env:DOCKER_HOST="npipe:////./pipe/docker_engine" |
| 4 | “cannot import name 'descriptor'” | workbuddy login 报 ImportError | protobuf 版本冲突(4.x vs 3.x) | pip show protobuf | pip uninstall protobuf && pip install protobuf==3.20.3 |
| 5 | “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.name | git config --global user.name "xxx" && git config --global user.email "xxx" |
| 7 | “Failed to load source map” | UI 白屏,Console 报 source map 错误 | Node.js 版本过高(18+)启用默认 source map | node -v | 降级 Node.js 至 16.18.1,或启动时加NODE_OPTIONS="--no-enable-source-maps" |
| 8 | “Subprocess exited with code 1” | Skill 启动失败,无 traceback | Skill 依赖的系统库缺失(如 libGL.so.1) | ldd $(python -c "import cv2; print(cv2.__file__)") | grep "not found" | apt-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 Profile | ffprobe -v quiet -show_entries stream=profile -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 的琐碎工程任务,变成了几句话的自然语言指令。当然,前提是你要先跨过安装和配置那道坎——而这篇指南,就是帮你把那道坎,削平到脚面高度。