i
InvesResearch
← 主站 oaf.world

web-backend · 生产化交接

智能投研 REST 服务 · 已上线

在一堆各有缺陷的免费行情/财务源之上,搭一个稳定的统一数据服务:拿真实数据 → 跑确定性 DCF → LLM 只写叙事(不改数字)→ 经 REST 暴露。已部署上线,公网可访问。

生产环境运行中 · A/B/C 全线上线
前端oaf.world 后端 APIapi.oaf.world
三市场行情/财报美股 yfinance/SEC · A 股 baostock · 港股 yfinance✓ LIVE
真实 LLMOpus 4.8经 AIGW 网关,只写叙事不改数字✓ LIVE
部署上线公网 HTTPS海外 ECS · Caddy 自动证书 · 观测/限流✓ LIVE
v0.14.0个股页真化K线(/bars) · 顶部 KPI(现价/市值/PE/ROE) · 舆情(真实新闻) · 财务(利润表 + /financials/history 五年趋势)✓ LIVE
350后端测试全绿
3市场 · 美/A/港
4层 · 依赖注入
60/10限流 每分·每 IP
Opus 4.8叙事模型
§1

定位与铁律

离线可测、依赖注入的 Python 投研服务。每层都能注入假实现(FakeProvider / StubLLMClient),故沙箱无网络、无密钥也能跑全部 350 测试。改代码务必守以下不变量:

§2

四层架构

# 每层依赖注入、离线可测
investresearch_data  (M1) 数据层  Provider 抽象 · 市场路由 · 三态熔断 · 令牌桶限流
                                 退避重试 · LRU/TTL 缓存 · 跨源校验
investresearch_tools (M2) 能力层  两阶段 DCF 引擎(Gordon 终值 + WACC×g 敏感性矩阵)
                                 MCP 工具 · 校验
investresearch_agent (M3) 编排层  节点状态机(supervisor → fundamentals → report)
                                 LLMClient 协议(真实/桩可换)
investresearch_api       REST   FastAPI · 异常→HTTP 映射 · CORS · 可选 Bearer
                                 observability(/metrics · 限流 · 访问日志)
§3

部署拓扑

浏览器(oaf.world) ──HTTPS + CORS──▶ api.oaf.world
                                      │  阿里云海外 ECS(Alibaba Cloud Linux 3) · Docker
   ┌──────────────────────────────────┴─────────────────────────────┐
   │ Caddy 容器 (80/443, 自动 Let's Encrypt 证书, 反向代理)        │
   │        └──▶ api 容器 (仅内网 expose 8000 · FastAPI/uvicorn)      │
   └──────────────────────────────────────────────────────────────────┘
        api ──▶ 数据源(yfinance · edgartools · baostock)
        api ──▶ LLM 网关(AsiaInfo AIGW ──▶ Claude Opus 4.8)

公网只暴露 Caddy;api 只在 compose 内网。当前线上:开放 API(无 Bearer)+ CORS 收窄到 https://oaf.world + 每 IP 限流兜底。部署包在 deploy/(compose · Caddyfile · .env 不入库 · aliyun-ecs.md)。

§4

数据源与 LLM 现状

能力状态
美股报价 / 日线yfinance✓ live
美股财报 (SEC)edgartools 5.40.1✓ live
A 股日线baostock✓ live
A 股财报 / 报价baostock(akshare/tushare 备源)✓ live (A5)
港股 日线 / 报价 / 财报yfinance.HK,如 0700.HK)✓ live · 腾讯验证
新闻 / 舆情(三市场)A 股 Google News(中文)→ yahoo failover · 美股/港股 yfinance✓ live (M4)
LLM 叙事Opus 4.8 via AIGW✓ live

⚠️ 海外 ECS 上 A 股财报/报价主源用 baostock:tushare 财务接口需 2000 积分、akshare 抓的境内站从海外 IP 不可达,唯 baostock 免费且海外可达。营收/净利/毛利/经营现金流/总股本可取(够 DCF),总资产/权益 baostock 只给比率故留空;字段口径见 baostock_provider.py

⚠️ 港股(yfinance)已知口径注脚:报价为 HKD、财报为 RMB(公司以人民币披露),DCF 用 RMB 营收对比 HKD 现价约 8% 汇率偏差;财报固定取最近一期年报,period 标签与实际财年可能差一年。均为不阻塞的可选增强。

⚠️ edgartools 跨版本 API 漂移大:升级后先跑 deploy/aliyun-ecs.md/research 冒烟;字段映射在 edgartools_provider.py::_default_loader

§5

环境变量 / 密钥

都在 deploy/.env(不入库)。下表为线上关键项:

变量作用线上值
IR_CORS_ORIGINS允许跨域来源https://oaf.world
IR_API_TOKENBearer 保护(空=开放)空(开放 API)
IR_LLM_MODELlitellm 模型名openai/wangsu/…opus-4-8
IR_LLM_API_BASELLM 网关 baseaigw.asiainfo.com/v1
IR_RATE_LIMIT_PER_MIN每 IP 通用限流/分60
IR_RESEARCH_LIMIT_PER_MIN/research·/dcf 严限/分10
TUSHARE_TOKENA 股备源(可选 · 主源用 baostock)
LANGFUSE_PUBLIC_KEYLLM 观测(可选 · 两 key 齐才开)pk-lf-…
LANGFUSE_SECRET_KEYLangfuse 私钥sk-lf-…
LANGFUSE_HOSTLangfuse 区域端点jp.cloud.langfuse.com

客户端对 Opus 4.8 / Sonnet 5 / Fable 5 自动不传 temperature(这些模型拒绝采样参数)。直连 Anthropic 则用 ANTHROPIC_API_KEY + IR_LLM_MODEL=anthropic/claude-haiku-4-5,网关项留空。

§6

运维 runbook(ECS 上)

# 更新代码重部署
git -C ~/InvesResearch pull origin main
docker compose -f docker-compose.prod.yml up -d --build

# 日志 / 健康 / 指标 / 冒烟
docker compose -f docker-compose.prod.yml logs -f api
curl https://api.oaf.world/health
curl -s https://api.oaf.world/metrics | grep -v '^#'      # ir_http_requests_total 等
curl -s "https://api.oaf.world/quote?uid=US:AAPL"
§7

生产化已收官 · 后续可选增强

生产化门已清零 + v0.14.0 能力全部 live:三市场行情+财报+舆情+估值、观测三件套、产品黏性(自选/对比/日报)、运营加固(挂了告警·可托管)、公司名。v0.14.0 个股页真化:K 线(/bars)、顶部 KPI(现价/市值/PE/ROE)、舆情(真实新闻)、财务(利润表 + /financials/history 五年趋势)全换真数据。以下均为可选增强,非阻塞:

  1. A 股财务字段补全:baostock 只给比率不给总资产/权益绝对值。境内部署可切 akshare(已实现,备源),或办 tushare 2000 积分(配 TUSHARE_TOKEN 自动 failover)。
  2. 跨源财务校验扩面:现美股有第二财务源(edgartools + yfinance)故校验生效;A 股/港股仅单可达源,等第二源到位(境内 akshare / tushare)后同样触发 data_quality_flag
  3. 观测/运营:LLM 侧已接 Langfuse;系统侧 /metrics + 健康告警healthcheck.py 状态翻转推飞书)+ /metrics token 访控 已就位;可再接 Prometheus/Grafana 做趋势看板。叙事 Opus 4.8 约 20s,可按标的缓存或降级 Haiku 控成本。
  4. A 股中文舆情来源:现经 Google News(海外可达);境内部署可直连新浪/东财拿更全数据。