上一篇 下一篇 分享链接 返回 返回顶部

从零搭建 AI 自动化工作流:网页抓取、智能总结到定时日报全流程命令实战

发布人:慈云数据-客服中心 发布时间:6小时前 阅读量:3

AI工具工作流自动化教程|附完整命令

在过去,很多重复性工作需要依赖人工一步步完成:收集资料、整理表格、生成报告、发送邮件、同步文件、更新看板……这些任务本身并不复杂,但非常耗时。一旦流程固定、规则明确,就非常适合交给自动化工具处理。

随着 AI 工具的发展,我们现在不仅可以自动执行任务,还可以让 AI 参与“理解、判断、总结、生成内容”等环节。例如:自动抓取网页内容后让 AI 总结重点;收到客户邮件后让 AI 判断意图并分类;每天定时生成日报;将会议录音转成文字并生成待办事项;把表格数据批量生成营销文案等。

本文将以一个完整案例为主线,讲解如何搭建一套可运行的 AI 工作流自动化系统,并附上完整命令,方便你直接复制使用。


一、什么是 AI 工作流自动化?

AI 工作流自动化,可以理解为:

把多个软件、数据源、AI 模型和执行动作连接起来,让它们按照预设规则自动完成一系列任务。

一个典型 AI 自动化流程可能包括以下步骤:

  1. 定时触发任务;
  2. 获取数据,例如网页、表格、邮件、数据库;
  3. 清洗和整理数据;
  4. 调用 AI 模型进行总结、分类、改写或生成;
  5. 将结果保存到文件、数据库或表格;
  6. 自动发送通知,例如邮件、企业微信、飞书、钉钉;
  7. 根据 AI 判断结果执行下一步动作。

举个例子:

每天早上 9 点,系统自动抓取指定行业新闻,将新闻正文交给 AI 总结成中文摘要,再生成一份结构化日报,最后发送到邮箱或企业微信群。

这个过程如果手动做,可能需要 30 分钟到 1 小时;自动化之后,只需要系统定时运行即可。


二、适合自动化的 AI 工作流场景

在正式搭建之前,你可以先判断自己的工作是否适合自动化。一般来说,满足以下几个特征的任务都适合:

  • 重复频率高;
  • 流程相对固定;
  • 输入和输出格式比较明确;
  • 需要大量复制、粘贴、整理、归纳;
  • 人工判断标准可以用规则或提示词描述;
  • 对实时性或批量处理有需求。

常见场景包括:

1. 内容运营自动化

  • 自动收集热点新闻;
  • 自动生成公众号选题;
  • 自动生成小红书标题;
  • 自动改写短视频脚本;
  • 自动批量生成 SEO 文章摘要;
  • 自动生成日报、周报、月报。

2. 销售和客户管理自动化

  • 自动整理客户邮件;
  • 自动判断客户意向;
  • 自动生成销售跟进话术;
  • 自动更新 CRM;
  • 自动提醒销售人员跟进重点客户。

3. 数据分析自动化

  • 自动读取 Excel 或 CSV;
  • 自动生成数据分析结论;
  • 自动绘制图表;
  • 自动输出 Markdown、PDF 或邮件报告。

4. 办公协同自动化

  • 自动整理会议纪要;
  • 自动提取待办事项;
  • 自动同步任务到 Notion、飞书、多维表格;
  • 自动发送团队提醒。

三、本教程要实现的自动化流程

本文将搭建一个实用工作流:

每天定时抓取多个网页内容,调用 AI 自动总结,生成 Markdown 格式日报,并将结果保存到本地文件。

该流程包含以下能力:

  • 支持配置多个网页地址;
  • 自动请求网页内容;
  • 提取网页正文文本;
  • 调用 AI 模型生成摘要;
  • 自动生成日报文件;
  • 支持命令行运行;
  • 支持定时任务执行。

为了便于理解,我们选择使用 Python 来实现。Python 生态成熟,适合做自动化脚本、数据处理和 AI 接口调用。


四、准备环境

在开始之前,你需要准备:

  • 一台可以运行 Python 的电脑或服务器;
  • Python 3.10 或以上版本;
  • 一个 AI API Key;
  • 基础命令行操作能力。

本文以 OpenAI 兼容接口为例。如果你使用的是其他大模型服务,只要支持 OpenAI SDK 或兼容 API,基本都可以按照类似方式改造。


五、安装 Python

macOS 检查 Python 版本

打开终端,输入:

python3 --version

如果输出类似:

Python 3.11.6

说明已经安装。

