## Before / After | 环节 | Before | After | |---|---|---| | 路由 | 看到“Google 搜索/社媒采集”就直接跑 actor | 先查 `actors.health.json`,确认 actor 是否仍推荐、是否需要付费 plan、最近一次 canary 是否通过 | | 输入 | runner 内置一份静态 payload,schema 变了才在任务中 400 | `--validate-input` 先用最小 payload 做 schema canary,失败时直接报出字段差异和 fallback | | 成本 | 只靠人工记得小 limit | `--max-usd 0.20 --min-items 10` 作为默认闸门,超过成本或低质量直接停止 | | 结果质量 | `SUCCEEDED` 就默认可用 | 同时检查 items 数、placeholder/noResults/demo、dataset 为空、核心字段缺失 | ### 思维实验 用户说:“去 X 和 Google 找 OpenClaw 微信插件的最新资料。” 旧流程:crawl-hub 直接调用 Google Search actor,actor 因 `queries must be string` 报 400;临时改 web search,最后在结论里补一句“schema 不一致”。 新流程: ```bash python3 .agents/skills/crawl-hub/scripts/crawl_hub.py --source google-search --query "OpenClaw 微信插件" --limit 10 --canary --max-usd 0.10 ``` runner 先读取健康表,发现 `google-search` 最近 canary 失败;它不会烧钱启动正式 run,而是输出: ```text source=google-search status=CANARY_FAILED reason=input_schema_mismatch last_error=queries must be string fallback=web_search_official_sources ``` 然后任务直接转到稳定 fallback,并把这次失败写回健康表。下一次同类研究不需要重复踩同一个坑。