本文基于项目需求,规划了自动更新圆圈网博客功能的方案。系统每日定时搜索AI、ComfyUI及大模型相关资讯,更新新闻栏目;同时可根据指定标题由大模型生成文章并配图。方案采用Python开发,REST API发布,结合国内大模型与文生图服务,并参考了现有小红书项目架构与数据库表设计。
核心问题
如何设计一个每天自动更新圆圈网博客新闻与生成文章的系统?
项目背景
在现有 d-python-project 项目中,已经包含一个「小红书笔记生成」模块,它连接了 circler 数据库的 senran_news 表,用于存储和发布内容。现在需要新增一个功能:自动更新圆圈网博客,主要包括两方面能力:
- 每日新闻自动聚合:定时从网络获取最新的 AI、ComfyUI 及大模型相关资讯,更新到圆圈网「最新资讯」栏目。
- 按标题生成文章:用户指定标题后,由大语言模型撰写完整文章,并自动生成封面及内容配图,发布到博客。
本文档将围绕需求,从技术选型、架构设计、实现流程等角度,给出完整的方案规划。
需求分析
功能拆解
- 定时任务:每天在指定时间触发更新流程。
- 新闻搜索:调用外部 API 或网络爬虫,检索最近 24 小时内的 AI、ComfyUI、大模型等领域最新动态,并过滤质量。
- 内容发布:将获取到的新闻摘要及原文链接通过圆圈网的 REST API 发布到「最新资讯」栏目。
- 文章生成:接收用户输入的标题,调用大语言模型(如国产模型或 ChatGPT)生成正文、摘要、标签等结构化内容。
- 图片生成:利用文生图服务(例如国内的文心一格、通义万相)根据文章主题自动生成封面图和内文插图。
- 组合发布:将文章 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. 文章生成与配图流程
- 接收用户指定的标题。
- 调用 LLM API,发送包含指令的 prompt:
- “请根据以下标题写一篇技术博客,用 Markdown 格式,包含摘要和关键词。标题:{title}” - 获取返回的 Markdown 正文。
- 根据正文生成图片:
- 提取文章主题关键词。
- 调用文生图 API 生成一张封面图和多张内容配图,并保存到本地或对象存储。
- 将图片路径替换到 Markdown 的![]()中。 - 组装发布数据,调用圆圈网 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 完成内容上线。后续可根据实际运营情况,优化新闻源、调整生成策略,并完善监控与告警体系。