第 6 视角门户 · 端到端 10 步实跑 · 2026-06-09 首次完整记录

生产链,
一步一步跑给你看

X 推文抓取飞书通知,把卫星 Agent 的 10 步全部跑了一遍。每步先解释"做什么",给出 2-4 个选项让用户决定怎么跑,跑完汇报"结果"和"判断"。本页同时是 data-pipeline-walkthrough skill 的介绍门户 — 把 SKILL.md 的 SOP、6 份归档 md、5 个 follow-up bug 候选全部铺开。

总耗时
~25 min
含 4 轮决策问答
CLI 子命令
10
scrape→ingest→...→notify
归档产物
8 files
SKILL+HTML+6 md
事件基线
376
agent.db events · 本次无新增
ADVICE 基线
27%
corpus v2.0 / 96 sample
follow-up
5
1 个 ⚠⚠⚠ 重要

5 段 data flow 总图

SCRAPE → INGEST → ANALYZE × 4 → ADVICE → DELIVER · Step 10 是沉淀本 skill 不属运行时
SCRAPE
Step 1
x_agent + cookies
INGEST
Step 2
job x-ingest-daily
ANALYZE × 4
Step 3–6
decision / thesis / debate / trigger
ADVICE
Step 7
validate vs ground truth
DELIVER
Step 8–9
report → 飞书 card

launchd 03:00 daily 在 Step 2 那一段每日触发, Step 1 是 operator 手动触发(单次 30-60 分钟,不挂同一条链)。

10 步 逐项 实跑记录

每步:Q&A 决策 → CLI 命令 → 结果表 → 判断与洞察
STEP 1 · SCRAPEX 推文抓取 (expert/X/x_agent)19 sec
做什么
expert/X/x_agent scrape 用 cookies 抓 47 家种子公司最新推文进 x.sqlite3。撞 X 429 后 sleep 900s, 全量 30-60 分钟。launchd 是 daily 但只调 ingest, scrape 由 operator 手动触发
决策点
Step 1 · X 抓取要怎么跑?
试水 2 个高产账号 (推荐) — 3-5 分钟跑完, 能完整演示 scrape→x.sqlite3 链路, 不卡 session
全量 47 账号后台跑 — 30-60 分钟 wall time, 不阻塞
跳过 scrape, 直接 ingest — 用现有 3138 推文
全量 47 账号前台跑 — 锁住 session 30-60 分钟, 不推荐
命令
# 试水: SpaceX + elonmusk, 每账号 30 条
/Users/john/InvesResearch/agent/scripts/run_x_scrape.sh \
  --only SpaceX elonmusk --tweets-per-account 30
结果
账号跑前推文跑后推文增量最新
SpaceX5557+22026-06-03 17:49
elonmuskN/A不在 SEED
判断与洞察
judgement
scrape 链路通了, +2 新推文够走 Step 2 验证增量。SpaceX 最新到 06-03, 说明 X 本身这几天可能也没有大动作。--only 只匹配 SEED_COMPANIES, elonmusk 不在 list (那是公司账号清单) 被静默忽略 — 这是个产品级 follow-up #1。
elonmusk 不在 SEED_COMPANIES 时, log 不报错也不警告 — 用户会以为跑了。10 行代码就能加 warn。
STEP 2 · INGEST抓取入库 (job x-ingest-daily)1 sec
做什么
x.sqlite3 流式读最近 500 条推文 → reply/retweet 过滤 → ontology 词典 103 词匹配打 thread+impact → 按 event_id 哈希去重 → 写 agent.db.events。这一段就是 launchd 03:00 daily 跑的链路。
决策点
Step 2 · ingest 怎么跑?
跑全量 (推荐) — 复现生产 cron 行为, 看真实判重
--since 7d 增量 — 输出更干净但与生产链路径不同
--dry-run 预览 — 不写库, 适合检查 ontology 命中
命令
# 完全等价 cron (job 内部封装 x-sqlite source)
X_SQLITE_PATH=/Users/john/InvesResearch/expert/X/data/x.sqlite3 \
  /usr/bin/python3 -m satellite_agent.cli job run x-ingest-daily
结果
指标说明
fetched_rows500从 sqlite 拉了 500 行
filtered_reply19reply 过滤
filtered_retweet128retweet 过滤
emitted353喂给 classifier
ingested0新写入 events
duplicates353event_id 哈希命中
events 总数376 → 376无变化
判断与洞察
judgement
SpaceX +2 那两条要么命中过去已入库的 event_id 哈希被判重, 要么不是 original。生产链路验证通过 — 输出和 06-08 / 06-09 cron 完全同形ingested=0 / duplicates=N 不是 bug, 是 "x.sqlite3 没新增" 的真实信号。
fetch --source CLI 不支持 x-sqlite, 只能走 job run x-ingest-daily 间接调 — 这是 follow-up #2。
STEP 3 · DECISION双视角决策周报 (CEO + 投资)2 sec
做什么
Phase 3a 双视角决策周报。规则版 V1.1 baseline。CEO 视角: 主线评分变化 + 战略建议 + 反方矛盾 + 证伪触发 + Quality Check。投资人视角: 主线相对热度 + 公司位势矩阵 + 仓位调节信号。
决策点
Step 3 · decision 怎么跑?
both 双视角 md (推荐) — 默认 7 天窗口 + 4 周基线, CEO + 投资两份
html 导出到文件 — 浏览器可看的报告
30 天窗口拉长 — 信号饱和但陪干扰高
命令
/usr/bin/python3 -m satellite_agent.cli decision \
  --view both --window 7 --format md
结果
窗口2026-06-02 → 06-09 (7 天)
窗口内事件数0 · 最近事件都在 6/2 之前
5 主线本周评分全 +0.00 (窗口空)
上周回看核心网 +2.25 / 运营支撑 +1.00 / 芯片 -0.80 / 终端 -0.10
仓位调节核心网/运营支撑=, 终端/芯片/运载=
公司位势矩阵完整 4 主线 × 12 公司 composite 排名
判断与洞察
judgement
决策规则版 V1.1 跑通, 但窗口空 — 暴露真实数据节奏: scrape 即使有 +2 也未必能进当前 7 天决策窗口。这不是 bug 是窗口现实。如果想看 events 真正驱动决策, Step 8 报告里用 30 天窗口就能看到。

归档 → agent/reports/walkthrough-2026-06-09/03-decision-both-7d.md · 148 行

STEP 4 · THESIS主线评分 baseline 刷新1 sec
做什么
thesis --refresh 重算 5 主线 thesis_state baseline 并写库。建议 30 天窗口建初始 baseline, 否则 7 天太短常为 0。
命令
/usr/bin/python3 -m satellite_agent.cli thesis --refresh --window 30
结果
主线thesis 分资金净流(亿)事件数方向
核心网3.25+2.44增强
终端0.95+3.85增强
芯片1.200.03增强
运营支撑0.050.02增强
运载发射0.000.00
判断与洞察
judgement
thesis_state 表已写入 baseline, 下次 decision 7 天窗口会用这个对比基准。运载发射 0 事件 — 06-08 刚加进 SEED_COMPANIES 33→47 的 14 家火箭/制造类公司还没事件流进来, 符合预期。核心网 3.25 是 4 主线最确凿的, 这个数字会在 Step 5 debate 和 Step 8 report 中反复出现。
STEP 5 · DEBATE多 agent 辩论 (Bull / Bear / Judge)3 sec
做什么
对指定主线跑 Bull/Bear/Judge 三方辩论。规则版从 events 抽 evidence 评分; --llm 版走 LiteLLM 调真模型。本次无 .env 走规则版。
决策点
Step 5 · debate 跑哪条主线?
核心网 — thesis 分最高 3.25, 4 事件多空都能抽 evidence
终端 — 事件最多 (5), 资金最高 (+3.8 亿)
运营支撑 — 事件最少 (2), 暴露 evidence 不足信号
三条都跑 (输出长) — 逐个跑 核心网/终端/芯片 三份辩论供对比
命令
# 30 天窗口跑 3 条
for t in 核心网 终端 芯片; do
  /usr/bin/python3 -m satellite_agent.cli debate \
    --thread "$t" --window 30 --format md
done
结果
主线事件BullBearmargin裁决置信度 ×
核心网45.650.00+5.65看多1.30
终端56.502.75+3.75看多1.12
芯片32.001.30+0.70分歧0.96
判断与洞察
judgement
核心网 bear=0 意味着规则版从 events 里抽不到任何 bear evidence → 无脑看多, 置信度顶到上限 1.3。这是规则版的"缺反方"信号,提示需要 LLM 版来补齐反方论点。芯片 margin=0.7 落在分歧区间, 置信度 0.96 < 1, 与 thesis 1.2 有张力 — debate 是独立第二意见, 不读 thesis_state.score。
STEP 6 · TRIGGER + ALERT硬阈值触发 + 风险预警发现 bug
做什么
trigger set/check 给主线挂硬阈值, 命中即写 alerts 表; alerts 查询窗口内已有警报(风险维度 events + trigger 写的)。本次现场挂一个 demo trigger 走完整链路, 跑完即删避免污染生产。
决策点
Step 6 · 要不要现场挂一个示例 trigger?
挂示例后 check + alerts (推荐) — 给核心网 thread_sentiment_below=1.0 完整链
跳挂设, 只跑 alerts — 不能演示 check_triggers 写 alerts
玩 trigger 生命周期 — 挂会触发的阈值演示 alerts 表产出
命令
# 挂 → check → alerts → delete
satagent trigger set --thread 核心网 --type thread_sentiment_below \
  --params '{"thread":"核心网","threshold":1.0,"window":7}' --severity med

satagent trigger check    # 立即扫描
satagent alerts --window 30
satagent trigger delete --thread 核心网 --type thread_sentiment_below
结果
trigger核心网 thread_sentiment_below threshold=1.0
check 触发本窗口 sentiment +0.00 < 1.00 → 触发 ⚠ 假警报
alerts 30 天2 条历史风险事件 (id=5 海格芯片推迟, id=7 海事供应商被调查)
清理trigger delete ✓ · 已清空
判断与洞察 ⚠⚠⚠
PRODUCT BUG CANDIDATE
这次跑暴露了一个真实问题: thread_sentiment_below 看的是 7 天窗口内 events 实时 sentiment, 而 不是 thesis_state.score。窗口空 (无新 events) 时 sentiment=0 必触发, 即使 thesis_state.score = 3.25 (核心网真实状态健康)。生产环境如果挂了这个 trigger, 每天 03:00 cron 跑一次, 窗口一空就报警一次 — 完全是噪声。

建议: 改成读 thesis_state.score(持久化的主线判断)或加 min_events 兜底(窗口内事件数 < N 时不触发)。已纳入 follow-up #3 [最高优先级]
STEP 7 · VALIDATEADVICE D V1 对照 (corpus v2.0 / 96 sample)5 sec
做什么
跑 corpus v2.0 (96 样本) 对照, 4 字段 (threads / thesis_impact / strategy / thread_in_focus) exact/partial/mismatch 矩阵 + 反推 top-3 盲点。这是 ADVICE D V2 真 LLM compare 的天然 baseline
命令
/usr/bin/python3 -m satellite_agent.cli validate --format md
结果 · 4 字段总览
字段exactpartialmismatchn/aexact_ratepartial_score
threads2616292537%48%
thesis_impact53043055%55%
strategy51045053%53%
thread_in_focus330362748%48%
Overall (≥3 字段 exact)26 / 9627%V1 目标 ≥ 50%
反推 top-3 盲点
排名字段次数agent → gthint
1strategy×18观察 → 进入启发式太保守
2thesis_impact×17中性 → 增强漏判正向
3thesis_impact×17增强 → 中性错判正向
判断与洞察
judgement
跑通完美对齐 memory 06-09 baseline。规则版盲点已凿实: strategy 太保守impact 双向误判。这两个盲点正是下一轮 ADVICE D V2 真 LLM compare 的攻击目标 — 如果 LLM 能把 overall 从 27% 拉到 50%+, 就证明 LLM 兜底有价值。

归档 → agent/reports/walkthrough-2026-06-09/07-validate.md · 详细 96 行对照表

STEP 8 · REPORT投研周报 (30 天窗口)1 sec
做什么
出投研周报 (默认 7 天 / 本次用 30 天看到更多 events)。结构: 5 主线评分矩阵、thesis 变化、关键事件分线、风险预警、被点名公司、下周跟踪清单。
命令
/usr/bin/python3 -m satellite_agent.cli report --window 30
结果
窗口2026-05-10 → 06-09 (30 天)
事件数8
5 主线净分核心网 3.25 / 芯片 1.20 / 终端 0.95 / 运营支撑 0.05 / 运载发射 0.0
风险预警2 条 (海格芯片推迟 + 海事终端被调查)
被点名公司6 家 (中国卫通 / 震有 / 上海瀚讯 / 华力创通 / 海格 / 复旦微电)
下周跟踪清单9 项 (D2C 标准 / 信关站招标 / 射频芯片量产 / ...)
判断与洞察
judgement
周报完整、结构清晰。Step 4 thesis 30 天 refresh 写入的 score 在这里直接复用, 5 主线净分一致 — 验证了 thesis_state 是跨命令的共享状态层。如果 Step 4 不跑, 这里 thesis 一栏会全 0。
STEP 9 · NOTIFY飞书 webhook 推送测试跳过实发
做什么
notify-test --webhook ... --card 发测试卡片到飞书自定义机器人 webhook。验证 EH-3 飞书送达链路。卡片底部强制带"不构成投资建议"免责声明。
决策点
Step 9 · 飞书 webhook 怎么办?
跳过实发 (推荐) — 在 skill 里记完整用法, 用户填 webhook 随时可跑
现场贴 webhook URL — 风险: shell history + 仓库 log 会留底
看 notify.py 代码不跑 — 描述 card 结构 + retry / timeout
命令模板 (skill 中保留)
satagent notify-test \
  --webhook 'https://open.feishu.cn/open-apis/bot/v2/hook/XXX' \
  --card
判断
judgement
webhook URL 是机密, 不应进入仓库或 shell history。最安全做法: .env (gitignored) → 程序 readenv → 注入notify.py 当前不支持签名模式, 是 follow-up #4。
STEP 10 · 沉淀写成 skill + 归档 + 写本网页手工
做什么
把这趟巡检沉淀成可复用产物: skills/data-pipeline-walkthrough/SKILL.md (383 行 SOP) + skill.html (321 行 skill 介绍页) + agent/reports/walkthrough-2026-06-09/ 6 份 md (硬证据) + 本网页 walkthrough.html (用户视角全程门户)。
归档清单
skills/data-pipeline-walkthrough/ ├── SKILL.md 383 行 · 10 步 SOP + trigger 清单 + 已知坑 + 时间预算 + 跨节点回归测试 └── skill.html 321 行 · skill 介绍 + 10 步 + bug 候选 + 数字概览 agent/reports/walkthrough-2026-06-09/ ├── 03-decision-both-7d.md 148 行 · CEO + 投资双视角输出 ├── 05-debate-核心网.md 看多 ×1.30 ├── 05-debate-终端.md 看多 ×1.12 ├── 05-debate-芯片.md 分歧 ×0.96 ├── 07-validate.md 详细 96 sample 对照表 └── 08-report-30d.md 8 events + 风险 + 跟踪清单 /(根目录) └── walkthrough.html 本页 · 第 6 视角门户

ADVICE 对照表 baseline · 27%

规则版 baseline 已凿实, 留 D V2 真 LLM compare 拉升 — Step 7 输出的硬数字, 与 06-09 memory baseline 完全一致

为什么 27% 是有意义的 baseline

corpus v2.0 (96 sample) = 全球 30 + wiki/timeline 抽 70, 跨 5 主线全覆盖 (运载发射 31 首次大规模 ground truth)。规则版 V1.1 在扩 corpus 后从 60% 跌到 27%, 是因为之前 10 sample 的 corpus 不够暴露盲点。

27% 不是退化, 而是更诚实的 baseline。它精准量化了规则版的 3 个盲点 (strategy 太保守 / impact 双向误判), 给 D V2 LLM compare 提供了可对比的对照面。

本次 沉淀产物

8 个新文件 — 0 commits 留待用户决定打包

1) Skill 主体 · skills/data-pipeline-walkthrough/

2) 归档硬证据 · agent/reports/walkthrough-2026-06-09/

3) 用户视角门户 · 本页

新生 skill · data-pipeline-walkthrough

2026-06-09 首次落定 · type=process · 完整 SOP 沉淀

这是什么 skill

类型: process (流程类) · 不是某一类问题的回答器, 而是把一条固定但需要决策的多步骤流程脚本化。

核心价值: 用户说"逐步跑一遍" 时, Claude 不会瞎跑 — 每步先解释 + 给选项, 用户拍板后再执行, 跑完汇报。

沉淀格式: 与现有 expert-wiki-ingest skill 同形 — SKILL.md 当 SOP + skill.html 当介绍页。

怎么调起

用户说以下任一句话, skill 自动激活:

"逐步跑一遍整个数据处理流程"
"走一遍卫星 agent 数据流"
"端到端跑一次 agent"
/data-pipeline-walkthrough

SKILL.md §1 列了完整 trigger 模式 + 不该激活的反例。

时间预算

Step 1 scrape (试水)
3s
Step 1 scrape (全量)
30-60 min
Step 2 ingest
1s
Step 3 decision
2s
Step 4 thesis
1s
Step 5 debate × 3
3s
Step 5 debate (LLM)
30s
Step 6 trigger+alerts
1s
Step 7 validate
5s
Step 7 (--compare-llm)
~2 min
Step 8 report
1s
Step 9 notify-test
1s
合计 (最快路径)
~15s
合计 (全量含 LLM)
~65 min

跨节点回归用法

每 30 / 90 天复跑本 skill, 比对硬证据:

  1. diff agent/reports/walkthrough-2026-06-09/ agent/reports/walkthrough-2026-09-09/
  2. 看 6 份 md 对应章节差异 — 是数据增长(正常)还是结构异常(回归)
  3. Step 7 validate 的 overall_exact 必须 单调不降, 否则规则版退化警告

本次发现 · 5 个 follow-up

不在本 skill 解决, 已写入 SKILL.md §8 + memory · 排队进 NEXT-STEPS

#1 Step 1 · scrape 低 / 10 行代码

--only 不在 SEED_COMPANIES 时无 warn 日志。用户以为跑了, 实际被静默忽略。

FIX → x_agent/cli.py scrape() 加 unknown account warn

#2 Step 2 · ingest CLI

fetch --source CLI 不支持 x-sqlite, 只能走 job run x-ingest-daily 间接调。手工调试时需要额外封装。

FIX → satellite_agent/cli.py fetch() 加 x-sqlite source

#3 Step 6 · trigger 假警报 ⚠⚠⚠ 最高

thread_sentiment_below7 天窗口内 events 实时 sentiment 而非 thesis_state.score。窗口空时 sentiment=0 必触发, 即使 thesis 在 3.25。生产环境每天 03:00 cron 会噪声报警。

FIX → 改读 thesis_state.score 或加 min_events 兜底

#4 Step 9 · 飞书无签名

notify.py 当前只支持无签名 webhook 模式。安全性低于飞书签名校验模式。

FIX → notify.py 加 sign HMAC-SHA256 (.env 配 secret)

#5 Step 7 · ADVICE 27% baseline 已排期

规则版盲点已凿实, 留 D V2 真 LLM compare follow-up。用户填 .env LLM key 即可跑 validate --compare-llm 拉对比报告。

FIX → 见 NEXT-STEPS.md ⭐D V2 真 LLM E2E

关联 资源

6 个视角门户横向跳转 + 文档树

6 视角门户

核心文档