WorkBuddy 是运行在组织内网或私有云中的轻量级调度中枢,实时桥接人、任务与数据;需显式声明 data_sources schema 以避免字段解析失败,assign_to 需通过 identity_providers 配置 Slack ID 而非邮箱,task_timeout 应依执行耗时 P95 上浮 20% 设定并配重试策略。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

WorkBuddy 不是通用 AI 助手,也不是单纯的任务看板——它本质是一个**运行在组织内网或私有云中的轻量级调度中枢**,核心能力在于实时桥接三类实体:人(身份与权限)、任务(状态与依赖)、数据(API/数据库/文件路径)。如果你正卡在“系统太多、信息孤岛、每次同步都要手动点五次”的阶段,WorkBuddy 的价值才真正浮现。
为什么 workbuddy.yaml 里 data_sources 必须显式声明 schema?
不声明 schema 会导致任务执行时字段解析失败,错误信息通常是 KeyError: 'user_id' 或 TypeError: expected str, got NoneType。这是因为 WorkBuddy 默认不做运行时字段探测,所有数据源接入都走静态契约校验。
实操建议:
-
schema必须包含required字段列表,即使后端 API 返回更多字段,未列明的不会进入任务上下文 - 对数据库表,用
sqlalchemy的inspect生成初始 schema 比手写更可靠:from sqlalchemy import create_engine, inspect<br>insp = inspect(create_engine("sqlite:///tasks.db"))<br>print(insp.get_columns("task")) - 如果数据源字段动态变化(如用户自定义表单),需配合
dynamic_schema: true并在任务脚本中用context.get("raw_payload")手动处理
如何让 assign_to 正确识别 Slack 用户而非邮箱?
默认行为是按字符串匹配 email 字段,但 Slack 集成需转为 slack_id。若直接填 @alice,会触发 UserNotFoundError。
WorkBuddy 桌宠工厂 —— 给一张角色图、一个 codex.pet 链接、一条 codex-pets.net 下载 URL、或一份现成的精灵表,就能自动创建一只可联动 WorkBuddy 状态的桌面宠物。当用户说"创建桌宠"、"做一只桌宠"、"用这张图做桌宠"、"从 codex.pet 安装桌宠"、"导入 codex 桌宠 XX"、"装一下 codex-pets.net 上的 XX&quo
实操建议:
- 在
identity_providers配置块中启用slack类型,并指定user_mapping路径:user_mapping: "https://api.slack.com/scim/v1/Users" - 任务 YAML 中改用
assign_to: { provider: "slack", id: "U012AB3CD" },不要用昵称或邮箱 - 调试时可临时加
debug: true,查看WorkBuddy日志里实际调用的 SCIM 查询 URL 和响应体
task_timeout 设太短会导致重试风暴,设太长又拖垮 SLA
常见现象是任务状态卡在 running 超过 10 分钟,后续同类型任务被阻塞排队,日志出现大量 TimeoutError: task exceeded 300s。
实操建议:
- 先用
workbuddy run --dry-run测单次执行耗时,取 P95 值再上浮 20% 作为基准 - 对含外部 HTTP 调用的任务,必须拆出
retry_policy:max_attempts: 3, backoff: "exponential",避免超时即失败 - 关键路径任务(如审批流)建议设
timeout: 60,后台归档类任务可放宽到1800,但必须配notify_on_timeout: ["ops@company.com"]
WorkBuddy 的枢纽性恰恰体现在它**不隐藏复杂度,只收敛入口**——每个 data_source 的 schema、每个 assign_to 的 provider 类型、每个 task_timeout 的上下文依据,都得由你明确定义。漏掉任意一个,它就真会安静地停在那里,既不报错也不推进。

















