概述#
AI 博客分析系统是一个基于 AI 的自动化工具,能够对博客文章进行深度分析并提供多维度洞察。通过集成大语言模型,系统可以分析写作风格、情感倾向、内容结构等多个维度。
核心特性#
- ✅ Map-Reduce 并行处理:多线程分析单篇文章,提高效率
- ✅ MD5 智能缓存:基于内容哈希缓存分析结果,避免重复计算
- ✅ 混合计算策略:统计型数据用代码计算,分析型数据用 LLM 生成
- ✅ 7种可视化图表:雷达图、词云、概念网络、时间线、情感分布、写作结构、词频统计
- ✅ 健壮的错误处理:LLM 失败时自动 fallback 到统计方法
快速开始#
1. 环境准备#
# 确保 Python 版本
python --version # 需要 3.9+
# 安装依赖
pip install -r scripts/requirements.txtbash2. 配置 API Key#
# 方式 1: 环境变量(推荐)
export API_KEY="your_deepseek_api_key"
# 方式 2: 写入 .env 文件
echo "API_KEY=your_deepseek_api_key" > .envbash3. 运行分析#
# 基础运行
python scripts/ai_analysis/run.py
# 带详细日志
python scripts/ai_analysis/run.py --verbosebash4. 查看结果#
分析完成后,访问 /about 页面查看可视化结果。
高级用法#
增量更新#
修改文章后,再次运行会自动跳过未修改的文章:
python scripts/ai_analysis/run.py --verbosebash强制重新分析#
python scripts/ai_analysis/run.py --forcebash限制分析数量#
# 只分析前 5 篇文章
python scripts/ai_analysis/run.py --limit 5 --verbosebash预览模式#
# 列出待分析的文章,但不实际调用 LLM
python scripts/ai_analysis/run.py --dry-runbash指定文章分析#
# 分析指定文章
python scripts/ai_analysis/run.py --target "src/content/blog/your-article.md" --forcebash5. manifest.json 和 cache 文件#
manifest.json 和 cache 文件存储在 scripts/ai_analysis 目录下。
# 查看 manifest.json
cat scripts/ai_analysis/manifest.json
# 查看 cache 文件
cat scripts/ai_analysis/cache/2025-02-23-也许你该买份保险_f3645c1f373593e5cc9903bffad854af.jsonbash系统架构#
整个系统采用经典的 Map-Reduce 架构:
Blog Posts → Map (单篇分析) → Cache → Reduce (全局聚合) → 可视化plaintextMap 阶段:单篇文章分析#
- 数据提取:解析 Markdown 文件的 frontmatter 和正文
- 基础指标计算:统计句长、词频等基础数据
- LLM 深度分析:分析写作风格、情感、结构等
- MD5 缓存:基于内容哈希避免重复计算
Reduce 阶段:全局数据聚合#
- 统计型数据:用代码计算平均语气、情感分布等
- 分析型数据:用 LLM 生成主题名称等
- 健壮性设计:失败时自动回退到基础统计
技术栈#
后端分析引擎#
- Python 3.9+:脚本语言
- Pydantic:数据验证和 schema 定义
- DeepSeek API:LLM 服务
- 并发处理:
ThreadPoolExecutor加速分析
前端可视化#
- Astro:博客框架
- ECharts 5:图表库
- echarts-wordcloud:词云插件
可视化维度#
1. 写作风格雷达图#
展示教学性、反思性、幽默性、批判性等维度的平均水平。
2. 关键词云图#
显示文章中最常出现的关键词,支持 fallback 到柱状图。
3. 概念关系网络#
构建概念共现网络,展示思想脉络和概念之间的关联。
4. 时间线深度图#
展示写作深度随时间的变化趋势。
5. 情感分布图#
统计积极、中性、消极情感的文章分布。
6. 写作结构统计#
分析文章的写作结构模式。
7. 词频统计图#
显示高频词汇的分布情况。
常见问题#
API Key 未设置#
[ERROR] API_KEY not set in environmentplaintext解决:
export API_KEY="your_key_here"bash网络超时#
[WARNING] Request failed (attempt 1/3), retrying...plaintext解决:
- 检查网络连接
- 调整超时时间:
export AI_REQUEST_TIMEOUT_S=600 - 使用代理:
export https_proxy=http://127.0.0.1:7890
Python 版本不兼容#
TypeError: unsupported operand type(s) for |plaintext解决:升级到 Python 3.10+ 或修改类型注解为 Union
成本优化建议#
- 开发阶段使用
--limit测试 - 正式运行前用
--dry-run预览 - 利用缓存机制,避免
--force - 增量更新,只分析修改的文章