From 2c20e1674f50582fb51a4054926b3479db3932e4 Mon Sep 17 00:00:00 2001 From: claude_dev Date: Wed, 29 Jul 2026 22:45:43 +0800 Subject: [PATCH] =?UTF-8?q?docs(research):=20OpenBB(ODP)=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E6=B7=B1=E5=BA=A6=E8=B0=83=E7=A0=94=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 四维度深度调研(功能/技术/部署架构+亮点),4 sub-agent 并行整合。 - 功能:15数据域/32 provider(全欧美)/181标准模型/27指标,不做交易与回测 - 技术:pydantic v2+FastAPI+FastMCP monorepo(~56包/23万行),Fetcher TET三段式+一函数四出口 - 部署:官方Dockerfile 4行+openbb-api:6900+widgets.json连Workspace - 亮点:AI agent原生(MCP)+AGPL-3.0商业护城河+71.2k star开源 - 对本项目:借鉴Fetcher TET清白实现,MCP直暴露LocalUnifiedProvider --- docs/research/openbb-platform-research.md | 390 ++++++++++++++++++++++ 1 file changed, 390 insertions(+) create mode 100755 docs/research/openbb-platform-research.md diff --git a/docs/research/openbb-platform-research.md b/docs/research/openbb-platform-research.md new file mode 100755 index 0000000..a2faa9b --- /dev/null +++ b/docs/research/openbb-platform-research.md @@ -0,0 +1,390 @@ +# OpenBB(ODP)平台深度调研报告 + +> 调研日期 2026-07-29。源码在 NAS `github-repos/OpenBB`(develop 分支 tarball 解压,241M)。本报告由 4 个 sub-agent 并行深挖(源码 + 官网/博客/竞品 Web)整合而成。同步副本存于本地知识库 `wiki-vault/references/openbb-platform-research.md`。 + +# OpenBB(ODP)平台深度调研报告 + +> 调研日期 2026-07-29。源码在 NAS `github-repos/OpenBB`(develop 分支 tarball 解压,无 .git,241M)。4 个 sub-agent 并行深挖(部署/功能/技术/亮点)+ 官网/blog/竞品 Web 调研。下载技巧见 。 + +## 〇、TL;DR + +**OpenBB = AI Agent 时代的开源金融数据基础设施层**。2024 年起从"开源版 Bloomberg Terminal"叙事升级为 **ODP(Open Data Platform)**——「**connect once, consume everywhere**」:任何数据源接入一次,同时暴露给 Python SDK / REST API / **MCP server(AI agent)** / Workspace 前端 / Excel。 + +| 关键数字 | 值 | +|---------|-----| +| GitHub Star | **71.2k**(同级 LangChain) | +| Contributors | 248+ | +| 开源用户 | ~50,000 | +| 数据源(provider) | **32 个官方**(15 免费 + 17 付费)+ 近 100 含社区 | +| 数据域(domain) | 15 个 | +| 标准数据模型 | **181 个**(统一契约) | +| 独立 PyPI 包 | **~56 个**(monorepo 拆包) | +| 代码规模 | ~23 万行 Python | +| 许可证 | **AGPL-3.0**(2024-05-15 改) | +| 融资 | $8.5M Seed(OSS Capital 领投,**非 YC**) | + +**一句话功能边界**:统一接口的**金融数据聚合 + 分析平台**(取数 / 技术指标 / 量化统计 / 图表 / 监管文件);**不做交易执行、不做回测**。 + +--- + +## 一、产品形态全景(⚠️ Terminal 已死) + +> **关键认知刷新**:顶层**没有 `openbb_terminal/` 目录**(只在 images/ 留个 gif)。官方博客 [Sunsetting OpenBB Terminal](https://openbb.co/blog/sunsetting-openbb-terminal-why-how-and-what-now/) 已确认——老 Terminal sunset,转世为 `cli/`(`openbb-cli`),主力产品更名 ODP。「开源 CLI 终端 vs 商业平台」的二分法已过时。 + +| 产品线 | 形态 | 开源/付费 | 定位 | +|--------|------|----------|------| +| **ODP(Open Data Platform)** | Python SDK `obb` + REST API + MCP server | **开源 AGPL-3.0** | 数据集成基础设施底座,所有上层产品的根基 | +| **OpenBB CLI**(`cli/`) | 交互式 REPL,独立包 `openbb-cli` v1.4.2 | 开源 | 老 Terminal 转世,wrap ODP,Routine Scripts 自动化 | +| **OpenBB Desktop**(`desktop/`) | **Tauri(Rust 1.90)+ React 18**,~35MB | 源码开源,但依赖闭源 npm `@openbb/ui-pro` | 桌面壳,内置 Miniforge + REST API + MCP + Jupyter | +| **OpenBB Workspace**(pro.openbb.co) | Web 前端 SaaS | **付费**(Community/Lite/Pro 三档) | 企业级分析师工作台,AI copilot / dashboard / 图表 | +| **openbb-cookiecutter** | 脚手架模板 | 开源 | 一次生成 router+provider+obbject 三合一扩展骨架 | +| **OpenBB MCP Server** | MCP server,内置 4 个 AI skill | 开源 `openbb-mcp-server` v1.4.1 | AI agent 调用 ODP 的标准入口 | + +### 开源 vs 付费边界(精确版) + +``` +完全开源 AGPL-3.0(无限制): + - ODP 全套:Python SDK / REST API / MCP server / CLI + - Desktop 源码(但 UI 组件 @openbb/ui-pro 是闭源 npm,不装跑不起来 GUI) + - 全部 32 provider + 17 extension + charting + +付费(商业价值捕获点): + - Workspace 前端(Community 免费1人 / Lite / Pro) + - Desktop release binaries(macOS/Windows) + - @openbb/ui-pro 组件库 + - 团队协作、RBAC、审计、白标 +``` + +**设计洞察**:核心数据层完全开源做生态/标准/漏斗,商业边界精准划在 **UI 组件 + 团队协作**。任何人可用 ODP 自建等价 Workspace 后端(前端组件要付费或自研)。这是个聪明的 COSS(商业开源)设计。 + +--- + +## 二、功能架构:功能矩阵 + +### 2.1 数据域 × 能力(15 个 domain) + +| 数据域 | 代表性子能力 | +|--------|-------------| +| **equity** 股票 | price(历史/实时)、fundamental(财报/比率)、ownership(持股/内部人)、calendar(除权/财报日)、estimates(预期)、screener(筛选)、compare、darkpool(暗池)、shorts(做空) | +| **crypto** 加密 | price、search | +| **economy** 经济 | calendar(经济日历)、gdp、shipping(航运)、survey | +| **etf** | search、historical、info、holdings、sectors、countries、equity_exposure | +| **fixedincome** 固收 | rate、spreads、government(国债)、corporate、bond_indices | +| **currency** 外汇 | price、search | +| **derivatives** 衍生品 | options(期权链)、futures(曲线/历史) | +| **index** 指数 | price、constituents(成分股)、snapshots | +| **news** 新闻 | world、company | +| **regulators** 监管 | SEC filings(财报/insider/MD&A/诉讼) | +| **technical** 技术分析 | **27 个指标**:sma/ema/hma/wma、macd、rsi、bollinger、atr、adx、cci、stoch、vwap、obv、fisher、aroon、donchian、ichimoku、fibonacci、keltner、clenow_momentum、cones、relative_rotation | +| **quantitative** 量化 | normality(正态检验)、**capm**、**adf_test**(单位根)、kps_test、summary、rolling、performance | +| **econometrics** 计量 | ols_regression(OLS 回归) | +| **commodity** 大宗 | price、petroleum_status_report(EIA 原油) | +| **famafrench** | 市场因子(SMB/HML 等) | + +### 2.2 官方 Provider 清单(32 个) + +**免费 / 无需 key(15 个)**:yfinance(覆盖最广)、fred(美联储经济)、sec(SEC 文件)、cboe、finviz、ecb(欧央行)、eia(能源)、famafrench、federal_reserve、finra、government_us、imf、multpl、oecd、deribit(加密期权) + +**付费 / 需 API key(17 个)**:fmp(最全面付费源)、intrinio、polygon、benzinga、tiingo、nasdaq、tradier、tradingeconomics、wsj、seeking_alpha、stockgrid、alpha_vantage、biztoc、bls(劳工统计)、cftc、congress_gov(国会议员交易)、econdb + +**全部欧美源,无一个中国数据源**(A股全靠社区第三方 `openbb_akshare` / `openbb-tushare`)。 + +### 2.3 分析能力 + +- **技术指标**:27 个(趋势/动量/波动率/成交量/形态),`technical` 域 +- **量化统计**:CAPM、OLS 回归、正态性检验、单位根(ADF/KPSS)、滚动指标、业绩风险,`quantitative`/`econometrics` 域 +- **图表**:`obbject_extensions/charting`,基于 **Plotly v6.3** 交互式,支持技术指标/财报/经济数据可视化,主题配置 + +### 2.4 功能边界 + +| 能干 | 不能干 | +|------|--------| +| 多资产数据获取(股/加密/经济/ETF/外汇/期货/期权/债) | ❌ 实时交易执行 | +| 公司财务分析(财报/比率/估值/内部人/持股) | ❌ 组合管理 | +| 宏观经济(GDP/通胀/利率/调查) | ❌ 回测(仅数据分析,不含策略回测引擎) | +| 新闻聚合、技术指标、量化统计、监管文件 | ❌ 非金融领域数据 | + +> **对量化人的启示**:OpenBB 是「投研数据与分析」工具,不是「交易/回测」工具。回测引擎、组合管理需另配(本项目用 vnpy/BulletTrade 承接,正好互补)。 + +--- + +## 三、技术架构 + +### 3.1 三层架构 + +``` +openbb_platform/ +├── core/ # 框架:Platform 入口(obb)、Router、AbstractProvider/Fetcher、standard_models(181 基类)、Registry、QueryExecutor +├── extensions/ # 17 个 router 扩展:定义统一命令树形状(obb.equity.price.historical)+ 含 mcp_server/platform_api +├── providers/ # 32 个数据源实现(全是欧美源) +└── obbject_extensions/ # 返回对象(OBBject)后处理(charting 等) +``` + +**关键分离**:`extensions` 定义 API 形状,`providers` 各自实现该形状,`core` 调度。 + +### 3.2 技术栈 + +| 组件 | 版本 | 用途 | +|------|------|------| +| Python | `>=3.10,<4`(实测锁 **3.10–3.12**) | 语言 | +| **pydantic** | `^2.12.3`(**v2**) | 数据校验 | +| **FastAPI** | `0.136.3`(全仓硬锁精确版) | Web 框架 | +| uvicorn | `^0.40.0` | ASGI | +| websockets | `>=15.0` | WebSocket | +| pandas | `>=1.5.3` | 数据处理 | +| **FastMCP** | `>=3.2.0` | MCP server | +| plotly | `^6.3.1` | 可视化 | +| poetry | poetry-core | 构建(monorepo) | +| ruff | `^0.15` | lint(运行时依赖,import 时 lint 生成代码) | +| pytest + nox | — | 测试 | + +> **关键约束**:`openbb-core` 强依赖 FastAPI+uvicorn+pydantic v2。**即使只想用 SDK 取数,也会拉进整个 web 框架**——ODP 永远以「可启动 API 的应用」形态存在,不是纯库。对多面消费(REST/MCP)必需,对纯数据使用者是负担。 + +### 3.3 包架构与依赖图 + +``` +core (openbb-core 1.6.13) ← 地基:抽象 + API 框架 + 181 standard_models + ↓ 被依赖 +providers/ (32 包) + extensions/ (17 包) + obbject_extensions/ (1) + ↓ 被聚合 +platform (openbb 4.7.3) ← 顶层主包,聚合全部 +``` + +**entry_points 4 类挂载点**(全部由 `import openbb` 时扫描): +- `openbb_provider_extension` → provider 数据源 +- `openbb_core_extension` → router 路由 +- `openbb_obbject_extension` → 结果后处理(.charting/.to_df) +- `openbb_charting_extension` → 可视化视图 + +**发布**:`build/pypi/openbb_platform/{publish.py,nightly.py}` 统一 CI 发版,~56 个独立 PyPI 包。 + +### 3.4 代码规模 + +| 层 | 文件数 | 行数 | +|----|--------|------| +| core | 189 | ~154,000 | +| extensions | 351 | ~42,500 | +| providers | 635 | ~34,000 | +| **合计** | ~1,175 | **~230,000** | + +core 最大(154k 行)印证「框架+标准模型库」是核心资产。 + +### 3.5 工程化 + +- **CI**:17 个 workflow(Python 3.10–3.14 测试矩阵、black/mypy/pylint/ruff/codespell lint、draft-release、release-desktop、Windows/macOS x64+ARM 桌面构建) +- **测试**:pytest + nox,`.coveragerc` 覆盖率配置,conftest.py fixture 模式 +- **代码生成**:`package_builder.py` 的 `auto_build()` 扫 entry points 生成嵌套 Container 树(SDK)+ Router + REST + MCP +- **扩展机制**:`openbb-cookiecutter` 脚手架一次生成 router+provider+obbject 三合一骨架,填 4 个模板变量即可 + +--- + +## 四、Provider Framework(数据层核心机制) + +> 上轮深挖,此处精炼。完整细节见本节。 + +**发现链路**:Python `entry_points` → `ExtensionLoader` `ep.load()` 拿 `Provider` 实例 → `Registry.include_provider()` 按 name 入册 → `QueryExecutor.execute(provider, model, params)` 找 Fetcher。 + +**Provider** = 非抽象入口类,只持 `fetcher_dict: dict[标准模型名, Fetcher类]`,不取数。真正干活的是 **Fetcher**。 + +### Fetcher TET 三段式(⭐最值得借鉴) + +`openbb_core/provider/abstract/fetcher.py` 定义 Generic `Fetcher[Q, R]`,`fetch_data` 串三钩子: + +| 钩子 | 作用 | IO? | +|------|------|-----| +| `transform_query(params)→Q` | 参数校验、补默认、vendor 参数转换 | 否 | +| `extract_data(query, creds)→Any` | **唯一调网络/IO 的地方**,返回 raw | 是 | +| `transform_data(query, data)→R` | raw → 标准化 `list[Data]`,字段映射 + pydantic 校验 | 否 | + +`extract_data` 是 staticmethod 无状态;同步/异步二选一(`aextract_data` alias);`Fetcher.test()` 内置契约自检。 + +### standardized model 多源统一 + +`standard_models/`(181 基类)定义全行业统一 `XxxQueryParams`+`XxxData`。Provider 子类继承标准模型 + `__alias_dict__`(vendor 字段名→标准名)+ `__json_schema_extra__`。`Data` 的 `model_validator(mode="before")` 在校验前重写 key → 不同源 raw 落进同一字段名。**新增 model = 加一个三件套文件 + fetcher_dict 加一行,无中央注册表**。 + +--- + +## 五、Router / SDK / MCP / REST(消费层:一函数四出口) + +**一句话**:一份被 `@router.command(model=...)` 装饰的 Python 函数,**同时变成 SDK 方法 + REST 端点 + MCP 工具**(三出口代码生成)。 + +- **Router** = FastAPI `APIRouter` 薄包装 + `include_router` 嵌套。`SignatureInspector.complete` 用 `ProviderInterface` **反射**把参数经 FastAPI `Depends()` 注入 → 零样板。 +- **obb 入口**:`PackageBuilder.auto_build()` 扫 entry points **代码生成**嵌套 Container 树,`create_app` 多重继承嫁接 → `obb.x.y.z()` = `command_runner.run()`。 +- **REST**:`rest_api.py` 一个 FastAPI app,`commands.py` 自动生成端点,`GET /api/equity/price/historical?symbol=&provider=`,OpenAPI swagger 同源。 +- **MCP**(⭐关键洞察):**不维护单独 MCP 工具定义**,用 `fastmcp` 的 OpenAPI provider **从 FastAPI app 反向派生** MCP 工具。一条 GET 端点 = 一个工具,命名 `equity_price_historical`。工具爆炸(500+)时用 `list_categories`/`list_tools_in_category` 元工具发现兜底。 + +### 完整数据流 + +`obb.equity.price.historical("AAPL", provider="yfinance")` → 命令路径解析 → `CommandRunner.run`(校验+注入 `CommandContext`)→ `historical()` → `OBBject.from_query(Query)` → `Query.execute` → `QueryExecutor.execute("yfinance","EquityHistorical",params)` 取 `YFEquityHistoricalFetcher` → TET → `OBBject[results, provider, warnings]`。每步边界清晰、可单测、可换 provider、`transform_query` 可缓存。 + +--- + +## 六、部署架构(⭐ 用户最关心) + +### 6.1 部署方式矩阵 + +| 方式 | 关键命令 | 适用场景 | 注意 | +|------|---------|---------|------| +| **最小 SDK** | `pip install openbb` | 仅 Python 取数 | 默认只装 17 核心 provider | +| **全量 SDK** | `pip install "openbb[all]"` | 全部 provider + charting + MCP | 含 20 个可选 extra | +| **单 extra** | `pip install "openbb[mcp_server]"` / `[charting]` | 按需 | 19 个具名 extra | +| **REST API** | `openbb-api`(默认 127.0.0.1:6900,自动生成 widgets.json) | 连 Workspace 标准入口 | 需 `pip install "openbb[all]"` | +| **Docker 轻量** ⭐ | `build/docker/platformAPI.Dockerfile`(**4 行**) | **官方推荐生产部署** | 见下,无需源码 | +| **Docker 重型** | `build/docker/platform.dockerfile`(python:3.11 + Rust + libwebkit2gtk + 源码 install) | CI / 需编译桌面 | 后端容器其实不需要 Rust,装它是为 Tauri | +| **Desktop** | `npm run tauri dev` | 单机桌面 | 需 Rust 1.90 + Node;自动装 Miniforge+REST+MCP+Jupyter | +| **Workspace 接自托管** | 登 pro.openbb.co → Connect backend → 填 `http://127.0.0.1:6900` | 个人/团队 | SaaS 前端 + 本机 backend,走 widgets.json | + +### 6.2 官方推荐 Docker 部署(4 行) + +```dockerfile +FROM python:3.10-slim-bookworm +RUN pip install "openbb[all]" openbb-platform-api +EXPOSE 6900 +ENTRYPOINT ["openbb-api","--host","0.0.0.0"] +``` + +### 6.3 Workspace ↔ Backend 协议(widgets.json,踩坑点) + +- 协议是 `widgets.json`,由 `openbb-platform-api` 启动时**自动 introspect FastAPI 路由生成** +- 三种挂载:内存默认 / `--editable` 落盘可手改 / `--widgets-json /path` 完全自定义 +- **Widget 类型由返回类型推断**:`list[dict]`→AgGrid 表、`str`→Markdown、`dict + type="chart"`→Plotly、Metric→指标卡、PDF→PDF +- **OmniWidget**(`OmniWidgetResponseModel`):POST + prompt 输入 + 多模态返回 —— **AI agent 与 Workspace 集成的官方钩子** +- **`--agents-json`** CLI 参数加 `/agents` endpoint;`workspace_apps.json` 导入导出 dashboard 模板 →「AI agent 反向给 Workspace 推 dashboard」闭环 + +### 6.4 开发者安装(dev_install.py,⚠️ 反模式) + +`openbb_platform/dev_install.py` 的 editable install 是脚本 hack(非 uv workspace): +1. 备份 pyproject.toml + poetry.lock +2. 动态把 32 provider + 17 ext 改成 `{path="./xxx", develop=true}` +3. `poetry lock --regenerate` + `poetry install -E all` +4. `finally` 恢复原文件 + +**坑**:中间任何一步崩溃(含 Ctrl-C)会留半改状态;CLI 部分还会先删 `openbb` 依赖再装。二开团队 fork 后这是最易踩的坑。新增扩展用 `openbb-cookiecutter` 脚手架 + `pip install -e .` 更稳。 + +--- + +## 七、亮点介绍(系统化) + +### 7.1 技术亮点 + +| # | 亮点 | 是什么 | 为什么重要 | +|---|------|--------|-----------| +| 1 | **一函数四出口** | `@router.command` 一个函数 → SDK + REST + MCP + Workspace widget | 消费面零样板,改一处全出口同步 | +| 2 | **MCP 是 REST 副产品** | fastmcp 从 FastAPI OpenAPI 反向派生 MCP 工具,无单独 MCP 定义 | AI agent 接入零额外成本,与 REST 同源同 schema | +| 3 | **Fetcher TET 三段式** | transform_query / extract_data(唯一 IO) / transform_data | IO 与转换解耦,可单测、可缓存、多源归一 | +| 4 | **181 标准模型统一** | 标准化 schema + `__alias_dict__` 字段映射 | LLM 不用学每源方言,只学一套 schema,天然契合 function calling | +| 5 | **MCP server 内置 4 个 AI skill** | `build_workspace_app` SKILL.md 从 fetcher/router/widgets 全流程脚本化 | "AI 帮你写 OpenBB 扩展"做成产品内功能,教科书级 MCP skill 范本 | +| 6 | **Tauri 桌面** | Rust+React 35MB 非 Electron | 分发体积小,企业 IT 更易接受(代价:需 Rust 工具链) | + +### 7.2 战略亮点 + +| # | 亮点 | 说明 | +|---|------|------| +| 1 | **"Connect once, consume everywhere"** | 一次接入,Python/REST/Workspace/Excel/MCP 并列一等公民消费 | +| 2 | **AI-first 信任定位** | Workspace 把 MCP 输出转可交互 widget,参数透明、原始数据一键可查、LLM 转换可审计——"不是连接,是信任" | +| 3 | **"Workflows that stay when analysts leave"** | 工作流持久化可共享,沉淀机构知识,直击买方"明星分析师带走 know-how"痛点 | +| 4 | **数据主权 / 自托管优先** | Lite/Pro/Enterprise 全支持 VPC/本地,"No vendor access, No shared infra",SOC 2 Type II | +| 5 | **真开源(71.2k star)** | vs Bloomberg $25k/座/年封闭;Core 全免费可自托管,把"终端"从特权变基础设施 | + +--- + +## 八、商业模式与竞品 + +### 8.1 商业模式:开源核心 + 商业前端 + +**本质**:开源 ODP 做漏斗与标准制定 → Workspace 企业前端变现(product-led growth,非外呼销售)。 + +| 档位 | 价格 | 部署 | 目标 | +|------|------|------|------| +| Community | 免费 | OpenBB 云 | 个人/学生/PoC | +| Lite | $1,200/年(原 $2,400) | 自托管 | <10 人小团队 | +| Pro | 定制 | 自托管/多租户云 | 大型投研团队 | +| Snowflake | $500/座/年 | Snowflake Marketplace | 已在 Snowflake 的数据团队 | +| Enterprise | 定制 | 完全本地/白标/OEM | 资管/卖方/金融科技 | + +### 8.2 AGPL-3.0 战略(2024-05-15 改) + +| 干系人 | 含义 | +|--------|------| +| 个人/研究 | 无影响,免费用 | +| 企业内部使用 | 无影响(不分发、不 SaaS) | +| **修改并分发** | 必须开源修改,或买商业许可 | +| **修改并提供 SaaS** ⚠️ | **必须开源,或买商业许可**(AGPL 网络条款,比 GPL 严) | + +**战略意图**:① 保护社区投入防白嫖闭源 fork;② 双重许可变现 SaaS 厂商;③ 对手想做闭源金融 SaaS 必须付费 → 商业护城河。对标 GitLab/Mattermost/Grafana 的 COSS 路线。 + +> **对本项目(量化私募)含义**:若交易系统通过网络对外服务(给 LP/客户看净值),挂 ODP 会触发开源义务。规避方式:**独立进程+API 调用松耦合**,不改 ODP 源码。这也是 ODP 设计成 REST/MCP 多面消费的隐性动机之一。 + +### 8.3 竞品定位 + +| 对手 | 定位差异 | OpenBB 优/劣 | +|------|---------|-------------| +| **Bloomberg/FactSet/Refinitiv** | 闭路终端帝国 vs 开放基础设施你拥有 | 优:免费/自托管/无锁定/AI 原生;劣:数据深度(Bloomberg 独家无可替代) | +| **yfinance/akshare/tushare** | 单源爬虫库 vs 多源路由+统一 API+UI/agent | 优:多源聚合/统一字段/可视化;劣:轻量场景 yfinance 三行更简(且 OpenBB 反向集成了 akshare/tushare) | +| **LangChain/LlamaIndex** | 通用 agent 编排 vs 金融数据层 | **非竞争是互补**:OpenBB 把它们列为生态伙伴,自己定位金融数据+终端 UI | +| **自建数据中台** | 24-36 月/$5-10M/20+ FTE vs 开箱即用 | 优:TTM 从 2 年→2 周;劣:极独特私有数据自建仍优 | + +### 8.4 生态 + +- **GitHub**:71.2k star / 7.3k fork / 248+ contributors / 6,863 commits +- **团队**:~15-18 FTE 管理 8 条产品线 +- **创始人**:Didier R Lopes(2021 因 meme stock 亏损建 "Gamestonk Terminal",2022 改名 OpenBB;"BB" 来自 Blackberry 代码**非 Bloomberg**) +- **融资**:$8.5M Seed(2022-03,OSS Capital 领投)。**⚠️ 非 YC 公司**(网络有 LLM 摘要误传 W22,官方源查无) + +--- + +## 九、A 股集成现状 + +OpenBB 官方无中国源,全靠社区第三方: +- `finanalyzer/openbb_akshare`(★125,AGPL-3.0)— AKShare 扩展,聚合东财/同花顺/腾讯/新浪/雪球 +- `openbb-tushare`(PyPI,需 token)、`openbb-hka`(A+H 股 Workspace app),贡献者 Roger Ye + +`backends-for-openbb`(给 Workspace 前端接数据 FastAPI 模板)、`openbb-ai`(给 Workspace 构建 SSE agent SDK)都绑定 Workspace 前端,与本项相关度低。 + +--- + +## 十、对 sanguo_vnpy_v2 的建议(按 ROI 排序) + +| 设计 | 借鉴价值 | 建议 | +|------|---------|------| +| **Fetcher TET 三段式** | ⭐⭐⭐⭐⭐ | **直接抄(清白实现,不引依赖)**。把 baostock/akshare/miniQMT 取数重构成 Fetcher,治"数据层瑕疵在 provider 兜底会乱"旧伤 ;`__alias_dict__` 归一 + `transform_data` pydantic 校验 = 数据质量内建 | +| **MCP 直接暴露 provider 方法** | ⭐⭐⭐⭐ | OpenBB 把 MCP 当"REST 副产品"走 router→FastAPI→fastmcp;**本项更直接**——MCP 把 `LocalUnifiedProvider.get_price/get_fundamentals/get_closes_panel` 直接暴露给 Claude Code,跳过 router/FastAPI。参考 Vibe-Research 5 工具模式 | +| **standard/extra 参数拆分** | ⭐⭐⭐⭐ | 可借鉴:标准字段(symbol/start/end/interval)vs vendor 特有(fq/adjustment)分家 | +| **OBBject 信封(results+provider+warnings)** | ⭐⭐⭐ | 统一返回壳带 warnings(治 bs_eod 15min dt 乱码没早发现那种 ) | +| **把 sanguo 封装成 openbb_sanguo_provider** | ⭐⭐⭐ | entry_points 挂进 ODP,立刻获 REST+MCP+Workspace 全套消费面——**但 AGPL 合规风险**(网络对外服务触发开源),需法务确认 | +| entry_points / Container 代码生成 | ⭐⭐ | 不值得抄。单仓库单开发者过度工程,字典+直白 API 更符合 KISS | + +### 直接复用 openbb_akshare?**不推荐** + +致命限制:① **AGPL-3.0** 网络条款;② 数据语义错配(OpenBB EquityHistorical 美股模型无复权概念,A 股 qfq/hfq 只能落 extra_params,策略层无法跨 vendor 用);③ akshare DataFrame 被强拆 dict→pydantic 重建丢 dtype,本项已直接用 df 反向适配无收益;④ 凭证/限流不匹配(baostock 单进程单登录会拉黑 、akshare 东财瞬时限流、miniQMT 需 Win 常驻);⑤ 场景错配(本项机器内 provider+策略直调+Claude Code 偶查,用不到 REST/Workspace)。 + +**推荐**:**借鉴架构,不引依赖**。Fetcher 三段式清白实现(不复制 OpenBB 代码→不触发 AGPL),MCP 直接调 provider。真要尝鲜 OpenBB MCP,**单独实验目录 `pip install openbb[mcp]`**,不混进生产仓库。 + +--- + +## 十一、关键文件(绝对路径根 `github-repos/OpenBB/`) + +- 抽象:`openbb_platform/core/openbb_core/provider/abstract/{data,query_params,fetcher,provider}.py` +- 注册调度:`.../provider/{registry,registry_map,query_executor}.py`、`.../app/extension_loader.py` +- 标准模型库:`.../provider/standard_models/`(181 个) +- Router:`.../app/router.py`、`extensions/equity/openbb_equity/{equity_router,price/price_router}.py` +- obb 生成:`core/openbb/__init__.py`、`.../app/static/{package_builder,app_factory}.py`、`.../app/provider_interface.py` +- REST+MCP:`.../api/{rest_api.py,router/commands.py}`、`extensions/mcp_server/openbb_mcp_server/app/app.py` +- **MCP skill 范本**:`extensions/mcp_server/openbb_mcp_server/skills/build_workspace_app/SKILL.md` +- **官方推荐部署**:`build/docker/platformAPI.Dockerfile`(4 行) +- **widgets.json 协议全集**:`extensions/platform_api/README.md` +- provider 样例:`providers/{yfinance,fmp}/openbb_*/models/equity_historical.py` +- 脚手架:`cookiecutter/openbb_cookiecutter/template/` +- 技术栈/依赖:`openbb_platform/{pyproject.toml,core/pyproject.toml}` +- editable install 反模式:`openbb_platform/dev_install.py` + +## 十二、参考来源 + +- 官网:[openbb.co](https://openbb.co) / [platform](https://openbb.co/platform) / [pricing](https://openbb.co/pricing/) / [docs](https://docs.openbb.co) +- 博客:[Sunsetting Terminal](https://openbb.co/blog/sunsetting-openbb-terminal-why-how-and-what-now/) / [License Change AGPL](https://openbb.co/blog/license-change-openbb-platform-goes-agpl/) / [MCP for Finance](https://openbb.co/blog/openbb-the-interface-that-makes-mcp-work-for-financial-workflows/) / [FinAI Stack](https://openbb.co/blog/the-new-finai-tech-stack/) +- [GitHub: OpenBB-finance/OpenBB](https://github.com/OpenBB-finance/OpenBB) +- [TechCrunch: OpenBB beyond Bloomberg](https://techcrunch.com/2024/10/07/fintech-openbb-aims-to-be-more-than-an-open-source-bloomberg-terminal/) +- [OSS Capital Portfolio](https://oss.capital/portfolio/openbb/) +- [Extending OpenBB with AKShare/Tushare](https://openbb.co/blog/extending-openbb-for-a-share-and-hong-kong-stock-analysis-with-akshare-and-tushare/) + +相关: