分析一个自动生成AI周刊的开源项目

举报
yd_289006361 发表于 2026/08/22 12:53:33 2026/08/22
【摘要】 # Agili 的 AIGC 周刊 — 项目分析这是一个**由 Agentic AI Agent 自动策展、自动撰写、自动发布**的 AIGC(人工智能生成内容)精选周刊系统。整体采用 Serverless 架构,完全部署在 Cloudflare 边缘基础设施上。## 一、技术栈| 层级 | 技术 ||------|------|| 前端框架 | Next.js 15 (App Router...

# Agili 的 AIGC 周刊 — 项目分析

这是一个**由 Agentic AI Agent 自动策展、自动撰写、自动发布**的 AIGC(人工智能生成内容)精选周刊系统。整体采用 Serverless 架构,完全部署在 Cloudflare 边缘基础设施上。

## 一、技术栈

| 层级 | 技术 |
|------|------|
| 前端框架 | Next.js 15 (App Router) + React 19 |
| CMS | Payload CMS 3.0 (Headless) |
| 数据库 | Cloudflare D1 (SQLite) |
| 对象存储 | Cloudflare R2 |
| 边缘运行时 | Cloudflare Workers |
| Agent 运行时 | Cloudflare Containers + OpenCode |
| 部署适配 | OpenNext (`@opennextjs/cloudflare`) |
| 其他 | markdown-it-ts、rss、overtype、Firecrawl (MCP) |

## 二、三大核心组件

项目由三个解耦的组件构成,协同完成"采集 → 撰写 → 发布 → 展示"的闭环:

### 1. Next.js 应用 (`app/` + `collections/` + `lib/` + `components/`)

负责面向读者的前端展示与 Payload CMS 管理后台。

**路由结构**(App Router,使用路由分组):

- `app/(frontend)/` — 前台页面
  - `page.tsx` — 首页(周刊列表 + 分页)
  - `weekly/[slug]/page.tsx` — 周刊详情页(Markdown 渲染 + JSON-LD 结构化数据 + 上下篇导航)
  - `layout.tsx` — 根布局(Terminal 主题 + 暗色模式 + SEO 元数据)
- `app/(payload)/` — Payload Admin (`/admin`) 与 API (`/api`)
- `app/rss.xml/route.ts` — RSS 订阅源
- `app/sitemap.ts` — 站点地图
- `app/robots.ts` — 爬虫规则
- `app/manifest.ts` — PWA 清单

**数据模型** (`collections/`):

- `Weekly.ts` — 周刊集合:标题、摘要、内容(Markdown)、期刊编号(格式 `Y26W12`,正则校验)、状态(草稿/已发布)、发布日期、封面图、链接、标签。变更后通过 hook 自动失效缓存。
- `Media.ts` — 媒体集合(上传到 R2,含 alt 文本)
- `Users.ts` — 用户集合(启用 API Key 认证,供 Agent 写入 CMS)

**数据访问层** (`lib/weekly/`):

- `data.ts` — 封装 Payload 查询,使用 Next.js `unstable_cache` + React `cache` 双层缓存。列表缓存 1 小时,详情缓存 24 小时,sitemap 缓存 1 周。提供 `getWeeklyList`、`getWeeklyBySlug`(含上下篇)、`getAllWeeklySitemapItems`。
- `cache.ts` — 缓存失效逻辑,同时清除 Next.js 标签缓存和 Cloudflare Workers Cache。
- `utils.ts` — 日期格式化

**工具库**:

- `lib/markdown.ts` — markdown-it 渲染,自定义链接规则(外链新窗口打开 + `rel=noopener noreferrer`)和图片规则(懒加载 + 异步解码)
- `lib/config.ts` — 站点全局配置(SEO、OpenGraph、Twitter Card、RSS、PWA)
- `lib/url.ts` — 绝对 URL 生成

**主题组件** (`components/theme/`):Terminal 风格主题(基于 hugo-theme-terminal),含暗色/亮色切换、分页、文章元信息、标签列表。

**Payload 自定义字段** (`components/payload/overtype.tsx`):为 CMS 内容字段集成  富文本编辑器,支持明暗主题切换。

### 2. OpenCode Agent (`agent/`)

独立的 AI Agent 服务,运行在 Cloudflare Containers 内的 Docker 容器中,负责自动采集信息、撰写周刊并写入 CMS。

**配置** (`agent/opencode.json`):

- 监听 2442 端口,提供 HTTP API
- 集成 Firecrawl MCP(网页爬取)
- 配置多模型:主模型 Claude Sonnet、小模型 Gemini Flash、Writer 用 Claude Opus thinking、Reviewer 用 GPT-5.2
- 定义 6 个 Agent:build(主)、editor、image-editor、researcher、reviewer、writer

**自动化工作流** (`agent/.opencode/commands/weekly.md`):

通过 `/weekly` 命令触发,采用**产物即状态**的恢复机制(检查中间产物判断断点),分 6 个阶段:

| 阶段 | 任务 | 产出 | 执行者 |
|------|------|------|--------|
| Phase 1 | 收集内容 | `drafts/*.md` | `batch-research` 技能 → `researcher` agent |
| Phase 2 | 筛选信息 | `drafts.yaml` | `editor` agent(三维打分≥70 入选) |
| Phase 3 | 筛选图片 | `images.yaml` | `image-editor` agent(视觉检查) |
| Phase 4 | 撰写内容 | 周刊 Markdown | `writer` agent |
| Phase 5 | 审核修订 | PASS/意见 | `reviewer` agent(最多 3 轮) |
| Phase 6 | 发布草稿 | `published/{id}.json` | `publish-weekly` 技能 → Payload API |

