Files
yu-zhi-ran/platform/PORTFOLIO.md
T
lt e1ba31afda 版本1.0.4 - 发布前准备
- 修复system.py缩进错误
- 优化前端页面样式(待重构)
- 改进API接口结构
- 完善文档和自动化脚本
- 平台基本功能稳定运行
2026-04-29 09:32:43 +08:00

12 KiB
Raw Permalink Blame History

宇之然内容创作平台 - 系统架构与部署指南

系统组成

整个项目由两个核心部分组成:

组件 位置 职责 状态
内容流水线 automation/scripts/ 选-写-优-发 全自动化脚本 已实现
管理平台 platform/ Web管理界面 + API + 数据同步 新开发
数据存储 automation/data/ JSON 选题库 + 发布包 共享

1. 内容流水线(模块化)

collector.py    → 收集热点 → automation/data/sustainability_topics.json
creator.py      → 创作内容 → automation/data/drafts/YYYY-MM-DD/
optimizer.py    → 合规优化 → 生成 optimization_report.json
publisher.py    → 发布包生成 → automation/data/releases/ + content/published/

特点

  • 独立可运行,每个脚本都有 CLI 参数
  • 数据文件基于日期组织
  • 日志写入 automation/logs/

2. 管理平台(Web UI

backend/
├── app/
│   ├── main.py                # FastAPI 入口
│   ├── database.py            # SQLite 连接
│   ├── models.py              # Topic, Article 模型
│   ├── schemas.py             # Pydantic 验证
│   ├── api/
│   │   ├── system.py          # 系统状态、流水线触发、日志查看
│   │   ├── topics.py          # 选题 CRUD + 发布标记
│   │   ├── articles.py        # 文章管理
│   │   └── publisher.py       # 发布包生成与查看
│   └── core/
│       ├── generator.py       # 调用 creator.py
│       ├── optimizer.py       # 调用 compliance_optimizer.py
│       └── sync.py            # JSON↔DB 同步
frontend/
└── index.html                 # Vue 3 + Element Plus SPA

特点

  • 前端无构建,CDN依赖(Tailwind + Vue + Element Plus
  • 数据通过 REST API 与后端交互
  • 实时显示流水线状态

部署方式:直接目录运行(不用 Docker)

前置条件

  • Python 3.10+
  • pip install -r platform/backend/requirements.txt
  • 确保自动化脚本可运行(scripts/ 及其依赖已就绪)

启动步骤

# 1. 进入 platform 目录
cd /root/openclaw-workspace/projects/yu-zhi-ran/platform

# 2. (首次)创建数据目录
mkdir -p data logs

# 3. 启动服务器
./run.sh 8001

# 或手动:
cd backend
python -m uvicorn app.main:app --host 0.0.0.0 --port 8001 --reload

访问

系统架构与数据流

                    ┌─────────────────────────────────────┐
                    │         Frontend (Vue 3)           │
                    │  仪表盘 | 选题列表 | 预览 | 发布   │
                    └─────────────────┬───────────────────┘
                                      │ HTTP API (JSON)
                    ┌─────────────────▼───────────────────┐
                    │      FastAPI (backend/app)          │
                    │  system | topics | publisher | api │
                    └─────────────────┬───────────────────┘
                                      │
                ┌─────────────────────┼─────────────────────┐
                │                     │                     │
         ┌──────▼──────┐      ┌──────▼──────┐      ┌──────▼──────┐
         │   core/     │      │   core/     │      │   core/     │
         │ generator   │      │ optimizer   │      │   sync      │
         └──────┬──────┘      └──────┬──────┘      └──────┬──────┘
                │                     │                     │
                └─────────────────────┼─────────────────────┘
                                      │ subprocess (CLI)
                    ┌─────────────────▼───────────────────┐
                    │   automation/scripts/*.py           │
                    │   collector creator optimizer      │
                    │   publisher (生成发布包)            │
                    └─────────────────┬───────────────────┘
                                      │ 读写
                    ┌─────────────────▼───────────────────┐
                    │   automation/data/                  │
                    │   sustainability_topics.json       │
                    │   drafts/ releases/                │
                    └─────────────────────────────────────┘

关键集成点

  1. 触发创作POST /api/system/generate/run

    • FastAPI 调用 generator.py → subprocess creator.py
    • 成功后调用 sync_all_topics() 同步选题状态到数据库
  2. 触发优化POST /api/system/optimize/run

    • optimizer.py → subprocess compliance_optimizer.py
    • 读取报告并更新数据库
  3. 生成发布包POST /api/publisher/generate/{topic_id}

    • publisher.py → subprocess publisher.py --topic-id {id}
    • 发布包存到 content/published/automation/data/releases/
  4. 查看发布包GET /api/publisher/package/{topic_id}/{platform}

    • 返回 HTML 内容供前端 iframe 预览或复制
  5. 流水线状态GET /api/system/pipeline/status

    • 检查日志文件最后修改时间和错误关键词
    • 返回各模块健康状态

目录结构对比:原 vs 新

原(纯脚本)

yu-zhi-ran/
├── automation/          # 流水线
├── scripts/            # 同 automation/scripts(软链?)
├── content/            # 已发布内容
└── 手动操作(打开终端运行脚本)

新(管理平台 + 流水线)

yu-zhi-ran/
├── platform/          # 新增:Web管理平台
│   ├── backend/
│   │   ├── app/
│   │   │   ├── main.py
│   │   │   ├── api/
│   │   │   └── core/
│   │   └── requirements.txt
│   ├── frontend/
│   │   └── index.html
│   └── run.sh         # 启动脚本
├── automation/        # 流水线(不变)
├── scripts/          # 流水线脚本(不变)
└── (其他目录 unchanged)

关系platform 读取 automation/data/ 的数据并调用 scripts/ 执行,不修改原有脚本。

功能清单

功能 实现状态 API端点 前端位置
系统概览 GET /api/system/status 仪表盘统计卡片
选题列表 GET /api/topics?status= 选题管理表格
选题详情 GET /api/topics/{id} 预览对话框
触发创作 POST /api/system/generate/run "运行创作任务"按钮
触发优化 POST /api/system/optimize/run "运行合规优化"按钮
生成发布包 POST /api/publisher/generate/{id} 发布Tab → "重新生成"
发布包预览 GET /api/publisher/package/{id}/{platform} 发布Tab → "查看"
发布包复制 (同上) 发布Tab → "复制HTML"
标记已发布 POST /api/topics/{id}/publish 发布Tab → "确认发布"
流水线状态 GET /api/system/pipeline/status 流水线状态面板
同步数据 POST /api/sync/run 全量刷新按钮
日志查看 GET /api/system/logs/{date}?log_type= 日志对话框

数据同步说明

automation/data/sustainability_topics.json(自动化脚本写入)

目标platform/backend/data/yzr.db (SQLite)

同步策略

  • 实时同步:每次创作/优化任务完成后自动调用 sync_all_topics()
  • 手动同步:前端 "全量刷新" 按钮 → POST /api/system/refresh
  • 定时同步:可在 platform 启动时预先执行一次

字段映射

JSON 字段 Topic 模型字段
id id
title title
field field
status status
priority_score priority_score
compliance_score compliance_score
ready_at ready_at (date)
published_at published_at (date)
platform_urls platform_urls (JSON)

状态对应

  • 自动化脚本使用中文状态:"待处理", "待发布", "已发布"
  • 平台数据库保持中文状态(前端也显示中文)

扩展性

添加新平台

  1. automation/scripts/publisher.pyPLATFORMS 添加配置
  2. platform/backend/app/api/publisher.pylist_platform_packages() 添加平台路径
  3. 在前端 "发布管理" 对话框添加新平台的输入框

定时任务

使用 crontab 定时运行自动化脚本:

# 每天 5:00 收集选题
0 5 * * * cd /path/to/yu-zhi-ran && python automation/scripts/collector.py

# 每天 9:00 生成内容(如果待处理选题充足)
0 9 * * * cd /path/to/yu-zhi-ran && python automation/scripts/creator.py

# 每天 14:00 合规优化(可选)
0 14 * * * cd /path/to/yu-zhi-ran && python automation/scripts/optimizer.py

# 每周一 10:00 发布(手动发布包生成)
0 10 * * 1 cd /path/to/yu-zhi-ran && python automation/scripts/publisher.py

开发调试

日志查看

# 实时 tail 日志
tail -f automation/logs/creator_$(date +%Y-%m-%d).log
tail -f automation/logs/optimizer_$(date +%Y-%m-%d).log
tail -f automation/logs/publisher_$(date +%Y-%m-%d).log

API 调试

访问 http://localhost:8000/docs 使用 Swagger UI 测试所有端点。

前端调试

浏览器 DevTools → Network 查看 API 请求。

故障排查

问题 可能原因 解决方案
前端显示无数据 数据库未同步 点击"全量刷新"或访问 /api/system/sync/run
创作按钮灰色 无可用选题 检查 automation/data/sustainability_topics.json 是否有 status: "待处理"
生成发布包失败 HTML不存在 检查 automation/data/releases/YYYY-MM-DD/ 是否存在对应HTML
端口占用 已有服务运行 停止旧的 uvicorn 进程或改端口
依赖缺失 pip install 未完成 运行 pip install -r platform/backend/requirements.txt

后续优化建议

  1. 数据库初始化: 添加自动创建表 + 初始数据脚本
  2. 权限控制: 添加简单登录(当前无认证,仅本地访问)
  3. 任务队列: 耗时的流水线步骤改为异步(BackgroundTasks + 状态轮询)
  4. 配置管理: 将平台配置(PLATFORMS 的 enabled 状态)移到数据库
  5. 备份策略: 定期备份 automation/data/platform/data/
  6. Docker 重构 (可选): 如需容器化,可分别构建 backend 和 nginx 镜像

总结

  • 无 Docker:直接 ./run.sh 启动,依赖 requirements.txt
  • 双系统集成:管理平台(Web UI)调用自动化流水线(CLI脚本)
  • 数据同步JSON ↔ SQLite 自动/手动同步
  • 状态监控:流水线各模块健康状态面板
  • 一键操作:创作、优化、生成发布包全部通过 Web 界面触发

系统已准备好用于日常内容生产管理。


维护者: AI 助手小然 最后更新: 2026-04-19