本文基于项目需求,规划了自动更新圆圈网博客功能的方案。系统每日定时搜索AI、ComfyUI及大模型相关资讯,更新新闻栏目;同时可根据指定标题由大模型生成文章并配图。方案采用Python开发,REST API发布,结合国内大模型与文生图服务,并参考了现有小红书项目架构与数据库表设计。

核心问题

如何设计一个每天自动更新圆圈网博客新闻与生成文章的系统?


项目背景

在现有 d-python-project 项目中,已经包含一个「小红书笔记生成」模块,它连接了 circler 数据库的 senran_news 表,用于存储和发布内容。现在需要新增一个功能:自动更新圆圈网博客,主要包括两方面能力:

  • 每日新闻自动聚合:定时从网络获取最新的 AI、ComfyUI 及大模型相关资讯,更新到圆圈网「最新资讯」栏目。
  • 按标题生成文章:用户指定标题后,由大语言模型撰写完整文章,并自动生成封面及内容配图,发布到博客。

本文档将围绕需求,从技术选型、架构设计、实现流程等角度,给出完整的方案规划。

需求分析

功能拆解

  1. 定时任务:每天在指定时间触发更新流程。
  2. 新闻搜索:调用外部 API 或网络爬虫,检索最近 24 小时内的 AI、ComfyUI、大模型等领域最新动态,并过滤质量。
  3. 内容发布:将获取到的新闻摘要及原文链接通过圆圈网的 REST API 发布到「最新资讯」栏目。
  4. 文章生成:接收用户输入的标题,调用大语言模型(如国产模型或 ChatGPT)生成正文、摘要、标签等结构化内容。
  5. 图片生成:利用文生图服务(例如国内的文心一格、通义万相)根据文章主题自动生成封面图和内文插图。
  6. 组合发布:将文章 Markdown 内容与图片资源通过 REST API 发布到博客系统。

非功能需求

  • 可靠性:定时任务失败时应有重试和通知机制。
  • 可维护性:各模块解耦,便于后续替换 AI 服务或改造发布渠道。
  • 内容安全:生成的内容与图片需经过简单的合规检查。

技术选型

综合核心需求与已有项目现状,确定以下技术栈:

  • 开发语言:Python,与现有项目一致,生态丰富,适合快速开发。
  • 定时调度:使用 schedule 库或 Linux cron,简单轻量;若需更复杂的任务管理,可引入 Celery。
  • 新闻获取:
  • 若有官方 API(如新闻聚合源),则直接调用。
  • 若无,可采用 requests + RSS 解析、网页抓取(BeautifulSoup)等方式,但需注意合规性。
  • 大模型服务:选择国内可用的 LLM(如百度文心、阿里通义千问、MiniMax、智谱等),通过其 SDK 或 HTTP 接口调用。
  • 文生图服务:同样使用上述厂商的绘图 API,或接入 Stable Diffusion WebUI 本地服务。
  • 数据存储:复用现有 MySQL 数据库(circler 库 senran_news 表),可适当扩展字段存储 AI 生成的内容、图片路径等。
  • 发布接口:圆圈网提供的 REST API,按约定格式提交 JSON 数据。

架构设计

系统采用模块化设计,主要包含以下几个组件:

┌─────────────────┐     ┌─────────────────┐
│   定时调度器     │────▶│   新闻获取模块   │
└─────────────────┘     └─────────────────┘
                            │
                            ▼
                     ┌─────────────────┐
                     │   内容存储与过滤  │
                     └─────────────────┘
                            │
          ┌─────────────────┴─────────────────┐
          ▼                                    ▼
┌─────────────────┐                  ┌─────────────────┐
│  文章生成模块   │                  │  新闻发布模块   │
│ (LLM + 文生图)  │                  │ (REST API)      │
└─────────────────┘                  └─────────────────┘
          │
          ▼
┌─────────────────┐
│   API 发布模块  │
└─────────────────┘

模块职责

  • 定时调度器:每天固定时间(如凌晨 2 点)触发新闻更新任务,同时提供接口供手动触发文章生成。
  • 新闻获取模块:调用外部 API 或爬虫,返回新闻标题、摘要、链接、时间等结构化数据。
  • 内容存储与过滤:将新闻存入 senran_news 表,标记来源,去重;并可根据关键词黑名单过滤敏感内容。
  • 文章生成模块:接收标题,调用 LLM 生成 Markdown 正文;再调用文生图 API 生成封面图和文中插图,并插入到 Markdown 中。
  • 新闻发布模块:读取数据库中未发布的新闻,通过 REST API 批量提交到圆圈网。
  • API 发布模块:将生成的文章及图片上传,调用圆圈网的文章发布接口。

数据库设计

沿用 circler.senran_news 表,新增或复用以下关键字段:

字段名 类型 说明
id int 主键
title varchar 文章标题 / 新闻标题
content text 正文内容(Markdown 格式)
summary varchar 摘要
cover_img varchar 封面图片路径
tags varchar 标签,逗号分隔
source varchar 新闻来源 URL
status tinyint 0:待发布, 1:已发布, 2:失败
create_time datetime 创建时间

实现流程

1. 新闻自动更新流程

# 示例代码骨架
def daily_news_crawl():
    # 调用新闻 API 获取最新资讯
    news_list = fetch_ai_news()
    for news in news_list:
        if not already_exists(news.title):
            save_to_db(news)
    # 发布所有待发布新闻
    publish_pending_news()
  • fetch_ai_news() 实现具体的新闻检索逻辑,可根据需求替换为不同数据源。
  • 入库前根据标题 + 来源进行去重,避免重复内容。
  • 定时任务建议使用 schedule 库:
import schedule
import time

schedule.every().day.at("02:00").do(daily_news_crawl)

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

2. 文章生成与配图流程

  1. 接收用户指定的标题。
  2. 调用 LLM API,发送包含指令的 prompt:
    - “请根据以下标题写一篇技术博客,用 Markdown 格式,包含摘要和关键词。标题:{title}”
  3. 获取返回的 Markdown 正文。
  4. 根据正文生成图片:
    - 提取文章主题关键词。
    - 调用文生图 API 生成一张封面图和多张内容配图,并保存到本地或对象存储。
    - 将图片路径替换到 Markdown 的 ![]() 中。
  5. 组装发布数据,调用圆圈网 POST 接口提交文章。

3. REST API 对接

需要了解圆圈网提供的具体接口格式,假设为:

  • 新闻发布接口:POST /api/news/bulk,接收新闻数组。
  • 文章发布接口:POST /api/articles,接收文章对象(标题、正文、封面图、标签等)。

在 Python 中使用 requests 实现:

import requests

def publish_article(data):
    resp = requests.post(API_BASE_URL + "/api/articles", json=data)
    return resp.json()

注意事项

  • API 调用费用:LLM 与文生图通常按量计费,应设置每日预算上限,避免超额消耗。
  • 内容质量:可配置 prompt 中的要求,如最少字数、禁止抄袭等,保证生成内容可读性。
  • 错误处理:网络请求、API 响应异常等需完善日志记录与通知(如钉钉/微信机器人)。
  • 合规性:自动发布需确保内容不涉及侵权或敏感信息,可增加人工审核环节。

总结

本方案充分利用 Python 生态,以现有项目为基础,快速实现圆圈网博客的自动更新能力。核心思路是通过定时任务驱动新闻获取与发布,借助 LLM + 文生图完成文章自动生成,最终通过 REST API 完成内容上线。后续可根据实际运营情况,优化新闻源、调整生成策略,并完善监控与告警体系。