DH-WP-001 S0 baseline 交付说明
0. 文档元信息
| 项 | 说明 |
|---|---|
| 消费者 | Trading Matrix 接收方、Data Horizon 运营与工程(导出 / 交接执行人) |
| 触发条件 | 字段字典已冻结;第一批信源与样本可从 DH 库导出或经 Open API 拼装 |
| 下一步动作 | 执行 §4 生成 baseline → §5 校验 → §6 交接 → TM 填写 试消费反馈记录 |
| 字段依据 | S0 baseline 字段字典(dh-wp-001-s0-v1) |
1. 交付物清单
| artifact | 格式 | 说明 |
|---|---|---|
sources_baseline | CSV + JSON | 信源候选,见字段字典 §3 |
samples_baseline | CSV + JSON | 代表样本,见字段字典 §4 |
manifest.json | JSON | 版本、时间窗、记录数、时间语义与已知限制 |
| 本说明 | Markdown | 生成、校验、交接步骤(本文) |
默认参数(待 TM 书面确认后可调整):
| 参数 | 默认值 |
|---|---|
| 样本时间窗 | 近 90 天 |
| 每信源样本上限 | 50 条(按 published_at 降序) |
| 候选信源范围 | source_type=signal、kol_id 非空、status=1、is_deleted=0 |
| Schema 版本 | dh-wp-001-s0-v1 |
2. 生成方式(三条路径)
2.1 路径 A:导出 CLI(推荐,S0-C01)
工程仓计划提供:
cd server
go run ./scripts/export_tm_baseline.go \
-sample-days=90 \
-samples-per-source=50 \
-format=both \
-out=./output/tm-baseline-20260527
| 参数 | 作用 |
|---|---|
-category-id | 按 dn_crawler_source.category_id 筛选 |
-kol-id | 仅导出指定 KOL 下信源 |
-source-ids | 逗号分隔 dn_crawler_source.id |
-sample-days | 样本时间窗 |
-samples-per-source | 每源条数上限 |
-format | csv / json / both |
读取表:dn_crawler_source、dn_kol、dn_raw_news。
输出目录:output/tm-baseline-{date}/,含 sources_baseline.*、samples_baseline.*、manifest.json。
当前状态(2026-05-27):CLI 尚未合入工程仓;S0 交接可先用路径 B + 路径 C,或运营 SQL + 脚本临时导出。
2.2 路径 B:Open API 拼装(过渡期)
适用于 TM 或 DH 脚本按信源拉样本。
| 步骤 | API | 用途 |
|---|---|---|
| 1 | POST /v1/open/kol/source-list | 获取 KOL 分类下的信源列表(id, title, platform) |
| 2 | POST /v1/open/kol/source-signal-list | 按 source_id + start_time / end_time 分页拉 dn_raw_news |
鉴权:MCP API Key(见工程仓 docs/open-api-third-party-spec.md)。
拼装时注意:
- 将 API
id映射为sample_id=rn_{id},source_id=cs_{source_id}; source_timestamp→published_at(ISO 8601 UTC);- 补齐
raw_ref:有source_url则用,否则dh://raw_news/{id}(需 CLI 或 SQL 导出正文时一并带出content); captured_at/ingested_at在 S0 均取自created_at(若 API 未返回,需查库或等S0-B03扩展)。
2.3 路径 C:运营后台 + SQL 审计(首批人工兜底)
| 步骤 | 操作 |
|---|---|
| 1 | 在 DH 管理后台 KOL / 采集渠道 确认候选源已绑定 KOL、tags 含 tm_priority(可选) |
| 2 | 在目标环境执行 §7 抽样 SQL,确认每源样本量与时间填充率 |
| 3 | 用 SQL SELECT 或临时脚本按字段字典列导出 CSV |
| 4 | 运营填写 selection_reason、active_status 中 pending_review / low_activity 等人判字段 |
3. 生成流程(端到端)
4. 导出逻辑要点
4.1 信源(sources)
- 联结
dn_kol填充market_scope、signal_style、kol_name; - 聚合近 90 天
dn_raw_news得last_sample_at、sample_count_90d; - 按字段字典 §3.2 映射
source_type; - 计算
active_status(字典 §3.4); - 排除
retired及 90 天内零样本源。
4.2 样本(samples)
- 每源取最多 N 条,按
source_timestampDESC; - 排除
status=3;repeat_news_id非空打duplicate,不重复占行; - 计算
parse_status(字典 §5.2); subjectsJSON →symbols逗号串;- 私域合规:按 DH-WP-001 任务包设计 §9 与运营备忘决定是否摘要
raw_content。
4.3 manifest
必须包含字典 §6 全部键,并固定 time_semantics_note:
S0:
captured_at与ingested_at均映射dn_raw_news.created_at,不代表独立入库流水线时间。
5. 校验清单
5.1 自动校验(导出脚本 / CI 建议)
| # | 检查项 | 失败处理 |
|---|---|---|
| V1 | 每条 source_id 匹配 ^cs_\d+$ | 拒绝导出 |
| V2 | 每条 sample_id 匹配 ^rn_\d+$ | 拒绝导出 |
| V3 | samples 中 source_id 均存在于 sources | 拒绝导出 |
| V4 | 必填字段非空(字典 §3、§4 标 ✓) | 拒绝导出 |
| V5 | published_at / captured_at / ingested_at 可解析为 ISO 8601 | 拒绝导出 |
| V6 | 无重复 news_id | 去重或拒绝 |
| V7 | manifest.sample_count 与实际行数一致 | 拒绝导出 |
5.2 人工抽检(运营,建议 ≥10%)
| # | 检查项 |
|---|---|
| H1 | 打开 raw_ref 或 dh:// 内链能回到原始记录 |
| H2 | published_at 与正文语境一致(非明显错位) |
| H3 | 优先验证列表无「来源不明」匿名源 |
| H4 | parse_status=unparsable 的条目未进入 TM 优先包(可单独附 samples_low_priority) |
| H5 | 私域摘要条目在 manifest 标明 content_redaction |
5.3 S0 验收对齐(任务包 §8)
- ≥1 批可追溯、已去重、带
active_status的信源候选 - 每个优先源有代表样本(数量与 TM 确认一致)
- 每条样本可回溯
source_id+raw_ref - 三类时间不混用语义(S0 允许 capture/ingest 同源,manifest 已声明)
-
parse_status三类可区分 - 无来源不明、无时间戳数据进入优先列表
- TM 书面确认可据此判断是否足够生成策略种子(见试消费反馈)
6. 交给 Trading Matrix
6.1 交接包结构
tm-baseline-YYYYMMDD/
├── sources_baseline.csv
├── sources_baseline.json
├── samples_baseline.csv
├── samples_baseline.json
├── manifest.json
└── README.txt # 可选:指向本交付说明 URL
6.2 交接信息(邮件 / Issue 模板)
| 字段 | 内容 |
|---|---|
| Schema | dh-wp-001-s0-v1 |
| 生成时间 | {manifest.generated_at} |
| 信源数 / 样本数 | {source_count} / {sample_count} |
| 时间窗 | {sample_window_days} 天 |
| 字段字典 | 本文档库链接 → s0-baseline-field-dictionary.md |
| 已知限制 | capture/ingest 同源;交易线索字段 S0 大量为空;dh_quality_* 未填 |
| 试消费截止 | 由双方约定 |
| 反馈填写 | tm-trial-consumption-feedback.md |
6.3 TM 侧建议试消费步骤
- 加载
sources_baseline,按active_status=active与selection_reason/tags筛优先源; - 加载
samples_baseline,仅对parse_status=parsable尝试策略种子生成; - 对
needs_review抽样人工看字段是否够用; - 记录缺字段、命名冲突、时间语义问题至试消费反馈;
- 勿将 DH 交付物中的空
direction/time_horizon视为 TM 验证失败,除非种子生成强依赖这些列。
7. 数据库抽样 SQL(交接前执行)
在目标环境执行,结果粘贴至工程仓 S0-B02 或试消费反馈附录。
-- 候选信源规模
SELECT COUNT(*) AS candidate_sources
FROM dn_crawler_source
WHERE is_deleted = 0 AND status = '1'
AND source_type = 'signal' AND kol_id IS NOT NULL;
-- 每源样本量与时间填充率(近 90 天)
SELECT
cs.id AS source_id,
cs.source_name,
COUNT(r.id) AS sample_cnt,
SUM(r.source_timestamp IS NOT NULL) AS has_published,
SUM(r.source_url IS NOT NULL AND r.source_url != '') AS has_url,
MAX(FROM_UNIXTIME(r.source_timestamp)) AS last_published
FROM dn_crawler_source cs
LEFT JOIN dn_raw_news r ON r.source_id = cs.id
AND r.created_at >= DATE_SUB(NOW(), INTERVAL 90 DAY)
AND r.status != 3
WHERE cs.is_deleted = 0 AND cs.status = '1' AND cs.source_type = 'signal'
GROUP BY cs.id
ORDER BY sample_cnt DESC
LIMIT 30;
-- 无效 / 重复占比
SELECT status, COUNT(*) FROM dn_raw_news
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 90 DAY)
GROUP BY status;
8. 已知限制与风险
| 限制 | 影响 | 缓解 |
|---|---|---|
无 export_tm_baseline CLI | 首批需 API/SQL 手工 | 优先合入 S0-C01 |
captured_at === ingested_at | 无法分析入库延迟 | manifest 声明;S1 加列 |
active_status 粗粒度 | 仅 1/2 开关 | S1 dn_tm_source_candidate |
| 交易线索字段空缺 | TM 种子需更多 NLP | S1 Signal Agent + 标注表 |
| Open API 缺 URL / 时间别名 | TM 脚本需二次查库 | S0-B03 |
| KOL 私域全文 | 合规风险 | 摘要 + raw_ref 内链 |
9. 相关链接
| 文档 | 位置 |
|---|---|
| 任务包设计 | DH-WP-001 任务包设计 |
| 字段字典 | S0 baseline 字段字典 |
| 试消费反馈 | Trading Matrix 试消费反馈记录 |
| TM 原始任务书 | Data Horizon 信源候选与样本交付任务书 |
| 工程可落地清单 | data-horizon 仓 docs/agent-tasks/dh-wp-001-trading-matrix-source-candidate.md |
Changelog / 演化记录
2026-05-27:创建 S0 baseline 交付说明,覆盖生成路径、校验、交接模板与抽样 SQL。