Files
my-daily/README.md
T

12 KiB
Raw Blame History

🪖 军事科技每日摘要系统 V3

完整的军事科技 RSS 抓取 + AI 智能分析 + 增量缓存 + 运行监控系统

完整功能

📥 数据抓取

  • 🔗 可配置 RSS 源直抓(rss_feeds.txt 管理,支持 100+ 源)
  • 24 小时时间窗口过滤
  • 🔄 同源标题去重(保留跨源对同一事件的不同报道)
  • ThreadPoolExecutor 并发抓取,内置失败重试

🗄️ 增量缓存

  • 💾 SQLite 本地缓存:文章翻译/AI分析结果持久化
  • 📰 网摘文本缓存:再次运行零 token 消耗
  • 🏷️ 分类介绍缓存:按日期+分类独立存储
  • 🧹 自动过期清理(7天)+ 表结构自动迁移

🌐 智能翻译

  • 🔍 自动识别外文文章
  • 📝 分步翻译:先标题 → 再正文(仅通过筛选的文章)
  • 并发翻译(ThreadPoolExecutor

🔑 关键词筛选

  • 🎯 44 个军事科技专业关键词库
  • 📊 命中数排序,文章 >15 篇时自动过滤

🤖 AI 智能分析

  • 多维度评分(技术35% + 战略30% + 信息20% + 时效15%
  • 📋 自动分类:今日必看 / 装备动态 / 地区冲突 / 战略政策
  • ✍️ 每篇文章 AI 智能摘要(80-120字)
  • 🔮 分类深度洞察分析(每类50字综述)
  • 🏆 TOP3 必看深度分析
  • 批量并发评分 + 分类

🖼️ 图片生成

  • 📄 3800px 超长网摘图片
  • 🎨 军事主题视觉设计
  • 📊 包含TOP3完整内容
  • 💾 自动保存PNG文件

📊 运行监控

  • ⏱ 各阶段耗时统计,自动输出结构化报表
  • 🤖 API 调用量/token 按用途和模型分组统计
  • 📰 源抓取成功/失败率一目了然
  • 📡 文章统计 + 缓存命中率

🚀 快速开始

方式一:本地直接运行(推荐)

# 1. 安装依赖
pip install -r requirements.txt

# 2. 配置环境
cp config/.env.example config/.env
vim config/.env
# 编辑 OPENAI_API_KEY

# 3. 运行
make local

方式二:Docker 部署

# 1. 克隆或解压
cd military-digest-v3

# 2. 配置环境
cp config/.env.example config/.env
vim config/.env
# 编辑 OPENAI_API_KEY

# 3. 构建镜像
make build

# 4. 测试运行
make run-once

# 5. 安装定时任务
make install-cron

📁 目录结构

military-digest-v3/
├── scripts/
│   ├── military_daily_report_v3.py   # 主入口 — 流程编排
│   └── modules/                      # 功能模块包
│       ├── __init__.py               # 包初始化 + 统一导出
│       ├── config.py                 # 配置模块:常量 + AI配置加载
│       ├── utils.py                  # 工具函数:语言检测/HTML清洗/AI调用/换行
│       ├── rss_fetcher.py            # RSS抓取:12源 × 6线程并发
│       ├── translator.py             # 翻译处理:中英分离 + 并发翻译
│       ├── keyword_filter.py         # 关键词筛选:49词命中排序
│   │   ├── ai_analyzer.py            # AI分析:评分/分类/摘要/洞察/网摘生成
│   │   ├── cache.py                  # SQLite缓存:文章/网摘/分类介绍增量缓存
│   │   ├── monitor.py                # 运行监控:阶段耗时/API/AI token调用统计
│   │   ├── pusher.py                 # 推送模块:企业微信/飞书 webhook 推送
│   │   ├── image_generator.py        # 图片生成:TOP3合并3800px长图
│       └── get_chinese_font.py       # 字体模块:跨系统中文字体适配
├── config/
│   ├── config.json                   # 系统配置
│   └── .env.example                  # 环境变量示例
├── output/                           # 输出目录
│   ├── military_report_YYYYMMDD.md    # 完整报告(Markdown格式,支持链接、样式)
│   ├── military_webzine_YYYYMMDD.txt  # TOP3网摘文本
│   └── military_webzine_YYYYMMDD.png  # TOP3网摘合并长图
├── logs/                             # 日志目录
├── Dockerfile
├── docker-compose.yml
├── Makefile
└── README.md

🧩 模块架构

military_daily_report_v3.py  ← 主入口(流程编排)
  ├── config.py              ← 配置常量,零依赖
  ├── logger.py              ← 统一日志模块
  ├── cache.py               ← SQLite增量缓存,自动迁移
  ├── monitor.py             ← 运行监控统计
  ├── pusher.py              ← 企业微信/飞书推送
  ├── rss_fetcher.py         ← 依赖 config + utils + monitor
  ├── translator.py          ← 依赖 utils
  ├── keyword_filter.py      ← 依赖 config
  ├── ai_analyzer.py         ← 依赖 config + utils
  ├── image_generator.py     ← 依赖 utils + get_chinese_font
  └── get_chinese_font.py    ← 零依赖

各模块职责

模块 行数 职责 对外导出
config.py 90 RSS源、关键词库、评分维度、分类定义、AI配置加载 RSS_FEEDS, WECHAT_SOURCES, KEYWORDS, SCORE_DIMENSIONS, CATEGORIES, load_ai_config()
utils.py 130+ 语言检测、HTML清理、时间解析、AI API封装(含监控钩子)、文本换行 is_chinese(), clean_html(), extract_content(), parse_pub_time(), call_ai(), wrap_text()
rss_fetcher.py 100+ 多线程并行抓取RSS源(MAX_THREADS并发,含2次重试+监控上报) fetch_all_feeds()
translator.py 150+ 中英文分离 + 标题/正文分步AI并发翻译 batch_translate_titles(), batch_translate_contents()
keyword_filter.py 23 44关键词命中计数 → 排序 → Top15筛选 keyword_filter()
ai_analyzer.py 240+ 四维度评分、智能分类、中文摘要、分类洞察、《参考消息》风格网摘生成 score_and_classify_article(), calculate_weighted_score(), generate_category_overview(), generate_webzine_for_article(), batch_score_and_classify_articles()
cache.py 310+ SQLite增量缓存:文章处理结果+网摘+分类介绍,支持自动迁移+过期清理+断点续跑 get_cache(), get_article(), save_article(), save_article_webzine(), get_category_summary(), save_category_summary()
monitor.py 160+ 运行时监控:阶段耗时/AI API调用量+token/源成功率/缓存命中率,结束自动输出报表 get_monitor(), monitor.stage(), monitor.report()
pusher.py 130+ 企业微信文本/图片/Markdown推送 + 飞书文本推送,主流程末自动触发,失败优雅降级 send_daily_push(), push_wechat_text(), push_wechat_image(), push_feishu_text()
image_generator.py 220 网摘文本渲染为PNG图片(单篇 + TOP3合并长图) create_webzine_image(), create_combined_webzine_image()
get_chinese_font.py 50 跨系统中文字体自动匹配,支持Windows/Linux/macOS,内置开源字体可选 get_chinese_font(size, bold)

⚙️ 配置说明

环境变量 (.env)

配置项 说明 默认值
OPENAI_API_KEY OpenAI API 密钥 -
OPENAI_API_BASE API 地址 https://api.openai.com/v1
OPENAI_MODEL AI 分析模型 gpt-4o-mini
WEBZINE_MODEL 网摘专用模型 deepseek-v3.2-250518

config.json 配置项

配置项 说明 默认值
time_window_hours 时间窗口(小时) 12
max_articles 最多保留文章数 15
top3_count TOP3 必看文章数 3
wechat_target 微信接收者ID -
wechat_account 微信机器人账号 -
enable_wechat_push 开启微信推送 true
enable_feishu_push 开启飞书推送 false
enable_image_gen 开启图片生成 true
enable_txt_gen 开启TXT文件生成 true

rss_feeds.txt 订阅源配置

所有RSS源都在config/rss_feeds.txt文件中管理,不需要修改代码即可增删订阅源:

  • 格式:每行 源名称|RSS地址
  • #开头的行是注释,会自动忽略
  • 空行会自动跳过
  • 修改后直接运行程序,无需重启或改代码
  • 容错保障:文件不存在、为空或格式错误时,自动回退使用内置的12个默认源,不会影响程序运行
  • 支持所有标准RSS/Atom格式,中英文源无需区分,系统自动识别翻译

定时任务

方式一:宿主机 crontab

make install-cron
# 或手动添加
crontab -e
# 加入:0 8 * * * cd /path/to/military-digest-v3 && python3 scripts/military_daily_report_v3.py >> logs/cron.log 2>&1

方式二:Docker Cron

docker-compose --profile cron up -d

🔍 RSS 源列表

  1. Defense One - 美国防务新闻
  2. NEWUAS - 无人机系统新闻
  3. Seapower - 海军力量杂志
  4. The War Zone - 战区军事分析
  5. 国防科技要闻
  6. 战略前沿技术
  7. 无人机邦
  8. 浮空飞行器
  9. 海鹰资讯
  10. 渊亭防务
  11. 电波之矛
  12. 龙牙的一座山

📊 输出示例

🪖 军事科技每日摘要
📅 2026年05月12日 | 共收录 12 篇

====================
🔥 今日必看 TOP3
====================

1.【美军MQ-9无人机测试发射激光制导火箭弹】
   ⭐ 综合评分:9.2/10
   📰 来源:The War Zone
   📝 摘要:美国通用原子公司联合美空军在内华达测试场完成...
   🔮 深度洞察:低成本改装令察打无人机获得反无人机能力...
   🔗 阅读原文:...

...

🔄 数据流程

main()
  ├── Step 1:   RSS 并行抓取(ThreadPoolExecutor × MAX_THREADS 并发,内置重试)
  ├── Step 2:   24小时时间窗口过滤
  ├── Step 3:   同源标题去重
  ├── Step 4:   SQLite 缓存查询(分离已处理/待处理文章)
  ├── Step 5:   外文标题并发翻译(ThreadPoolExecutor × AI_CONCURRENCY
  ├── Step 6:   关键词筛选(仅当 >15篇)
  ├── Step 7:   外文正文并发翻译(仅筛选通过的文章,大幅省 token)
  ├── Step 8:   批量 AI 评分 + 分类 + 摘要(并发)
  ├── Step 9:   新处理文章写入 SQLite 缓存
  ├── Step 10:  合并缓存+新文章,按评分降序
  ├── Step 11:  TOP3 网摘生成(优先缓存命中,支持字数重试,TXT+PNG)
  ├── Step 12:  四分类整理 + 深度洞察生成(优先缓存命中)
  ├── Step 13:  Markdown 报告输出(全缓存+文件已存在则跳过)
  ├── Step 14:  多渠道推送(企业微信/飞书 webhook,失败优雅降级)
  └── 监控报告输出(阶段耗时/API+token统计/源成功率/缓存命中率)

系统要求

  • Python 3.8+ 或 Docker
  • OpenAI API Key(或兼容API,如火山引擎、DeepSeek等)
  • 内存 ≥ 512MB
  • 磁盘 ≥ 1GB

常见问题

生成的图片中文字体乱码怎么办?

无需额外配置,代码已自动适配所有主流系统的自带中文字体:

  • Windows: 自动匹配宋体/黑体/微软雅黑
  • Linux: 自动匹配NotoSansCJK/文泉驿微米黑
  • macOS: 自动匹配PingFang/黑体

如果需要完全不依赖系统字体,可以下载开源无版权的NotoSansCJK字体放到scripts/modules/assets/fonts/目录下:

  • 粗体:NotoSansCJK-Bold.ttc
  • 常规:NotoSansCJK-Regular.ttc

日志输出在哪里?

日志默认输出到标准错误流,包含INFO/WARNING/ERROR三个级别,运行时会实时打印到控制台,也可以重定向到日志文件:

python scripts/military_daily_report_v3.py >> logs/runtime.log 2>&1

V3 版本 - 全流程重构 + 模块化拆分 + 跨系统字体适配 + 日志标准化 + Markdown报告输出,2026年5月发布