每天一个开源项目#40 Apache Ossie:1K Stars的AI/BI语义层通用标准
GitHub Trending #1 / 17 · 2026-07-17 · ⭐ 1,055 · 🍴 142 · Python 75.1% / Java 24.9% · Apache-2.0
项目地址:apache/ossie 官网:ossie.apache.org
📋 项目概览
| 属性 | 详情 |
|---|---|
| 项目名 | Apache Ossie(incubating,原 Open Semantic Interchange / OSI) |
| 一句话 | 用一套厂商中立的 YAML/JSON 规范,在 BI、数据平台与 AI Agent 之间交换指标、关系和业务语义 |
| 今日排名 | GitHub Trending #1 / 17 |
| Stars | 1,055(Trending 快照;同日 API 补充核验时为 1,056) |
| Forks / Open Issues | 142 / 57 |
| 创建时间 | 2025-11-18 |
| 主语言 | Python 75.1%、Java 24.9%(主要来自转换器和验证工具,规范本身是 YAML/JSON/Markdown) |
| License | Apache License 2.0 |
| 规范版本 | main 为 0.2.0.dev0 Draft ;仓库仅见标签 osi-0.1.1-rc1,暂无 GitHub Release |
| 今日代码状态 | cdf95904,最后提交为新增 Semantido vendor;快照日仍在密集开发 |
口径说明:Stars、Forks、Issues、语言分布和排名以任务提供的 2026-07-17 Trending 快照为历史基准;提交、贡献者、标签及代码统计来自同日 API 与浅克隆后的补充核验。快照没有保留"今日新增 Stars",本文不会用排名反推增量。
🔥 为什么值得关注?
现代数据栈缺的往往不是又一个查询引擎,而是一份能跨工具流通的业务定义。同一个"收入"指标可能在 dbt、Snowflake、Salesforce、Omni 和 AI 问数助手中各写一遍:过滤条件、时间口径或关联路径稍有差异,仪表盘就会互相打架,Agent 也会在冲突上下文中生成看似合理、实际错误的 SQL。Apache Ossie 的目标,是把数据集、字段、关系、指标、SQL 方言以及 AI 上下文放进一个可版本化、可验证的中间表示。
它真正有价值的地方不是"YAML 又多了一种写法",而是试图建立数据语义层的公共交换协议。Parquet/Arrow 统一数据格式,ODBC/JDBC 统一访问接口,Ossie 则瞄准更上层的业务含义与指标逻辑。一旦中间规范被多家工具接受,企业就不必为每两套产品维护一个点对点映射,AI Agent 也能拿到经治理的指标定义、同义词和使用约束,而不是只靠表名猜业务。
不过,今天的 Ossie 仍应被看作快速演化中的 Apache 孵化规范与参考实现 ,而不是已经定型的执行引擎。main 明确标注 0.2.0.dev0 Draft;指标粒度、关系基数、语义查询语言、注册中心和参考 SQL 编译器仍在路线图中。这种"潜力很大、接口未稳"的状态,正是技术团队现在值得跟踪、但生产采用必须小步试点的原因。
🏗️ 核心特性
1. 厂商中立的语义模型:把"数据是什么"变成可交换资产
Ossie 的顶层模型围绕五类对象展开:
datasets:业务数据集及其物理来源、主键、唯一键;fields:字段或计算字段,可携带维度属性;relationships:数据集之间的简单键或复合键关系;metrics:模型级指标,可跨数据集引用字段;ai_context与custom_extensions:分别承载 AI 语境和厂商私有信息。
这意味着一份语义模型既能表达机器可执行的计算逻辑,也能表达"营收还叫销售额""回答时只使用认证指标"这类 Agent 需要的上下文。
yaml
version: "0.2.0.dev0"
semantic_model:
- name: sales
ai_context:
instructions: "回答收入问题时只使用已认证指标"
synonyms: ["营收", "销售额"]
datasets:
- name: orders
source: analytics.public.orders
primary_key: [order_id]
fields:
- name: amount
expression:
dialects:
- dialect: ANSI_SQL
expression: amount
metrics:
- name: revenue
expression:
dialects:
- dialect: ANSI_SQL
expression: SUM(orders.amount)
description: 已支付订单收入
2. Hub-and-Spoke:把转换器复杂度从平方级压到线性级
如果 N 个语义平台都直接互转,按有向转换计算,需要 N × (N - 1) 条转换路径;Ossie 作为中心格式后,每个平台只需提供导入和导出两条路径,总数变成 2 × N。
| 接入平台数 N | 点对点转换路径 | Ossie Hub 转换路径 | 理论减少 |
|---|---|---|---|
| 5 | 20 | 10 | 50.0% |
| 10 | 90 | 20 | 77.8% |
| 20 | 380 | 40 | 89.5% |
| 50 | 2,450 | 100 | 95.92% |
这不是运行时性能基准,而是架构复杂度估算。它成立的前提是各平台与 Ossie 的映射足够完整,并且导入、导出能保持 round-trip fidelity;如果核心规范无法覆盖某个平台的独特语义,复杂度会被转移到 custom_extensions 和转换器兼容逻辑中。
3. 多 SQL 方言表达式:同一业务定义保留平台原生写法
字段和指标可以同时携带 ANSI_SQL、SNOWFLAKE、DATABRICKS、BIGQUERY、MDX、TABLEAU、MAQL 等表达式。目标转换器优先选择自己的方言,缺失时回退到 ANSI SQL。
yaml
expression:
dialects:
- dialect: ANSI_SQL
expression: LOWER(email)
- dialect: SNOWFLAKE
expression: LOWER(email)::VARCHAR
- dialect: DATABRICKS
expression: lower(email)
这比在迁移时临时做 SQL 转译更可控,因为每种写法都能在代码评审中显式确认。代价也很直接:多方言副本可能产生漂移。因此项目又在提议 OSSIE_SQL_2026 可移植子集,希望把通用算术、聚合、窗口、空值与过滤语义标准化,并把厂商特性留给扩展方言。
4. AI Context 不是注释,而是语义治理接口
ai_context 可挂在模型、数据集、字段、关系和指标等层级,内容既可以是一段文本,也可以是结构化的 instructions、synonyms 和 examples。对 Text-to-SQL 或分析 Agent 而言,这提供了三层价值:
- 消歧:把"GMV、成交额、销售额"等自然语言映射到认证指标;
- 约束:告诉模型什么场景该用、什么场景不能用某个字段;
- 示范:用已审核问题或查询给 Agent 提供检索与生成锚点。
需要强调:这些字段只是可传递的上下文元数据,并不自动构成权限控制或防幻觉机制。路线图中的 verified queries、暴露控制、认证与治理钩子尚未完全落地,生产系统仍要在查询网关、数据权限和结果校验层做硬约束。
5. Schema + 语义检查 + SQL 解析的验证链
validation/validate.py 使用 JSON Schema Draft 2020-12、PyYAML 和 sqlglot,当前覆盖:
- YAML/JSON 结构、类型与枚举;
- 数据集、字段、指标、关系名称唯一性;
- 关系两端引用的数据集是否存在;
- 支持方言的字段与指标 SQL 语法。
MDX、Tableau 和 MAQL 暂不由 sqlglot 解析,会跳过语法检查。代码也尚未成为完整的语义编译器:它不会执行指标,不负责查询规划,关系字段是否真实存在、复合键业务语义和跨数据集指标是否可安全聚合,仍需要更强的 conformance suite 或目标平台验证。
6. 八组参考转换器,Python 与 Java 双栈落地
同日代码树中实际存在 8 个转换器目录:
| 转换器 | 主要实现 | 文件数 | 测试相关文件 | 观察重点 |
|---|---|---|---|---|
| dbt | Python | 13 | 4 | MSI 与 Ossie 双向映射、表达式处理 |
| GoodData | Python | 15 | 8 | 独立模型类型与 round-trip 测试 |
| Honeydew | Python | 5 | 1 | 较轻量的参考实现 |
| Omni | Python | 33 | 26 | 多文件真实布局、属性与往返测试 |
| OrionBelt | Python | 30 | 16 | OBML、本体映射、无静默丢失测试 |
| Polaris | Java | 10 | 1 | API Client、Importer、Exporter |
| Salesforce | Java | 36 | 2 | 配置驱动映射管线与多类 Handler |
| Snowflake | Python | 5 | 2 | Ossie 到 Snowflake YAML |
仓库共检出 175 个非 Git 文件、约 42,568 行文本,其中 converters/ 占约 35,778 行;另有 61 个 Python 文件、38 个 Java 文件和 28 个测试文件。GitHub 显示的"Python 75.1% / Java 24.9%"主要反映这些参考适配器,不能把语言占比误读为核心规范的运行时架构。
🔬 技术架构深度解析
当前架构:Ossie 是中间表示,不是查询引擎
text
┌──────────────────── 作者/来源 ────────────────────┐
│ dbt / Omni / Salesforce / Snowflake / 手写 YAML │
└────────────────────────┬─────────────────────────┘
│ Import Converter
▼
┌──────────────────────────────────────────────────────────────────────┐
│ Apache Ossie 中间语义模型 │
│ version │
│ ├─ datasets ─ fields ─ physical source │
│ ├─ relationships ─ simple/composite keys │
│ ├─ metrics ─ multi-dialect expressions │
│ ├─ ai_context ─ instructions/synonyms/examples │
│ └─ custom_extensions ─ vendor metadata │
└───────────────────────────────┬──────────────────────────────────────┘
│
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
JSON Schema 语义引用检查 sqlglot 语法检查
└────────────────┬────────────────┘
│ Valid Model
▼
Git / Catalog / CI / Sync Pipeline
│ Export Converter
┌─────────────────────┼──────────────────────┐
▼ ▼ ▼
BI 平台 数据/指标平台 AI Agent
这个边界很关键:Ossie 解决的是定义、交换与验证,不负责连接数据库执行查询。当前采用者应把它放在 GitOps/CI 管线与平台适配层,而不是把它当作 Cube、MetricFlow 或 BI 查询服务的直接替代品。
数据流:一次导入,验证后向多端发布
text
Vendor A Model
│
├─ 1. 导入:标准字段直接映射
│ 厂商特性写入 custom_extensions
▼
Ossie YAML/JSON
│
├─ 2. 结构校验:JSON Schema
├─ 3. 语义校验:唯一名、关系端点
├─ 4. 表达式校验:按方言交给 sqlglot
▼
Versioned Semantic Asset
│
├─ 5. 目标方言选择:目标方言 > ANSI_SQL > 警告/失败
├─ 6. 还原目标厂商扩展
▼
Vendor B / BI / Agent Context
在这个流程里,最难的不是序列化,而是信息损失管理 。Ossie 用 custom_extensions 保存核心规范无法表达的厂商设置;转换器测试则要验证 A → Ossie → A 后的结构和语义等价。Omni、GoodData、OrionBelt 已出现专门的 round-trip/property/no-silent-loss 测试,这是比"能导出一个 YAML"更有意义的成熟度指标。
当前规范与目标架构之间的缺口
| 层面 | 当前 0.2.0.dev0 可见能力 |
路线图目标 | 采用风险 |
|---|---|---|---|
| 表达式 | 多厂商方言并存,sqlglot 做部分语法检查 | OSSIE_SQL_2026 可移植子集、明确执行边界 |
同一指标的多方言版本可能漂移 |
| 指标 | 顶层 metric + SQL 表达式 | 粒度、聚合方法、派生/累计指标、指标树 | 跨粒度聚合可能语义不一致 |
| 关系 | 数据集端点、简单/复合键 | 基数、Join 类型、复杂关系 | Fan-out 与重复聚合风险尚需平台处理 |
| 本体 | 已有 ontology 草案与 Flights 示例 | 概念层、物理映射、非表格模型 | 结构互通不等于概念互通 |
| 执行 | 无内置查询执行 | 语义查询语言、参考编译器、SQL 计划 | 当前不能独立完成问数闭环 |
| 治理 | Schema、版本字段、Apache 流程 | Registry、访问控制、认证、稳定 ID | 企业级治理能力仍需外围系统 |
代码实测:三类示例通过验证
本文在提交 cdf95904 上实际运行验证器,结果为:
| 输入 | Schema | 实测结果 |
|---|---|---|
examples/tpcds_semantic_model.yaml |
core-spec/osi-schema.json |
Validation PASSED |
examples/flights.yaml |
ontology/ontology.json |
Validation PASSED |
| 本文最小 Sales 模型 | core-spec/osi-schema.json |
Validation PASSED |
验证环境为 Python 3.11,依赖 PyYAML、jsonschema 与 sqlglot。由于当前 Hermes 进程已有虚拟环境变量,实测时需清理 VIRTUAL_ENV/PYTHONPATH 后使用隔离的 uv 环境;普通独立终端可按下方虚拟环境方式运行。
📖 README 核心内容摘要
项目要解决的四类碎片化
README 与项目文档把问题归纳得很清楚:
- Metric Drift:不同工具里的同名 KPI 算法不同;
- Manual Translation:团队人工迁移、对账语义定义;
- AI Hallucinations:Agent 面对冲突或缺失的业务逻辑时生成不可靠答案;
- Integration Debt:每引入一套工具,就多一组脆弱的点对点连接。
对应的解法是把 Ossie 作为单一交换源,通过 Hub-and-Spoke 转换器分发到各平台,并用 ai_context 为 AI 提供业务说明。文档列出了 50+ 参与组织,覆盖 Databricks、dbt Labs、GoodData、Mistral AI、Salesforce、Snowflake、ThoughtSpot 等;这里应理解为项目文档声明的生态参与名单,不等同于每家都已提供生产级兼容实现。
设计哲学
- 标准化但可扩展 :核心对象尽量厂商中立,私有能力装入
custom_extensions; - 人可读、机可验:用 YAML 方便评审,用 JSON Schema 方便 IDE、CI 和程序验证;
- 逻辑与执行解耦:规范描述业务含义,不强制绑定某个数据库或查询引擎;
- 渐进采用:先选一个成熟模型试点,不要求一次重写所有平台;
- Apache 治理 :重要规范变更要公开讨论、至少 7 天评审,并需要三个绑定
+1且无否决。
版本与成熟度必须分开看
项目文档称当前开发版本为 0.2.0.dev0、latest released 为 0.1.1,但同日 GitHub API 没有返回正式 Release,标签列表只看到 osi-0.1.1-rc1。这可能是发布流程与仓库页面尚未同步,也可能意味着正式发布仍处在 Apache 孵化流程中。生产采用时应锁定具体 schema 文件与 commit SHA,而不要只依赖 README 中的"latest"措辞。
生态集成现状
README 主清单明确提到 dbt、GoodData、Polaris、Salesforce 等;代码树还包含 Omni、OrionBelt、Honeydew、Snowflake。需要逐个审计方向覆盖度:有的实现双向 import/export,有的只有单向导出;有的测试 round-trip,有的测试量仍较少。因此"目录存在"只能证明参考代码已开始落地,不能直接等价为完整兼容认证。
🚀 快速上手
1. 克隆并准备验证环境
bash
git clone https://github.com/apache/ossie.git
cd ossie
python3 -m venv .venv
source .venv/bin/activate
python -m pip install 'pyyaml>=6.0.3' 'jsonschema>=4.26.0' 'sqlglot>=30.12.0'
2. 验证仓库自带的 TPC-DS 模型
bash
python validation/validate.py examples/tpcds_semantic_model.yaml
# Validation PASSED: tpcds_semantic_model.yaml
3. 建立一个最小模型
保存为 sales.yaml:
yaml
version: "0.2.0.dev0"
semantic_model:
- name: sales
datasets:
- name: orders
source: analytics.public.orders
primary_key: [order_id]
fields:
- name: amount
expression:
dialects:
- dialect: ANSI_SQL
expression: amount
metrics:
- name: revenue
expression:
dialects:
- dialect: ANSI_SQL
expression: SUM(orders.amount)
ai_context:
synonyms: ["营收", "销售额"]
bash
python validation/validate.py sales.yaml
# Validation PASSED: sales.yaml
4. 接入 CI
yaml
# .github/workflows/validate-ossie.yml
name: Validate Ossie Model
on: [push, pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- run: pip install pyyaml jsonschema sqlglot
- run: python ossie/validation/validate.py semantic-models/sales.yaml \
--schema ossie/core-spec/osi-schema.json
更稳妥的企业试点方式是:先把 Ossie 仓库或 schema 固定到特定 commit,在 PR 中评审语义变更;验证通过后再调用目标平台转换器,并对导出物执行平台原生校验与关键指标回归测试。
📊 增长速度与社区热度
增长速度评估
| 指标 | 数据 | 解读 |
|---|---|---|
| Trending 排名 | #1 / 17 | 当日关注度极高,但不能等同于长期采用率 |
| 快照 Stars | 1,055 | 同日 API 补充核验已变为 1,056 |
| 今日新增 Stars | 未保留 | 不根据排名或前后 API 差值伪造全天增量 |
| 项目年龄 | 约 240.02 天 | 从 2025-11-18 创建时间算至快照日 |
| 生命周期平均 | 约 4.40 Stars/天 | 仅是累计基线,不能代表当日增长速度 |
| Fork / Star | 13.46% | 142 Forks,参与/二次开发信号较强 |
| Open Issues | 57 | 每千 Star 约 54.03 个,反映规范仍在快速讨论与打磨 |
| Commits | 210 | 完整历史核验值 |
| 近 7 / 30 天提交 | 44 / 50 | 88% 的近 30 天提交集中在最近 7 天,开发显著加速 |
| 贡献者 | API 分页约 30 人 | Git 历史识别到 36 个 author identity,口径不同 |
从绝对 Star 看,Ossie 还不是大众级项目;从协作结构看,它更像一个正在进入标准化窗口的行业工程。Top Contributors 中 khush-bhatia 36 次、kurtStirewalt 31 次、karanasher 19 次、sfc-gh-kbhatia 16 次、baruchoxman 15 次,贡献并非完全由单一账号承担。最近提交覆盖 Omni、OrionBelt、dbt、表达式语言、许可证与 ASF 模板,说明热度背后有真实的规范和适配器推进,而不只是 README 宣传。
风险同样明显:57 个 Open Issues、Draft 版本、没有正式 GitHub Release,以及大量核心语义仍在路线图中,意味着接口和模型可能继续变化。综合判断为:短期增长动能高,行业影响潜力高,规范稳定性中低,生产成熟度处于早期试点阶段。
今日 GitHub Trending 完整榜单
排名来自任务快照;Stars 与语言为同日 GitHub API 补充核验,快照未保留各项目"今日新增 Stars"。列表严格按抓取顺序排列。
| # | 项目 | 同日 Stars | 主语言 | 一句话定位 |
|---|---|---|---|---|
| 1 | apache/ossie | 1,056 | Python | AI、分析与 BI 的厂商中立语义交换规范 |
| 2 | Nutlope/hallmark | 11,393 | CSS | 面向编码 Agent 的反 AI 同质化设计 Skill |
| 3 | OpenCut-app/OpenCut | 74,362 | TypeScript | 开源 CapCut 替代品 |
| 4 | PostHog/posthog | 35,980 | Python | 分析、回放、实验、日志与 AI 可观测平台 |
| 5 | openinterpreter/openinterpreter | 66,132 | Rust | 面向开放模型的本地 Coding Agent |
| 6 | PrismML-Eng/Bonsai-demo | 1,617 | Shell | PrismML Bonsai 演示项目 |
| 7 | hasaneyldrm/exercises-dataset | 15,231 | HTML | 1,324 个动作、六语言说明的健身数据集 |
| 8 | Shubhamsaboo/awesome-llm-apps | 123,226 | Python | 可运行的 Agent 与 RAG 应用合集 |
| 9 | lobehub/lobehub | 80,333 | TypeScript | AI 团队编排与持续运营平台 |
| 10 | YimMenu/YimMenuV2 | 1,532 | C++ | GTA 5 Enhanced 实验性菜单 |
| 11 | HKUDS/DeepTutor | 27,082 | Python | 终身个性化 AI 教学系统 |
| 12 | mattpocock/skills | 174,841 | Shell | 工程师编码 Skills 集合 |
| 13 | github/copilot-sdk | 9,716 | Java | 将 Copilot Agent 集成到应用的多平台 SDK |
| 14 | ibelick/ui-skills | 4,503 | TypeScript | 面向设计工程师的 UI Skills |
| 15 | Graphify-Labs/graphify | 89,509 | Python | 把代码、文档与媒体构造成可查询知识图谱 |
| 16 | codecrafters-io/build-your-own-x | 526,623 | Markdown | 从零重建技术系统的学习资源 |
| 17 | ossu/computer-science | 206,732 | HTML | 免费、自学型计算机科学课程路径 |
🎯 适用场景
| 场景 | 为什么适合 Ossie | 落地建议 |
|---|---|---|
| 多 BI 平台指标治理 | 用同一份指标、字段和关系定义减少口径漂移 | 先选收入、活跃用户等少量核心指标试点 |
| dbt / Warehouse / BI 迁移 | Hub 格式减少重复手写映射 | 对转换前后模型做 round-trip 与结果回归 |
| 企业 Text-to-SQL / 数据 Agent | ai_context 提供同义词、说明与示例 |
与权限网关、认证指标、查询审核共同使用 |
| 数据目录与语义资产管理 | YAML 可进 Git,Schema 可进 CI | 固定 schema commit,建立 Owner 和 PR 审批规则 |
| 软件厂商增加互操作能力 | 接入一套 Ossie import/export 即可连接更多生态 | 明确不支持能力与 custom_extensions 策略 |
| 行业标准与研究评估 | Apache 治理、公开路线图,适合参与规范讨论 | 重点跟踪粒度、关系基数、表达式语言与 Registry |
暂不建议直接采用的情况
- 需要开箱即用的指标查询 API 或 SQL 执行引擎;
- 强依赖复杂粒度、累计指标、非等值 Join、权限策略而无法接受自建扩展;
- 无法锁定 schema 版本,却要求长期稳定兼容;
- 只使用单一 BI 平台,且不存在跨工具语义迁移问题。
💡 总结
Apache Ossie 的野心,是成为"语义层的 Parquet":不是替代数据库、BI 或指标平台,而是让它们能交换同一套业务意义。它把数据集、关系、指标、多 SQL 方言、AI 上下文和厂商扩展组织成可审查、可验证、可版本化的中间模型,并用 Hub-and-Spoke 把 N 个工具之间的连接复杂度从平方级降为线性级。
今天最值得关注的是方向与生态协作,而不是版本号。八组转换器、50+ 组织名单、近 7 天 44 次提交和 Apache 治理证明项目正在加速;0.2.0.dev0 Draft、缺失的执行引擎、尚未定型的粒度与关系语义,则提醒我们不要把愿景当成完成度。对多平台数据团队,最佳策略不是立即全量迁移,而是锁定 commit,从一个高价值语义模型开始,建立验证、转换和结果回归闭环。
数据来源:GitHub Trending 快照(2026-07-17)、GitHub REST API、Apache Ossie README / docs / core spec / roadmap,以及对提交 cdf95904 的本地代码树与验证器实测。