**子 Agent 职责**:

- `researcher` — 单源抓取,用 Firecrawl 爬取网页,深度限制(每层≤10链接、总计≤30请求、深度≤2),提取正文+图片候选,指数退避重试
- `batch-research` 技能 — 批量调度器,分 3 批(重要资源/博客/KOL)并发抓取,每轮 5 并发,同域名限流
- `editor` — 主编,抓取历史 RSS 去重,三维打分(相关性40%+影响力30%+实操性30%),GitHub <100 star 直接丢弃
- `image-editor` — 图片编辑,下载候选到临时目录,用 `read` 工具视觉检查,通过 wsrv.nl 生成最终图片 URL
- `writer` — 专栏作家,按 `chinese-writing` 技能撰写,链接以锚文本嵌入
- `reviewer` — 审稿人,依据写作指南审核,最多 3 轮修改

**技能** (`agent/.opencode/skills/`):

- `chinese-writing` — 中文写作指南(去 AI 味六原则、简化词池、反模式识别)
- `batch-research` — 批量采集调度
- `publish-weekly` — 通过 Payload REST API 幂等写入 CMS(API Key 认证,POST/PATCH),可选 Bark 推送通知

**信息源** (`agent/.opencode/REFERENCE.md`):30+ 数据源,分三类:重要资源(HN/Solidot/daily.dev 等)、博客网站(Anthropic/OpenAI/DeepMind 等)、KOL(宝玉/Karpathy 等)。

**工具** (`agent/.opencode/utils.mjs`):周次计算(UTC,周日为周首)、HN URL 生成、参数格式化。

### 3. Cloudflare Worker (`worker/`)

边缘入口,负责请求转发、鉴权与定时调度。

- `index.ts` — 入口,`fetch` 处理 HTTP 请求(Basic Auth 鉴权后转发到 Container),`scheduled` 处理定时任务
- `container.ts` — `AgentContainer` 类(继承 Cloudflare Container),管理容器生命周期(空闲 10 分钟休眠)。`runWeeklyTask` 创建 OpenCode session → 监控 SSE 事件流 → 触发 `weekly` 命令。通过 SSE 监听 session 状态(busy/idle/error),动态续期容器活动超时。
- `sse.ts` — SSE 事件流解析器
- `wrangler.jsonc` — 配置定时触发(`0 23 * * 7` 即每周日 23:00 UTC)、Container 实例(standard-1,最大 1 实例)、Durable Object 绑定、可观测性

## 三、数据流与运行机制

```
每周日 23:00 UTC
        │
        ▼
Cloudflare Worker (scheduled trigger)
        │
        ▼
AgentContainer.runWeeklyTask()
        │  创建 OpenCode session + SSE 监控
        ▼
OpenCode Agent (Container 内)
        │
        ├─ Phase 1: researcher × N 并发爬取 30+ 数据源 → drafts/
        ├─ Phase 2: editor 打分筛选去重 → drafts.yaml
        ├─ Phase 3: image-editor 视觉选图 → images.yaml
        ├─ Phase 4: writer 撰写 → aigc-weekly-yXX-wYY.md
        ├─ Phase 5: reviewer 审核 (≤3轮)
        └─ Phase 6: publish-weekly → Payload REST API (status: draft)
                                    │
                                    ▼
                        Cloudflare D1 (存储) + R2 (媒体)
                                    │
                                    ▼
                        revalidateTag 失效前端缓存
                                    │
                                    ▼
                        读者访问 Next.js 前台 / RSS / sitemap
```

## 四、实现的关键功能

1. **AI 全自动策展**:从 30+ 信息源爬取 → 智能筛选打分 → 配图 → 撰写 → 审核 → 发布,全程无人干预
2. **断点恢复**:以中间产物(文件)存在性判断恢复点,任一阶段失败可续跑
3. **幂等发布**:按 `issueNumber` 查询,存在则 PATCH、不存在则 POST,重复执行不产生重复
4. **多层缓存**:Next.js unstable_cache(标签失效)+ React cache + Cloudflare Workers Cache,CMS 变更后 hook 自动清除
5. **SEO 完整**:sitemap、robots、RSS、OpenGraph、Twitter Card、JSON-LD(Article + BreadcrumbList + WebSite)、PWA manifest
6. **安全 Markdown 渲染**:外链新窗口 + noopener、图片懒加载、禁用 HTML
7. **容器生命周期管理**:SSE 监听 Agent 状态动态续期,空闲自动休眠节省成本
8. **多模型分工**:不同子 Agent 使用不同模型(Opus 写作、GPT-5.2 审核、Gemini Flash 编辑),优化成本与质量
9. **中文写作质量保障**:专门的去 AI 味写作指南 + 审稿人闭环审核
10. **视觉图片筛选**:image-editor 亲自用 `read` 工具查看下载的图片,而非仅凭 URL 判断

## 五、部署架构

- `pnpm deploy` → 数据库迁移(D1) + OpenNext 构建 + 部署到 Cloudflare Workers
- `pnpm deploy:worker` → 部署 Agent Worker(含 Container 镜像,由 `Dockerfile` 构建:Python+Node.js 基础镜像 + OpenCode 安装)
- 前端与 Admin 共用一个 Next.js 应用,通过 OpenNext 适配到 Cloudflare Workers 运行时

这是一个设计相当完整的 AI 内容自动化系统,工程化程度高(断点恢复、幂等、多模型、缓存、SEO),Agent 编排清晰(主 Agent 协调 5 个子 Agent + 3 个技能),且针对中文写作质量做了专门约束。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。