P2 LightFoundry — 本体论驱动的企业数据操作系统
对标 Palantir Foundry。核心资产是 Object / Link / Action 本体 + 指标语义层 + Action 唯一写路径;是全矩阵的语义层地基(AIP 的准确率来自 Foundry 的口径)。V5 补齐数据域 / 协作域 / 语义互操作 / 生态工程。服务端口 18081。
本体四层(Object / Property / Link / Action)
products/foundry/ontology/(models/repository/service/version/impact/yaml/validate)实现本体论引擎完整版:
| 要素 | 说明 | 关键字段/语义 |
|---|---|---|
| Object Type | 稳定标识 api_name + 内部自增 id(对外 rid 语义),主表 + ≤3 补充表、主键列(可复合) | api_name / base_table / pk_columns(JSON) / supplementary_sources / object_type_group |
| Property | 映射列或计算属性,约束体系 + 同义词 + PII/列级安全标记 | constraints(JSON: unique/format/range/enum) / is_primary_key / synonyms / is_pii / column_security |
| Link Type | 方向(directed/bidirectional/undirected)、基数(1:1/1:N/N:M)、Link 自身属性、N:M 用独立 join 数据集 | direction / cardinality / join_dataset(JSON) / link_properties(JSON) |
| Action Type | 类型化参数 Schema + 提交前校验 + 编辑类型(create/modify/delete/link)+ 逐动作授权 + 强制审计 + 回写声明 | param_schema(JSON) / validation_rules(JSON) / edit_type / write_back_config(JSON) / idempotency_key_field |
可选骨架:Interfaces(对象多态,属性集合匹配 + 统一查询展开)、Shared Property(跨对象复用属性定义)。
版本管理(状态机 / 冲突检测 / 审批)
- 快照式版本:改动产生新版本快照(不可变历史),
ontology_versions存snapshot+base_version(main 基线)+change_diff(新增/修改/删除的属性、链接、动作 JSON)。 - 状态机:
draft → review → merged+ 回滚;draft/review 带 base_version。 - 冲突检测:merge 时聚合 main 自 base_version 后所有版本的 change_diff,同 kind + 同 api_name 且 op 均为 modify/delete → 真冲突阻塞需人工解决;禁止以单版本 diff 判定(防漏检多版本累计修改)。
- 审批策略:
approval_policy(最少批准人数 / 禁自我批准 / per-resource reviewer);受保护资源(requires_approval)未过审不得 merged。 - 影响分析:合入前计算受影响的指标/报表/Agent 检索,merge 返回影响对象列表与 build 建议(
POST /ontology/objects/:id/impact)。
YAML 声明式导入导出
本体定义可用 YAML 导出/导入(ontology/yaml.go),随 Apollo bundle 分发(契约④)。对象/属性/关系/动作一律用稳定 api_name/rid 引用(不用内部自增 id),字段命名参考 dbt MetricFlow / OSI。导入时两遍扫描解析 link 目标。
GET /ontology/objects/:id/export?format=yaml— 导出(Gotham 图 seed、Apollo ontology_yaml 组件的生产者)。POST /ontology/objects/import— 导入(api_name/rid 引用)。
指标语义层(entity / dimension / measure / metric)
products/foundry/metric/ 对齐 dbt MetricFlow / OSI 四层:
| 层 | 表 | 要点 |
|---|---|---|
| Entity | metric_entities | 决定 grain 的键;每个语义模型恰好一个 is_primary_entity + primary_time_dimension(必填) |
| Dimension | metric_dimensions | categorical | time;time 带 granularity(day/month/quarter/year);单数命名 |
| Measure | metric_measures | 聚合 sum/count/avg/min/max;计数用 expr:1 + agg:sum |
| Metric | metric_definitions | 类型分级 simple → ratio → derived → cumulative;口径在指标里算而非预聚合(防口径漂移) |
聚合查询 POST /metrics/query(按指标名+维度+粒度),对象级权限在查询层生效;demo seed:customer/order/product + total_gmv/aov 指标。
语义查询 / 防注入 / OOL / SemanticSearch
products/foundry/semantic/(mapper/query/search/ool):
- 对象 → SQL 翻译引擎:对象定义(映射列 + link)→ SQL;参数白名单防注入(过滤算子/值类型白名单校验)+ link 自动 JOIN + RLS/CLS 注入 + OOL 轻量版。
- OOL(Ontology Query Language 轻量版,语义冻结):单对象遍历式,一次只针对一个对象类型;跨对象用
traverse(对应 OQL TRAVERSE_TO)进入相邻对象再过滤;禁止点号引用(related.field不允许);过滤算子eq/neq/lt/lte/gt/gte/is_null/contains/starts_with+ and/or/not;查询最多 3 层深。 - SemanticSearch(契约①):按文本匹配指标/对象/属性返回结构化结果(
POST /ontology/semantic-search),供 AIP OAG 检索。 - Ontology SQL:按稳定
rid/api_name引用对象类型(列名 = 属性 api_name)。
// OOL 请求示例(对象属性过滤 → SQL 翻译)
{ "object_type": "order", // 按 api_name
"filters": { "status": { "eq": "shipped" }, "amount": { "gte": 1000 } },
"traverse": [ { "link": "purchased_by", "then_filters": { "level": { "eq": "VIP" } } } ],
"select": ["id", "amount", "created_date"], "limit": 50 }
Action 写路径安全流水线(唯一写入口)
products/foundry/writepath/(pipeline/schema_validator/idempotency)——所有数据回写必须走 Action Type,无绕过路径(R2 红线)。
执行四模式
| 模式 | 行为 |
|---|---|
| VALIDATE | dry run:走完整安全流水线但不落盘、不执行编辑(对应 /ontology/actions/:name/validate) |
| RUN | 同步执行:事务内复核校验 → 乐观锁回写 → 编辑态落盘 → 幂等登记 → 状态更新 |
| ASYNC | 异步执行长任务,立即返回 pending + operation_id,客户端轮询 |
| VALIDATE_AND_EXECUTE | 先 VALIDATE 复核通过后进入 RUN 事务 |
安全流水线八步(与只读侧 RLS SQL 改写不同;已核实 2026-09-08)
- 参数 Schema 校验:按
ontology_actions.param_schema(JSON Schema)校验入参; - ValidationRules 前置校验:求值动作提交前校验规则(表达式条件),失败聚合提示且失败即阻断(默认安全,规则空时零开销跳过,B7-6);
- 逐动作授权(RBAC):校验操作者对 Action 的执行权限;
- 记录级写权限:非 SQL 改写,SELECT 主键 + RLS 可见性双计数;无边界写(无 WHERE)整批拒绝;
- 属性级写权限三分:Read → EditProperty → EditPolicyProperty,未授权属性返回 null/隐藏值而非整行拒绝;
- 幂等与事务:幂等键(AIP 用 action_run_id,Swift 用 UETR)+ DB 事务包裹,重复提交返回首次结果(
ACTION_IDEMPOTENT_REPLAY); - 乐观并发控制:回写 SQL 带
updated_at = :expected条件(毫秒精度,避免秒级盲区);受影响行数 = 0 → HTTP 409 +ACTION_CONFLICT+ latest_state,客户端以最新状态重试。 - 强制审计:每个终态落底座 audit(异步队列),记录 who/when/prior state(修改前状态快照)。
validation.result == "VALID" 为准。Action 编辑态独立持久到 ontology_edits(prior state + object_version);批量管道回灌覆盖用户编辑是反模式(禁止)。回写事务模式(write_back_config.mode)
pre:先回写源系统,成功后才提交本体变更;回写失败全部本体变更回滚(伪原子,适合 Swift 结算/对账)。post:先提交本体变更与编辑态,再异步副作用;副作用失败不影响已提交(适合通知/审计)。
管道构建器 + 数据质量
products/foundry/pipeline/:
- SQL 步骤管道:
pipeline_definitions= 数据源 + 有序 SQL 步骤(SELECT/transform)+ 目标对象映射 + 触发方式(手动/定时)。范围:单数据源内 SQL 步骤(跨源 join 不做,与单机优先一致)。 - 输出写模式:
append | append_only_new | snapshot_replace | snapshot_replace_and_remove | changelog;对象类型同步优先 changelog / snapshot_replace。 - 输出期望(质量规则挂输出):未达标不得部署,失败告警 + 隔离。规则类型:null / format / unique / referential 四类,问题跟踪(open/acknowledged/fixed)。
- API:
/pipelinesCRUD +/pipelines/:id/run+ runs/enable/disable;/quality/rules+/quality/issues。
数据血缘(四级链路 + Action 写边)
products/foundry/lineage/:data_lineage 记录 上游 → 下游 边,MVP 先做四级血缘:源 → 管道 → 对象 → 指标 → 报表(字段级 P2)。
- Action 写操作是血缘边:
upstream_type=action,支撑"谁在何时改了什么"回溯与审计(血缘写入点:元数据导入、管道执行、Action 执行、指标定义、报表创建)。 - 查询
GET /lineage支持上下行追溯;分支上移除资源破坏下游血缘时告警。
数据集 / 质量画像 / 同步(V5 数据域)
products/foundry/dataset/(fd_datasets + fd_dataset_versions 版本快照,行数据动态表 ds_<safe> 列名白名单防注入):从数据源拉数建集(platform_ds)或 CSV/JSON 上传(XLSX 明确报错降级),版本发布与历史追溯、数据预览、基础画像(null 率/distinct/top5)与血缘记录;资源 URI dataset://foundry/<rid>。
| 模块 | 表 | API | 要点 |
|---|---|---|---|
| 数据集 | fd_datasets/fd_dataset_versions | /datasets CRUD + upload + /datasets/:id/versions/publish|preview|profile | 平台内版本化、可寻址数据资产;软删 archived;发布版本并发冲突 409 |
| 质量画像 | fq_profiles/fq_scores | /quality/profiles CRUD + /quality/profiles/:id/run|scores | 完整性/唯一性/有效性/时效性四因子 SQL 下推加权,低于阈值经 bridge 写入 pipeline quality issues 闭环 |
| 同步引擎 | fs_sync_targets/fs_sync_runs | /sync/targets CRUD + /sync/targets/:id/run|runs | full=事务内重写;incremental=watermark 断点续传 + 冲突跳过;经 task 任务化,成功链→血缘→质量画像自动跑 |
| 数据源自管理 | 平台 data_sources | /datasources CRUD + test + import-metadata | v5 起 Foundry 独立自管理(foundry_import_metadata 任务化,不再依赖 AIP) |
对象化 SQL 工作台 + 编辑态聚合叠加(V5)
products/foundry/query/(translate.go/rest.go):以对象名直查的受限只读 SQL——翻译器将 FROM/JOIN 对象名替换为物理表、属性替换为物理列,注入 RLS/CLS 只读安全、强制外层 LIMIT(无则补 500、上限钳 5000)。安全模型:标识符白名单 + 关键字黑名单(DML/多语句拒绝)+ 字符串参数化。API:POST /ontology/sql/translate|execute。
semantic/edit_overlay.go(B1-5):编辑态一致性——行级查询与聚合查询均正确叠加编辑态数据(LoadEditValues/HasRelevantEdits/OverlayAggregate),聚合回退为行级 + 内存聚合(上限 10000,超限 approximate 标注),保障分析口径一致(红线测试通过)。
Notebook / 块式报表 / Fusion / 流规则(V5 协作闭环)
| 模块 | API | 要点 |
|---|---|---|
| Notebook | /notebooks CRUD + /notebooks/:id/cells/:cid/run + /notebooks/:id/run|runs | 文本/SQL/图表三类单元格混排,逐块或全量运行;SQL 块复用 OntologySQL 安全翻译 + RLS/CLS + 编辑态叠加;chart 块复用引用 SQL 块结果集(不重算) |
| 块式报表 | /reports CRUD + /reports/:id/run|dispatch|runs + /report-runs/:id/snapshot | 文本/图表/表格块编排,定时生成快照(scheduler report:<rid>)+ email/站内多渠道分发;报表与指标血缘自动记录(RecordMetricToReport) |
| 实体消解 Fusion | /fusion/projects CRUD + /fusion/projects/:id/run|matches + /fusion/matches/:id/confirm|reject | 规则分桶 + 相似度加权(精确/前缀/编辑距离)→ 阈值外 LLM 复核 → union-find 聚类 → survivorship 选主;结果写回原数据(in_place_edit)或输出数据集(materialize) |
| 流事件化 | /stream/rules CRUD + /stream/rules/:id/test|deliveries | 基于 CDC watcher 事件的条件规则(condition 表达式),action 支持 webhook/notification/sync_run/quality_run/writeback(writeback 走 writepath 八步安全流水线不可绕过) |
ValueType / 本体函数 / MCP / 安全标记 / OWL-SHACL(V5 语义互操作)
| 能力 | API | 要点 |
|---|---|---|
| 标准值类型 | GET /ontology/value-types、POST /ontology/value-types/normalize | 13 类冻结枚举(text/number/integer/decimal/currency/percentage/date/datetime/bool/enum/json/array),自动归一化(text+enum→enum、number+单位→currency/percentage、precision→integer/decimal),dry-run 预览 + confirm 写库 |
| 本体函数 | /ontology/functions CRUD + /ontology/functions/:name/test | 内置 13 个函数(len/abs/round/min/max/coalesce/if/ifnull/concat/upper/lower/now/date_trunc)+ 用户自定义注册,可被条件表达式与计算属性引用(递归深度 ≤5) |
| MCP 协议 | POST /api/v1/mcp(SSE 传输预留) | JSON-RPC 2.0 双传输(stdio / HTTP SSE 复用 JWT),工具 5 个(search_objects/query_objects/get_metric/execute_action/get_dataset),execute_action 走 writepath 八步不可绕过、越权 403;默认关闭(foundry.mcp.enabled=false),调用全程审计 |
| 安全标记 | /markings + /markings/bindings + /markings/user-markings | 对象/列级安全标记(fg_markings)+ 用户授权矩阵(fus_user_markings);隐藏列自动叠加至列级安全(任一来源隐藏即隐藏,NULL AS col) |
| 标准导出 | GET /ontology/objects/:id/export?format=owl|ttl|yaml、GET /ontology/objects/:id/shacl、GET /ontology/export/owl | OWL/TTL(Class/DatatypeProperty/ObjectProperty/subClassOf)与 SHACL(NodeShape/PropertyShape、基数/枚举由约束推导)标准格式导出,便于外部系统互操作 |
| 写入前校验 | Action.ValidationRules | 动作执行前自定义校验规则(表达式条件),失败聚合提示且失败即阻断(默认安全);安全流水线为 8 步,此为第 2 道(见 §writepath) |
组件市场 / 代码仓库 / 统一搜索 / CLI(V5 生态工程)
| 能力 | API | 要点 |
|---|---|---|
| 组件市场 | /marketplace/items CRUD + publish/install/installs | 组件与应用发布、一键安装与跨环境复用(object→YAML 信封、metric/dashboard/app/notebook/fusion 组包),版本 +1 历史保留、下载计数、unlisted 拒绝安装 |
| 代码仓库 | /coderepo/repos|files|revisions + /coderepo/macros/resolve | SQL 宏定义({{macro:name}} 展开,SqlWorkbench 与 Notebook 双生效)+ 版本化代码仓库(UNIQUE(repo_id,path),版本覆盖归档,迭代展开 maxMacroDepth=5) |
| 统一搜索 | GET /nexus/search?q=&scopes=&limit= | 多 scope 并行 + RRF 融合(1/(60+rank)),同 URI 跨 scope 累加去重;对象级可见性注入;前端顶栏全局搜索框防抖 + URI→路由映射 |
| CLI | cmd/actionctl | 7 子命令(login / ont export|import / dataset / task / metric query / mcp ping),token 存 ~/.actionctl(0600),JSON 输出 + --format table |
HTTP API 分组(/api/v1,V5 后 100+ 路由)
| 分组 | 路径 |
|---|---|
| 认证 | /auth/register|login、/me |
| 本体对象 | /ontology/objects CRUD |
| 版本状态机 | /ontology/objects/:id/versions|drafts|rollback、/ontology/drafts/:vid/review|merge |
| YAML / 影响分析 | /ontology/objects/:id/export、/ontology/objects/import、/ontology/objects/:id/impact |
| 链接 / 动作 | /ontology/links CRUD、/ontology/actions CRUD、/ontology/actions/:name/validate|execute |
| 语义检索 / 对象查询 | /ontology/semantic-search、/objects/:id/query |
| 指标语义层 | /metrics CRUD + query/catalog、/metrics/entities + dimensions/measures |
| 管道 / 血缘 / 质量 | /pipelines + run(任务化)、/lineage、/quality/rules|issues|profiles |
| 数据集 / 同步 | /datasets CRUD + upload/versions/preview/profile、/sync/targets CRUD + run/runs |
| Ontology SQL / 协作域 | /ontology/sql/translate|execute、/notebooks、/reports、/fusion/projects、/stream/rules |
| 语义互操作 | /ontology/value-types、/ontology/functions、/markings、/ontology/export/owl、/ontology/objects/:id/shacl、/api/v1/mcp |
| 生态工程 | /marketplace/items、/coderepo/repos|files|revisions|macros/resolve、/nexus/search |
| 系统任务 | /system/tasks(Foundry 前缀差异)、/scheduler/jobs、/scheduler/jobs/:name/runs |
| 数据源 / 通知 | /datasources(自管理,任务化导入)、/notify/channels、/notify/send |
统一响应 {code:0, data:...};错误 {code, error}。demo seed:customer/order/product 本体 + GMV/AOV 指标。契约测试 TestOpenAPIContractRoutes 双向对拍 openapi spec 与 gin 路由。