先聊一个现象:很多人一提到“AI 代理”“AI Agent 业务”,第一反应就是做聊天机器人、做 Copilot、做复杂的多智能体推理系统。但真正能稳定产生收入、能长期运行、能“睡得着觉”的 AI 项目,往往不是那些听起来很酷的东西,反而是那些看起来有点“无聊”的自动化方案。
什么是“无聊”的 AI 自动化?就是把重复、耗时、规则明确但量很大的工作,交给 AI 代理去跑。比如每天定时抓取竞品价格、自动把客服工单分好类、定期巡检服务器日志并生成摘要。这些事情单独拿出来没有任何噱头,但合在一起,就是一个能帮企业节省人力、帮个人建立被动收入的可靠系统。
本文会围绕 9 个这样“无聊但能赚钱”的 AI 自动化方案展开,从方案设计、技术选型、代码实现到部署运维,给你一套可以直接套用的方法论。文章适合有基础 Python 或 Node.js 经验的开发者,也适合正在寻找 AI 落地场景的独立开发者。如果你还不太熟悉 AI 代理的概念,前两节会先把基础讲清楚。
1. 背景与核心概念
1.1 什么是 AI 代理(AI Agent)
AI 代理是一个能够感知环境、做出决策并执行动作的软件程序。和传统的脚本不同,传统脚本只能按照写死的逻辑运行,而 AI 代理可以借助大语言模型(LLM)对输入内容进行理解、推理和规划,再调用工具完成实际任务。
一个最简单的 AI 代理循环可以概括为:
- 接收任务(比如“整理今天的销售数据并生成日报”)。
- 调用大模型进行任务拆解。
- 根据拆解结果调用相应工具(数据库查询、HTTP 请求、文件读写)。
- 获取工具执行结果。
- 再次交给大模型判断结果是否符合预期。
- 满意则输出,不满意则继续迭代。
从这个流程可以看出,AI 代理的本质是“LLM + 工具调用 + 循环控制”。和传统自动化相比,它的优势在于处理非结构化输入,比如自然语言指令、混合格式文档、不规则日志。
1.2 “无聊”方案为什么能盈利
“无聊”方案通常具备以下特征:
- 需求稳定且长期存在,不会因为热点退去而消失。
- 人工做成本高,但规则相对清晰,适合自动化。
- 单次价值不高,但高频执行,累积价值可观。
- 对 AI 能力的要求是“可靠”而不是“惊艳”。
比如一个自动生成 SEO 文章摘要并发布到内部知识库的代理,听起来平淡无奇,但如果它每天能替代一名编辑 2 小时的工作,对企业来说就是实打实的成本节约。对于独立开发者来说,把这类方案封装成订阅制服务,就是一笔持续收入。
1.3 可靠盈利的衡量标准
判断一个 AI 自动化方案是否值得投入,可以从四个维度评估:
| 维度 | 说明 | 判断标准 |
|---|---|---|
| 需求频率 | 任务多久执行一次 | 每天或每周至少一次 |
| 人工成本 | 人工完成需要多少时间 | 单次超过 10 分钟值得自动化 |
| 结果可验证 | 输出质量能否自动校验 | 有明确格式或规则可检查 |
| 容错成本 | 偶尔出错会造成多大损失 | 损失可控,且有重试机制 |
当一个方案在这四个维度上表现良好,它就是一个“可靠盈利”的 AI 代理业务方向。
2. 环境准备与版本说明
在开始设计具体方案之前,先统一说明环境与工具链。本次实战部分的示例以常见开源技术栈为主,版本需要根据你的项目实际情况调整。
2.1 运行时环境
- 操作系统:Windows 10/11、Ubuntu 20.04 或 macOS 12+ 均可。
- Python:3.10 或以上版本,推荐 3.11。
- Node.js:18 或以上版本。
- Docker:20.10 或以上版本(用于部署数据库和消息队列)。
如果你只做 API 级别的 AI 代理,不需要本地 GPU。本文示例全部基于调用云端大模型 API 的方式,常见的 OpenAI、通义千问、文心一言、DeepSeek 等模型都可以接入。不同模型在结构化输出能力上略有差异,建议优先选择支持 JSON Output 或 Function Calling 的模型。
2.2 Python 依赖
实战部分会用到的核心库如下:
pip install openai langchain langchain-openai pydantic schedule requests beautifulsoup4 sqlalchemy pandas需要说明的是,LangChain 版本更新较快,API 可能会有调整。如果你使用的是较新版本,以官方文档为准。本文示例的主要目的是展示实现思路,而不是绑定某个特定版本。
2.3 示例项目结构
后续的实战案例会按照以下目录组织代码:
ai-agent-demo/ ├── agents/ │ ├── __init__.py │ ├── base.py # 基础代理类 │ ├── collector.py # 数据采集代理 │ └── reporter.py # 报告生成代理 ├── tools/ │ ├── __init__.py │ ├── database.py # 数据库工具 │ └── notify.py # 通知工具 ├── workflows/ │ ├── __init__.py │ └── daily_report.py # 日报工作流 ├── config.py # 全局配置 ├── main.py # 入口脚本 └── requirements.txt这样的结构便于后续扩展,每个代理负责单一职责,组合起来就是一个完整的业务流程。
3. 九个“无聊”AI 自动化方案拆解
下面逐一拆解 9 个方案。每个方案都会说明业务场景、技术实现思路、盈利模式,以及需要注意的坑。
3.1 方案一:定时采集与内容摘要生成
业务场景:很多团队需要每天跟踪行业新闻、竞品动态、政策变化。人工浏览网页并整理摘要非常耗时。
实现思路:使用 RSS 或爬虫定时抓取目标网站内容,交给 LLM 生成结构化摘要,再推送到钉钉、企业微信或邮件。
基础代码示例:
# -*- coding: utf-8 -*- from langchain_openai import ChatOpenAI from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate llm = ChatOpenAI( model="gpt-4o-mini", temperature=0.2, ) prompt = ChatPromptTemplate.from_template(""" 请对以下新闻内容进行摘要,要求: 1. 用 3 个要点概括核心信息 2. 每个要点不超过 50 字 3. 标注可能影响的业务方向 新闻标题:{title} 新闻内容:{content} """) chain = prompt | llm | StrOutputParser() result = chain.invoke({ "title": "某云厂商宣布下调 API 调用价格", "content": "某云厂商今日宣布,自下月起下调其大模型 API 的调用价格,平均降幅达 30%,并同步开放了新的功能接口。" }) print(result)盈利闭环:可以封装为“行业情报订阅”服务,按频道数量收费。也可以作为企业内部效率工具,节省研究员的时间。
重点坑点:
- 爬虫抓取需要遵守目标网站的 robots.txt 和使用条款,只采集允许访问的内容。
- LLM 摘要要做长度限制,避免超长输入造成费用飙升。
- 推送通知要带失败重试机制,防止消息丢失。
3.2 方案二:客服工单智能分类与回复
业务场景:中小型电商或 SaaS 企业每天会收到大量客服工单,内容重复度高。人工逐一分类再回复的效率很低。
实现思路:接入工单系统的 Webhook 或定时拉取 API,将工单标题和描述输入 LLM,输出分类标签、紧急程度、建议回复。人工审核后一键发送。
分类提示词示例:
classification_prompt = """ 你是一个客服工单分类助手。请对以下工单进行分类。 工单标题:{title} 工单描述:{description} 请返回 JSON 格式结果: {{ "category": "售后/物流/账号/支付/其他", "priority": "high/medium/low", "suggested_reply": "给用户的回复内容,不超过100字" }} """ # 推荐使用支持 JSON Output 的模型调用方式 # 以 OpenAI 为例 from openai import OpenAI client = OpenAI() resp = client.chat.completions.create( model="gpt-4o-mini", response_format={"type": "json_object"}, messages=[ {"role": "system", "content": "你是工单分类助手。"}, {"role": "user", "content": classification_prompt.format( title="订单一直显示待发货", description="我三天前下的单,到现在还没有发货,能帮我催一下吗?" )} ] ) print(resp.choices[0].message.content)盈利闭环:按工单量计费的 SaaS 客服辅助插件,或者帮电商企业搭建私有化部署系统。
重点坑点:
- 涉及用户隐私数据时,要注意脱敏处理。
- 建议回复必须经过人工确认,不能直接全自动发送,尤其是涉及退款、赔偿的工单。
- 分类标签要和业务方的工单系统字段保持一致。
3.3 方案三:数据报表自动生成与异常告警
业务场景:运营和财务部门每周都要做数据报表。常规做法是导出数据、整理表格、写分析结论。这个流程非常适合自动化。
实现思路:定时从数据库或数据仓库读取数据,调用 LLM 生成分析结论,配合图表库渲染报表,推送到指定群聊。
完整示例:
import sqlite3 import pandas as pd from datetime import datetime, timedelta from langchain_openai import ChatOpenAI from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate # 1. 读取数据 conn = sqlite3.connect("sales.db") df = pd.read_sql_query(""" SELECT date, amount, order_count FROM sales WHERE date >= ? ORDER BY date """, conn, params=(datetime.now() - timedelta(days=7),)) conn.close() # 2. 计算简要统计 total_amount = df["amount"].sum() total_orders = df["order_count"].sum() avg_amount = df["amount"].mean() # 3. 交给 LLM 分析 llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.1) prompt = ChatPromptTemplate.from_template(""" 你是电商数据运营分析师。以下是最近7天的销售数据。 总销售额:{total_amount} 总订单数:{total_orders} 日均销售额:{avg_amount} 请输出: 1. 本周销售趋势概述 2. 一个值得关注的风险点 3. 一个可执行的优化建议 """) chain = prompt | llm | StrOutputParser() analysis = chain.invoke({ "total_amount": total_amount, "total_orders": total_orders, "avg_amount": avg_amount }) print(analysis)盈利闭环:可以做成固定交付的数据分析服务,按月收费。也可以嵌入现有 BI 系统,作为“智能解读”功能出售。
重点坑点:
- LLM 只适合生成解读文本,数值计算必须交给 pandas 等精确工具完成。
- 要设置异常检测规则,数据波动超过阈值时,先触发告警而不是让 LLM 硬分析。
- 报表发送前要校验数据完整性,防止因为没有数据而生成误导性结论。
3.4 方案四:AI 自动化测试与回归巡检
结合近期热词“ai自动化测试”“ai驱动app端自动化”来看,AI 自动化测试是当前企业非常关注的方向。
业务场景:Web 应用或 App 发版频繁,回归测试人力成本高。AI 可以协助生成测试用例、定位元素、分析失败结果。
实现思路:利用 Playwright 或 Selenium 做浏览器自动化,结合 LLM 生成测试步骤与断言,并将失败日志交给 LLM 分析,辅助定位问题。
示例代码(Playwright + AI 分析):
from playwright.sync_api import sync_playwright from openai import OpenAI client = OpenAI() with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() try: page.goto("https://example.com/login") page.fill("#username", "test_user") page.fill("#password", "test_pass") page.click("#login-btn") page.wait_for_selector(".dashboard", timeout=5000) print("登录测试通过") except Exception as e: error_msg = str(e) # 将错误信息交给 LLM 分析根因 resp = client.chat.completions.create( model="gpt-4o-mini", messages=[ {"role": "system", "content": "你是测试开发工程师,擅长分析自动化测试失败原因。"}, {"role": "user", "content": f"以下是一次自动化测试的报错信息,请分析可能原因并给出排查建议:\n{error_msg}"} ] ) print("AI 分析结果:", resp.choices[0].message.content) finally: browser.close()盈利闭环:可以为企业搭建 AI 自动化测试平台(对应热词“ai自动化测试平台搭建”),按项目或按执行次数收费。
重点坑点:
- AI 生成的测试用例必须经过人工 review,不能直接用于生产环境回归。
- 涉及账号密码等敏感信息时,需要从环境变量或密钥管理服务读取,禁止硬编码。
- 测试目标必须是已有授权或自己维护的系统。未经授权的自动化访问本身可能违反服务条款,这一点需要格外留意。
3.5 方案五:竞品页面监控与合规对比
业务场景:电商运营或产品经理需要关注竞品价格、功能更新、文案变化。这些信息散落在不同页面,人工追踪成本高。
实现思路:使用爬虫定时抓取指定页面,通过 diff 算法识别变化,再用 LLM 总结变化的业务含义。
示例逻辑:
import hashlib import requests from bs4 import BeautifulSoup url = "https://example.com/pricing" resp = requests.get(url, timeout=10) soup = BeautifulSoup(resp.text, "html.parser") # 提取主要文本内容 text = soup.get_text(strip=True) content_hash = hashlib.md5(text.encode("utf-8")).hexdigest() # 和上次的 hash 做对比 # 如果变化,则调用 LLM 生成对比分析 previous_hash = get_previous_hash_from_db(url) if content_hash != previous_hash: print("页面内容发生变化,触发 AI 分析") # 将新旧文本交给 LLM 对比,生成变化说明 else: print("页面内容无变化")盈利闭环:作为“竞品情报监控”SaaS 服务,按月订阅收费。
重点坑点:
- 爬取频率不要过高,尊重网站服务条款和访问限制。
- 页面防爬策略不同,可能需要维护多个解析规则。
- 对比文本时要过滤掉动态内容(如验证码、广告位、时间戳),避免误报。
3.6 方案六:文档与知识库自动化整理
业务场景:很多团队沉淀了大量散落在各处的文档,有的是 Word,有的是 PDF,有的是在线文档。整理成结构化的知识库需要花费大量时间。
实现思路:使用 LLM 对文档进行章节拆分、概念抽取、标签生成,然后写入知识库系统(如 Notion、语雀、内部 Wiki)。
示例代码(文档概念抽取):
from langchain_openai import ChatOpenAI from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.0) prompt = ChatPromptTemplate.from_template(""" 请从以下文档中抽取核心概念,并生成一份结构化摘要。 要求: - 概念列表用 markdown 无序列表 - 每个概念后附一句通俗解释 - 识别文档中出现的专有名词 文档内容如下: {document} """) chain = prompt | llm | StrOutputParser() result = chain.invoke({"document": open("meeting_notes.md", encoding="utf-8").read()[:3000]}) print(result)盈利闭环:面向企业提供知识库清洗与搭建服务,也可以做成笔记导入时的自动整理插件。
重点坑点:
- 文档可能包含商业机密,使用外部 LLM API 前必须确认数据合规性,或选择私有化部署模型。
- 文档格式多样,解析 PDF 中的表格仍是一大难点,需要结合专门的文档解析工具。
- 生成的标签体系要人工校准一次,确保和团队的既有分类一致。
3.7 方案七:邮件自动分类与智能回复
业务场景:外贸、客服、销售团队每天会收到大量邮件,很多邮件内容相似,回复套路也接近。
实现思路:通过 IMAP 协议拉取未读邮件,使用 LLM 判断邮件意图(询价、售后、垃圾邮件、重要通知),并生成回复草稿。人工一键确认后发送。
示例代码(邮件意图分类):
import imaplib import email from email.header import decode_header from openai import OpenAI client = OpenAI() # 连接邮箱服务器 imap = imaplib.IMAP4_SSL("imap.example.com") imap.login("your_email@example.com", "your_password") imap.select("INBOX") status, messages = imap.search(None, "UNSEEN") message_ids = messages[0].split() for msg_id in message_ids[-5:]: # 每次最多处理最近5封 status, msg_data = imap.fetch(msg_id, "(RFC822)") msg = email.message_from_bytes(msg_data[0][1]) subject, encoding = decode_header(msg["Subject"])[0] if isinstance(subject, bytes): subject = subject.decode(encoding or "utf-8", errors="ignore") body = "" if msg.is_multipart(): for part in msg.walk(): if part.get_content_type() == "text/plain": body = part.get_payload(decode=True).decode("utf-8", errors="ignore") break else: body = msg.get_payload(decode=True).decode("utf-8", errors="ignore") resp = client.chat.completions.create( model="gpt-4o-mini", messages=[ {"role": "system", "content": "判断邮件意图并生成回复草稿。"}, {"role": "user", "content": f"邮件主题:{subject}\n邮件内容:{body[:2000]}"} ] ) print(f"邮件[{subject}] 的 AI 分析:") print(resp.choices[0].message.content) print("-" * 40) imap.logout()盈利闭环:面向外贸公司提供邮件助理工具,按邮箱账号数收费。
重点坑点:
- 邮件涉及大量隐私和商业信息,部署时必须做数据隔离。
- 建议只生成草稿,不自动发送。自动发送一旦出错,挽回成本很高。
- IMAP 凭据要使用专用密码或授权码,不要使用主密码,并定期轮换。
3.8 方案八:社交媒体内容定时生成与发布
业务场景:企业和个人博主需要维护多个平台的账号,每天发布内容。这里要区分清楚,AI 辅助内容创作是工具使用层面的提效,输入指令的大模型本身不保证内容的原创性和合规性,发布前仍需要人工审阅。
实现思路:结合微信公众号、知乎、CSDN 等平台特点,LLM 根据素材库生成多个平台适配版本,再通过 API 或自动化脚本定时发布。
示例代码(多平台文案改写):
from langchain_openai import ChatOpenAI from langchain_core.output_parsers import JsonOutputParser from langchain_core.prompts import ChatPromptTemplate llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7) prompt = ChatPromptTemplate.from_template(""" 根据以下原始素材,分别生成长文平台和短内容平台的发布文案。 原始素材: {source} 要求: - 长文平台:300-500字,逻辑清晰,有分段 - 短内容平台:50-100字,有吸引力 - 返回 JSON 格式,包含 long_text 和 short_text 两个字段 """) parser = JsonOutputParser() chain = prompt | llm | parser result = chain.invoke({"source": "AI代理可以帮助开发者自动处理重复性工作。"}) print(result["long_text"]) print("---") print(result["short_text"])盈利闭环:作为企业新媒体代运营的附加服务,或做成多平台分发工具。
重点坑点:
- 平台 API 权限不同,发布前要确认账号是否符合平台规则。
- 自动发布频率过高可能触发平台风控,建议添加随机延时。
- 内容发布必须符合平台规范,否则可能导致账号受限。
3.9 方案九:多代理协作的 AI 工作流
业务场景:单一代理的能力有限,要完成复杂任务,需要多个代理分工协作。比如“市场调研代理”负责收集信息,“数据分析代理”负责处理数据,“报告撰写代理”负责输出最终成果。
实现思路:使用 LangGraph 或自研状态机来编排多个代理,每个代理负责一个子任务。按照热词“ai代理助手加本地模型”的思路,还可以在私有化场景中用本地模型替代云端 API,降低成本压力和数据外泄风险。
简化示例(多步骤流程编排):
import json from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.2) def research_agent(topic: str) -> str: """收集整理调研信息""" messages = [ HumanMessage(content=f"列出关于{topic}的5个核心观点,输出JSON数组。") ] resp = llm.invoke(messages) return resp.content def analysis_agent(research_result: str) -> str: """分析观点之间的关系""" messages = [ HumanMessage(content=f"分析以下观点的逻辑关系和矛盾点:\n{research_result}") ] resp = llm.invoke(messages) return resp.content def report_agent(analysis_result: str) -> str: """生成最终报告""" messages = [ HumanMessage(content=f"基于以下分析,生成一份300字左右的调研报告:\n{analysis_result}") ] resp = llm.invoke(messages) return resp.content # 工作流编排 result1 = research_agent("2025年AI代理发展趋势") print("调研完成") result2 = analysis_agent(result1) print("分析完成") result3 = report_agent(result2) print("最终报告:") print(result3)盈利闭环:多代理工作流是 AI 自动化的进阶形态,可以按“方案定制 + 维护费”的模式交付给企业。
重点坑点:
- 多代理系统调试成本高,建议先跑通单代理再逐步增加复杂性。
- 每个代理之间要有清晰的数据契约,否则上游输出格式变化会导致下游崩溃。
- 为每一步添加超时和失败重试机制。一个代理卡住不应该拖垮整个流程。
4. 完整实战:构建一个可运行的 AI 代理业务
前文拆解了 9 个方案。这一节选一个组合场景,从零实现一个最小可运行的完整业务闭环。我们选择“定时采集信息 → AI 分析 → 推送报告”这个组合,因为它是 9 个方案中最通用、最容易扩展的一个。
4.1 需求定义
实现一个方案:每天上午 9 点,从指定 RSS 源抓取技术新闻,调用 LLM 筛选出与 AI 自动化相关的内容,生成一份简报,推送到企业微信机器人或钉钉机器人。
业务流程如下:
- 定时触发。
- 抓取 RSS 内容。
- LLM 筛选与摘要。
- 格式化推送消息。
- 发送到群机器人。
4.2 创建项目结构
mkdir ai-automation-demo cd ai-automation-demo mkdir -p agents tools workflows touch config.py main.py requirements.txt4.3 编写配置文件
文件路径:config.py
import os # 模型配置 LLM_MODEL = os.getenv("LLM_MODEL", "gpt-4o-mini") LLM_API_KEY = os.getenv("OPENAI_API_KEY", "") LLM_BASE_URL = os.getenv("LLM_BASE_URL", "") # RSS 源配置 RSS_URL = os.getenv("RSS_URL", "https://www.infoq.cn/feed") # 企业微信机器人 Webhook WECHAT_WEBHOOK = os.getenv("WECHAT_WEBHOOK", "") # 定时执行时间(小时) SCHEDULE_HOUR = int(os.getenv("SCHEDULE_HOUR", "9"))4.4 编写数据采集代理
文件路径:agents/collector.py
# -*- coding: utf-8 -*- import feedparser from dataclasses import dataclass @dataclass class FeedItem: title: str link: str summary: str class RSSCollector: """从 RSS 源抓取最新文章列表""" def __init__(self, rss_url: str, max_items: int = 10): self.rss_url = rss_url self.max_items = max_items def fetch(self): feed = feedparser.parse(self.rss_url) items = [] for entry in feed.entries[:self.max_items]: items.append( FeedItem( title=entry.get("title", "无标题"), link=entry.get("link", ""), summary=entry.get("summary", ""), ) ) return items4.5 编写分析代理
文件路径:agents/analyzer.py
# -*- coding: utf-8 -*- import json from openai import OpenAI class AIAnalyzer: """调用大模型筛选与摘录文章""" def __init__(self, model: str, api_key: str, base_url: str = ""): self.client = OpenAI(api_key=api_key, base_url=base_url or None) self.model = model def filter_and_summarize(self, items) -> list: """筛选出与 AI 自动化相关的文章并生成摘要""" # 构造输入 content = "\n".join( [ f"标题:{item.title}\n摘要:{item.summary[:300]}\n链接:{item.link}" for item in items ] ) system_prompt = ( "你是一个技术情报编辑。" "请从以下文章中筛选出与 AI 自动化、AI 代理、自动化测试相关的文章," "并为每篇文章生成 50 字以内的推荐理由。" ) user_prompt = f"文章列表如下:\n{content}\n\n请以 JSON 数组格式返回,字段为 title, reason, link。" resp = self.client.chat.completions.create( model=self.model, response_format={"type": "json_object"}, messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt}, ], ) try: result = json.loads(resp.choices[0].message.content) return result.get("articles", []) except json.JSONDecodeError: return []4.6 编写推送工具
文件路径:tools/notify.py
# -*- coding: utf-8 -*- import requests class WeChatNotifier: """通过企业微信机器人发送消息""" def __init__(self, webhook_url: str): self.webhook_url = webhook_url def send_markdown(self, content: str): payload = { "msgtype": "markdown", "markdown": { "content": content } } resp = requests.post(self.webhook_url, json=payload, timeout=10) resp.raise_for_status() return resp.json()4.7 编写工作流
文件路径:workflows/daily_report.py
# -*- coding: utf-8 -*- from agents.collector import RSSCollector from agents.analyzer import AIAnalyzer from tools.notify import WeChatNotifier def run_daily_report(config): # 1. 抓取数据 collector = RSSCollector(config.RSS_URL, max_items=10) feed_items = collector.fetch() if not feed_items: print("未抓取到任何内容") return # 2. AI 分析 analyzer = AIAnalyzer( model=config.LLM_MODEL, api_key=config.LLM_API_KEY, base_url=config.LLM_BASE_URL, ) articles = analyzer.filter_and_summarize(feed_items) if not articles: print("AI 未筛选出相关内容") return # 3. 组装消息 lines = ["## AI 自动化日报", ""] for article in articles: lines.append(f"### {article.get('title', '无标题')}") lines.append(f"- 推荐理由:{article.get('reason', '')}") lines.append(f"- 原文链接:{article.get('link', '')}") lines.append("") markdown_content = "\n".join(lines) # 4. 推送到企业微信 notifier = WeChatNotifier(config.WECHAT_WEBHOOK) notifier.send_markdown(markdown_content) print("日报推送成功")4.8 编写入口脚本
文件路径:main.py
# -*- coding: utf-8 -*- import schedule import time import config from workflows.daily_report import run_daily_report def job(): print("开始执行 AI 自动化日报任务...") try: run_daily_report(config) except Exception as e: print(f"任务执行失败:{e}") # 启动时立即执行一次(便于测试) job() # 每天定时执行 schedule.every().day.at(f"{config.SCHEDULE_HOUR:02d}:00").do(job) print(f"定时任务已启动,每天 {config.SCHEDULE_HOUR:02d}:00 执行") while True: schedule.run_pending() time.sleep(60)4.9 运行与验证
export OPENAI_API_KEY="你的API密钥" export WECHAT_WEBHOOK="你的企业微信机器人地址" pip install -r requirements.txt python main.py预期输出:
开始执行 AI 自动化日报任务... 日报推送成功 定时任务已启动,每天 09:00 执行如果 API Key 或 Webhook 地址错误,会看到对应的异常信息。可以先用本机测试模式运行,确认推送成功后,再用 nohup 或 systemd 将其守护化。
4.10 扩展为“可靠盈利”服务的建议
这个最小案例本身不一定直接收费,但只需要增加几个模块:
- 多客户租户隔离:每个客户独立配置 RSS 源和机器人地址。
- 数据持久化:把每日推送记录存入数据库,方便查询历史和效果。
- 计费模块:按推送次数或频道数量订阅收费。
- Web 管理后台:让客户自助管理订阅源和推送时间。
加上这四块,就是一个可以对外售卖的最小 MVP。
5. 常见问题与排查思路
在实际开发和运维 AI 自动化代理的过程中,遇到最多的往往是下面几类问题。
| 问题现象 | 常见原因 | 排查思路 | 解决方案 |
|---|---|---|---|
| API 调用报超时 | 网络不稳定或模型响应过慢 | 检查网络;测试单次调用耗时 | 添加重试机制;使用超时更长的客户端配置 |
| LLM 返回 JSON 解析失败 | 模型可能返回了额外文字 | 打印完整响应内容 | 使用 response_format 强制 JSON;增加后处理清洗逻辑 |
| 定时任务没有触发 | 时区或 cron 表达式配置错误 | 查看日志;确认系统时区 | 显式指定时区;先用一次性触发测试 |
| 推送消息格式错误 | 群机器人限制了 Markdown 语法 | 查看机器人平台文档 | 简化格式;先发纯文本测试 |
| 爬虫偶尔抓不到内容 | 目标网站结构调整或反爬 | 单独测试请求是否正常 | 增加多种解析规则;设置 User-Agent |
| 费用超出预期 | 长时间运行后调用量迅速增加 | 查看 API 调用日志 | 设置每次调用的 token 上限;添加日费用告警 |
| 代理处理结果不稳定 | 模型 temperature 设置过高 | 检查 prompt 和模型参数 | 将 temperature 调低到 0.1-0.2;增加 few-shot 示例 |
除了表格中的问题,还有两个经常被忽略的地方。
第一个是幂等性。定时任务可能因为网络问题重试两次,如果代理包含了“发送消息”这类副作用操作,重复执行就会造成重复推送。解决方案是在每次任务中生成一个任务 ID,在消息中附带该 ID,接收方或任务记录表做去重。
第二个是数据格式契约。多代理协作中,上游代理返回的数据结构必须稳定。建议在代理之间使用 Pydantic 模型做校验,字段缺失时宁可让任务失败,也好过带着脏数据往下走。
from pydantic import BaseModel class Article(BaseModel): title: str reason: str link: str class ArticleList(BaseModel): articles: list[Article]在调用链路上加一层数据校验,能提前拦截绝大多数因为模型输出不稳定导致的问题。
6. 最佳实践与工程建议
6.1 每个代理只做一件事
在设计 AI 代理时,最容易犯的错误是让一个代理同时承担“理解任务”“执行调用”“生成结果”的全部工作。短期看可以跑通,长期看会导致 prompt 日益膨胀、可维护性大幅下降。
推荐的做法是围绕单一职责拆分代理:
- 采集代理:只负责把数据从外部拿到本地。
- 清洗代理:只负责把非结构化内容变成结构化字段。
- 决策代理:只负责判断“应该做什么”。
- 执行代理:只负责调用具体工具并返回结果。
- 生成代理:只负责把结果转换为用户需要的格式。
单一职责的好处是,每个代理的 prompt 都很短,便于调试,也便于为不同的代理选择不同的模型。
6.2 用配置驱动而不是改代码
AI 代理业务中,需求变化最常见的是“换一个数据源”“换一个推送目标”“换一种分析规则”。如果这些变化都需要改代码重新部署,运维成本会非常高。
建议把所有可变参数放到配置文件中,甚至放到数据库或配置中心。例如用 YAML 文件定义一套工作流:
name: daily_news_report schedule: "0 9 * * *" steps: - agent: collector params: rss_url: "https://feed.example.com.xml" - agent: analyzer params: filter_topic: "AI自动化" output_format: "json" - agent: notifier params: channel: "wechat" webhook_env: "WECHAT_WEBHOOK"这样,运营人员只需要修改配置,不需要接触代码。
6.3 控制模型调用成本
大模型 API 按 token 计费,AI 代理在循环运行时会比单次问答消耗更多 token。控制成本的方向有两个。
第一是减少输入长度。在喂给模型之前,对文本做预处理,去掉 HTML 标签、空白字符、重复段落。
第二是分层使用模型。简单的分类任务用便宜的小模型,复杂的写作或推理任务用贵的大模型。比如在工单分类场景中,先用正则或小模型判断常见问题,只有无法匹配时才调用大模型。
还需要建立费用监控。所有模型调用都通过一个封装类,统一记录 token 用量和费用,每小时的累计费用超过阈值就自动熔断。
6.4 安全边界与权限意识
AI 代理一旦接入外部工具,安全风险会比普通脚本高得多,因为 LLM 可能被 prompt 注入诱导执行非预期操作。例如,一个读取网页内容的代理,如果网页中嵌入了恶意指令文本,模型可能把指令当成用户意图执行。
必要的安全措施:
- 代理执行写操作前必须经过二次确认。
- 数据库连接只授权必要的库表,使用只读账号。
- API Token 放在密钥管理服务中,不要写入代码仓库。
- 对代理的工具调用做白名单限制,不允许任意命令执行。
- 涉及生产环境变更时必须经过人工审批流程,遵守最小权限原则。
6.5 日志、监控与可恢复性
AI 代理系统是一个长期运行的软件系统,必须有完整的可观测性设计。每次运行建议记录以下信息:
- 任务 ID 与执行时间。
- 每个代理的输入输出摘要。
- 模型调用 token 数量。
- 工具调用结果与状态码。
- 失败原因与重试次数。
日志结构可以简单使用 JSON Lines 格式,每一行是一条独立日志,方便后续接入日志平台分析。
{"task_id": "20250601-001", "agent": "collector", "status": "success", "items_count": 10, "duration_ms": 120} {"task_id": "20250601-001", "agent": "analyzer", "status": "success", "tokens_used": 800, "duration_ms": 2000} {"task_id": "20250601-001", "agent": "notifier", "status": "success", "duration_ms": 300}有了日志,才能在出问题时快速定位是采集失败、模型分析失败,还是推送失败。
7. 总结与下一步
这篇文章从概念到实战,系统梳理了 9 个“无聊但可靠”的 AI 自动化方案:内容摘要、工单分类、数据报表、自动化测试、竞品监控、文档整理、邮件助理、社媒生成、多代理工作流。
它们没有一个是“颠覆性”的,但每一个都有清晰的业务场景、可落地的技术路径和真实的盈利出口。核心思路其实可以总结成一句话:找准重复发生的业务动作,用 AI 代理把它变成无人值守的自动化服务,并用日志和费用监控确保它长期可靠运行。
如果你准备在这个方向深入,建议按下面的顺序推进:
- 先选择一个自己最熟悉、需求最明确的场景。
- 按本文第 4 节的模板搭建最小可运行版本。
- 用真实数据跑 1 到 2 周,记录准确率和故障点。
- 再把多租户、计费、管理后台等商业化模块逐步加上。
AI 代理业务真正难的不是技术本身,而是对场景的理解和长期运维的耐心。那些看起来“无聊”的自动化方案,往往才是能每天默默产生价值的地方。
希望这篇文章能给你一些可以直接上手的启发。如果有自己正在做的 AI 自动化项目,欢迎在评论区交流思路。