# 宇之然内容创作平台 - 系统架构与部署指南 ## 系统组成 整个项目由两个核心部分组成: | 组件 | 位置 | 职责 | 状态 | |------|------|------|------| | **内容流水线** | `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/` 及其依赖已就绪) ### 启动步骤 ```bash # 1. 进入 platform 目录 cd /root/.openclaw/workspaces/yzr-yxl/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 ``` ### 访问 - 前端界面:http://localhost:8000/ - API 文档: http://localhost:8000/docs - 健康检查: http://localhost:8000/api/system/status ## 系统架构与数据流 ``` ┌─────────────────────────────────────┐ │ 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.py` 的 `PLATFORMS` 添加配置 2. 在 `platform/backend/app/api/publisher.py` 的 `list_platform_packages()` 添加平台路径 3. 在前端 "发布管理" 对话框添加新平台的输入框 ### 定时任务 使用 crontab 定时运行自动化脚本: ```bash # 每天 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 ``` ## 开发调试 ### 日志查看 ```bash # 实时 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