# InvesResearch · 下一步开发计划

> 制定日期 **2026-06-03** · 时间锚:今天刚完成与远端 15-commit 的 fast-forward sync, Phase 2.1 LLM 兜底 / Phase 3a 决策层 / Phase 3b PE 估值 / Phase 3c 多格式导出 / 多 Agent 辩论 skeleton / observability / API 鉴权 / Docker / CI 全部落盘。
>
> 配套可视化:[`next-steps.html`](./next-steps.html) · 文档总览:[`docs.html`](./docs.html) · 数据流转:[`data-flow.html`](./data-flow.html)
>
> 关联 PRD:[`agent/PRD.md`](./agent/PRD.md) · [`agent/docs/roadmap.md`](./agent/docs/roadmap.md) · [`web/docs/product-prd.md`](./web/docs/product-prd.md) · [`web/docs/engineering-prd.md`](./web/docs/engineering-prd.md) · [`web/docs/roadmap.md`](./web/docs/roadmap.md)

---

## 1. 当前状态盘点

### 1.1 已交付清单(2026-06-03)

**Agent 端(全部跑通,64 tests 通过)**

| 阶段 | 内容 | 主要模块 |
|---|---|---|
| ✅ Phase 1 | rules-based 输入侧 + 周报 + 30 条合成集回归 100% / 25 条真实集 64% | `classifier.py` `ontology.py` `report.py` `regress.py` |
| ✅ Phase 2 | Source 抽象 + JSONL/Text/RSS · 中文金额提取 · 抓取管线 | `sources/{base,jsonl,text,rss}.py` `extract.py` `ingest_pipeline.py` |
| ✅ Phase 2.1 | LLM 兜底层 · OpenAI/Claude 兼容 provider · 触发门 conf&lt;0.55 或 ≥3 thread · stub 验证真实集 64%→80% | `llm.py` |
| ✅ Phase 3a | 双视角决策周报(CEO 主驱动+战略 / 投资位势+仓位信号) | `decision.py` |
| ✅ Phase 3b | PE 估值映射(透明可覆盖)+ 市场模型动态视图 | `valuation.py` `market_model.py` |
| ✅ Phase 3c | HTML/CSV 零依赖导出 + DOCX/PPTX 可选 extra | `export.py` |
| ✅ 横切 | thesis 实时评分 + 风险预警 · Prometheus /metrics · Bearer token 鉴权 · Docker · GitHub Actions CI · 多 Agent debate skeleton | `thesis.py` `observability.py` `api.py` `debate.py` |

**Web 端**

| 类别 | 内容 |
|---|---|
| ✅ 已交付 | 落地首页 + 投研工作台 demo(模拟数据)+ 4 张架构 SVG + 3 份 PRD + Cloudflare Pages 部署 pipeline |
| ❌ 未交付 | 真实后端(数据层 / 工具层 / 编排层 / 接口层 / 运行底座 / eval 数据集 / CI) |

### 1.2 剩余未做项(2026-06-02 暂停时盘点的 4 条中)

| 项 | 状态 | 说明 |
|---|---|---|
| ~~A. 真实 HTTP 数据源~~ | ✅ 远端 sync 已交付(`66ec1b7` RSS) | 通用 publisher-agnostic, 但当前环境出网被拦, 待放开 egress 跑闭环 |
| ~~B. Phase 2.1 LLM 兜底~~ | ✅ 远端 sync 已交付(`213eff3` `5ad5131`) | stub 验证 64%→80%, 真 key 跑全量待 |
| **C. 前端打通 web/app.html → 真实 API** | ❌ 仍待 | sync 未触 web/, 这是本轮头号 |
| ~~D. Phase 3b 估值~~ | ✅ 远端 sync 已交付(`6575be7`) | 透明 PE 法,假设可覆盖 |

---

## 2. 下一轮开发清单(优先级排序)

下面 4 条按建议执行顺序排:**先 C 闭环 demo → 再 1 公司卡片扩容 → 然后 2 debate 填肉 → 最后 3 真实 RSS 上线**。每条独立可起,但 C 是用户最早能直观看到价值的一条,建议放最前。

### 2.1 优先级 P0 · C 前端打通 web/app.html

**现状**

