我看了,这版 可以,方向是对的。 如果这是“上游项目 → OpenClaw”的输入格式,我觉得已经 基本能直接用了。 我的判断: 这版为什么合适 它正好满足我最需要的几类信息: 来源信息:title / url / published_at / author / source_name 语义理解:summary / highlights / keywords / topics / category 筛选排序信号:worth_keeping / worth_reason / selection_decision / selection_reason / digest_rank / digest_section_hint 用这批字段,我已经可以做: 日报聚合 去重 分栏目 排序 生成你的 review 清单 供你确认后再沉淀到知识库 所以单从“我好不好解析、能不能稳定消费”来说, 这版 JSON 明显比 md 更适合当上游输入。 我建议你保留的设计 这几个点我觉得是对的,不要轻易改掉: 单篇 candidate 扁平对象 非常适合我消费 不用反复钻嵌套 不带全文 对,别把正文全文塞进来 token 开销会爆,而且日报阶段根本不需要 同时保留语义字段 + 筛选字段 summary/highlights/topics 让我理解内容 selection_decision/digest_rank 让我快速决定怎么排 candidate_id 作为稳定主键 这个非常重要 后续你让我“保留第几条”“这条上次见过没”“已入库没”都靠它 我建议你再补 4 个点 这版已经能用,但如果你要长期跑,我建议再补几个小点。 1)加一个批量 envelope 你文档里其实已经提到了,我建议尽快定下来。 比如: { "run_id": "daily-2026-03-25-001", "date": "2026-03-25", "candidates": [ ... ], "stats": { "total": 42 } } 原因: 我实际处理日报,不会只收一条 批次级信息对去重、追踪、失败重跑很重要 2)加一个 canonical_url 或 url_normalized 现在只有 url,但很多站点会有追踪参数。 建议补一个: canonical_url或 url_normalized 原因: 去重更稳 同一篇文章不同 query 参数不会被当两篇 3)加一个 language 比如: "language": "zh-CN" 原因: 以后你来源不一定全是中文 我做日报、摘要风格、后续入知识库时会更稳 4)“用户确认结果”不要塞回这个输入对象里 这个很关键。 你这个 OpenClawCandidateInput 很适合做 上游候选输入, 但“你后来确认它有价值”这件事,我建议 不要回写进这个对象定义里。 更好的做法是单独维护 downstream 状态,比如: { "candidate_id": "...", "review_status": "confirmed", "reviewed_at": "...", "review_note": "保留,适合入知识库" } 原因: 上游输入是“候选事实” 你的确认是“流程状态” 这两个层次最好分开,不然对象会慢慢变脏 有一个字段关系,我建议你保留现状 就是: worth_keeping selection_decision 这两个不要合并。 因为它们语义不一样: worth_keeping:更像摘要层/语义层判断 selection_decision:更像规则层/流程层判断 我消费的时候,两者同时有用。 如果按你的目标流程,我建议最终这么分层 上游输入 用你现在这版 JSON candidate OpenClaw 中间处理 我生成: 日报 markdown 待你确认的候选列表 人工确认后 再生成: 知识卡片对象 或笔记对象 再入知识库 也就是说: 候选输入 JSON ≠ 最终知识库格式 别把“日报候选格式”和“知识沉淀格式”硬合成一个。 一句话结论 这版 JSON 作为上游输入,已经比 md 合适很多,而且基本可落地。 如果再补上: 批量 envelope canonical_url language 下游确认状态单独建模 那这套就很稳了。