# Digest Optimization Summary ## 背景 reader → OpenClaw 日报链路原先的问题主要有两类: 1. **OpenClaw public digest 输入过重** - public digest 直接读取完整 `openclaw-delivery-payload.json` - 其中混有大量不直接服务公开日报的字段 - public digest 这一步在 OpenClaw 侧消耗了较多 token 2. **public / internal 生成逻辑没有充分拆分** - public digest 与 internal review digest 都基于完整 payload 推导 - 容易造成重复消耗 - public digest 还可能被 review / 内部流程语义污染 本轮优化的目标不是重写 reader 主流程,而是在不破坏现有 delivery payload 的前提下,先把 public digest 的输入和生成方式收敛下来,并验证整体 token 与内容质量的变化。 --- ## 本轮改动 ### 1. reader 新增 `digest-brief.json` 在 FreshRSS pipeline 写出: - `outputs/freshrss/rerun//candidates/openclaw-delivery-payload.json` 之后,额外生成: - `outputs/freshrss/rerun//candidates/digest-brief.json` 用途: - 供 OpenClaw 生成 **public digest** 时优先读取 - 作为 public-only 的轻量输入视图 当前约束: - 仅保留 `selection_decision == "keep"` 的候选 - 默认最多保留前 5 条 - 高亮 `highlights` 最多保留 3 条 - schema 标识为 `digest-brief.v1` 保留字段: - `title` - `source_name` - `summary` - `highlights` - `category` - `digest_rank` - `selection_decision` - `url` 附带计数: - `source_candidate_count` - `candidate_count` --- ### 2. public / internal 输入边界拆分 当前推荐口径: - **public digest** - 优先读取 `digest-brief.json` - 仅使用 public-only 输入视图 - **internal review digest** - 继续读取完整 `openclaw-delivery-payload.json` - 保留 keep / review 的决策上下文 这样做的原因: - public digest 需要更轻、更干净的公开输入 - internal review digest 仍然需要完整上下文来支撑判断、待确认与建议沉淀 --- ### 3. digest 成稿的正式落盘位置 正式 run 生成出的 digest 成稿,不应停留在 OpenClaw 的临时目录,而应回写到同一次 reader run 目录下。 推荐正式产物位置: - `outputs/freshrss/rerun//digest/public_digest.md` - `outputs/freshrss/rerun//digest/internal_review_digest.md` - `outputs/freshrss/rerun//digest/combined.json` 这样可以保证: - 一次 run 的所有输入、输出、摘要结果和日报成稿都收在同一目录下 - 后续 Hugo 发布与 chat 回传基于同一组正式产物,而不是临时文件 - 便于回溯、复盘和后续自动化收口 ### 4. 一次生成两份 digest 的生成模式 推荐把: - `public digest` - `internal review digest` 改为在 OpenClaw 侧 **一次调用同时生成两份**。 推荐输入: - `PUBLIC_DIGEST_INPUT` → `digest-brief.json` - `INTERNAL_REVIEW_INPUT` → `openclaw-delivery-payload.json` 推荐输出: ```json { "public_digest_markdown": "...", "internal_review_digest_markdown": "..." } ``` 这样可以减少重复 prompt / 调用开销,同时保留 public / internal 两种视图的边界。 --- ### 5. internal review digest 风格收敛 internal review digest 经过一轮人工验证后,收敛成以下规则: 固定结构: 1. `今日候选概况` 2. `已入选重点` 3. `待你确认` 4. `建议沉淀到 IMA` 5. `原始候选清单` 表达规则: - 不显示 `rank` - 不显示英文 machine state - 使用中文状态: - `keep` → `已入选` - `review` → `待确认` - `drop` → `暂不纳入` 内容规则: - `已入选重点` - 标题 + 来源 - 状态 - 较完整的一段摘要 - 一段判断(解释为什么值得入选,以及它在今天 digest 中承担什么角色) - `待你确认` - 标题 + 来源 - 状态 - 较完整的一段摘要 - 原因 - 建议 - `原始候选清单` - 也用中文状态,而不是 `decision=keep/review` 目标: - 保留 internal review digest 作为“给人看的审阅稿”的属性 - 避免它沦为 payload 的原样转写或机器中间态展示 --- ### 6. public digest 风格收敛 public digest 当前推荐结构: 1. `今日概览` 2. `今日重点` 3. `趋势观察` 4. `延伸阅读` 5. `信息来源` 表达规则: - 不暴露 internal workflow 词汇 - 不写 `待确认` / `建议沉淀到 IMA` / `keep/review/drop` / `selection_decision` - 保持适合 Hugo 公开浏览的表达方式 内容规则: - 每个 `今日重点` 条目除了摘要和 highlights 外,增加一句编辑性总结 - 推荐形式: - `这篇内容更值得关注的原因在于……` 目标: - 保证 public digest 不只是“摘要列表” - 而是一份带有编辑性提炼的公开日报 --- ## 实测结果 基于真实 run: - run 目录:`outputs/freshrss/rerun/20260401-074614` ### 1. public 输入压缩效果 - 完整 payload:`8701` 字符 - `digest-brief.json`:`3080` 字符 压缩比例: - **减少约 64.6%** 按中位 token 粗估: - 完整 payload:约 `3955 tokens` - public brief:约 `1400 tokens` public 输入侧单次大约减少: - **约 2500 tokens** --- ### 2. 一次生成两份的总成本估算 基于真实输入输出的中位估算: - 旧方案(两次生成):约 `10328 tokens` - 新方案(一次生成两份):约 `7734 tokens` 节省: - **约 2594 tokens** - **约 25%** 说明: - 第一步 public 输入瘦身带来的是“输入量级下降” - 第二步一次生成两份带来的是“调用层重复开销下降” - 两者叠加后,已经形成比较明显的成本优化效果 --- ## 当前默认口径 ### public digest - 输入:`digest-brief.json` - 风格:公开浏览稿 - 每个重点项包含: - 摘要 - 关键信号 - 一句编辑性总结 ### internal review digest - 输入:完整 payload - 风格:内部审阅稿 - 每个重点项包含: - 更完整摘要 - 判断 - 每个待确认项包含: - 更完整摘要 - 原因 - 建议 ### 生成方式 - 优先采用 **一次调用同时生成两份** --- ## 当前阶段结论 本轮优化已经形成一个可用版本: - reader 新增 public-only 轻量输入视图 - public / internal 边界清楚 - internal 风格和 public 风格都收敛到了可接受版本 - token 成本下降有明确实测支撑 - skill 文档与流程规范已经同步更新 当前更适合的策略不是继续抽象设计,而是: - 按这套新流程再跑几次真实日报 - 观察稳定性、质量波动和实际使用感受 --- ## 后续可选方向 ### 1. internal 输入进一步轻量化 潜在方向: - 新增一个 internal 专用的轻量视图 - 但需要谨慎,避免削弱 internal review 的判断价值 ### 2. digest 阶段模型分层 潜在方向: - reader 上游继续用便宜模型做抽取和结构化 - OpenClaw digest 阶段单独切到更便宜或更合适的模型 ### 3. 自动化执行收口 潜在方向: - 把“一次生成两份”的逻辑进一步标准化 - 更顺滑地接 Hugo 发布与聊天回传 - 让 reader → OpenClaw → Hugo / chat 的路径更接近真正的稳定生产流程