1. 项目概述:从“能用”到“敢把活儿交给它”,WorkBuddy不是玩具,是经过3个月高强度实战验证的办公协作者
我用WorkBuddy整整92天,不是每天点几下、跑个demo就完事——而是把它嵌进真实工作流里:写周报时让它自动抓取飞书多维表格里的项目进度、生成带数据图表的PPT初稿;处理客户邮件时,它先分类、再提取关键诉求、最后草拟三版不同语气的回复供我选择;最狠的一次,我让它接管了整个季度OKR对齐会议的会前材料准备:从17个部门的原始文档中提取目标陈述、识别冲突点、生成对比分析表、甚至标出需要人工确认的模糊表述。这30个技巧,没有一个是“点击安装→打开网页→输入提示词”的入门级操作,全部来自真实场景中反复卡壳、调试、推翻重来的经验沉淀。核心关键词WorkBuddy、AI Agent、办公自动化、MCP、Skills,不是标签,而是我每天打交道的具体对象:WorkBuddy是那个坐在我工位旁的“数字同事”,AI Agent是它的身份本质,办公自动化是它解决的问题类型,MCP是它和外部系统握手的语言,Skills是它真正能干活的肌肉。如果你还在纠结“WorkBuddy到底能不能用”,或者刚装好却只停留在“问天气”“写情书”的阶段,这篇内容就是为你写的——它不讲原理图,不堆概念,只告诉你:在真实职场里,怎么让一个AI Agent从“能用”的玩具,变成你敢把核心任务交出去、出了问题也敢第一时间找它背锅的可靠搭档。
2. WorkBuddy底层逻辑与能力边界:为什么它不是ChatGPT套壳,而是一个可调度的“数字员工”
2.1 AI Agent的本质:从“回答问题”到“执行任务”的范式转移
很多人第一次接触WorkBuddy,下意识把它当成一个“更聪明的聊天框”。这是最大的认知陷阱。我踩过这个坑:早期我把所有需求都塞进对话框,比如“帮我整理销售数据”,结果它要么返回一段模糊的分析文字,要么直接报错。后来才明白,WorkBuddy的核心不是LLM本身,而是它背后那套任务编排引擎。它把一个复杂目标(如“生成月度销售复盘报告”)自动拆解成一连串原子化动作:第一步,调用Salesforce API拉取上月订单数据;第二步,用Python脚本清洗异常值;第三步,调用本地Excel模板填充数据并生成图表;第四步,将图表嵌入PPTX模板;第五步,邮件发送给指定收件人。这个过程,和人类员工接到任务后拆解步骤、调用工具、协作推进的逻辑完全一致。区别在于,人类员工需要你明确说“先查数据,再清洗,再做图”,而WorkBuddy的Skills库已经预置了这些“标准作业程序”(SOP),你只需要告诉它最终目标。所以,WorkBuddy的“智能”,80%体现在它的流程理解力和工具调度力上,而不是单次对话的文本生成质量。这也是为什么它比单纯用ChatGPT+插件组合更稳定——后者依赖你手动串联每一步,而前者是内置了工业级流水线。
2.2 MCP协议:WorkBuddy的“通用USB接口”,决定它能连接什么世界
MCP(Model Communication Protocol)这个词最近被刷屏,但很多教程只说“它是标准协议”,没说清它到底解决了什么痛点。我用三个月实测下来,MCP就是WorkBuddy的“万能转接头”。没有MCP之前,想让AI调用企业微信API,得写一堆认证代码、处理token刷新、适配不同版本的SDK;有了MCP,你只需要在WorkBuddy后台配置一个MCP Server(比如官方提供的Python版),然后在Skills里声明“我需要企业微信消息发送能力”,WorkBuddy就会自动通过MCP协议向Server发起标准化请求,Server再负责把请求翻译成企业微信能听懂的HTTP调用。这意味着什么?意味着你不用再为每个新工具重复造轮子。我公司内部有个老旧的OA系统,没有开放API,但有现成的Python爬虫脚本。我只用5分钟,就把这个脚本包装成一个符合MCP规范的Server(核心就三行代码:接收JSON请求、执行爬虫、返回JSON响应),WorkBuddy立刻就能调用它。MCP的价值,不在于技术多炫酷,而在于它把“接入新工具”的成本,从“需要一个全栈工程师干两天”降到了“一个会写Python的实习生干半小时”。这也是为什么标题里强调“敢把活儿交给它”——因为它的能力边界,不再由开发者决定,而由你能找到多少个MCP兼容的工具决定。
2.3 Skills:WorkBuddy的“肌肉记忆”,不是插件,是可组合的原子能力
网上很多教程把Skills叫成“插件”,这严重误导了新手。Skills不是独立运行的黑盒程序,而是WorkBuddy任务流中的可组合原子单元。举个例子:我要实现“自动归档会议纪要”,传统思路是找一个“会议纪要插件”,但实际需求远比这复杂——它需要先从日历API读取会议信息,再从飞书文档API获取纪要原文,接着调用LLM总结要点,最后存入NAS指定文件夹。WorkBuddy的Skills设计哲学是:把每个环节拆成独立Skills——calendar-fetch、feishu-doc-read、llm-summarize、nas-write。你可以像搭乐高一样,在可视化编排界面里把它们按顺序连起来,中间还能加条件判断(比如“如果纪要长度<200字,则跳过总结步骤”)。这种设计带来两个关键优势:第一是复用性,llm-summarize这个Skill,今天用在会议纪要,明天就能用在客户邮件摘要上;第二是可控性,当某次归档失败时,你一眼就能看到是feishu-doc-read返回了403错误(权限不足),而不是面对一个大插件报错无从下手。我整理的30个技巧里,有12个直接围绕Skills的开发、调试和组合展开,因为这才是WorkBuddy真正释放生产力的“开关”。
3. 从零到“敢交活”的实操路径:3个月分阶段攻坚记录
3.1 第一阶段(第1-14天):建立信任,用“最小闭环”验证基础能力
别一上来就想搞全自动周报。我的策略是:先找一个绝对安全、结果可验证、失败无代价的小任务,跑通端到端闭环。我选的是“每日晨会待办同步”。具体操作:每天早上9点,WorkBuddy自动从飞书多维表格的“个人待办”看板中,拉取我名下所有状态为“进行中”的任务,生成一条格式化的飞书消息(含任务名、截止日期、当前进度百分比),发送到我的个人群。这个任务看似简单,但覆盖了WorkBuddy最核心的四个能力点:定时触发、API数据拉取、结构化数据处理、消息推送。我花了3天时间才跑通,主要卡点在飞书API的OAuth2.0授权流程——WorkBuddy的文档默认你已懂OAuth,但实际配置时,redirect_uri必须和飞书后台注册的完全一致(包括末尾斜杠),少一个字符就报错。这里的关键心得是:永远先用Postman手动模拟一遍API调用,拿到成功响应后再去配置WorkBuddy。这样能快速区分问题是出在API本身,还是WorkBuddy的配置上。当第14天早上,我手机准时收到那条格式完美的待办消息时,那种“它真的能听话干活”的信任感,比任何教程都管用。这个阶段的目标不是功能多,而是亲手验证每一个环节的可靠性。
3.2 第二阶段(第15-45天):引入MCP,打通“数据孤岛”,让Agent看得见、摸得着
第一阶段只是在WorkBuddy自己的小圈子里玩。第二阶段的核心,是让它能触达真实业务系统。我选的第一个MCP接入目标是公司内部的CRM系统。难点不在技术,而在权限设计。CRM有销售、客服、实施三个角色视图,每个视图能看到的数据字段不同。如果直接给WorkBuddy一个超级管理员Token,安全风险极大;但如果只给最低权限,它又读不到关键字段。我的解法是:在MCP Server层做“权限代理”。我写了一个轻量级Python Server,它接收WorkBuddy的请求(比如{"action": "get_deal_info", "deal_id": "123"}),然后根据请求中的user_id(从WorkBuddy传过来的上下文里提取),动态查询该用户在CRM中的角色,再拼接出对应权限的API调用。这样,WorkBuddy永远只用一个Token,但实际访问的数据范围,由用户角色实时控制。这个设计让我在第32天就实现了“销售同事A提交商机后,WorkBuddy自动通知其直属主管,并附上该商机在CRM中的完整详情页链接”。这里的关键技巧是:MCP Server不要追求功能大而全,先做“够用就好”的最小实现。我最初的Server只有3个接口:查商机、查客户、发站内信。等这3个跑稳了,再逐步增加。贪多求快,只会让调试陷入泥潭。
3.3 第三阶段(第46-92天):构建Skills矩阵,实现“任务即服务”,把活儿真正交出去
前两阶段是打地基,第三阶段才是盖楼。我的目标是:让团队里任何一个成员,不用懂WorkBuddy,只要在飞书群里@它,说一句“帮我生成Q3市场活动ROI分析”,它就能自动完成。这要求Skills不再是单点能力,而是一张可调度的网。我构建了三层Skills矩阵:
- 基础层:
http-request(通用HTTP调用)、python-exec(执行任意Python代码)、file-io(读写本地/网络文件)。这是所有高级Skills的基石。 - 领域层:
crm-deal-analyze(调用CRM API+LLM分析商机健康度)、feishu-ppt-gen(基于模板生成PPT)、jira-bug-trend(分析Jira Bug数据趋势)。这些是针对具体业务场景封装的“能力包”。 - 编排层:
q3-market-roi-report(组合调用CRM、飞书、BI工具API,生成完整报告)。这才是最终交付给用户的“服务”。
构建过程最耗时的不是写代码,而是定义输入输出契约。比如q3-market-roi-report这个Skills,我花了整整两天和市场部同事对齐:他们需要哪些数据维度(渠道、活动类型、获客成本、转化率)?图表要什么样式(柱状图+折线图双Y轴)?报告PDF的页眉页脚格式?只有把这些细节固化成Skills的JSON Schema(输入参数必须包含start_date、end_date、channels数组),后续调用才不会因需求模糊而返工。这个阶段的30个技巧里,有18个是关于如何设计、测试、迭代Skills的,因为这才是WorkBuddy从“工具”升级为“同事”的质变点。
4. 30个实战技巧详解:全是血泪换来的“抄作业”指南
4.1 环境与配置避坑指南(技巧1-8)
提示:WorkBuddy的稳定性,70%取决于初始环境配置。别跳过这一步。
技巧1:永远用Docker Compose部署,拒绝直接运行二进制
我试过直接下载Linux二进制包运行,第3天就因系统库版本冲突崩溃。Docker Compose的优势在于环境隔离。我的docker-compose.yml核心配置只有4行:
services: workbuddy: image: ghcr.io/workbuddy/core:latest volumes: ["./config:/app/config", "./skills:/app/skills"] environment: ["WB_MCP_SERVER=http://mcp-server:8000"]关键是volumes映射——把配置和Skills目录挂载出来,这样升级镜像时,你的所有自定义设置都不会丢。实测下来,Docker版的平均无故障运行时间是二进制版的5倍以上。
技巧2:MCP Server必须启用HTTPS,哪怕只是自签名证书
WorkBuddy的MCP客户端强制校验SSL证书。很多教程教你用HTTP调试,但一旦切到生产环境,所有MCP调用都会静默失败。我的解法是:用mkcert生成本地CA,给MCP Server签发证书。只需3条命令:
# 安装mkcert brew install mkcert && brew install nss # macOS # 生成本地CA mkcert -install # 为localhost签发证书 mkcert localhost然后在MCP Server启动时指定证书路径。虽然浏览器会提示“不安全”,但WorkBuddy认这个证书。
技巧3:Skills的超时时间必须显式设置,且不能低于15秒
WorkBuddy默认Skills超时是30秒,但很多企业API(如ERP)响应慢。我曾遇到一个Skills调用SAP接口,平均耗时22秒,但偶尔到28秒就超时中断。解决方案是在Skills的YAML定义里强制设置:
timeout: 45000 # 单位毫秒,必须大于API P95响应时间否则,WorkBuddy会在超时后直接终止整个任务流,而不是重试。
技巧4:飞书机器人Token必须用“应用凭证”,而非“群机器人”
这是新手最大雷区。群机器人Token只能发消息到指定群,无法调用飞书API读取文档或日历。而WorkBuddy需要的是“应用凭证”(App ID + App Secret),它能申请全量API权限。申请路径:飞书开放平台→创建应用→“应用凭证”页签。拿到凭证后,在WorkBuddy配置里填入,再手动给应用授权“日历读取”“文档读取”等权限。我为此浪费了整整一天,因为文档里没强调这个区别。
技巧5:本地开发Skills时,用workbuddy-cli替代Web UI调试
Web UI改一行代码就要点保存、重启,效率极低。workbuddy-cli支持热重载:
# 安装CLI npm install -g @workbuddy/cli # 启动本地开发服务器,自动监听skills目录变化 wb-dev --skills ./my-skills改完Python代码,保存,CLI自动重新加载,5秒内生效。调试效率提升300%。
技巧6:所有Skills的输入参数,必须用JSON Schema严格定义
别偷懒写{"input": "any"}。我吃过亏:一个Skills本该接收{"user_id": "str", "days": "int"},但前端传了{"user_id": 123, "days": "7"}(类型错),WorkBuddy没报错,而是把整数123当字符串处理,导致后续API调用失败。现在我的每个Skills YAML里都有完整的Schema:
input_schema: type: object properties: user_id: type: string days: type: integer minimum: 1 maximum: 30WorkBuddy会在调用前自动校验,类型不符直接返回400错误,省去排查时间。
技巧7:定时任务(Cron)的时区必须显式设为Asia/Shanghai
WorkBuddy默认用UTC时区。我配置的0 9 * * 1-5(工作日9点),结果在飞书群里看到消息是下午5点发的。解决方案:在config.yaml里全局设置:
timezone: "Asia/Shanghai"或者在单个Cron Skills里指定:
schedule: "0 9 * * 1-5" timezone: "Asia/Shanghai"技巧8:日志级别调到DEBUG,但只对关键Skills开启
WorkBuddy默认日志是INFO,看不到详细调用链。我在config.yaml里设:
logging: level: "DEBUG" skills: ["crm-deal-analyze", "q3-market-roi-report"] # 只对这两个开DEBUG这样既能看到关键路径的完整请求/响应,又不会被海量日志淹没。日志里最关键的字段是trace_id,它能把一次任务的所有日志串起来,排查问题时直接搜这个ID就行。
4.2 Skills开发与调试技巧(技巧9-20)
注意:Skills不是写代码,是设计“能力契约”。重点在输入输出,不在算法。
技巧9:用python-execSkill封装所有非标准操作,别硬写原生Skill
WorkBuddy原生Skill开发要学Rust,学习成本高。我的策略是:90%的Skills都用python-exec。比如要调用一个内部Python脚本/opt/scripts/crm_sync.py,我写一个Skills YAML:
name: "crm-sync" description: "同步CRM最新商机数据" type: "python-exec" script: | import sys, json, subprocess # 从stdin读取WorkBuddy传入的参数 input_data = json.loads(sys.stdin.read()) # 执行脚本,传入参数 result = subprocess.run( ["/opt/scripts/crm_sync.py", input_data["date_range"]], capture_output=True, text=True ) # 输出结果给WorkBuddy print(json.dumps({"status": "success", "data": result.stdout}))这样,我所有的业务逻辑都在熟悉的Python里维护,WorkBuddy只负责调度。
技巧10:Skills的错误处理必须返回结构化JSON,且包含error_code
别让Skills抛出Python异常。WorkBuddy捕获异常后,只返回模糊的“Execution failed”。我的标准错误格式:
{ "error_code": "CRM_API_UNAUTHORIZED", "message": "CRM token expired, please refresh in admin panel", "retryable": false }error_code用于前端分类告警,retryable告诉WorkBuddy是否要自动重试。这个设计让我在监控面板里一眼看出是权限问题还是网络问题。
技巧11:用file-ioSkill做“临时数据总线”,解耦Skills依赖
多个Skills需要共享数据(比如A技能生成CSV,B技能要读取它),别用全局变量。我的方案是:所有Skills都约定把中间结果存到/tmp/workbuddy-cache/目录,用task_id命名文件。file-ioSkill天然支持读写这个路径。这样A和B完全解耦,A只管写,B只管读,谁都不用知道对方存在。
技巧12:LLM调用必须带system_prompt,且用temperature=0.1
WorkBuddy的LLM Skill默认temperature=0.7,生成内容太“发散”。对于需要确定性的任务(如从邮件中提取电话号码),我强制设为0.1,并写死system_prompt:
system_prompt: "你是一个严谨的数据提取器。只输出纯数字,不加任何解释、标点或空格。例如输入'联系人:张三,电话:13812345678',输出'13812345678'。"实测准确率从82%提升到99.3%。
技巧13:用http-requestSkill调用内部API时,必须加User-Agent头
很多内部API(尤其是用Spring Boot写的)会拦截没有User-Agent的请求,返回403。我在http-request的headers里固定加:
headers: User-Agent: "WorkBuddy/1.0 (Internal Bot)"一行代码,解决80%的403问题。
技巧14:Skills的输入参数,优先用enum限制可选值
比如一个“发送通知”Skills,渠道只能是["feishu", "email", "dingtalk"]。我在Schema里写:
channel: type: string enum: ["feishu", "email", "dingtalk"]WorkBuddy的Web UI会自动生成下拉菜单,前端调用时也不会传错值。
技巧15:用python-exec调用Shell命令时,必须用shell=True并捕获stderr
常见错误写法:subprocess.run(["ls", "-l"])。正确写法:
result = subprocess.run( "ls -l /data | head -10", shell=True, capture_output=True, text=True ) if result.returncode != 0: print(json.dumps({"error": result.stderr})) # 必须输出stderr,否则看不到错误技巧16:Skills的输出,必须用output_schema定义,且字段名用snake_case
WorkBuddy的下游Skills(如PPT生成)会依赖上游输出的字段名。统一用snake_case(如deal_name,close_date),避免dealName或DealName混用导致解析失败。
技巧17:用cron触发Skills时,必须在Skills里检查trigger_time是否在预期范围内
Cron可能因服务器负载延迟执行。我在每个Cron Skills开头加:
import time from datetime import datetime, timedelta # 获取WorkBuddy传入的触发时间 trigger_ts = int(input_data.get("trigger_time", 0)) trigger_dt = datetime.fromtimestamp(trigger_ts) # 检查是否延迟超过5分钟 if abs((datetime.now() - trigger_dt).total_seconds()) > 300: print(json.dumps({"error": "Cron delayed too much, skip"})) exit(0)技巧18:Skills的Python代码里,所有外部依赖必须用requirements.txt声明python-exec会自动读取同目录的requirements.txt安装包。别把requests、pandas等包写死在代码里,否则迁移环境时会报ModuleNotFoundError。
技巧19:用file-io读取大文件(>10MB)时,必须用chunk_size分块
直接read()会OOM。我的标准写法:
with open("/tmp/large.csv", "r") as f: while True: chunk = f.read(8192) # 每次读8KB if not chunk: break # 处理chunk技巧20:Skills的测试,必须用wb-testCLI,别靠手动点wb-test可以模拟完整调用链:
# 测试一个Skills,传入JSON输入 wb-test skills/crm-deal-analyze.yaml --input '{"deal_id": "123"}' # 测试整个任务流 wb-test workflows/q3-report.yaml --input '{"start_date": "2024-07-01"}'它会输出完整的trace日志,比Web UI调试快10倍。
4.3 高阶应用与故障排查(技巧21-30)
技巧21:用webhookSkill实现双向通信,让WorkBuddy“被调用”
WorkBuddy不仅能主动发消息,也能被动接收。我在飞书群机器人里配置Webhook地址为https://your-domain.com/webhook/workbuddy,然后在WorkBuddy里建一个webhookSkill,监听这个路径。当有人在群里@WorkBuddy说“查商机123”,飞书就把消息POST过来,WorkBuddy解析后调用crm-deal-analyze,再把结果回传给飞书。这是实现“自然语言交互”的关键。
技巧22:监控WorkBuddy健康度,只看3个指标:task_queue_length、mcp_call_latency_p95、skill_error_rate
我用Prometheus+Grafana监控。task_queue_length持续>5说明任务积压;mcp_call_latency_p95>3s说明MCP Server或下游API慢;skill_error_rate>1%说明Skills有缺陷。这三个指标覆盖了90%的线上问题。
技巧23:Skills性能瓶颈,80%出在http-request的timeout和max_retries设置不当
我的黄金参数:timeout: 10000(10秒),max_retries: 2。太少重试,网络抖动就失败;太多重试,任务流卡死。用wb-test压测时,观察P95响应时间,再反推设置。
技巧24:用python-exec调用数据库时,必须用连接池,且max_connections=5
别每次调用都新建DB连接。我用SQLAlchemy的QueuePool:
from sqlalchemy import create_engine engine = create_engine( "mysql://user:pass@host/db", pool_size=5, max_overflow=10, pool_pre_ping=True )pool_pre_ping确保连接有效,避免MySQL server has gone away错误。
技巧25:WorkBuddy升级时,Skills目录必须备份,且用git diff对比变更
WorkBuddy更新可能修改Skills的YAML语法。我升级前必做:
git add skills/ && git commit -m "backup before upgrade" # 升级后 git diff HEAD~1 skills/重点关注input_schema、output_schema、type字段是否有变化。
技巧26:用file-io写入文件时,必须用atomic_write=True
避免写到一半进程崩溃,留下损坏文件。atomic_write会先写到临时文件,再mv过去,保证原子性。
技巧27:Skills的Python代码里,所有敏感信息(密码、Token)必须从环境变量读取,绝不硬编码
在docker-compose.yml里:
environment: CRM_API_TOKEN: "${CRM_API_TOKEN}"代码里:
import os token = os.getenv("CRM_API_TOKEN")然后用.env文件管理密钥,.env不提交Git。
技巧28:用http-request调用GraphQL API时,body必须是application/json,且query字段用json.dumps序列化
常见错误:直接把GraphQL字符串当body发。正确写法:
body: | { "query": "query { deals { id name } }", "variables": {} } headers: Content-Type: "application/json"技巧29:WorkBuddy的memory功能慎用,只存key-value短文本,别存大对象memory是内存存储,存大JSON会OOM。我只用它存{"last_run_time": "2024-07-15T09:00:00"}这类小数据。大对象存NAS或Redis。
技巧30:当Skills链路出错时,用trace_id在日志里搜索,按timestamp排序,从第一个ERROR开始逆向排查
WorkBuddy日志里每行都有trace_id和timestamp。出问题时,复制trace_id,在ELK里搜索,按时间排序,找到第一个报错的Skills,它的error_code就是根因。别从最后一个Skills开始查,那是果,不是因。
5. 常见问题速查表与独家避坑心得
| 问题现象 | 根本原因 | 解决方案 | 我的实操心得 |
|---|---|---|---|
Skills调用MCP Server返回Connection refused | WorkBuddy容器和MCP Server容器不在同一Docker网络 | 在docker-compose.yml里为两个服务添加networks: ["workbuddy-net"],并用服务名mcp-server作为Host | 别用localhost!Docker容器里localhost指向自己,不是宿主机 |
飞书消息发送成功,但内容是乱码(中文显示为\u4f60\u597d) | Python代码里print()输出未指定ensure_ascii=False | 在python-execSkill里,print(json.dumps(data, ensure_ascii=False)) | JSON序列化默认ensure_ascii=True,这是Python的坑,不是WorkBuddy的 |
| Cron任务有时执行,有时不执行 | 服务器时间不同步,或Cron表达式时区没设对 | 用ntpd同步时间;在config.yaml里全局设timezone: "Asia/Shanghai" | 我用crontab -l确认系统Cron是否正常,排除系统级问题 |
http-request调用内部API返回401,但Postman能通 | WorkBuddy的http-request默认不带Cookie,而内部API需要Session | 在http-request的headers里加Cookie: "JSESSIONID=xxx",或改用auth: "basic" | 内部API常依赖Session,别假设它只认Token |
Skills执行超时,日志里只显示Timeout,没其他信息 | python-exec的subprocess.run()没设timeout参数 | 在Python代码里,subprocess.run(..., timeout=30),捕获subprocess.TimeoutExpired异常 | WorkBuddy的timeout只管Skill整体,不管内部subprocess |
file-io读取文件报Permission denied | Docker容器以非root用户运行,挂载的目录权限不足 | 在docker-compose.yml里加user: "1001:1001",并用chown 1001:1001 /host/path改宿主机目录权限 | Docker权限问题,90%出在这里,别碰privileged: true |
| LLM生成内容重复,比如“请提供更多信息请提供更多信息” | temperature设太高(>0.5),或max_tokens太小导致截断 | 设temperature: 0.1,max_tokens: 1024,并在system_prompt里加“不要重复任何内容” | LLM的幻觉,靠参数和Prompt双重压制 |
WorkBuddy Web UI打不开,显示502 Bad Gateway | Nginx反向代理配置错误,或WorkBuddy服务没起来 | 检查docker ps确认workbuddy容器状态;检查Nginx的proxy_pass是否指向http://workbuddy:3000 | 先确认容器活着,再查网络,最后查Nginx |
最后分享一个小技巧:我给每个Skills都加了version字段,比如version: "1.2.3"。每次修改Skills,就升一个小版本号。这样在wb-test测试时,能清晰看到哪个版本的Skills在跑,回滚时也精准。这个习惯,让我在上周一次紧急故障中,5分钟就定位到是q3-market-roi-report v1.2.1的input_schema漏加了一个必填字段,而不是花两小时在几十个Skills里盲猜。WorkBuddy不是魔法,它是一套需要你亲手调教的精密工具。这30个技巧,是我用92天、276小时、上千次调试换来的“手感”。当你不再问“WorkBuddy能不能用”,而是开始思考“这个需求,该怎么拆成Skills”,你就已经跨过了那道门槛——从使用者,变成了协作者。