用 sqlite3 直接查 agent/data/agent.db 实测每条数据通路的体量、鲜度、判重健康、5 主线覆盖、已知问题,
给每个源一个 9 维质量评分 + 一句话定级。这个页面回答两件事:
(A) 我们现在在吃哪些料、各自吃了多少;(B) 这些料里哪些是干净的、哪些有暗坑要修。
每张卡 4 个 KPI(量 / 鲜度 / 通路 / 覆盖) + 3 项质量 grade(量级 / 鲜度 / 准确性) + 最关键的一句话定级(第 7 源 InvestorManifest 的接入与体量见 §5)。有暗坑的源会单独出 ⚠ 已发现 红框, 直接对应 §3 的问题清单。
expert/X/data/x.sqlite3 3140 行 / 78 账号 / 时间跨度 2020-09 → 2026-04;
launchd 03:00 daily 已在岗 (任务 com.invesresearch.x-ingest);
5 主线覆盖 4/5:核心网 14 / 运营支撑 11 / 终端 2 / 芯片 1 / 运载发射 0(国外火箭账号未在 seed)。
occurred_at 字段直接吃了 Twitter 原始格式 "Wed May 20 13:00:33 +0000 2026",
不是 ISO8601 → 窗口查询 / 排序 / decide() 7d/30d 窗口都会按字符串排,排出来的不是真正时间序。
expert/data/harnessfarm/real_ingest_cases.jsonl (续 12 vendor 自 public/),
205 case,A 路 (scripts/import_harnessfarm.py) 灌进 events 124 条 + C 路 (sources/harnessfarm.py) 1 条;
5 主线分布:核心网 +69 / 终端 +79 / 运营支撑 +49 / 芯片 +18 / 运载发射 +3。
自带 expected_analysis.mainline / thesis_impact 跨产线 ADVICE baseline (threads 30% partial 60% / impact 43%)。
JsonlSource 读时, RawEvent.source 字段被 publisher 名(AST SpaceMobile / Apple / MediaTek …)覆盖了"HarnessFarm · "前缀
→ 反查时按 url 域名才能挑出来, 不能 LIKE 'HarnessFarm%'。
expert/data/shock_events/events.csv (续 12 vendor 自 public/),
21 条策展冲击事件 (2021-2026),严重性高/中 each;impact 源层硬编码 削弱 (全负面);
5 主线分布:运载发射 15 (NG-4 / NG-3 / Starlink G9-3 / Virgin Orbit / Astra / Firefly) /
核心网 5 (Starlink 地磁暴 40 颗 / ViaSat-3 / Intelsat 33e) / 运营支撑 1 / 终端 1。
HarnessFarm 偏强 94% + ShockEvents 全弱 100% → 互补 thesis 评分幸存者偏差。
agent/config/rss_feeds.json 2 feed:SpaceNews enabled(每次抓 ~24 items,关键词过滤后 ~10 入库) /
Satellite Today disabled (Fastly Varnish 403 anti-bot,UA/cookies 都被 block)。
中文产业站(工信部 / 通信世界 / 通信产业网)2020 后 RSS 全部下架(404 或返 HTML)。
CLI satagent fetch --source rss --config agent/config/rss_feeds.json 通,但暂未挂 cron。
agent/samples/ 4 份 jsonl 总 185 条 ground truth:
labeled_validation.jsonl 96 条 (P0-C 3/4 扩 · 5 主线全覆盖) ·
labeled_real.jsonl 26 条真实集 (macro F1=0.857) ·
labeled_regression.jsonl 31 条 ·
labeled_global_satellite_internet_202606.jsonl 31 条全球。
外加 labeled_harnessfarm_v1.jsonl 205 条跨产线。
satagent ingest --source 公司公告 --text "..." --url ... 单条投。
expert/wiki/timeline/all.md 大事年表 725 bullet → 解析回灌 +487 events;
skip_planned / skip_future 双闸过滤"计划中 / 未来时态"行,只入已发生事实;
行级 sha1 进判重 key,同文复跑 0 重复;
主线命中率 43.5%(年表含大量产业背景行,低于 manifest 类是预期)。
本环境 real-run.db events 合计 658(含 wiki-timeline 487)。
SEED_COMPANIES:wiki entities → 47 家公司(20→33→47 三次扩, commit a55745d / 4bdc4a8) ·
(2) ontology.py:wiki concepts → 词典 +15 词 + 第 5 主线 LAUNCH_VEHICLE +103 词(commit 83c56b6 / 4bdc4a8) ·
(3) samples/labeled_validation.jsonl:wiki timeline → 10→96 条 sub-agent 标注(commit 2c2f631)。
P0-C 4/4 (people → NER 词表) ROI 低留长尾。
把 7 个 Source + 1 wiki 种子层在 9 个质量维度上横向打分(第 7 源 InvestorManifest 接入细节见 §5)。 ✅ 强 · ◐ 中 · ⚠ 弱 · ⏸ 不适用。 最右一列是综合定级,对应 §1 详卡的一句话定级。
| 源 | 量 | 鲜度 | 通路 | 覆盖 | 跨度 | 成本 | GT | 判重 | 问题 | 定级 |
|---|---|---|---|---|---|---|---|---|---|---|
| X-SQLite | ✅ 368 | ✅ daily | ✅ cron | ◐ 4/5 | ✅ 5y+ | ✅ 自动 | ⏸ 无 | ✅ url+ts | ⚠ 日期 | 中 |
| HarnessFarm | ✅ 125 | ⚠ 冻结 | ✅ 双入口 | ✅ 5/5 | ✅ 跨年 | ✅ 文件 | ✅ 自带 | ✅ | ◐ src 字段 | 强 |
| ShockEvents | ◐ 20 | ⚠ 冻结 | ✅ 双入口 | ✅ 5/5 | ✅ 5y | ✅ 文件 | ✅ 人工 | ✅ | ✅ 无 | 强 |
| RSS | ◐ ~10/抓 | ✅ 实时 | ◐ 1 enabled | ◐ 仅英文 | ✅ 近期 | ✅ 自动 | ⏸ 无 | ✅ | ⚠ 中文断 | 中 |
| JSONL | ✅ 185 | ⚠ 静态 | ✅ | ✅ 5/5 | ✅ | ✅ | ✅ 标注 | ✅ | ✅ | 强 (corpus) |
| Text | ⚠ 8 | ⚠ 手贴 | ◐ CLI 单条 | ◐ 4/5 | ◐ 7d | ⚠ 人工 | ⏸ 无 | ✅ | ⚠ 无模板 | 弱 |
| WikiTimeline | ✅ 487 | ◐ 批量 | ✅ 复跑安全 | ◐ 43.5% 命中 | ✅ 多年 | ✅ 文件 | ⏸ 无 | ✅ 行 sha1 | ✅ 无 (双闸防错入) | 强 (回灌) |
| Wiki 种子 | ✅ 1.4K+ | ◐ 06-07 灌 | ✅ build | ✅ | ✅ | ✅ | ✅ | ⏸ 不运行时 | ✅ | 强 (build) |
| 合计 (7+1) | 521 events | 1 daily cron | 4 live | 5/5 主线 | 2018-2026 | cron+文件 | 3 源带 GT | url+ts 全开 | 5 个待修 | — |
把这次摸底过程中发现的 5 个数据质量问题摊开, 每个都给:现象 / 影响 / 修复方案 / 优先级。 P0 直接影响 decide() 正确性, P1 影响产品覆盖, P2 是体验 / 可维护性。
created_at 字符串 "Wed May 20 13:00:33 +0000 2026" 直接当 occurred_at 写入 events 表。sources/x_sqlite.py 加 _to_iso() 用 email.utils.parsedate_to_datetime 转 ISO + RawEvent 构造调用;
agent/scripts/backfill_x_occurred_at.py 一次性 UPDATE 历史 368 条 (幂等 / 真跑成功 / 复跑 0 行);
test_x_sqlite_source.py +2 单测 (test_occurred_at_normalized_to_iso 强制 ISO + test_to_iso_helper_pure 4 形态);全仓 361→363 passed。
agent/config/rss_feeds.json 里中文 feed 全部 enabled=false 留存档。
4bdc4a8 才加的,X-SQLite 没补齐就导致 thesis 评分里 运载发射 完全靠 HarnessFarm + ShockEvents 撑;
一旦那两个 fixture 集没新增,运载发射就实时数据 0 信号。
expert/X/scripts/scrape.py 的账号清单加 12-15 个国外火箭账号(@SpaceX / @rocketlab / @blueorigin / @Firefly_Space / @virgin_orbit / @relativityspace 等)
+ 国内火箭(@iSpaceCN / @LandSpace 等);ontology 已经有运载发射词典支持。预计 半天。
scripts/import_harnessfarm.py 用 JsonlSource 读 HarnessFarm jsonl 时,
RawEvent.source 字段被 jsonl 里的 publisher 名(AST SpaceMobile / Apple / MediaTek …)整个覆盖了,
丢了"HarnessFarm · "前缀。C 路新 source 已修。
WHERE source LIKE 'HarnessFarm%',要按 url 域名(apnews/techcrunch/cnbc)挑;
报表 / 数据视角面板的 "数据源" 分布饼图会把 HarnessFarm 拆成 N 个小切片。
'HarnessFarm · ' ;
或者 接受现状(不影响 decide() 正确性, 只影响反查 UX),作为"已知历史伤疤"留着。
建议后者。预计 5 分钟 / 接受。
satagent ingest --text "..." --source 公司公告 --url ... --occurred-at ...;
operator 看新闻 → 切终端 → 拼参数 → 跑命令,一条事件十几秒。
skills/text-ingest-template:URL → title / source / occurred-at 抽取模板 + 5 行复用脚本。
预计 2-3 天 (含飞书 bot)。
把 §3 的 5 个问题排进时间线, 同时把后续接入候选(MDA / VOYG / CRS / SpaceX briefing)放进 中期。近期把 P0 #1 X-SQLite 日期格式先修, 这是 70% events 时间字段的正确性问题。
public/HarnessFarm-skills/ 13 个目录 + public/HarnessFarm-satellite-agent/ 1 个 + 顶层 5 zip + 1 xlsx,共 20 项(续 12 补全)。
按状态分类:✅ 入源 / vendor · ⏳ 待接入 · ⏸ 冗余备份。
续 11 vendor 4 工具;续 12 解耦 2 运行时数据到 expert/data/;
续 14 写 InvestorManifestSource 通杀 4 投资者 manifest,events 521 → 855 (+334)。
续 16 P1 已修:扩 SEED 加 13 家境外卫星公司 (MDA / VOYG / CRS / Iridium / Viasat / SES 等) + ontology 加 25 英文 thread 关键词 + company_threads 加 alias-fallback + DB sync 20→60 + 446 events reclassify,InvestorManifest 命中率 0% → 100%,整体 mainline 命中率 20% → 68.8%。
续 17 续接入:解压 MDA_Interim_Quarterly_Reports.zip + VOYG⭐️.zip 到 expert/data/archives/ → 写通用 generate_archive_manifest.py 从文件名提 metadata 生成 schema A manifest → 走 InvestorManifestSource ingested +32 (MDA 21 + VOYG SEC 11) · events 855 → 887 · 100% 命中 · 删 2 个 shock-events 冗余 zip · public/ 合入率 12/20 → 12/18 = 67%。
续 18 P3.1 路线 B 摸底改路:原本 3 项 xlsx/PDF 预设走 LLM, 摸底发现 MDA xlsx (11 sheets) + HAWK/LUNR xlsx (8 sheets) 是结构化表格 — 写 extract_archive_xlsx.py openpyxl 直接抽 events (MDA 02_季度趋势 / 04_叙事演变 / 08_会议证据 共 27 + HAWK 13 + LUNR 60) → 走 InvestorManifest schema A 入 +100 events 全 100% 命中 (LUNR 60 → 运载发射 / MDA 27 → 终端 / HAWK 13 → 运营支撑) · events 887 → 987 · 命中率 69.9% → 72.9% · public/ 合入率 12/18 → 14/18 = 78%。
续 18 P3.2 SpaceX briefing PDF Kimi Coding 抽取:加 LiteLLMClient.user_agent + 通用 SATAGENT_LLM_USER_AGENT env 变量 — 不在代码 hardcode 任何 vendor 白名单 UA, operator 自评 TOS 后选 UA(智谱 Coding 限额未恢复, 改用 Kimi For Coding 端点 K2 模型, UA="KimiCLI/1.5" 通过验证); extract_spacex_briefing.py 用 pypdf 解 10 页 / 3066 chars + streaming LLM 抽 8 events (Kimi K2 thinking 慢, non-stream 易触发 SDK timeout, 必须 streaming) · ingested +8 events 100% 命中 LAUNCH_VEHICLE + 多主线分流 (3 OPS / 2 CN / 2 TERM / 2 CHIP) · events 987 → 995 · 命中率 72.9% → 73.2% · public/ 合入率 14/18 → 15/18 = 83% (剩 orbit-wars.zip 是 mini-agent 模板非数据)。
续 18 P3.3 D V2 真 LLM E2E 出报告:跑 satagent validate --compare-llm 96 corpus + Kimi K2 (43:08 wall / 77 escalate 80.2% applied) → 反预期发现 overall 29.2% → 21.9% (-7.3pp ⚠), thesis_impact +16.7pp / strategy +8.4pp 正向, 但 threads -14.1pp / thread_in_focus -18.8pp 退步 (K2 保守过头覆盖 rules 多主线召回);3 fixed / 10 regressed / 65 unchanged-fail;产出 reports/validation-d-v2-2026-06-10.md + operator analysis reports/d-v2-analysis-2026-06-10.md 含 3 修复路线 (合并不替换 threads / 改 escalate 门 / improve prompt few-shot) · baseline 凿实 29.2% (之前粗算 27%), 路线 1 是下一轮最高 ROI。
续 18 P3.4 路线 1 实施 + D V2 round 2 转正:改 classify_with_llm threads 从 override → union mode (default) (env SATAGENT_LLM_THREADS_MODE 控制双模式), audit 加 threads_mode / llm_threads / added_by_llm 字段; 重跑 D V2 96 corpus overall +2.0pp 转正 (29.2% → 31.2%): threads -14.1pp → +1.4pp ✅ (+15.5pp 改善), thread_in_focus -18.8pp → 0.0pp, regressed 10→2 (-8), fixed 3→4 (+1), unchanged-pass 18→26; thesis_impact +14.6pp / strategy +9.4pp 保持正向; 测试 400 passed (新 union mode test + monkeypatch 4 legacy override test);路线 1 假设完全验证 — K2 不熟 ontology 误删多线是 round 1 root cause, union 修完。
续 18 P3.5+P3.6 路线 2+3 + 跨 provider 跑通:路线 2 把 DEFAULT_MAX_THREADS 3→4 (5 主线项目 3 主线召回是合理的,4 才算 over-fire);路线 3 重写 _SYSTEM_PROMPT 列全 5 主线 + 各自 few-shot 关键词 + 明确"保留 rules_hint 已给的主线" — **修预存 prompt bug** (原 prompt 写"产业有且仅有四条主线", 续 6 已加第 5 主线运载发射, K2 严格 follow drop 它);**R3 Kimi K2 跑出 +8.3pp** (fixed 4→10, 全 4 字段正向);P3.6 跨 provider 切智谱 GLM-4.6,修 response_format 不兼容 bug (`drop_params=True`),**R4 智谱跑出 +13.5pp 🏆 历史最佳** (rules 29.2% → +LLM 42.7%, thesis_impact +24.0 / strategy +19.8 / fixed 16);4 rounds 累计 20.8pp 净改善(R1 -7.3 → R4 +13.5);智谱中文友好 native 优势,K2 backup → reports/d-v2-rounds-1-to-4-summary-2026-06-10.md。
当前 12/20 = 60%(6 入源 / 4 工具 vendor / 2 冗余备份)。
剩 6 待接入 (VOYG-cust 295 行 source_date 全空 0 入 / HAWK-LUNR / SpaceX briefing / 4 顶层归档),
路线 B LLM 抽取处理时间缺失类。
| 目录 | 状态 | 体量 | 说明 |
|---|---|---|---|
| HarnessFarm-satellite-agent/ | ✅ 入源 + vendor | 205 case | 另一个并行 4 主线 satellite-agent (LeadResearchAgent + LLMFactExtractionAgent + source-backed corpus) C 路 HarnessFarmSource 接入 · 续 12 解耦: jsonl 从 public/ 副本到 expert/data/harnessfarm/,source 默认 path 已切;public/ 副本可删 |
| commercial-space-...-shock-events/ | ✅ 入源 + vendor | 21 events | 人工策展 21 条近 5 年商业航天冲击事件 csv D 路 ShockEventsSource 接入,入 events 20 条 · 续 12 解耦: csv 从 public/ 副本到 expert/data/shock_events/,source 默认 path 已切 |
| collect-investor-meeting-materials/ | ✅ vendor | 672 行 | 投资者会议 (earnings/IR/AGM/conference/webcast) → expert/collectors/investor/satagent collect investor --companies "RKLB Rocket Lab, ..." · 一次一家迭代 · 产物落 agent/data/collected/investor/<run-ts>/ |
| collect-customer-intelligence-materials/ | ✅ vendor | 308 行 | 客户合同 / 招投标 / usaspending awards 抓取 → expert/collectors/customer/satagent collect customer --companies "VOYG Voyager Technologies" · 一次一家迭代 |
| international-financial-reports/ | ✅ vendor | 586 行 | 非美上市公司财报 (年报 / 半年报 / 季报) → expert/collectors/intl-reports/satagent collect intl-reports --discover-only · 硬编码 ETL/TSAT/GILT |
| sec-filing-downloader/ | ✅ vendor | 908+378 行 | SEC EDGAR 10-K / 10-Q / 修订 / IPO 历史 → expert/collectors/sec/satagent collect sec --companies "RKLB Rocket Lab, PL Planet Labs" · 一次多家 · smoke 通 · 12KB zip 产出 |
| commercial-space-...-shock-events-source-materials/ | ⏳ 待接入 | 53 行 + 50 原文 | shock-events 的原始素材库 — 37 news URL records + 13 官方 html 素材已被 events.csv 抽完,接入价值低,留作"事件 → 原文"反查通路 |
| crs-investor-meeting-materials/ | ✅ 入源 | 100 → 92 events | Carpenter Technology Corporation (CRS, NYSE) 投资者会议资料包 续 14 InvestorManifestSource schema A · ingested 92 (7 FAIL filtered) |
| mda-investor-meeting-materials/ | ✅ 入源 | 192 → 94 events | MDA Space Ltd. (TSX:MDA) 投资者会议资料包 续 14 InvestorManifestSource schema A · ingested 94 (94 FAIL filtered, MDA 早年材料挂多) |
| mda-voyg-crs-financial-agent-output/ | ✅ 入源 | 165 → 107 events | MDA + VOYG + CRS 三家 financial-agent 统一 manifest 续 14 InvestorManifestSource schema C · ingested 107 · 用 fiscal_year+period 推季末日期 |
| voyg-investor-meeting-materials/ | ✅ 入源 | 63 → 41 events | Voyager Technologies (VOYG, NYSE) 投资者会议资料包 续 14 InvestorManifestSource schema A · ingested 41 (21 FAIL filtered) |
| voyg-customer-intelligence-materials/ | ⚠ 0 入 (无日期) | 296 → 0 events | VOYG 客户情报 — usaspending normalized awards 续 14 InvestorManifestSource schema B · ingested 0 · 295/295 行 source_date 全空 → 全 filtered. 下轮路线 B LLM 抽 PDF/JSON 推断时间 / 或加 fallback date 参数 |
| hawk-lunr-report-packages/ | ⏳ 待接入 | 717 KB | HAWK + LUNR 报告包 (两家 SPAC / IPO 公司, 含 ISR 卫星 / 高超声速等) zip 内文未解压看, 接入前需 unzip 确认 schema |
| spacex-orbital-ai-compute-briefing/ | ⏳ 待接入 | PDF + PPTX | SpaceX 轨道 AI 计算 S1 简报 — 单份长文档 单份 PDF/PPTX, 人工 review 挑句 / 走 Text 源单条投比写 Source 划算 |
| ↓ 续 12 摸底新发现 · public/HarnessFarm-skills/ 顶层 6 个零散归档(之前 §5 漏列) | |||
| MDA_完整中文投研分析报告.xlsx | ⏳ 高价值 | 66 KB | ⭐ 中文投研报告 — MDA Space 的中文版完整投研分析,跟 wiki 知识库结构最接近 路线 B · LLM 抽取走 expert-wiki-ingest pattern · 优先级高于一般 PDF |
| MDA_Interim_Quarterly_Reports.zip | ✅ 续 17 入源 | 6 MB | MDA 21 个季度财报 PDF (2021-2026 Q1-Q3, Interim Financial + MD&A) — 原 mda-investor manifest 0 命中, 是真正补集 解压到 expert/data/archives/mda_quarterly/ · generate_archive_manifest.py --pattern mda-quarterly 生成 manifest · 走 InvestorManifestSource schema A · ingested +21 · 100% 命中终端主线 |
| VOYG⭐️.zip | ✅ 续 17 入源 (SEC 部分) | 16 MB | VOYG 134 文件:SEC raw filings 11 (10-Q/10-K/S-1/424B4/DEF 14A/8-K) + IR 材料 (跟 voyg-investor manifest 副本, 跳过去重) 解压到 expert/data/archives/voyg_archive/ · --pattern voyg-sec --exclude-subtree 'PPT:transcript' · 走 InvestorManifestSource · ingested +11 SEC HTM · 100% 命中运营支撑主线 |
| orbit-wars.zip | ⏳ 待评估 | 7 KB | 3 文件 (README.md / agents.md / main.py) — 是个 mini agent project 模板,不是数据 不属于"数据合入"范围, 可保留作模板参考或忽略 |
| ✅ 续 17 删冗余 | ~17 KB | 已删 — 跟同名目录内容一致 (摸底证实), 目录已被 ShockEventsSource 集成 | |
| ✅ 续 17 删冗余 | ~7.5 MB | 已删 — 跟同名目录内容一致 (摸底证实), 释放 7.5 MB | |
续 12 全摸底发现 public/ 总 480 MB,删除影响 5 类: (1) 4 工具 vendor 副本(可删 · 已在 expert/collectors/)· (2) 2 数据 vendor 副本(本轮已解耦 → expert/data/,public/ 副本可删)· (3) 8 待接入内容包(共 ~145 MB,删了就丢)· (4) 6 顶层零散归档(本表新增 4 行 + 2 冗余备份)· (5) ~290 MB upstream git history(原是 HarnessFarm/-skills.git clone,删了下次 git pull 拉新内容要重 clone)。 推荐分阶段:本轮先解耦 2 数据 + 文档化 6 漏列;public/ 保留作为 upstream snapshot,后续 8 内容包按路线 A/B/C 处理完, 才考虑彻底删。
把 8 个待接入内容包按结构化程度分类,各自走不同的 Source 模式,不要一份份手写 7 个 source.py。
5 个 *_manifest.csv 共 916 行 (CRS 100 + MDA 192 + VOYG inv 63 + VOYG cust 296 + mda-voyg-crs 165), schema 一致(company / ticker / period / event_date / source_url / material_type)。 写 1 个 Source 通杀, 公司 / 事件类型枚举映射在 source 层。
财报 PDF / 投资者 PPTX / SpaceX briefing 这类半结构化长文,不能直接入 events 表(信息密度太低 / 一条事件占好几页)。 走 wiki ingest 抽 entities / concepts / timeline, 再走 seed importer 灌进 SEED_COMPANIES / ontology / labeled_validation。
(1) shock-events 原素材 — 已被 events.csv 抽完, 接入价值低, 留反查通路即可; (2) HAWK/LUNR zip — 未解压看 schema, 公司不在 SEED_COMPANIES 47 家里, 优先级低; (3) SpaceX briefing — 走 Text 源单条投比写 Source 划算。