从零搭建 AI 自动化工作流:网页抓取、智能总结到定时日报全流程命令实战
AI工具工作流自动化教程|附完整命令
在过去,很多重复性工作需要依赖人工一步步完成:收集资料、整理表格、生成报告、发送邮件、同步文件、更新看板……这些任务本身并不复杂,但非常耗时。一旦流程固定、规则明确,就非常适合交给自动化工具处理。
随着 AI 工具的发展,我们现在不仅可以自动执行任务,还可以让 AI 参与“理解、判断、总结、生成内容”等环节。例如:自动抓取网页内容后让 AI 总结重点;收到客户邮件后让 AI 判断意图并分类;每天定时生成日报;将会议录音转成文字并生成待办事项;把表格数据批量生成营销文案等。
本文将以一个完整案例为主线,讲解如何搭建一套可运行的 AI 工作流自动化系统,并附上完整命令,方便你直接复制使用。
一、什么是 AI 工作流自动化?
AI 工作流自动化,可以理解为:
把多个软件、数据源、AI 模型和执行动作连接起来,让它们按照预设规则自动完成一系列任务。
一个典型 AI 自动化流程可能包括以下步骤:
- 定时触发任务;
- 获取数据,例如网页、表格、邮件、数据库;
- 清洗和整理数据;
- 调用 AI 模型进行总结、分类、改写或生成;
- 将结果保存到文件、数据库或表格;
- 自动发送通知,例如邮件、企业微信、飞书、钉钉;
- 根据 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_URL 和 OPENAI_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 任务计划程序中:
- 新建基本任务;
- 设置触发器,例如每天 09:00;
- 操作选择“启动程序”;
- 程序填写
run.bat的完整路径; - 保存即可。
也可以用命令创建任务:
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
十九、最佳实践建议
-
先从一个小流程开始
不要一开始就设计复杂系统。先自动化一个具体任务,例如“每天抓取 3 个网页并总结”。 -
把配置和代码分离
网址、API Key、模型名称、提示词都应该独立配置,方便维护。 -
保留日志
自动化任务失败时,日志是排查问题的关键。 -
控制调用成本
对网页正文进行截断,避免一次传入过多内容。也可以先用规则过滤无关文本。 -
人工审核关键结果
AI 适合辅助生成和总结,但重要决策仍建议保留人工审核环节。 -
注意数据安全
不要把敏感客户信息、商业机密或未授权数据随意传给第三方模型服务。
二十、总结
本文完成了一套从零开始的 AI 工作流自动化方案:通过 Python 读取网址配置,自动抓取网页内容,解析正文,调用 AI 生成中文摘要,最终生成 Markdown 日报,并进一步扩展了邮件发送和定时执行能力。
这套流程虽然简单,但已经具备 AI 自动化的核心结构:
输入数据 → 数据处理 → AI 分析生成 → 输出结果 → 定时执行
你可以在此基础上继续扩展,例如:
- 接入飞书、企业微信或钉钉机器人;
- 自动读取邮箱并分类;
- 自动生成销售线索报告;
- 自动分析表格数据;
- 自动生成周报和月报;
- 自动同步到 Notion 或知识库。
AI 工作流自动化的关键,不是一次性做出复杂系统,而是持续找到工作中重复、耗时、规则明确的环节,然后逐步交给工具完成。当一个个小流程被自动化之后,你会发现自己的时间被释放出来,可以更多投入到判断、创意、沟通和决策上。