如果没有安装,可以使用 Homebrew:

brew install python

Windows 检查 Python 版本

打开 PowerShell:

python --version

如果没有安装,可以前往 Python 官网下载安装包:

https://www.python.org/downloads/

安装时请勾选:

Add Python to PATH

Linux 安装 Python

以 Ubuntu 为例:

sudo apt update
sudo apt install -y python3 python3-pip python3-venv

检查版本:

python3 --version

六、创建项目目录

我们先创建一个项目文件夹:

mkdir ai-workflow-demo
cd ai-workflow-demo

创建虚拟环境:

python3 -m venv .venv

激活虚拟环境。

macOS / Linux:

source .venv/bin/activate

Windows PowerShell:

.venv\Scripts\Activate.ps1

如果 Windows 提示脚本执行策略限制,可以先执行:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

然后重新激活虚拟环境。


七、安装依赖包

我们需要安装以下 Python 包:

  • openai:调用 AI 模型;
  • requests:请求网页;
  • beautifulsoup4:解析 HTML;
  • python-dotenv:读取环境变量;
  • lxml:辅助解析网页;
  • schedule:用于本地定时任务。

执行命令:

pip install openai requests beautifulsoup4 python-dotenv lxml schedule

为了便于后续部署,也可以生成依赖文件:

pip freeze > requirements.txt

以后在新环境中可以直接安装:

pip install -r requirements.txt

八、配置环境变量

为了避免把 API Key 写死在代码里,我们使用 .env 文件保存敏感信息。

创建 .env 文件:

touch .env

Windows 可以使用:

New-Item .env

.env 中写入:

OPENAI_API_KEY=你的_API_KEY
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini

如果你使用的是其他 OpenAI 兼容服务,可以修改 OPENAI_BASE_URLOPENAI_MODEL

例如:

OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
OPENAI_BASE_URL=https://your-model-provider.com/v1
OPENAI_MODEL=your-model-name

注意:不要把 .env 文件提交到 GitHub,否则可能泄露密钥。

创建 .gitignore 文件:

touch .gitignore

写入:

.env
.venv/
__pycache__/
reports/

九、创建网页配置文件

我们把要抓取的网址单独放到一个配置文件中,方便后续维护。

创建 sites.txt

touch sites.txt

写入示例网址:

https://www.example.com
https://openai.com/news/
https://www.python.org/blogs/

你可以把这里替换成自己常看的行业网站、公司公告页、技术博客、竞品动态页面等。


十、编写核心自动化脚本

创建主程序文件:

touch main.py

下面是完整代码,可以直接复制到 main.py

import os
import re
import time
import datetime
import requests
from bs4 import BeautifulSoup
from dotenv import load_dotenv
from openai import OpenAI


load_dotenv()

OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
OPENAI_BASE_URL = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-4o-mini")

client = OpenAI(
    api_key=OPENAI_API_KEY,
    base_url=OPENAI_BASE_URL
)


def read_sites(file_path="sites.txt"):
    """
    读取网址配置文件。
    每一行一个网址,忽略空行和以 # 开头的注释行。
    """
    sites = []

    if not os.path.exists(file_path):
        raise FileNotFoundError(f"未找到配置文件:{file_path}")

    with open(file_path, "r", encoding="utf-8") as f:
        for line in f:
            url = line.strip()
            if not url:
                continue
            if url.startswith("#"):
                continue
            sites.append(url)

    return sites


def fetch_html(url):
    """
    请求网页 HTML。
    """
    headers = {
        "User-Agent": (
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
            "AppleWebKit/537.36 (KHTML, like Gecko) "
            "Chrome/120.0.0.0 Safari/537.36"
        )
    }

    try:
        response = requests.get(url, headers=headers, timeout=20)
        response.raise_for_status()
        response.encoding = response.apparent_encoding
        return response.text
    except Exception as e:
        print(f"[错误] 抓取失败:{url},原因:{e}")
        return ""


def clean_text(text):
    """
    清理多余空白字符。
    """
    text = re.sub(r"\s+", " ", text)
    return text.strip()


def extract_text_from_html(html):
    """
    从 HTML 中提取正文文本。
    """
    if not html:
        return ""

    soup = BeautifulSoup(html, "lxml")

    for tag in soup(["script", "style", "noscript", "header", "footer", "nav"]):
        tag.decompose()

    title = soup.title.string.strip() if soup.title and soup.title.string else "无标题"

    paragraphs = []
    for p in soup.find_all(["p", "h1", "h2", "h3", "li"]):
        text = p.get_text(" ", strip=True)
        if text and len(text) > 10:
            paragraphs.append(text)

    body_text = "\n".join(paragraphs)
    body_text = clean_text(body_text)

    return {
        "title": title,
        "content": body_text
    }


def summarize_with_ai(title, url, content):
    """
    调用 AI 模型生成摘要。
    """
    if not content:
        return "未能提取到有效正文内容。"

    max_length = 12000
    content = content[:max_length]

    prompt = f"""
你是一名专业的信息分析师。请阅读以下网页内容,并用中文生成结构化摘要。

要求:
1. 用简洁、准确的中文表达;
2. 不要编造原文不存在的信息;
3. 输出 Markdown 格式;
4. 包含以下部分:
   - 一句话总结
   - 核心要点,使用项目符号
   - 可能的影响或启发
   - 适合关注的人群
5. 如果内容信息不足,请明确说明。

网页标题:{title}
网页链接:{url}

网页正文:
{content}
"""

    try:
        completion = client.chat.completions.create(
            model=OPENAI_MODEL,
            messages=[
                {
                    "role": "system",
                    "content": "你擅长将网页、新闻、公告和文章整理成高质量中文摘要。"
                },
                {
                    "role": "user",
                    "content": prompt
                }
            ],
            temperature=0.3
        )

        return completion.choices[0].message.content.strip()

    except Exception as e:
        print(f"[错误] AI 摘要生成失败:{url},原因:{e}")
        return f"AI 摘要生成失败:{e}"


def generate_report(results):
    """
    生成 Markdown 日报。
    """
    today = datetime.datetime.now().strftime("%Y-%m-%d")
    now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

    lines = []
    lines.append(f"# AI 自动化网页摘要日报")
    lines.append("")
    lines.append(f"- 生成日期:{today}")
    lines.append(f"- 生成时间:{now}")
    lines.append(f"- 数据来源数量:{len(results)}")
    lines.append("")
    lines.append("---")
    lines.append("")

    for index, item in enumerate(results, start=1):
        lines.append(f"## {index}. {item['title']}")
        lines.append("")
        lines.append(f"- 原文链接:{item['url']}")
        lines.append("")
        lines.append(item["summary"])
        lines.append("")
        lines.append("---")
        lines.append("")

    return "\n".join(lines)


def save_report(markdown_text):
    """
    保存日报文件。
    """
    report_dir = "reports"
    os.makedirs(report_dir, exist_ok=True)

    filename = datetime.datetime.now().strftime("daily_report_%Y-%m-%d_%H-%M-%S.md")
    file_path = os.path.join(report_dir, filename)

    with open(file_path, "w", encoding="utf-8") as f:
        f.write(markdown_text)

    return file_path


def run_workflow():
    """
    执行完整工作流。
    """
    print("[开始] AI 工作流自动化任务启动")

    sites = read_sites()
    results = []

    for url in sites:
        print(f"[抓取] {url}")
        html = fetch_html(url)

        print(f"[解析] {url}")
        data = extract_text_from_html(html)

        title = data.get("title", "无标题")
        content = data.get("content", "")

        print(f"[AI] 正在生成摘要:{title}")
        summary = summarize_with_ai(title, url, content)

        results.append({
            "url": url,
            "title": title,
            "summary": summary
        })

        time.sleep(1)

    print("[生成] 正在生成 Markdown 日报")
    report = generate_report(results)

    file_path = save_report(report)
    print(f"[完成] 日报已保存:{file_path}")


if __name__ == "__main__":
    run_workflow()

十一、运行自动化脚本

确认项目目录结构如下:

ai-workflow-demo/
├── .env
├── .gitignore
├── main.py
├── requirements.txt
├── sites.txt
└── .venv/

运行命令:

python main.py

如果你在 macOS 或 Linux 中使用的是 python3

python3 main.py

运行成功后,你会看到类似输出:

[开始] AI 工作流自动化任务启动
[抓取] https://openai.com/news/
[解析] https://openai.com/news/
[AI] 正在生成摘要:OpenAI News
[生成] 正在生成 Markdown 日报
[完成] 日报已保存:reports/daily_report_2025-01-01_09-00-00.md

然后进入 reports 文件夹:

ls reports

查看生成的日报:

cat reports/daily_report_2025-01-01_09-00-00.md

十二、增加邮件发送功能

仅生成本地文件还不够实用,我们可以继续扩展:生成日报后自动发送邮件。

创建 send_email.py

touch send_email.py

写入完整代码:

import os
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from dotenv import load_dotenv


load_dotenv()

SMTP_HOST = os.getenv("SMTP_HOST")
SMTP_PORT = int(os.getenv("SMTP_PORT", "465"))
SMTP_USER = os.getenv("SMTP_USER")
SMTP_PASSWORD = os.getenv("SMTP_PASSWORD")
EMAIL_TO = os.getenv("EMAIL_TO")


def send_email(subject, content):
    message = MIMEText(content, "plain", "utf-8")
    message["From"] = Header(SMTP_USER)
    message["To"] = Header(EMAIL_TO)
    message["Subject"] = Header(subject, "utf-8")

    try:
        smtp = smtplib.SMTP_SSL(SMTP_HOST, SMTP_PORT)
        smtp.login(SMTP_USER, SMTP_PASSWORD)
        smtp.sendmail(SMTP_USER, [EMAIL_TO], message.as_string())
        smtp.quit()
        print("[完成] 邮件发送成功")
    except Exception as e:
        print(f"[错误] 邮件发送失败:{e}")

.env 中增加邮件配置:

SMTP_HOST=smtp.qq.com
SMTP_PORT=465
SMTP_USER=你的邮箱@qq.com
SMTP_PASSWORD=你的邮箱授权码
EMAIL_TO=接收方邮箱@example.com

注意:很多邮箱不能直接使用登录密码,需要在邮箱设置中开启 SMTP 服务并生成“授权码”。

然后修改 main.py,在顶部导入:

from send_email import send_email

run_workflow() 函数最后增加:

send_email(
    subject="AI 自动化网页摘要日报",
    content=report
)

即保存文件后自动发送邮件。


十三、使用 schedule 实现本地定时运行

如果你希望脚本一直在本地运行,并每天固定时间执行,可以创建 scheduler.py

创建文件:

touch scheduler.py

写入代码:

import time
import schedule
from main import run_workflow


schedule.every().day.at("09:00").do(run_workflow)

print("[启动] 定时任务已启动,每天 09:00 执行")

while True:
    schedule.run_pending()
    time.sleep(30)

运行:

python scheduler.py

它会常驻运行,每天 09:00 自动执行一次。

如果你想测试每 1 分钟执行一次:

schedule.every(1).minutes.do(run_workflow)

十四、使用 Cron 在服务器定时执行

如果你将脚本部署在 Linux 服务器上,更推荐使用 Cron。

先查看 Python 路径:

which python

如果使用虚拟环境,路径可能类似:

/home/ubuntu/ai-workflow-demo/.venv/bin/python

查看项目路径:

pwd

假设项目路径是:

/home/ubuntu/ai-workflow-demo

编辑 Cron:

crontab -e

添加以下内容,表示每天早上 9 点执行:

0 9 * * * cd /home/ubuntu/ai-workflow-demo && /home/ubuntu/ai-workflow-demo/.venv/bin/python main.py >> logs/cron.log 2>&1

创建日志目录:

mkdir -p logs

查看定时任务:

crontab -l

查看运行日志:

tail -f logs/cron.log

如果想每小时执行一次:

0 * * * * cd /home/ubuntu/ai-workflow-demo && /home/ubuntu/ai-workflow-demo/.venv/bin/python main.py >> logs/cron.log 2>&1

如果想每 10 分钟执行一次:

*/10 * * * * cd /home/ubuntu/ai-workflow-demo && /home/ubuntu/ai-workflow-demo/.venv/bin/python main.py >> logs/cron.log 2>&1

十五、使用 Windows 任务计划程序定时执行

如果你使用 Windows,可以通过“任务计划程序”实现自动运行。

先确认 Python 路径:

where python

假设项目路径为:

C:\Users\YourName\ai-workflow-demo

虚拟环境 Python 路径为:

C:\Users\YourName\ai-workflow-demo\.venv\Scripts\python.exe

可以创建一个 run.bat 文件:

cd /d C:\Users\YourName\ai-workflow-demo
C:\Users\YourName\ai-workflow-demo\.venv\Scripts\python.exe main.py

然后在 Windows 任务计划程序中:

  1. 新建基本任务;
  2. 设置触发器,例如每天 09:00;
  3. 操作选择“启动程序”;
  4. 程序填写 run.bat 的完整路径;
  5. 保存即可。

也可以用命令创建任务:

schtasks /Create /SC DAILY /TN "AIWorkflowDailyReport" /TR "C:\Users\YourName\ai-workflow-demo\run.bat" /ST 09:00

查看任务:

schtasks /Query /TN "AIWorkflowDailyReport"

删除任务:

schtasks /Delete /TN "AIWorkflowDailyReport" /F

十六、提示词优化:让 AI 输出更稳定

自动化流程中,AI 输出是否稳定,很大程度取决于提示词。建议遵循以下原则:

1. 明确角色

例如:

你是一名专业的信息分析师,擅长将复杂文章整理成清晰、准确、可执行的中文摘要。

2. 明确输出结构

例如:

请按照以下 Markdown 结构输出:
## 一句话总结
## 核心要点
## 风险与机会
## 建议行动

3. 明确禁止事项

例如:

不要编造原文没有的信息。
如果信息不足,请回答“原文信息不足,无法判断”。

4. 限定语言和风格

例如:

请使用简体中文,表达简洁、专业,适合发给团队成员阅读。

你也可以把提示词单独保存为 prompt.txt,后续不用改代码,只改提示词文件即可。


十七、进阶扩展:接入表格和数据库

如果你的数据来自 CSV,可以这样读取:

import csv

with open("data.csv", "r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row)

如果要把 AI 结果写入 CSV:

import csv

with open("result.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=["title", "url", "summary"])
    writer.writeheader()
    writer.writerows(results)

如果要接入 SQLite 数据库:

import sqlite3

conn = sqlite3.connect("workflow.db")
cursor = conn.cursor()

cursor.execute("""
CREATE TABLE IF NOT EXISTS reports (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT,
    url TEXT,
    summary TEXT,
    created_at TEXT
)
""")

conn.commit()
conn.close()

十八、常见问题与解决方案

1. API Key 报错怎么办?

检查 .env 文件是否正确:

cat .env

确认环境变量名称是否和代码一致:

OPENAI_API_KEY=你的_API_KEY

如果仍然失败,可以在 Python 中测试:

python -c "import os; from dotenv import load_dotenv; load_dotenv(); print(os.getenv('OPENAI_API_KEY'))"

2. 网页抓取不到内容怎么办?

很多网站使用前端渲染,requests 只能拿到初始 HTML,拿不到动态内容。可以考虑:

  • 换 RSS 源;
  • 使用网站 API;
  • 使用 Playwright;
  • 使用可读性解析库;
  • 选择更适合抓取的页面。

安装 Playwright:

pip install playwright
playwright install

3. 摘要内容不准确怎么办?

可以优化提示词,加入约束:

请只基于原文内容总结,不要加入外部知识。
所有结论必须能从原文中找到依据。

4. 定时任务没有执行怎么办?

Linux 下检查 Cron 服务:

systemctl status cron

Ubuntu 如未启动:

sudo systemctl start cron
sudo systemctl enable cron

查看日志:

grep CRON /var/log/syslog

十九、最佳实践建议

  1. 先从一个小流程开始
    不要一开始就设计复杂系统。先自动化一个具体任务,例如“每天抓取 3 个网页并总结”。

  2. 把配置和代码分离
    网址、API Key、模型名称、提示词都应该独立配置,方便维护。

  3. 保留日志
    自动化任务失败时,日志是排查问题的关键。

  4. 控制调用成本
    对网页正文进行截断,避免一次传入过多内容。也可以先用规则过滤无关文本。

  5. 人工审核关键结果
    AI 适合辅助生成和总结,但重要决策仍建议保留人工审核环节。

  6. 注意数据安全
    不要把敏感客户信息、商业机密或未授权数据随意传给第三方模型服务。


二十、总结

本文完成了一套从零开始的 AI 工作流自动化方案:通过 Python 读取网址配置,自动抓取网页内容,解析正文,调用 AI 生成中文摘要,最终生成 Markdown 日报,并进一步扩展了邮件发送和定时执行能力。

这套流程虽然简单,但已经具备 AI 自动化的核心结构:

输入数据 → 数据处理 → AI 分析生成 → 输出结果 → 定时执行

你可以在此基础上继续扩展,例如:

  • 接入飞书、企业微信或钉钉机器人;
  • 自动读取邮箱并分类;
  • 自动生成销售线索报告;
  • 自动分析表格数据;
  • 自动生成周报和月报;
  • 自动同步到 Notion 或知识库。

AI 工作流自动化的关键,不是一次性做出复杂系统,而是持续找到工作中重复、耗时、规则明确的环节,然后逐步交给工具完成。当一个个小流程被自动化之后,你会发现自己的时间被释放出来,可以更多投入到判断、创意、沟通和决策上。

目录结构
全文