Skip to content
 
 

Repository files navigation

Meridian

Meridian 是一个基于 Cloudflare Workers 和 Durable Objects 的新闻聚合和智能摘要系统,专为处理大量新闻源并生成智能摘要而设计。

功能特点

  • 多源新闻聚合: 支持从多个 RSS 源自动抓取新闻
  • 智能内容分析: 使用 Google Gemini 2.0 Flash 模型进行内容分析和摘要生成
  • 自动聚类: 基于内容的相似性自动将新闻聚类
  • 多语言支持: 支持中文、英文等多种语言的新闻处理
  • 实时更新: 基于 Durable Objects 的实时新闻源监控
  • 高性能: 利用 Cloudflare Workers 的全球分布式网络
  • 可扩展: 模块化设计,易于扩展和维护

系统架构

┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   RSS Sources   │───▶│  Durable Objects │───▶│   Content       │
│                 │    │  (Per Source)    │    │   Processing    │
└─────────────────┘    └──────────────────┘    └─────────────────┘
                                                        │
                                                        ▼
┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   Frontend      │◀───│   API Gateway    │◀───│   AI Analysis   │
│   (Dashboard)   │    │   (Worker)       │    │   (Gemini 2.0)  │
└─────────────────┘    └──────────────────┘    └─────────────────┘
                                │
                                ▼
                       ┌──────────────────┐
                       │   Cloudflare R2  │
                       │   (Storage)      │
                       └──────────────────┘

技术栈

  • 运行时: Cloudflare Workers
  • 存储: Cloudflare D1 (SQLite) 和 R2 (对象存储)
  • AI 模型: Google Gemini 2.0 Flash
  • 前端: HTML, CSS, JavaScript (原生)
  • 部署: Cloudflare

快速开始

前置要求

  • Node.js 18+
  • Cloudflare 账户
  • Wrangler CLI

安装步骤

  1. 克隆仓库
git clone https://github.com/your-username/meridian.git
cd meridian
  1. 安装依赖
npm install
  1. 配置环境变量
cp .dev.vars.example .dev.vars
# 编辑 .dev.vars 文件,填入必要的配置
  1. 初始化数据库
npm run db:init
  1. 启动开发服务器
npm run dev
  1. 访问应用 打开浏览器访问 http://localhost:8787

配置说明

环境变量

.dev.vars 文件中配置以下变量:

# 数据库配置
DATABASE_URL="your-d1-database-url"

# AI 模型配置
GEMINI_API_KEY="your-gemini-api-key"

# 认证配置
API_TOKEN="your-api-token"

# 存储配置
R2_BUCKET_NAME="your-r2-bucket-name"

# 其他配置
ENVIRONMENT="development"

新闻源配置

系统支持多种新闻源,可以通过以下方式添加:

  1. 通过 API 接口添加
  2. 直接在数据库中添加
  3. 通过管理界面添加

示例新闻源配置:

{
  "name": "BBC News",
  "url": "http://feeds.bbci.co.uk/news/rss.xml",
  "category": "general",
  "language": "en",
  "frequency_tier": "high"
}

API 文档

详细的 API 文档请参考 API 文档

主要 API 端点

  • GET /ping - 健康检查
  • GET /reports - 获取报告列表
  • GET /reports/{id} - 获取单个报告
  • POST /reports - 创建新报告
  • GET /sources - 获取新闻源列表
  • GET /sources/{id} - 获取单个新闻源
  • POST /sources - 添加新闻源
  • GET /articles - 获取文章列表
  • GET /articles/{id} - 获取单篇文章
  • GET /articles/search - 搜索文章
  • GET /openGraph - 生成 OpenGraph 图像

部署指南

生产环境部署

  1. 配置 Wrangler
npx wrangler auth login
  1. 设置环境变量
npx wrangler secret put GEMINI_API_KEY
npx wrangler secret put API_TOKEN
npx wrangler secret put DATABASE_URL
  1. 部署应用
npm run deploy

