<style>.toc-chapters{max-height:none!important}.copy-btn,#sidebar-toggle,#fullscreen-toggle{display:none!important}@media(max-width:768px){.tutorial-app{display:flex;height:auto;overflow:visible;flex-direction:column}.tutorial-main{order:0;overflow:visible}.tutorial-content{overflow:visible}.tutorial-sidebar{order:1;position:static!important;width:100%!important;min-width:0!important;max-height:none!important;display:flex!important;transform:none!important}.sidebar-toc{overflow:visible}}</style>

第 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 定时报告生成

你有过这种经历吗?每天早上到公司第一件事就是:

  1. 打开各种后台看数据
  2. 手动抄写到 Excel 里
  3. 算几个指标
  4. 复制粘贴到 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:00
  • 0 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 时代,最大的浪费就是还在用传统方式做重复劳动。

加油 💪


系统教程,帮你把工具用好,再回到任务中。 浏览任务方案 →