主题
02 — 研报获取层 (Research Report Ingestion)
投研报告从哪来、怎么入库、怎么给 Agent 用
目标 (Goal)
让 Agent 能够基于真实的卖方研报内容做投研推理,不是只看价格和财报。这层要解决:
- 研报从合法、可持续的来源拿到
- 入库后能做全文检索 + 语义检索
- 能与个股、行业、时间维度关联
待研究的 Repos
- [ ] terancejiang/SKILL_financial_report_download — 看它接的是哪些研报源、怎么处理 PDF
- [ ] xiaominghd/crawl_report — 爬虫策略、反爬应对、数据清洗
每个 repo 评审时回答:
- Source:从哪些站点拿数据?(东方财富 / 慧博 / 新浪财经 / Wind / 其他)
- 抓取方式:API / 爬虫 / RSS?反爬怎么处理?
- 格式处理:PDF / HTML / 图文混排?OCR?表格抽取?
- 法律/合规风险:商业 redistribution 的边界
关键决策点 (Open Questions)
Q1. 研报来源的"层级"
研报本身有不同的获取难度和质量:
- 公开免费:上交所/深交所披露文件、上市公司公告 (PDF) — 最干净、最权威
- 半公开:东方财富、新浪财经研报频道 (要爬)
- 付费墙:慧博、Wind、Choice — 商业 license
- 券商直发:通过分仓席位拿到的 PDF — 灰色地带
→ 一期建议:公开 + 半公开,付费墙后续再说。
Q2. PDF 解析方案
研报 80%+ 是 PDF,质量差异巨大:
- A) 结构化抽取:pdfplumber / PyMuPDF + 规则
- B) LLM 视觉解析:Claude / GPT-4V 直接喂 PDF 页面图片
- C) 混合:先用 A 出文本,表格/图表用 B
→ 建议方案 C。研报里表格和图表是关键,纯文本抽取丢信息。
Q3. 入库形态
- 原始 PDF:对象存储 (S3 / MinIO)
- 解析后文本 + 元数据:Postgres
- 向量化 embedding:pgvector / Qdrant / Lance
- 结构化数据抽取 (目标价、评级、EPS 预测) → 关系表,能与一致预期数据关联
Q4. 与一致预期数据的桥梁
研报里的 EPS 预测、目标价 → 应该 NER + 抽取 进结构化表,这样:
- 可以与 Tushare 的一致预期做交叉验证
- 可以追溯"某券商在某天给了多少目标价"
- Agent 可以做 "卖方观点变化分析"
这是研报层与数据层 (01) 的关键耦合点。
Q5. 时效性
研报是 append-only 的时间序列。Agent 在做推理时必须知道:
- "as of date" 是什么 — 不能用未来研报回答历史问题
- 研报的发布时间戳精度(日 / 时分秒)
与上层接口
search_reports(query, code=?, industry=?, date_range=?, top_k=10)
get_report_extracts(report_id) # 结构化抽取的目标价、评级等
get_consensus_from_reports(code, as_of) # 自下而上聚合下一步
- Fetch 两个 repo,看它们覆盖哪些源、解析方案怎么选
- 决定 Q1 的来源层级(一期是否包含付费墙)
- 决定 Q2 PDF 解析栈
- 设计研报 → 结构化抽取的 schema