- `web/app.html` 是完整可交互的纯前端 demo, 内置模拟数据, 五层接口示例全在前端闭环
- agent 端已有 Phase 3a 决策层的 REST 端点:`/decision/weekly` `/events` `/thesis/state` `/alerts` `/valuation` 等
- 两端之间没有任何代码连接, 用户看不到"真"的决策结果

**目标**

把 `web/app.html` 里的模拟数据切到真实 agent API, 让用户在浏览器里就能看到 agent 跑出来的双视角决策。**最小闭环**:CEO brief + 投资 brief + 事件列表 + 风险预警 4 个区域用真数据。

**任务拆解**

1. 设计 CORS 策略 · agent FastAPI 加 `fastapi.middleware.cors.CORSMiddleware`, 暴露给 `web/` 的本地或线上 origin
2. 在 `web/app.html` 顶部加 `API_BASE` 配置(默认 `http://127.0.0.1:8000`, 可由 URL `?api=` 覆盖)
3. 写 `fetchDecision(view)` `fetchEvents(filter)` `fetchThesisState()` `fetchAlerts()` 4 个 async 函数, 替换模拟数据
4. 错误处理 · 离线 / 后端宕机时 fallback 到现有模拟数据 + 顶部 banner 提示
5. 加载状态 · 各区块独立 loading skeleton
6. (可选)加可选 Bearer token 输入框, 配 `SATAGENT_API_TOKEN` 部署时用

**风险 / 待决策**

- **跨域部署**:web 在 Cloudflare Pages, agent 在本地或自托管 → 需用户决定 agent 暴露方式(ngrok / VPS / 不暴露只走本地)
- **数据敏感度**:真实 events 可能含未公开公司分析, 上线前要拍板是否所有访问者可见
- **schema 漂移**:agent 端 14+ 端点已稳定但仍迭代, 前端要松耦合(用可选字段 + 兼容旧 schema)

**验收**

- [ ] 本地 `uvicorn satellite_agent.api:app --reload` + 浏览器打开 `web/app.html?api=http://127.0.0.1:8000` 能看到 4 个区块全部加载真数据
- [ ] 关掉 agent 后页面优雅降级到 mock + 顶部红条警告
- [ ] CEO brief / 投资 brief 至少 1 个真实驱动变量来自 `samples/events.jsonl` 灌入的数据
- [ ] `web/DEPLOY.md` 末尾追加"如何配 API_BASE"小节

**预估工期**:2-3 天 · 单人 · 不阻塞其他项

---

### 2.2 优先级 P1 · 公司卡片扩容 6 → 20

**现状**

- `seed.py` 当前只塞 6 家公司(中国卫星 / 海格通信 / 信科移动 / 中国卫通 / 中兴通讯 / 华力创通)
- companies 表的 schema(13 列:name / thread / products / customers / aliases / score / orders / peer_rank / peer_rank_delta / last_quarter_revenue_cny_yi / ...)已经 sync 时扩好
- 公司主线反哺(`enrich_with_company_threads`)在 Phase 2 落地, 命中公司越多, 反哺质量越高

**目标**

把卫星互联网产业链上下游核心标的扩到 20 家, 让公司命中率从当前的"低个位数 % "提到"两位数 %", 配合 valuation 模块给出更全面的位势矩阵。

**候选名单**(按主线分组)

| 主线 | 候选公司 |
|---|---|
| 核心网 | 中兴通讯(已)/ 烽火通信 / 信科移动(已)/ 中国卫通(已) |
| 终端 | 海格通信(已)/ 华力创通(已)/ 中国卫星(已)/ 上海瀚讯 / 七一二 |
| 芯片 | 海格通信(已)/ 振芯科技 / 国博电子 / 复旦微电 / 国光电气 |
| 运营支撑 | 中科星图 / 航天宏图 / 超图软件 / 北斗星通 / 合众思壮 |
| 卫星制造 | 中国卫星(已)/ 上海航天电子 / 航天电子 / 航天发展 / 信科移动(已) |
| 卫星互联网总集 | 时空道宇(未上市)/ 星网集团(未上市)/ 国电高科(未上市)/ 中国电信卫星 |

**任务拆解**

1. 每家公司写 `seed.py` 里的 dict(name / thread / products / customers / aliases / score / moat / risk / 至少 1 条 orders 历史 / last_quarter_revenue_cny_yi)
2. 找未上市标的(星网 / 时空道宇 / 国电高科)如何在 valuation 里跳过(`peer_rank` 仍可参与位势矩阵)
3. aliases 词典补全(简称 / 英文 / 旧名), 命中召回提升
4. 测试 · 新增 `tests/test_seed_expansion.py` 验证 20 家全部能从 events 文本里被 `match_companies` 命中
5. 真实集回归 · 25 条真实集重跑, 验证公司命中率提升(预期 +30%)

