InvesResearch
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
v0.33.0工作台升级 P0+P1议事厅(/council) · 财报日历 · 季度财报轴(/earnings-recap) · 产业链图谱 · 每日复盘上站✓ LIVE
v0.34.0叙事池 P2 + 补齐线框卫星叙事股票池(方法论/三梯队/催化剂+优先议事)· 议事厅战绩榜+净值 · A股缺季度降级年度 · 图谱节点详情✓ LIVE
v0.45.0港股卫星篮子 + 行业聚合币种守卫 + 开发流程误报修复① 港股卫星篮子 satellite_hkHK:01045 亚太卫星 · HK:01725 洲际航天科技 · HK:00031 航天控股;卫星专题从「美股 + A股」补齐成三市场 · 判据没放松,退市/无数据/概念股均按既有标准排除并写明理由)· ② 行业聚合币种守卫industry.py 是唯一没把币种传给 _multiples 的调用点;港股内地公司普遍「港币交易、人民币披露」,不修就是 HKD 市值 ÷ CNY 净利、CNY 营收直接加进 HKD 合计 —— 实测合计会从 48.16 亿错成 54.58 亿。异币种成分倍数置空、不计入合计、列进 agg.fx_excluded 显式披露;刻意不做汇率折算)· ③ 行业别名按长度降序匹配(原最短的「卫星」先命中,A股/港股提问全被判给美股篮子)· ④ Stop 钩子两处误报修复(范围收窄到 origin/main..HEAD,不再把他人已合并的 187 条公开提交当成待修并建议 rebase --reset-author;SSH 签名 + 未配 allowedSignersFile 时每个正确签名的提交都被判 Unverified,改为回落检查 gpgsig 头)· 1597 tests(+19 条开发工具离线断言)· 本版起恢复 Actions 自动发版 · 后端 satellite_hk 需 ECS rebuild(已完成并生产实测 3/3 覆盖)✓ LIVE
v0.44.0命令行客户端 + 全站英文版 + 系统架构页① npm 包 invesresearch(零依赖 MIT、Node ≥18、21 条命令、两个 bin;npx invesresearch quote NVDA 即用 · 不是第四个服务、只是公开只读接口的瘦客户端 · 有单测断言从不发 Authorization 头 · 77 个离线单测)· ② 全站英文版(i18n 引擎整串查字典 + 浏览器自适应 + 手动切换记忆 · 711 条词条 · 动态数据不进字典)· ③ 两个新页/cli · /how-it-works 含手写 SVG 全景图 + ARCHITECTURE.md)· ④ SWR 缓存 + 事件流扩容(稳定 100 条、52 条英文)· ⑤ 三起生产问题(空库不上生产 · 预警阈值分数/百分数混用致横幅常亮显示 -457.5% · 重建命令漏 -f 时 compose 捡走另一份默认配置、不透传 LLM key 致静默降级,加 deploy/rebuild.sh 根治)· 1579 tests · 后端 pulse 修复需 ECS rebuild✓ LIVE
v0.43.0首页看板实时化 + 实时 K 线行情巡检发现 CEO Brief 异常、追根到看板走每日快照、agent 决策后端从未上公网 · ① 看板实时化agent.oaf.world 上线:Docker service + Caddy 只读 GET 白名单〔写端点 404〕+ SQLite 库每小时 cron 刷新〔灌库+自动配证伪触发器/看熊清单〕· 看板默认接 live、不可达静默回落快照 · CEO Brief 三 bug 修〔主线评分/如何崩塌/反方矛盾〕· 证伪 4 块只在 CEO Brief · cron_agent re-exec 防护)· ② 实时 K 线(首页蜡烛 K 线 12 标的〔SpaceX/亚信等 美股/A股/港股/科创板〕+ 市值/PE 币种感知 + 时间轴到上市以来〔/bars 500→7300〕+ 长序列面积线 + 长区间多级回退)· ③ 议事厅识别不出标的诚实报错不冒充演示 · 648 tests · 后端 /bars+agent API 需 ECS rebuild(已上线)✓ LIVE
v0.42.0卫星互联网专题群 + 行业异动预警起因 7-17 SpaceX 发射失败牵动全板块股市、看板无预警(日更快照太慢 + 无预警层)· ① 异动预警 sector-pulse/sector-pulse:突发高严重度事件〔规则判、只看标题防误报、SpaceX 作风向标〕+ 板块中位涨跌异动两确定性信号合成 · 垣信/千帆·中国星网/国网·星舰星链走关键词监控未上市无 ticker 也预警 · 事件标题快模型翻中文 · 不命中不报警)· ② 卫星专题群四张深度看板全交叉互链(/spacex 行情/财务/同业对比/护城河 + mbabrand 品牌·舆情·创始人三维内联卡片 · /yuanxin 垣信·千帆〔未上市诚实留白〕· /xingwang 中国星网·国网 · /constellation 星座竞赛九强 + 发射·组网时间线)· ③ E2 监控指南/monitoring-guide)· 648 tests · 后端 /sector-pulse·/watch-news 需 ECS rebuild✓ LIVE
v0.41.1叙事分级热修v0.41.0 把快模型 IR_LLM_MODEL_FAST 默认设成 anthropic/claude-haiku-4-5,但生产走自建 AIGW 网关(无直连 Anthropic key)打不通、且 /ask 未兜 LLM 调用异常 → 对话调研+新闻翻译报错 · 修:① 默认改留空回落主模型(分级纯 opt-in、行为不变)· ② route() 包异常 LLM 失败降级 unknown 不 500 · 633 tests✓ LIVE
v0.41.0路线图 B/C/D/E 一次发版2026 H2 路线图四块 · D 对话调研深化(多轮上下文+追问 chip+财报意图)· C 覆盖面(白酒/家电 A 股篮子 + 港股卫星评估留白 + HK/US 中文名 91→151)· B 数据深度(A 股财务补全 failover 接入行业/相对估值 + 跨源校验扩面)· E 运营(叙事分级 IR_LLM_MODEL_FAST 快模型走路由/翻译 + Prometheus/Grafana 监控叠加层)· web-backend 632 tests · 后端需 ECS rebuild✓ LIVE
v0.40.2QA 全功能巡检修复看板+工作台所有功能点击/执行/验证(Playwright 0 未捕获异常 + 行为验证 + 真后端 curl),改正两处:① 护城河/多空+对话调研单标的 LLM 叙事全空(max_tokens 512→1600,中文结构化 JSON 被截断,加 IR_LLM_MAX_TOKENS)· ② 行业「生成研报」占位(genIndustryReport() 合成真研报)· QA 报告✓ LIVE
v0.40.1搜索显示名补丁/search?q=宁德 显示成 SZ:300750 而非「宁德时代」(先命中本地别名占位名、A 股名未回填)· search_symbolsadd 改为 uid 已存在且原名占位时回填真名 · uid/路由一直正确, 仅显示名修正 · 生产 rebuild 后实测「宁德」→「宁德时代」✓ LIVE
v0.40.0全市场名称模糊搜索对话调研/⌘K 搜索接数据源做全市场模糊搜索「没有的也能搜」:新增 GET /search(本地精选秒回 → A 股全量中文名 baostock → 港/美股 Yahoo 英文·拼音·代码)· /ask 加搜索兜底(命中即用、歧义列候选不硬猜)· 铁律:名称是数据源事实非 LLM 猜 · 设计文档✓ LIVE
v0.39.2对话调研体验补丁修两处:① 对话历史持久化到本机 localStorage(进对话调研自动恢复、切视图/刷新都在、加「清空对话」)· ② 修深链未入库标的(如智谱 HK:02513)公司页误显英伟达外壳(改 currentCompany():真 uid 中性外壳、名走 displayName→智谱)· 纯前端随 CF 即时✓ LIVE
v0.39.1对话调研进首页oaf.world 首页顶部加对话调研提问框:用户一进站就能自然语言问一句 → 跳 /web/app?v=chat&q= 工作台自动作答;问答逻辑仍只在工作台一处(/ask)、首页纯静态零后端 · 纯前端随 CF 即时✓ LIVE
v0.39.0对话调研接真对话调研接真后端:新增 POST /ask,LLM 只做意图路由+实体抽取(不产数字),按标的数量分派既有确定性 skill(1→护城河多空 / ≥2→横向对比 / 行业→板块聚合 / 无→诚实降级);名称→uid 走确定性查表+代码规范化,识别不到绝不让 LLM 猜代码✓ LIVE
v0.38.0行业板块预热缓存行业调研 / 跨市场板块重活视图(成分聚合+LLM 叙事 ~10s+)做成缓存:localStorage 持久化(点进秒开·按需刷新)+ 服务端静态预算(build_industry 每日 batch → cron 提交 → CF Pages)让缓存所有访客共享、始终预热;静态优先、取较新者、都无才实时,头部标来源(预热/缓存/实时)✓ LIVE
v0.37.0跨市场板块卫星互联网 美股 vs A股并排:各市场自下而上聚合的板块估值/中位 PE/PB/ROE/毛利率/合计营收净利/CAGR(coverage 透明)+ 每市场 LLM 板块叙事 + 事件提及热度代理(明示口径)· 后端加 A 股篮子 satellite_a、两市场币种独立不混算✓ LIVE
v0.36.2研判去单调每日复盘「今日看点/研判」去雷同:① 换维度(讲今日之变:升温最快主线+临近催化剂)· ② 存疑不封王(DCF 只认数据可靠正向,无则诚实留白)· ③ 盯盘每日轮换(/compare 输入天天变→研判随之不同)· 纯宿主脚本 git pull 即生效✓ LIVE
v0.36.1运维稳态补丁每日复盘核心 /compare 取数加重试(偶发超时不再拖垮日报)· 六个 ECS 宿主 cron 分叉自愈(pull→fetch/rebase/reset)· 纯宿主脚本 git pull 即生效✓ LIVE
v0.36.0看板交互升级投研看板→可探索驾驶舱:P0 全局切片+联动+下钻+URL 深链 · P1 ⌘K 搜索+自选关注+趋势交互+矩阵排序 · P2 布局自定义+对比模式 · 纯前端零后端 · 另 知识图谱进工作台+发版自动化✓ LIVE
v0.35.0P2 收尾卷阁·付费库类型分类(按真实维度)· 观点台(admin 专属最小静态版)· 催化剂自动清过期(cron_static)· 宿主 3.6 兼容修复✓ LIVE
669后端测试全绿
3市场 · 美/A/港
4层 · 依赖注入
60/10限流 每分·每 IP
Opus 4.8叙事模型
§1

定位与铁律

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

§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(海外可达);境内部署可直连新浪/东财拿更全数据。