## Why 当前系统存在两条独立的发布路径:`scheduler.py` 的 `auto_publish_once` 直接生成并发布,完全绕过队列;而 `PublishQueue` + `QueuePublisher` 提供了另一套排期发布机制。两套系统互不感知,导致: 1. **排期时间全靠手动输入** — 用户必须自己判断最佳发布时间并以文本形式输入 `scheduled_time`,`analytics_service.py` 中已有的 `time_weights`(基于历史数据的3小时段权重)完全没有被利用。 2. **调度器发布绕过队列** — 自动化调度器的发布操作不经过审核流程,没有草稿预览、排期管理的保障;而队列系统又缺少自动化生成能力,两者无法联动。 3. **无内容分布控制** — 没有机制防止多篇内容扎堆发布,也没有将内容分散到高流量时段的能力。 ## What Changes - 新增**智能排期引擎**:基于 `AnalyticsService` 的 `time_weights` 自动计算最佳发布时间槽(peak hours),为入队内容自动分配 `scheduled_time`,避免同一时段拥堵 - 新增**自动排期模式**:内容生成入队时可选择"自动排期",系统自动跨天分散安排到高权重时段 - 将调度器的 `auto_publish_once` 重构为**通过队列发布**,统一发布路径,所有发布都经过队列 → 审核 → 排期 → 发布的标准流程 - 修改内容排期 UI,增加一键自动排期、排期建议、时段热力图展示 ## Capabilities ### New Capabilities - `smart-schedule-engine`: 智能排期引擎 — 基于 `time_weights` 分析数据计算最优发布时段,自动为队列项分配排期时间,支持内容间距控制和时段负载均衡 - `unified-publish-path`: 统一发布路径 — 将 `scheduler.py` 的自动发布改为生成内容到队列 + 自动审核 + QueuePublisher 发布,消除绕过队列的直接发布 ### Modified Capabilities - `services-queue`: 队列添加时支持 `auto_schedule=True` 参数调用智能排期引擎;`generate_to_queue` 新增自动排期选项 - `services-scheduler`: `_scheduler_loop` 的 publish 分支改为调用 `generate_to_queue`(自动排期 + 自动审核),不再直接调用 `auto_publish_once` 的发布逻辑 ## Impact - **代码变更**: `services/publish_queue.py`(新增排期引擎方法)、`services/queue_ops.py`(`generate_to_queue` 增加自动排期参数)、`services/scheduler.py`(publish 路径重构)、`services/analytics_service.py`(暴露 `time_weights` 查询接口)、`ui/app.py`(排期 UI 增强) - **数据依赖**: 智能排期依赖 `content_weights.json` 中的 `time_weights` 字段;首次使用若无数据则 fallback 到默认高流量时段(08-10, 12-14, 18-22) - **行为变更**: 调度器的自动发布不再即时发布,改为入队后由 QueuePublisher 按排期时间发布,会有分钟级延迟 - **向后兼容**: 手动输入 `scheduled_time` 仍然有效,智能排期仅在用户未手动指定时生效