**风险 / 待决策**

- **数据真实性**:moat / risk / orders 字段如果都用 placeholder 占位, 反而会让用户误以为是真实数据 → 拍板 "种子=占位, 后续覆盖" 的边界, 在卡片上注明数据时间锚
- **未上市标的**:国电高科 / 时空道宇 / 星网 没有公开财务, valuation 是否完全跳过, 还是用产业分析师估算?

**验收**

- [ ] companies 表至少 18 家(含上市 + 未上市)
- [ ] aliases 总计 ≥ 60 个
- [ ] 真实集 25 条重跑, 公司命中率从当前 baseline 提升 ≥ 30 个百分点
- [ ] 新增公司在 `/decision/weekly?view=investor` 输出里至少 5 家进入仓位信号

**预估工期**:3-5 天 · 数据梳理为主, 代码改动小

---

### 2.3 优先级 P2 · debate 骨架填肉(Bull / Bear / Judge 接 LLM)

**现状**

- `debate.py` 是 skeleton(143 行), 3 个角色 `_bull_case` / `_bear_case` / `_judge` 都用 `_default_arg_writer` 拼模板字符串
- 已有端点 `GET /debate?thread=终端`, 输出格式定下来了:`bull / bear / verdict / confidence_multiplier`
- 也就是说"接口契约"和"数据流"都通了, 只差 3 个角色背后的真实推理

**目标**

把 3 个角色接到 LLM provider(复用 `llm.py` 的 OpenAI/Claude 兼容客户端), 让它们读窗口 events 后真实生成论点 / 反论点 / 裁决, 输出可被 `decision.py` 用作 confidence multiplier 反哺到仓位信号。

**任务拆解**

1. 抽象 `ArgWriter` Protocol — 接受 `(stance, topic, evidence) → str`, 让 default 实现保持模板兼容
2. 写 `LLMArgWriter` · 复用 `llm.LLMClassifier` 的 client, 不同 prompt 模板
3. `_judge` 改造 · 接收 bull/bear 两侧文本 → LLM 裁决 → 输出 verdict + 置信度乘数 ∈ [0.5, 1.5]
4. `decision.py` 加可选 `--debate-thread <name>`, 跑完 debate 后把 multiplier 应用到对应公司的仓位信号
5. 测试 · `test_debate.py` 加 stub LLM 验证 round-trip, 无 LLM 时仍用模板(回归保持)
6. 文档 · 给 `debate.py` 加 docstring, 标 prompt 模板设计原则

**风险 / 待决策**

- **成本**:每次 `/debate` 跑 3-4 次 LLM 调用, 高频调用要不要加缓存层
- **裁决偏置**:LLM 是否倾向于给 multiplier=1.0(中性), 需要在 prompt 里强制选边
- **可解释**:verdict 文本要完整保留, 不能只输出 multiplier

**验收**

- [ ] 配 `SATAGENT_LLM_API_KEY` 后 `/debate?thread=终端` 输出真实自然语言论点
- [ ] 无 key 时回退到 default 模板, 不报错
- [ ] `decision.py --debate-thread 终端` 把 multiplier 应用到至少 1 家公司的仓位信号, 输出中可见
- [ ] `test_debate.py` 至少新增 4 个测试覆盖 LLM stub + fallback

**预估工期**:3-4 天 · 主要难度在 prompt 设计

---

### 2.4 优先级 P3 · 真实 RSS 源落地

**现状**

- `sources/rss.py` 是通用 publisher-agnostic 框架, 支持 UA / 重试 / 关键词过滤, 离线 fixture XML 全套测试已过
- 还没有任何真实 feed URL 在用 — 当前环境出网被拦, sync 时已记录"待放开 egress 跑闭环"
- agent README 里只是 placeholder 用法 · 用户需选源

**目标**

选 3-5 个真实 RSS / Atom feed 配进去, 让 `satagent fetch --source rss` 能跑出真数据进 events 表, 验证整条 ingest 链路在真实数据上闭环。

**候选源**(用户需挑)

| 来源 | URL 提示 | 优先级 |
|---|---|---|
| 工信部 RSS | `miit.gov.cn` 各栏目 | 高 · 政策权威 |
| 通信世界 RSS | `cww.net.cn/feed/` | 高 · 产业新闻密集 |
| 中国卫星导航定位协会 | `glac.org.cn` | 中 · 行业垂直 |
| 上交所 / 深交所公告 | 走 API 而非 RSS | 中 · 但 RSS 框架可改造 |
| 公司 IR 页(中兴 / 海格 / 中科星图) | 各公司投资者关系页 | 中 · 单源信号强 |
| 通信产业网 | `ccidcom.com/rss.xml` | 低 · 商业站点 |

**任务拆解**

1. 用户拍板候选源(建议先 2-3 个)
2. 写 `agent/config/rss_feeds.json` · feed 列表 + 默认关键词过滤
3. 修 CLI · `satagent fetch --source rss --config rss_feeds.json` 一次跑全量
4. 加 cron 定时(用户可选 cron / systemd / GitHub Actions 调度)
5. 长期跑测试 · 让 RSS 源跑 1 周, 观察 events 表数据增长 + 失败率
6. 失败重试与去重 · 同一篇文章用 url + occurred_at 去重, 重试 3 次

**风险 / 待决策**

- **出网策略**:当前沙箱 / 公司网络出网被拦, 需用户决定:本地 dev + production 是否同环境
- **法务**:公开 RSS 可抓但商业化要看授权, 用户决定是否接受 placeholder 标注
- **数据噪声**:RSS 拉的可能 80% 是非卫星互联网新闻, 关键词过滤要狠

**验收**

- [ ] 至少 2 个真实 feed 接入,连续跑 7 天 无 crash
- [ ] events 表至少新增 50 条真实事件
- [ ] 真实集失败 case 重检 · 新数据下 LLM 触发率与 stub 估算一致(±5%)
- [ ] `agent/docs/regression-real.md` 追加"真实环境 7 天数据"小节

**预估工期**:2-3 天(不含跑测试的 7 天等待)

---

## 3. 本轮之后的潜在方向

下面这些不在本轮 4 条里, 是更远的方向, 此处只占位, 待本轮完成后再排:

- **D · 多市场延伸** — agent 当前只覆盖卫星互联网, 框架本身可复用到低空经济 / 储能 / 人形机器人等其他主线 · 关键是 `ontology.py` 的领域无关化
- **E · 后端持久化升级** — SQLite → Postgres + Timescale(events 时序数据)+ pgvector(语义检索)· web 端工程 PRD §10 已规划
- **F · web 端真后端落地** — web/docs/roadmap.md 的 24 周计划 · M1 数据层 + L2 工具层 + L4 编排层 + 多空辩论真接 LLM · 与 agent 端 debate 模块可共享
- **G · 接 LangGraph + checkpointer** — web 工程 PRD §3 的多 Agent 编排骨架, 与 agent 端共享 debate 实现
- **H · eval 数据集 + CI 回归** — web M6 验收 ≥ 50 个调研任务 · 与 agent 真实集 25 条对齐
- **I · 增强 PRD EH-1~EH-7 落地** — 2026-06-03 新增[`web/docs/enhancement-prd.md`](./web/docs/enhancement-prd.md),把"常驻 agent + 活工作区 + 主动推送 + 沙箱抓数 + 自定义 Skill + 复杂任务拆解 + 个性化"前移到 Stage 1/2。其中 EH-1(调度子系统)对应**新增 M3.5 里程碑**,EH-2/EH-3 与 M5 合流,EH-4 与 M6 合流。本轮 4 条 P0-P3 不变,但本轮完成后下一轮排期时,EH-1 / EH-2 的 P0 优先级值得让出至少一条空位给它们。

---

## 4. 时间锚与同步频率

- **本文档时间锚**:2026-06-03 — sync 至远端 `a032653`
- **更新触发**:任意一条 P0-P3 状态变更(开工 / 完成 / 阻塞) · 远端有新 commit 进来时校对一遍
- **下一次盘点**:建议 2026-06-17(两周后), 看 P0+P1 是否按计划闭环

---

## 5. 免责声明

本文档列出的所有公司名 / 候选数据源 / 估值假设, 均为研究效率与产品演进的工作记录, **不构成任何投资建议**。仓库内 placeholder 数据请在接实盘前由真实数据覆盖。