数据库迁移

npm run db:migrate

开发指南

项目结构

meridian/
├── .github/                  # GitHub 配置文件
│   └── workflows/            # CI/CD 工作流
├── .vscode/                  # VS Code 配置
├── apps/                     # 应用程序
│   └── web/                  # Web 应用
│       ├── public/           # 静态资源
│       └── src/              # 源代码
├── docs/                     # 项目文档
│   ├── components/           # 组件文档
│   ├── guides/               # 指南文档
│   ├── overview.md           # 项目概述
│   ├── getting-started.md    # 快速开始
│   ├── api.md                # API 文档
│   └── README.md             # 文档索引
├── packages/                 # 共享包
│   ├── config/               # 配置文件
│   ├── database/             # 数据库相关
│   └── types/                # 类型定义
├── services/                 # 服务
│   ├── backend/              # 后端服务
│   ├── ml-service/           # ML 服务
│   └── scraper/              # 抓取服务
├── tools/                    # 工具和脚本
├── package.json              # 项目依赖
├── turbo.json                # Turborepo 配置
└── README.md                 # 项目说明

开发工作流

  1. 创建新功能分支
git checkout -b feature/new-feature
  1. 进行开发
npm run dev
  1. 运行测试
npm test
  1. 提交代码
git add .
git commit -m "feat: add new feature"
git push origin feature/new-feature
  1. 创建 Pull Request

代码规范

  • 使用 ESLint 进行代码检查
  • 使用 Prettier 进行代码格式化
  • 遵循 JavaScript Standard Style

性能优化

缓存策略

  • 使用 Cloudflare Workers KV 缓存频繁访问的数据
  • 实现智能缓存失效机制
  • 优化 API 响应时间

数据库优化

  • 合理设计数据库索引
  • 使用分页查询减少数据传输
  • 定期清理过期数据

AI 模型优化

  • 批量处理减少 API 调用
  • 实现智能重试机制
  • 优化提示词提高响应质量

监控和日志

监控指标

  • API 响应时间
  • 错误率
  • 新闻源更新频率
  • AI 模型调用次数

日志管理

  • 结构化日志记录
  • 错误日志告警
  • 性能日志分析

故障排除

常见问题

  1. 新闻源更新失败

    • 检查新闻源 URL 是否可访问
    • 验证 RSS 格式是否正确
    • 查看错误日志获取详细信息
  2. AI 模型调用失败

    • 检查 API 密钥是否正确
    • 验证请求格式是否符合要求
    • 查看配额是否已用尽
  3. 数据库连接问题

    • 检查数据库 URL 配置
    • 验证网络连接是否正常
    • 查看数据库状态

调试技巧

  1. 使用 Wrangler 本地调试
npx wrangler dev --local
  1. 查看详细日志
npx wrangler tail
  1. 使用 Cloudflare Dashboard 监控

贡献指南

我们欢迎社区贡献!请遵循以下步骤:

  1. Fork 项目
  2. 创建功能分支
  3. 提交更改
  4. 创建 Pull Request
  5. 等待代码审查

贡献类型

  • 修复 Bug
  • 添加新功能
  • 改进文档
  • 性能优化
  • 测试用例

许可证

本项目采用 MIT 许可证。详情请参考 LICENSE 文件。

联系方式

更新日志

v1.2.0 (2025-06-20)

  • 新增文章搜索功能
  • 改进新闻源管理界面
  • 优化 AI 模型调用性能
  • 修复已知 Bug

v1.1.0 (2025-06-15)

  • 新增 OpenGraph 图像生成
  • 改进报告生成流程
  • 优化数据库查询性能
  • 添加更多新闻源

v1.0.0 (2025-06-10)

  • 初始版本发布
  • 基本新闻聚合功能
  • AI 摘要生成
  • 管理界面

最后更新时间: 2025-06-20

About

Meridian cuts through news noise by scraping hundreds of sources, analyzing stories with AI, and delivering concise, personalized daily briefs.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages