# OpenClaw Candidate Input 字段说明 ## 1. 文档目的 本文档定义当前项目输出给 OpenClaw 的结构化输入对象:`OpenClawCandidateInput`。 这是一份面向 OpenClaw 消费侧的接口说明文档,不要求了解本项目内部的 `item`、`article`、`filter_result` 等实现细节。 当前定位是: - 单篇候选内容的精简输入 - 用于 OpenClaw 做日报聚合、排序、栏目分配和后续汇报 - 不承载正文全文、不承载本地文件路径、不承载规则引擎完整证据链 --- ## 2. 设计原则 这个 payload 的设计遵循以下原则: 1. 足够轻 - 不发送正文全文,避免浪费 token 2. 足够稳定 - 不暴露本地目录结构和内部中间文件路径 3. 足够可消费 - 字段扁平化,避免 OpenClaw 反复解析嵌套对象 4. 足够有判断信号 - 保留摘要、主题、价值判断、筛选结果、排序信号 5. 足够可去重 - 同时提供原始 `url` 与归一化后的 `canonical_url` --- ## 3. 完整 JSON 示例 ```json { "candidate_id": "cand:sha256:4139f277b8cb621b02b3398f8a7bd78e3f9eef7bcd320b70b8590e802540c6ca", "title": "套壳中国大模型撑起500亿美元估值?扒一扒 Cursor 的\"套壳\"疑云", "url": "http://www.ruanyifeng.com/blog/2026/03/kimi-cursor.html?utm_source=rss", "canonical_url": "http://www.ruanyifeng.com/blog/2026/03/kimi-cursor.html", "published_at": "2026-03-21T10:19:11Z", "author": "阮一峰", "source_name": "阮一峰的网络日志", "language": "zh-CN", "summary": "AI编程工具Cursor推出的Composer 2模型被证实套壳中国Kimi K2.5模型,引发侵权争议。Kimi官方确认Cursor通过Fireworks AI获得授权,不存在侵权。作者分析Cursor隐瞒事实是为了支撑其不断膨胀的估值,将其包装成大模型公司。", "highlights": [ "Cursor的Composer 2模型被技术手段揭露实际调用的是Kimi K2.5模型。", "Kimi官方确认Cursor通过Fireworks AI获得授权,因此不构成侵权。", "Cursor隐瞒使用Kimi模型,被认为是为了支撑其高达500亿美元的估值。" ], "keywords": ["Cursor", "Composer 2", "Kimi K2.5", "Fireworks AI", "AI编程工具"], "topics": ["人工智能", "大模型", "商业伦理"], "category": "观点评论", "worth_keeping": true, "worth_reason": "文章深入剖析了AI行业的热点事件,涉及技术真相、商业动机和行业趋势,具有较高的参考价值。", "selection_decision": "review", "selection_reason": "Worth-keeping signal is positive but no stronger keep rule matched.", "digest_section_hint": "insights", "digest_rank": 60 } ``` --- ## 4. 字段总览 | 字段名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `candidate_id` | `string` | 是 | 单篇候选内容唯一标识 | | `title` | `string` | 是 | 文章或内容标题 | | `url` | `string` | 是 | 原始链接 | | `canonical_url` | `string \| null` | 否 | 归一化链接,用于更稳定的去重 | | `published_at` | `string \| null` | 否 | 发布时间,ISO 8601 格式 | | `author` | `string \| null` | 否 | 作者名 | | `source_name` | `string \| null` | 否 | 来源名称,例如博客名、站点名、Feed 名 | | `language` | `string \| null` | 否 | 语言标记,例如 `zh-CN`、`en` | | `summary` | `string` | 是 | 2 到 3 句话的精简摘要 | | `highlights` | `string[]` | 是 | 3 到 5 条单句要点 | | `keywords` | `string[]` | 是 | 5 到 8 个关键词 | | `topics` | `string[]` | 是 | 3 到 5 个高层主题标签 | | `category` | `string` | 是 | 内容分类 | | `worth_keeping` | `boolean` | 是 | 摘要层给出的长期保留判断 | | `worth_reason` | `string` | 是 | 对 `worth_keeping` 的解释 | | `selection_decision` | `string` | 是 | 规则层压缩后的筛选决策 | | `selection_reason` | `string \| null` | 否 | 对 `selection_decision` 的简短解释 | | `digest_section_hint` | `string \| null` | 否 | 建议栏目 | | `digest_rank` | `integer` | 是 | 建议排序分值,范围 `0-100` | --- ## 5. 字段详细说明 ### 5.1 `candidate_id` 含义: - 单篇候选内容的稳定唯一标识 约束: - 同一条上游内容在当前系统中应保持稳定 - OpenClaw 可以把它作为去重、回溯、引用的主键 ### 5.2 `title` 含义: - 候选内容标题 来源: - 优先来自标准化 `item.title` - 如果上游标题缺失,则退回摘要结果中的 `summary.title` ### 5.3 `url` 含义: - 原始内容链接 用途: - OpenClaw 在日报中回链原文 - 后续人工 review 或知识库引用时回溯来源 ### 5.4 `canonical_url` 含义: - 对原始 `url` 做轻量归一化后的链接 当前归一化策略: - 去掉 fragment - 去掉常见追踪参数,例如 `utm_*`、`fbclid`、`gclid`、`ref` 等 - 保留其他非追踪 query 参数 用途: - 让 OpenClaw 在去重时更稳定 - 避免同一篇文章因为带不同追踪参数被当成两篇 说明: - `url` 保留原始值,`canonical_url` 提供去重辅助 - OpenClaw 建议优先用 `canonical_url` 做去重键,不足时再结合 `candidate_id` ### 5.5 `published_at` 含义: - 内容发布时间 格式: - ISO 8601,例如 `2026-03-21T10:19:11Z` ### 5.6 `author` 含义: - 作者名称 ### 5.7 `source_name` 含义: - 内容来源名称 常见示例: - `阮一峰的网络日志` - `FreshRSS` - 某个 Feed 标题 - 某个站点域名 ### 5.8 `language` 含义: - 语言标记 常见示例: - `zh` - `zh-CN` - `en` 用途: - OpenClaw 后续处理多语言输入时做风格和分类控制 - 为知识库入库、多语言日报、翻译或过滤策略留出口 说明: - 如果当前上游无法可靠识别语言,可以为 `null` ### 5.9 `summary` 含义: - 摘要主文本 约束: - 当前上游约束是 2 到 3 句话 - 长度不超过 140 个中文字符 ### 5.10 `highlights` 含义: - 关键要点列表 约束: - 3 到 5 条 - 每条一条独立信息 ### 5.11 `keywords` 含义: - 具体实体、工具名、方法名、关键概念 约束: - 5 到 8 个 ### 5.12 `topics` 含义: - 高层主题标签 约束: - 3 到 5 个 - 语义层级高于 `keywords` ### 5.13 `category` 含义: - 内容分类 当前允许值: - `资讯` - `方法论` - `工具实践` - `观点评论` ### 5.14 `worth_keeping` 含义: - 这条内容是否具有持续保留价值 说明: - 这是摘要层的价值判断,不是最终入库决定 - OpenClaw 可以把它当作优先筛选信号,而不是绝对真值 ### 5.15 `worth_reason` 含义: - 对 `worth_keeping` 的解释 ### 5.16 `selection_decision` 含义: - 规则引擎压缩后的筛选决策 当前允许值: - `keep` - `review` - `drop` ### 5.17 `selection_reason` 含义: - 对 `selection_decision` 的简短解释 说明: - 当前一般取规则引擎 reasons 的第一条压缩说明 - 不承诺包含全部规则命中细节 ### 5.18 `digest_section_hint` 含义: - 建议日报栏目 当前允许值: - `top_news` - `tools_and_workflows` - `risk_and_security` - `open_source` - `insights` - `deep_dive` - `null` ### 5.19 `digest_rank` 含义: - 建议排序分值 范围: - `0` 到 `100` 建议解释: - `80-100`:高优先级,建议优先关注 - `50-79`:中优先级,建议正常进入候选池 - `0-49`:低优先级,建议降权或仅保留参考 --- ## 6. OpenClaw 消费建议 推荐 OpenClaw 主要消费这几组信号: ### 6.1 语义聚合信号 - `summary` - `highlights` - `keywords` - `topics` - `category` ### 6.2 选择与排序信号 - `worth_keeping` - `worth_reason` - `selection_decision` - `selection_reason` - `digest_rank` - `digest_section_hint` ### 6.3 来源展示信号 - `title` - `url` - `canonical_url` - `published_at` - `author` - `source_name` - `language` --- ## 7. 当前不会提供的字段 OpenClaw 当前不应期待以下字段: - 正文全文,例如 `plain_text` - 本地文件路径,例如 `source_refs` - 完整规则证据链,例如 `filter_result.matches` - 内部中间对象,例如完整的 `item`、`article`、`summary`、`filter_result` - 人工确认状态,例如 `review_status`、`knowledge_decision` 最后一类字段不会放在这个对象中,原因是: - `OpenClawCandidateInput` 表示的是上游候选事实 - 人工确认和知识沉淀属于下游流程状态 - 两者混在一起会让输入对象逐渐失真、变脏 --- ## 8. 兼容性约定 当前版本约定: - 这是单篇输入对象,不是批量 envelope - 批量投递由上层 `OpenClawDeliveryPayload` 承载 - 本文档只约束 `candidates[]` 中单条对象的字段 --- ## 9. 一句话结论 `OpenClawCandidateInput` 是“给 OpenClaw 聚合日报用的单篇精简对象”:它保留来源信息、摘要语义、价值判断、去重辅助和排序信号,但不会携带正文全文、本地路径、规则证据链或人工确认状态。