用 ETL 视角讲清楚 Claude Code、Skill、Agent 和 Clawdbot
今日数据组同学问我:"Claude Code、Skill、Agent、Clawdbot 到底是什么关系?
"我没有从模型能力讲起,而是换了一个角度:"你们用 调度平台吗?
"当我们把这些概念映射到 ETL 工具链后,问题反而变得简单了。
这篇文章,就是那次工程对齐的完整记录。
如果你是做过 ETL 的工程师——这些东西你全认识,只是换了个马甲。
| 概念 | ETL 工具链类比 | 工程定位 |
|---|---|---|
| Claude 模型 | SQL 语句 | 执行层 |
| Skill | 存储过程 / 自定义函数 | 能力封装层 |
| Claude Code | PL/SQL Developer / Toad | 开发调试工具层 |
| Agent | MOIA 作业流 / DolphinScheduler 工作流 | 单任务编排层 |
| Clawdbot | MOIA 调度平台 / DolphinScheduler 控制台 | 生产调度运行层 |
一、Claude 模型 = 你发给 MySQL 的那条 SQL
它自己不干活,是执行引擎干活。
你把 SQL 发给 MySQL,MySQL 给你返回结果集。
你把 Prompt 发给 Claude,Claude 给你返回文本。
-- ETL 世界
SELECT * FROM houses WHERE region = '朝阳区' AND price < 500;
-- 返回:结果集
-- AI 世界
"推荐朝阳区 500 万以下的房子"
-- 返回:文本
它不会调度、不会管理流程、不会自动重试。
发一句,回一句。一次一结。
这就是执行层。
二、Skill = 存储过程 / 自定义函数
很多人问:Skill 和 Prompt 有区别吗?
从模型角度看:没有。Skill 本质还是 Prompt。
从工程角度看:区别巨大。
你把那条 SQL 存起来,起个名叫 PROC_GENERATE_DAILY_REPORT,定好输入参数、输出结构。
下次别人直接 CALL 它,不用知道里面怎么写。
Skill 就是干这个的:
---
name: cluster_news
input: news_items[]
output: { topics: [] }
---
你是一名北京房产主编。
根据以下新闻列表,聚类出 3-5 个热点话题。
输入:{{news_items}}
输出格式:
{
"topics": [
{"name": "海淀学区新政", "count": 12},
{"name": "朝阳CBD房价", "count": 8}
]
}
📁 放在 .claude/skills/ 下。
🔁 可复用、可版本管理、可被系统调用。
这就是能力封装层。
三、Claude Code = PL/SQL Developer / Toad
这不是调度系统,这是开发工具。
ETL 工程师用 Toad 干什么?
- 写 SQL
- 测存储过程
- 存常用脚本
- 连数据库跑一把试试
Claude Code 就是干这个的:
# 测试 Skill
claude -s cluster_news --news ./raw.json
# 生成脚本
claude -s generate_script --topic "海淀学区新政"
# 调试输出
claude -s verify_answer --answer "朝阳区房价..." --data ./houses.json
📌 写 Skill
📌 测 Skill
📌 放在手边随时调用
调试用的,不上生产。
它是开发工具层,不是运行层。
四、Agent = MOIA 作业流 / DolphinScheduler 工作流
MOIA 里最核心的单元叫什么?作业流。
一个作业流:
Step1 取数 → Step2 清洗 → Step3 加载 → Step4 发邮件
有状态、有分支、有循环、可能失败重试。
Agent 完全一样:
# 房产新闻生成 Agent
def daily_news_agent():
# Step1: 取数
raw_news = fetch_hotspots()
# Step2: 聚类
topics = cluster_news(raw_news)
# Step3: 循环生成
for topic in topics:
# Step4: 生成脚本
draft = generate_script(topic)
# Step5: 验证
if verify_answer(draft):
save_to_db(draft)
else:
# 重试
draft = generate_script(topic, retry=True)
save_to_db(draft)
# Step6: 发通知
send_notification("今日新闻已生成")
这不是开发工具,是生产环境里真实跑的那一串任务。
一个作业流 = 一个 Agent。
这是单任务编排层。
五、Clawdbot = MOIA 调度平台 / DolphinScheduler 控制台
一个作业流叫 Agent。
一千个作业流同时跑,就得有人管。
MOIA 是干什么的?
- 谁几点跑
- 跑失败了怎么办
- 并发几个
- 资源够不够
- 有没有人要通知
Clawdbot 就是干这个的:
dag_name: beijing_daily_news
schedule: "0 8 * * *" # 每天早上 8 点
max_concurrency: 3
retry: 2
notify_on_failure: wecom
tasks:
- name: fetch_news
agent: fetch_hotspots_agent
- name: generate_scripts
agent: daily_news_agent
depends_on: [fetch_news]
- name: publish
agent: publish_agent
depends_on: [generate_scripts]
它不是 Agent,是管 Agent 的东西。
把作业流收上来,统一调度、监控、运维。
这是生产调度运行层。
六、所以,别再被营销话术骗了
| 营销说 | 工程现实 |
|---|---|
| 多智能体公司 | 多步骤 LLM 调用 + 状态管理 |
| AI 自主决策 | if/else + for 循环 |
| 智能协作 | 作业流依赖关系 |
| AI 调度平台 | 企业级调度软件 |
没有玄学,只有抽象层级。
七、真正的工程含金量在哪
不是"AI 更聪明"。
是这套架构让你拥有:
✅ 可复用 — Skill 写完到处调
✅ 可测试 — Mock Skill 返回值测 Agent 逻辑
✅ 可观测 — 每次调用花了多少钱、输出结构对不对
✅ 可运维 — 失败了自动重试、并发可控、有日志可查
这些都是 ETL 领域解决了二十年的老问题。
只是执行引擎从 SQL 换成了 LLM。
八、如果你现在要上手
阶段一 — 单点实验
- 只写 Skill
- 用 Claude Code 手动跑
# 写一个 Skill
vim .claude/skills/recommend_houses.md
# 测试
claude -s recommend_houses --region "朝阳区" --budget 500
阶段二 — 流程自动化
- 写 Python 脚本调多个 Skill
- 自己维护状态
# agent.py
def recommend_agent(user_query):
# 1. 意图识别
intent = detect_intent(user_query)
# 2. 检索
houses = search_houses(intent)
# 3. 生成推荐
recommendation = generate_recommendation(houses, intent)
# 4. 验证
if verify_answer(recommendation):
return recommendation
else:
return fallback_answer()
阶段三 — 生产调度
- 接 Clawdbot 或 DolphinScheduler
- 加监控、重试、告警
# clawdbot.yaml
dag_name: house_recommendation
schedule: "*/5 * * * *" # 每 5 分钟
max_concurrency: 10
retry: 3
timeout: 60s
tasks:
- name: recommend
agent: recommend_agent
on_failure: send_alert
不需要一上来就造调度平台。
从存储过程开始,不丢人。
九、实战案例:北京房产新闻生成系统
我们公司做北京房产,每天要生成市场分析报告。
传统做法(纯人工)
1. 数据同学导出昨日成交数据(30 分钟)
2. 运营同学写分析报告(2 小时)
3. 主编审核修改(1 小时)
4. 发布到公众号(30 分钟)
总计:4 小时
用 Skill + Agent 后
# 1. 定义 Skill
# .claude/skills/analyze_market.md
"""
分析北京房产市场数据,生成市场分析报告。
输入:成交数据 JSON
输出:分析报告 Markdown
"""
# 2. 定义 Agent
def daily_report_agent():
# Step1: 取数(数据同学的 ETL 已经跑好了)
data = load_from_db("SELECT * FROM daily_transactions")
# Step2: 分析(调用 Skill)
report = claude_skill("analyze_market", data=data)
# Step3: 验证(调用 Skill)
if claude_skill("verify_report", report=report):
# Step4: 发布
publish_to_wechat(report)
else:
# 降级:发通知给运营
send_alert("报告生成失败,请人工处理")
# 3. 调度(每天早上 8 点)
# clawdbot.yaml
schedule: "0 8 * * *"
agent: daily_report_agent
效果:
- 时间:4 小时 → 10 分钟
- 成本:3 人 → 0.5 人(只需要审核)
- 质量:稳定(Skill 可以不断优化)
十、常见误区
误区 1:Agent 会自己思考
错误:Agent 会自己决定做什么
正确:Agent 是你写的 if/else + for 循环
# 这不是 AI 自主决策,这是你写的代码
if intent == "投资":
return investment_recommendation()
elif intent == "自住":
return living_recommendation()
else:
return fallback_answer()
误区 2:Skill 比 Prompt 高级
错误:Skill 是新技术
正确:Skill 就是存储过程,只是换了个名字
# Skill 本质
Skill = Prompt + 版本管理 + 参数化 + 可复用
误区 3:Clawdbot 是 AI 调度平台
错误:Clawdbot 用 AI 调度任务
正确:Clawdbot 就是 DolphinScheduler,只是调用的是 LLM 而不是 SQL
# 这和 DolphinScheduler 的配置有什么区别?
schedule: "0 8 * * *"
retry: 3
timeout: 60s
十一、给数据同学的建议
如果你是数据工程师,想学 AI 应用开发:
- 别学新概念:你已经会了,只是换了个名字
- 从 Skill 开始:就像写存储过程一样
- 用 Python 编排:就像写 ETL 脚本一样
- 接调度平台:就像接 MOIA 一样
你的优势:
- ✅ 懂数据流
- ✅ 懂状态管理
- ✅ 懂异常处理
- ✅ 懂监控告警
你只需要学:
- 怎么调用 LLM API
- 怎么写 Prompt
- 怎么评估输出质量
十二、给算法同学的建议
如果你是算法工程师,想做 AI 应用:
- 别只盯着模型:工程化比模型重要
- 学 ETL 思维:数据流、状态管理、异常处理
- 写可测试的代码:Mock Skill 返回值,测 Agent 逻辑
- 关注可观测性:每次调用花了多少钱、输出结构对不对
你的优势:
- ✅ 懂模型原理
- ✅ 懂 Prompt 工程
- ✅ 懂评估指标
你需要学:
- 怎么写生产级代码
- 怎么做监控告警
- 怎么做异常处理
结语
AI 工程化没有新范式。
只是把数据库那套,在 LLM 上重演一遍。
- Skill 是存储过程
- Agent 是作业流
- Clawdbot 是调度平台
你本来就会,只是换个名词不认识了。
关键词:Claude Code、Skill、Agent、Clawdbot、ETL、工程化、AI 应用开发
更多推荐

所有评论(0)