AI技术热点博客自动生成Agent

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、知乎、个人静态博客等绝大多数平台,可直接复制发布。

四、部署运行步骤

  1. 新建项目文件夹,创建 .env 配置文件,填入你的AI密钥和模型接口

  2. 安装上述所有依赖包

  3. 运行命令:python agent.py

  4. 首次运行会立即生成一篇博客,后续每日8点自动更新

  5. 所有生成的博客统一存放在 tech_blog_output 文件夹

五、进阶扩展能力(可按需开启)

  • 自动发布:对接掘金、CSDN、WordPress API,实现生成后自动发布

  • 本地模型部署:替换为Qwen、Llama本地大模型,无需联网密钥

  • 热点权重排序:根据点赞、Star数智能筛选高热度资讯

  • 内容配图生成:接入AI绘图,自动为博客生成封面图

  • Docker部署:打包为容器,服务器常驻运行永不中断

六、常见问题解决

  • AI生成失败:检查API密钥、接口地址是否正确,切换模型重试

  • 抓取内容过少:可在 TECH_RSS_SOURCES 新增更多技术RSS源

  • 内容质量不佳:调高temperature参数、优化Prompt模板

  • 定时不生效:确保服务器时间准确,程序常驻后台运行

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜡台

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值