第 16 章:可复查的自动化工作流
前面几章讲的是「让 Codex 帮你做事」。
这一章更进一步——学习怎样让 Codex 协助设计、审查和排查自动化工作流。定时器、CI、部署和消息通知由外部系统配置与执行,不是 Codex 默认自动完成的能力。
别再半夜起来跑脚本、别每天手动跑报表、别总盯着 CI/CD 管道了。学会这几招,你的电脑在你睡觉的时候,还在打工。
16.1 数据处理流水线
什么是数据处理流水线?
简单说就是:数据从 A 到 B 的过程中,自动做一些处理。
原始数据 → 清洗 → 转换 → 分析 → 输出报告
↑ 每一步都自动完成 ↑
场景 1:批量处理 CSV 文件
假设你每个月都要处理销售数据——几万行的 CSV 文件,需要清洗、汇总、生成图表。
传统做法: 打开 Excel → 手动筛选 → 做透视表 → 手动画图(30 分钟)
Codex 做法:
你:帮我写一个脚本,自动处理这个 CSV:
1. 删除空行和重复行
2. 把日期格式统一成 YYYY-MM-DD
3. 按月份汇总销售额
4. 生成一个柱状图
5. 输出清洗后的数据和图表
Codex 生成一个 Python 脚本 process_sales.py:
# script/process_sales.py
import pandas as pd
import matplotlib.pyplot as plt
from pathlib import Path
def process_sales(input_file: str):
# 1. 读取数据
df = pd.read_csv(input_file)
# 2. 清洗:删除空行和重复行
df = df.dropna()
df = df.drop_duplicates()
# 3. 统一日期格式
df['date'] = pd.to_datetime(df['date'], format='mixed')
df['month'] = df['date'].dt.to_period('M')
# 4. 按月汇总
monthly_summary = df.groupby('month')['amount'].sum()
# 5. 生成柱状图
plt.figure(figsize=(10, 6))
monthly_summary.plot(kind='bar')
plt.title('月度销售额汇总')
plt.xlabel('月份')
plt.ylabel('销售额 (元)')
plt.tight_layout()
plt.savefig('output/monthly_sales.png')
# 6. 输出清洗后数据
df.to_csv('output/cleaned_sales.csv', index=False)
return monthly_summary
# 执行
result = process_sales('data/sales_2024.csv')
print("处理完成!")
print(result)
你只需要:
python script/process_sales.py
所有工作自动完成。
场景 2:多数据源合并
你:我有三个数据源:
- users.csv (用户信息)
- orders.json (订单数据)
- logs/ (每天的日志文件)
帮我写一个流水线脚本:
1. 合并三个数据源
2. 关联用户和他们的订单
3. 统计每个用户的消费总额
4. 输出 top 50 用户名单
场景 3:爬虫+清洗+入库
你:帮我写一个数据流水线:
每天自动抓取某个网站的文章列表,
清洗后存到本地的 SQLite 数据库里。
具体要求:
- 网站:https://example.com/articles
- 只抓标题、发布时间、摘要
- 去重(不要重复抓取已有文章)
- 存入 articles.db
16.2 定时报告生成
你有过这种经历吗?每天早上到公司第一件事就是:
- 打开各种后台看数据
- 手动抄写到 Excel 里
- 算几个指标
- 复制粘贴到 Slack 或邮件里
这是最应该被自动化的事情。
第一步:让 Codex 帮你写日报脚本
你:帮我写一个日报生成器脚本。
我需要的数据:
- GitHub 上的合并 PR 数量(从 API 取)
- 项目的最近提交
- 服务器状态(CPU、内存使用率)
帮我生成一个 Markdown 格式的日报,
保存在 daily-reports/ 目录下。
Codex 写的脚本 daily_report.py:
#!/usr/bin/env python3
"""每日报告生成器"""
import subprocess
import requests
import json
from datetime import datetime
from pathlib import Path
def get_git_stats():
"""获取今天的 Git 提交统计"""
today = datetime.now().strftime("%Y-%m-%d")
result = subprocess.run(
["git", "log", "--after=" + today, "--oneline"],
capture_output=True, text=True
)
commits = result.stdout.strip().split("\n")
return [c for c in commits if c]
def get_server_status():
"""获取服务器状态"""
cpu = subprocess.run(
["top", "-l", "1", "-n", "0"], capture_output=True, text=True
)
memory = subprocess.run(
["vm_stat"], capture_output=True, text=True
)
return {"cpu": cpu.stdout[:200], "memory": memory.stdout[:200]}
def generate_report():
commits = get_git_stats()
server = get_server_status()
report = f"""# 📊 日报 - {datetime.now().strftime('%Y-%m-%d')}
## 📝 今日提交
共 {len(commits)} 次提交
{chr(10).join(f"- {c}" for c in commits[:10]) if commits else '- 暂无提交'}
## 🖥 服务器状态
- CPU 负载:请查看详细日志
- 内存状态:请查看详细日志
## ✨ 自动生成
生成时间:{datetime.now().strftime('%H:%M:%S')}
"""
output_dir = Path("daily-reports")
output_dir.mkdir(exist_ok=True)
filename = f"daily-reports/{datetime.now().strftime('%Y-%m-%d')}.md"
with open(filename, "w") as f:
f.write(report)
print(f"✅ 日报已生成: {filename}")
if __name__ == "__main__":
generate_report()
第二步:设置定时任务
要让日报自动运行,你需要配置一个定时触发器。
用系统自带的 cron(macOS / Linux)
# 每天上午 9:00 自动生成日报
crontab -e
# 添加这一行:
0 9 * * 1-5 cd /path/to/your-project && python scripts/daily_report.py
💡 看不懂 cron 语法?
0 9 * * 1-5= 周一至周五每天 9:000 8 * * 1= 每周一早上 8:00*/30 * * * *= 每 30 分钟0 0 1 * *= 每月 1 号半夜 0 点
外部定时器与任务说明
不要假定 Codex 提供固定定时器命令。可以让它协助把任务写清楚、审查脚本和解释外部工具的文档;实际定时任务应在你的操作系统、代码托管平台或经管理员批准的自动化服务中配置。
用 GitHub Actions(最推荐)
把脚本放到 GitHub 仓库,用 GitHub Actions 定时跑:
# .github/workflows/daily-report.yml
name: Daily Report
on:
schedule:
- cron: '0 2 * * 1-5' # UTC 2:00 = 北京时间 10:00
jobs:
report:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: pip install requests
- run: python scripts/daily_report.py
- name: Upload Report
uses: actions/upload-artifact@v4
with:
name: daily-report
path: daily-reports/
实际场景:老板想要的经营日报
你:帮我设计一个经营日报的草稿流程,并列出需要由外部系统配置的定时、数据权限和消息发送步骤。
数据来源:
- 数据库(MySQL)的昨天订单
- 用户增长数据
- 服务器异常日志
要求:
- 统计昨日 GMV、订单数、客单价
- 和上周同期对比,标红/标绿变化
- 如果有服务器异常,自动标红
- 通过 Webhook 发到企业微信群
16.3 DevOps 自动化
DevOps 涉及服务器、密钥、部署和监控,必须由具备权限的人负责。Codex 可以协助解释流程、生成配置草稿、审查脚本和分析报错,不能替代外部平台执行这些工作。
场景 1:审查部署流水线(进阶)
你:帮我创建一个部署流水线:
代码推送到 main 分支后自动:
1. 跑测试
2. 构建 Docker 镜像
3. 推送到 Docker Hub
4. SSH 到服务器拉最新镜像
5. 重启服务
6. 发通知到 Slack
Codex 可以协助生成和审查 GitHub Actions 配置草稿;GitHub Actions、SSH、镜像仓库和 Slack 均为外部系统,必须由具备权限的人设置密钥、测试并批准部署:
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 运行测试
run: |
pip install -r requirements.txt
pytest tests/
- name: 构建 Docker 镜像
run: docker build -t myapp:${{ github.sha }} .
- name: 推送到 Docker Hub
run: |
docker tag myapp:${{ github.sha }} ${{ secrets.DOCKER_USER }}/myapp:latest
docker push ${{ secrets.DOCKER_USER }}/myapp:latest
- name: 部署到服务器
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
docker pull ${{ secrets.DOCKER_USER }}/myapp:latest
docker-compose up -d
- name: 通知 Slack
uses: slackapi/slack-github-action@v1.24.0
with:
payload: '{"text":"✅ 部署成功!版本:${{ github.sha }}"}'
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}
场景 2:日志分析自动化
你:帮我写一个日志监控脚本:
1. 每小时检查 Nginx 错误日志
2. 统计 5xx 错误的数量
3. 如果有超过 10 个 5xx 错误,发告警
4. 每天生成一份错误分析报告
5. 按 IP 统计恶意请求
场景 3:数据库备份 + 健康检查
你:帮我设置每天晚上 2 点自动备份 PostgreSQL 数据库,
保留最近 7 天的备份文件,
并在备份完成后发送通知。
Codex 生成的备份脚本:
#!/bin/bash
# backup-db.sh
BACKUP_DIR="/backups/postgres"
DB_NAME="myapp"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份数据库
pg_dump $DB_NAME | gzip > $BACKUP_FILE
# 删除 7 天前的旧备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
# 检查备份文件大小
SIZE=$(du -h $BACKUP_FILE | cut -f1)
# 发送通知
curl -X POST -H "Content-Type: application/json" \
-d "{\"text\": \"✅ 数据库备份完成\\n数据库:$DB_NAME\\n文件:$BACKUP_FILE\\n大小:$SIZE\"}" \
$SLACK_WEBHOOK_URL
echo "✅ 备份完成: $BACKUP_FILE ($SIZE)"
配置每天 2:00 执行:
0 2 * * * /path/to/backup-db.sh
场景 4:容器环境一键启停
你:帮我把项目打包成 Docker Compose,
包含:
- Web 服务(FastAPI)
- 数据库(PostgreSQL)
- Redis
- Nginx 反向代理
提供一键启动和停止的脚本
综合实战:可人工复核的运营流程
把这一章的知识点串起来,你可以设计一套可人工复核的自动化方案:
🌅 定期运行 → 外部任务生成日报草稿 → 人工核对后发送
📊 数据更新 → 外部系统刷新看板 → 人工检查异常
🔄 代码变更 → CI 平台运行测试 → 人工批准部署
🔔 异常报警 → 监控平台通知值班人员 → 人工确认影响
📅 定期汇总 → 生成周报/月报草稿 → 负责人审阅
这些都需要外部平台、权限、密钥管理、监控和持续维护;任何一次配置都应先在测试环境验证,并保留人工暂停与审核机制。
本章小结
| 自动化场景 | 你能得到什么 |
|---|---|
| 数据处理管道 | 脏数据自动变干净、多数据源自动合并 |
| 定时报告 | 外部任务生成草稿,供人工审核 |
| CI/CD 流水线 | 外部平台运行测试,部署需审批 |
| 备份监控 | 外部系统执行,负责人定期检查恢复能力 |
| 运营流程 | 数据、报告和通知均保留人工审核点 |
到了这里,你已经读完了指南的全部 16 章。
你从「什么是 Codex」到「让 Codex 协助设计和审查自动化方案」,走完了从入门到实战的完整路径。现在你可以:
- 🚀 用 Codex 写代码(第 15 章)
- 📋 用 Skills 固化重复工作流(第 11 章)
- 🔌 用插件打通所有工具(第 12 章)
- 🧠 用项目指引让协作规则更稳定(第 13 章)
- 🏠 在授权范围内整理资料与起草文本(第 14 章)
- 🤖 用 Codex 协助设计、审查自动化流程(第 16 章)
AI 不是为了取代你,而是为了让你有时间做更重要的事。
保持好奇,保持实践。AI 时代,最大的浪费就是还在用传统方式做重复劳动。
加油 💪
系统教程,帮你把工具用好,再回到任务中。 浏览任务方案 →