AI技术热点博客自动生成Agent
一、项目整体架构
本AI Agent实现两大核心能力:每日自动抓取热门技术信息、智能生成原创技术博客,全程无人值守自动化运行。
核心流程
定时任务触发 → 多源技术热点抓取 → 数据去重&热度筛选 → AI内容润色重构 → 生成Markdown博客 → 本地保存/自动发布
技术栈
-
编程语言:Python3.10+
-
定时调度:APScheduler(每日定时执行)
-
数据抓取:Requests + FeedParser(RSS主流技术站点)
-
AI生成:兼容OpenAI/通义千问/DeepSeek等大模型
-
数据处理:去重、热度排序、内容过滤
-
输出格式:标准Markdown博客(适配掘金、知乎、个人博客)
二、完整项目代码
1. 安装依赖
pip install requests feedparser apscheduler openai python-dotenv
2. 核心配置文件 .env
# AI大模型配置
OPENAI_API_KEY=你的API密钥
OPENAI_BASE_URL=https://api.deepseek.com/v1 # 可替换任意大模型接口
MODEL_NAME=deepseek-chat
# 定时任务 每日8点执行
CRON_HOUR=8
CRON_MINUTE=0
# 博客配置
BLOG_AUTHOR=AI技术助手
BLOG_TAGS=技术热点,AI,编程,开源
MAX_NEWS_NUM=6 # 每日抓取热点数量
3. 主程序 agent.py
import os
import time
import feedparser
import requests
from datetime import datetime
from dotenv import load_dotenv
from apscheduler.schedulers.blocking import BlockingScheduler
from openai import OpenAI
# 加载环境变量
load_dotenv()
# 初始化AI客户端
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url=os.getenv("OPENAI_BASE_URL")
)
# 技术热点RSS数据源(主流技术平台)
TECH_RSS_SOURCES = [
"https://github.com/trending/rss",
"https://juejin.cn/rss",
"https://www.infoq.cn/feed",
"https://dev.to/feed",
"https://hackernoon.com/feed"
]
# 全局配置
MAX_NEWS = int(os.getenv("MAX_NEWS_NUM", 6))
BLOG_AUTHOR = os.getenv("BLOG_AUTHOR")
BLOG_TAGS = os.getenv("BLOG_TAGS")
def fetch_tech_hot_news():
"""
抓取每日热门技术资讯
"""
news_list = []
print(f"[{datetime.now()}] 开始抓取全网技术热点...")
for source in TECH_RSS_SOURCES:
try:
feed = feedparser.parse(source)
for entry in feed.entries[:3]:
news_item = {
"title": entry.get("title", "").strip(),
"link": entry.get("link", ""),
"summary": entry.get("summary", "").strip(),
"pub_time": entry.get("published", datetime.now().strftime("%Y-%m-%d")),
"source": source
}
if news_item["title"] and len(news_item["title"]) > 5:
news_list.append(news_item)
except Exception as e:
print(f"抓取 {source} 失败: {str(e)}")
continue
# 简单去重(标题去重)
unique_news = []
title_set = set()
for item in news_list:
if item["title"] not in title_set:
title_set.add(item["title"])
unique_news.append(item)
# 截取指定数量热点
final_news = unique_news[:MAX_NEWS]
print(f"[{datetime.now()}] 抓取完成,有效热点数量:{len(final_news)}")
return final_news
def generate_blog_content(news_list):
"""
根据技术热点AI生成原创博客
"""
if not news_list:
return "今日暂无技术热点内容"
# 组装prompt素材
news_content = ""
for idx, news in enumerate(news_list, 1):
news_content += f"""
{idx}. 热点标题:{news['title']}
简介:{news['summary'][:300]}
来源链接:{news['link']}
发布时间:{news['pub_time']}
"""
# AI生成博客Prompt
prompt = f"""
你是资深技术博主,请根据以下今日全网热门技术资讯,撰写一篇高质量、原创、通俗易懂的技术热点周报博客。
要求:
1. 标题吸引人,适配技术爱好者阅读
2. 结构清晰:开篇导读 + 各热点详细解读 + 个人总结展望
3. 杜绝直接翻译复制,全部二次原创改写
4. 分析每个热点的技术价值、应用场景、行业影响
5. 输出标准Markdown格式,带小标题、分段、重点加粗
6. 全文800-1200字,语言流畅专业
今日技术热点素材:
{news_content}
博客附加信息:
作者:{BLOG_AUTHOR}
标签:{BLOG_TAGS}
发布日期:{datetime.now().strftime("%Y年%m月%d日")}
"""
print(f"[{datetime.now()}] 开始AI生成博客内容...")
response = client.chat.completions.create(
model=os.getenv("MODEL_NAME"),
messages=[
{"role": "system", "content": "你是专业的技术博客作者,擅长梳理技术热点、输出高质量原创技术文章"},
{"role": "user", "content": prompt}
],
temperature=0.7,
max_tokens=2000
)
blog_markdown = response.choices[0].message.content.strip()
print(f"[{datetime.now()}] 博客内容生成完成!")
return blog_markdown
def save_blog(blog_content):
"""
保存博客为Markdown文件
"""
# 创建博客存储目录
blog_dir = "./tech_blog_output"
if not os.path.exists(blog_dir):
os.mkdir(blog_dir)
# 按日期命名文件
date_str = datetime.now().strftime("%Y%m%d")
file_path = f"{blog_dir}/tech_hot_blog_{date_str}.md"
with open(file_path, "w", encoding="utf-8") as f:
f.write(blog_content)
print(f"[{datetime.now()}] 博客已保存至:{file_path}")
return file_path
def run_agent_task():
"""
Agent主任务:抓取热点 + 生成博客 + 保存文件
"""
try:
# 1. 抓取热点
hot_news = fetch_tech_hot_news()
# 2. AI生成博客
blog_text = generate_blog_content(hot_news)
# 3. 保存文件
save_blog(blog_text)
print("="*50)
print("✅ 今日AI技术博客生成任务完成!")
print("="*50)
except Exception as e:
print(f"❌ 任务执行失败:{str(e)}")
def main():
"""
启动定时Agent
"""
print("🤖 AI技术热点博客Agent 启动成功!")
print(f"⏰ 定时任务:每日 {os.getenv('CRON_HOUR')}:{os.getenv('CRON_MINUTE')} 自动执行")
print("="*50)
# 初始化定时调度器
scheduler = BlockingScheduler()
scheduler.add_job(
run_agent_task,
"cron",
hour=int(os.getenv("CRON_HOUR")),
minute=int(os.getenv("CRON_MINUTE"))
)
# 启动时立即执行一次(可选)
run_agent_task()
# 持续监听定时任务
scheduler.start()
if __name__ == "__main__":
main()
三、功能特性详解
1. 多源热点抓取
默认接入GitHub Trending、掘金、InfoQ、DEV.to、Hackernoon五大主流技术平台,覆盖开源、AI、后端、前端全领域热点,自动过滤重复内容,筛选高质量资讯。
2. AI原创内容生成
基于大模型二次创作,不抄袭原文,自动完成热点解读、行业分析、价值总结,输出结构完整、逻辑清晰的原创技术博客,符合自媒体发布标准。
3. 全自动定时执行
基于Cron表达式定时调度,默认每日早上8点自动运行,无人值守,每日生成一篇当日技术热点汇总博客。
4. 标准化输出
自动生成带日期命名的Markdown文件,兼容掘金、CSDN、知乎、个人静态博客等绝大多数平台,可直接复制发布。
四、部署运行步骤
-
新建项目文件夹,创建
.env配置文件,填入你的AI密钥和模型接口 -
安装上述所有依赖包
-
运行命令:
python agent.py -
首次运行会立即生成一篇博客,后续每日8点自动更新
-
所有生成的博客统一存放在
tech_blog_output文件夹
五、进阶扩展能力(可按需开启)
-
自动发布:对接掘金、CSDN、WordPress API,实现生成后自动发布
-
本地模型部署:替换为Qwen、Llama本地大模型,无需联网密钥
-
热点权重排序:根据点赞、Star数智能筛选高热度资讯
-
内容配图生成:接入AI绘图,自动为博客生成封面图
-
Docker部署:打包为容器,服务器常驻运行永不中断
六、常见问题解决
-
AI生成失败:检查API密钥、接口地址是否正确,切换模型重试
-
抓取内容过少:可在
TECH_RSS_SOURCES新增更多技术RSS源 -
内容质量不佳:调高temperature参数、优化Prompt模板
-
定时不生效:确保服务器时间准确,程序常驻后台运行

10万+

被折叠的 条评论
为什么被折叠?



