Nvidia — 开源自动本体库
摘要
NVIDIA 发布了 Auto Ontology,这是一个开源(Apache 2.0)库,能够基于企业元数据构建可信赖的上下文/本体层,统一各系统间的指标定义,并通过 MCP、CLI 和 API 暴露给 Agent 框架,从而实现有据可依、经过验证的智能体分析以及由 NVIDIA NIM 驱动的自然语言转 SQL 查询。
查看缓存全文
缓存时间: 2026/11/03 09:41
NVIDIA/auto-ontology
来源:https://github.com/NVIDIA/auto-ontology
Auto Ontology
Agent 可以检索文档、查询数据库,但 agentic 分析的可靠性才是关键:一个回答得更快的收入指标,如果数字是错的,就毫无价值。Agent 需要一个上下文层,告诉它们数据在哪里、含义是什么、是否该用它、如何使用它、来自哪里,以及哪些数据与之相似。
NVIDIA Auto Ontology 是一个开源库,用于从企业元数据构建这个上下文层,在各系统之间对齐指标定义,并通过 MCP、CLI 和 API 将其提供给任意 agent 框架。它与客户已有的语义模型互补,使开发者能够:
- 发现(Discover):从元数据生成企业本体;连接现有本体和语义模型;构建面向 AI 的知识图谱。
- 接地(Ground):为指标、实体和关系提供可信的业务语义;对齐各系统间不一致的定义。
- 校验(Validate):依据经过认证的定义与数据血缘检查生成的查询;每个答案都附带来源溯源。
- 暴露(Expose):通过 MCP、CLI 和 API 将上下文提供给任意 agent 框架。
- 学习(Learn):将经过认证的修正和使用反馈回流到本体中,使共享上下文随每一次提问不断改进。
基准测试
要运行 BIRD 等 text-to-SQL 基准测试,请参考 ontology SQL 评估仓库(https://github.com/NVIDIA/ontology-sql-eval/)。
许可与贡献。 Auto Ontology 以 Apache License 2.0 发布。 本项目打包、链接或以其他方式使用的第三方开源组件列在
THIRD_PARTY_NOTICES.md中。 本项目目前不接受外部贡献。
核心特性
- 自然语言查询结构化数据 —— 将问题转换为 SQL 并在已连接的数据库上执行,由 NVIDIA NIM 驱动。
- 关系型数据源之上的语义目录 / 本体层,存储在与其描述的目录相同的 Postgres 中。
- 认证与 RBAC —— 使用 Better Auth(https://github.com/better-auth/better-auth)。
- Web UI,涵盖聊天、分析、数据目录、分析看板与设置。
- 灵活部署 —— 提供 Kubernetes 的 Helm chart,或使用 Docker Compose 在本地运行整套服务。
软件组件
| 组件 | 技术 | 职责 | 默认端口 |
|---|---|---|---|
| 前端 | Next.js 16(React 19、TypeScript、Tailwind CSS 4)、Better Auth、Prisma | Web UI、认证、API 网关 | 3000 |
| 后端 | FastAPI(Python 3.12+)、LangChain | 聊天 / NL-to-SQL、数据目录、数据源 API | 3001 |
| 摄取 worker | FastAPI(Python 3.12+) | 摄取表格数据并写入向量嵌入 | 3002 |
| Postgres + pgvector | 关系型数据库 | 应用元数据、目录与本体、向量存储 | 5432 |
| HashiCorp Vault | 可选 | 安全存储连接凭据 | — |
NVIDIA NIM
Auto Ontology 使用 NVIDIA NIM 端点进行推理 —— 可以是托管的 NVIDIA API 目录(https://build.nvidia.com)(integrate.api.nvidia.com),也可以是自托管的 NIM。.env.example 中的默认值为:
- LLM:
nvidia/nemotron-3-nano-30b-a3b - Embeddings:
nvidia/nemotron-3-embed-1b - Reranking:
nvidia/llama-nemotron-rerank-vl-1b-v2
端点和模型通过 DEFAULT_MODELS_ENDPOINT、DEFAULT_MODELS_MODEL、EMBED_ENDPOINT 和 EMBED_MODEL 环境变量进行配置,并需要 DEFAULT_MODELS_API_KEY。
模型三元组
每个模型角色由一组三元组环境变量配置 —— _ENDPOINT(URL)、_API_KEY 和 _MODEL:
| 前缀 | 角色 |
|---|---|
DEFAULT_MODELS | 共享默认值;下面所有字段都会回退到它。 |
REASONING | 主聊天 / NL-to-SQL 模型。 |
NON_REASONING | 用于实体抽取的轻量模型。 |
EMBED | 文本嵌入模型(摄取与查询必须一致)。 |
RERANK | 检索流程使用的重排序模型。 |
你可以设置完整的三元组、仅设置其中部分字段,或完全不设置 —— 任何未设置的字段都会回退到对应的 DEFAULT_MODELS_。因此最简单的配置方式是填写 DEFAULT_MODELS_*,仅在有差异时覆盖单个三元组的字段(例如 EMBED_MODEL、NON_REASONING_MODEL)。*_API_KEY 也会出于向后兼容回退到旧的 NVIDIA_API_KEY。
部署
前置条件
- Docker 及 Docker Compose v2(例如 macOS/Windows 上的 Docker Desktop,Linux 上的 Docker Engine),用于本地运行整套服务。Kubernetes 部署请参见
DEPLOYMENT.md。 - 一个 NVIDIA API key(
nvapi-...),用于 NVIDIA NIM(聊天与摄取),可从 NVIDIA API 目录获取。 - 你要查询的源数据库的连接信息(Databricks、Postgres、Snowflake 或 DuckDB)。
安装
Kubernetes
在 Kubernetes 集群上部署 Auto Ontology,请参见 DEPLOYMENT.md。
本地(Docker Compose)
-
克隆仓库:
git clone auto_ontology && cd auto_ontology -
根据模板创建环境文件(
.env)并填写各项值(Postgres 凭据、DEFAULT_MODELS_API_KEY、CONNECTION_STRINGS等)。完整变量列表请参见.env.example:cp .env.example .env # 编辑 .env注意:
AUTH_SECRET和APP_URL是必需的 —— 缺少它们会导致每个页面都因 Better Auth 的 “default secret” 错误而失败。POSTGRES_PORT仅更改宿主机侧的端口映射(如果你机器上 5432 已被占用可设置它);容器始终通过内部网络端口访问 Postgres。
-
构建镜像并启动整套服务:
docker compose up -d --build这会构建后端(
auto_ontology)和前端(auto-ontology-frontend)镜像,启动 Postgres 和 pgAdmin,运行一次性的frontend-migrate任务以同步数据库 schema,并启动应用(后端、摄取服务和前端)。 -
打开 UI(后端 API 位于
:3001,pgAdmin 位于:5050)。
故障排查: 如果 UI 加载后缺少左侧导航面板 (或重启后看起来不正常),说明浏览器持有一个过期的会话 cookie —— 这通常发生在
AUTH_SECRET变更或数据库被重置之后。 清除localhost:3000的站点数据(或删除better-auth.session_tokencookie)后重新登录即可。
连接管理
Auto Ontology 从两个来源解析其连接的源数据库:
-
通过 UI 添加 —— 在应用内部创建的连接。使用此选项时,连接凭据以明文存储在 Postgres 中,除非配置了 Vault:
- 未配置 Vault: 完整的连接对象(包括密码)会被 JSON 序列化后未加密地存储在目录的数据库行上。
- 配置了 Vault: 凭据会以数据库名称为键写入 Vault,目录行中不存储任何凭据(数据库名称即查找键 —— 没有单独的引用字段)。Vault 仅在
VAULT_ADDR、VAULT_NAMESPACE、VAULT_ROLE_ID和VAULT_SECRET_ID全部设置时才会启用(VAULT_AUTH_MOUNT和VAULT_KV_MOUNT是可选的覆盖项)。默认关闭;配置不完整时会给出警告并忽略,回退到明文存储。
-
CONNECTION_STRINGS环境变量 —— 部署时提供的以逗号分隔的连接字符串列表(例如 Helm 的--set connectionStrings=参数)。这是一种回退机制:仅在没有通过 UI 添加的连接时才会使用。
认证
Auto Ontology 支持 SSO 认证。重定向 URI 应在 IdP 中配置为:
APP_URL/api/auth/sso/callback
API token(脚本用途)
浏览器登录后会获得会话 cookie,而脚本无法获取它。对于脚本、notebook 和定时任务,请改用API token:
- 打开用户菜单(右上角)→ API Tokens → New token。
- 为其命名,可选择过期时间(默认:永不过期),然后复制该 token。
Auto Ontology 只存储其 SHA-256 哈希值,因此 token 只会显示一次。丢失后只能重新生成。在任何 /api/... 调用中通过 x-api-key 发送它 —— Authorization: Bearer 也同样可用:
curl -H "x-api-key: $AUTO_ONTOLOGY_API_TOKEN" https://auto_ontology.example.com/api/terms
import os
import requests
session = requests.Session()
session.headers["x-api-key"] = os.environ["AUTO_ONTOLOGY_API_TOKEN"]
terms = session.get("https://auto_ontology.example.com/api/terms").json()
answer = session.post(
"https://auto_ontology.example.com/api/chat/completions",
json={"question": "How many orders shipped last week?"},
).json()
值得注意的几点:
- token 以其所有者的身份行事。 它本身不携带任何权限 —— 每次调用都依据所有者的角色进行授权,与在浏览器中完全一致。viewer 的 token 无法执行管理操作。
- 整个 API 面都接受它。 认证在一处统一解析(
frontend/auth/resolve-user.ts),适用于所有路由,因此docs/openapi/auto-ontology-api.json中任何非withPublic的端点都可以使用 token。 - 吊销即时生效。 在 UI 中删除该 token,或删除/封禁其所属用户,下一个携带该 token 的请求就会收到 401。
- token 不能管理 token。 创建和吊销需要已登录的会话,因此泄露的 token 无法为自己签发后继者。
Agent API 会话
公开客户端调用经过认证的 Next.js 网关:POST /api/chat/completions。响应是一个 SSE 流,包含 step、result 或 error 事件,最后以 [DONE] 结束。
conversation_id 是可选的:
- 省略它表示无状态的一次性请求。
- 提供客户端生成的 UUID 可创建或继续一个会话。
- 在同一线程的每一轮中复用相同的 UUID。
在发送下一轮之前请等待 [DONE];对同一会话的重叠请求会返回 409 Conversation in progress。
{
"question": "What about last month?",
"conversation_id": "d61d8aa3-d496-4fa7-97ce-4f831c162e7f"
}
对于会话式请求,FastAPI 会加载最近最多五个已完成的轮次(上限 12,000 字符),并在运行现有的 text-to-SQL 图之前,将 “What about August?” 这类上下文输入改写为独立问题。独立问题则原样传递。内部 agent 思考、图表负载、错误以及原始 SQL 结果集不会被复用为上下文。会话历史按已认证的 Auto Ontology 用户隔离。
浏览器和服务端调用方应使用 Next.js 网关,它会解析用户身份并将内部的 x-auto-ontology-user-id 头转发给 FastAPI。FastAPI 端口是一个受信任的内部服务边界:它不得对外暴露,因为该请求头不会被 FastAPI 独立验证。不带 conversation_id 的直接 FastAPI 请求仍是无状态的;带 conversation_id 的直接请求则需要受信任的身份头。Web UI 会自动管理 UUID。API 创建的会话,如果属于当前登录用户,可在 UI 中通过 /chat?focus= 打开。
Agent 技能
编码 agent 请从 AGENTS.md 开始。技能位于 skills/(nvidia-ontology-setup、nvidia-ontology-management、nvidia-ontology-query)。维护者继续使用 CLAUDE.md。
MCP server
Cursor 和 Claude Desktop 等 agent 框架可以通过 Auto Ontology 的 MCP(https://modelcontextprotocol.io)server 查询你的数据。运行方式参见 mcp/,详细信息参见 docs/mcp.md。
许可
Auto Ontology 以 Apache License, Version 2.0 授权。SPDX 标识符:Apache-2.0。本仓库中每个 NVIDIA 编写的源文件都带有如下形式的 SPDX 头:
SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0
Auto Ontology 使用的第三方开源组件(含其上游许可证和项目 URL)列在 THIRD_PARTY_NOTICES.md 中。容器镜像额外添加的组件单独列在 CONTAINER_THIRD_PARTY_NOTICES.md 中。
声明与免责声明
声明与免责声明:本软件会自动检索、访问或与外部材料交互。这些检索到的材料不随本软件分发,仅受各自的条款、条件和许可证约束。您有责任自行查找、审查并遵守所有适用的条款、条件和许可证,并验证任何检索到的材料针对您特定用例的安全性、完整性和适用性。本软件按 “AS IS” 提供,不附带任何明示或暗示的保证。作者对任何检索到的材料不作任何陈述或保证,也不对您使用或无法使用本软件或任何检索材料所导致的任何损失、损害、责任或法律后果承担责任。使用本软件和检索到的材料的风险由您自行承担。
Auto Ontology 在运行时交互的外部材料:
| 材料 | 时机 | 条款 |
|---|---|---|
NVIDIA 托管的模型 API(build.nvidia.com(https://build.nvidia.com)、integrate.api.nvidia.com),用于 LLM、嵌入和重排序 | 聊天、摄取和语义编译,使用默认模型配置 | NVIDIA API 目录及各模型的条款 |
你配置的任何其他 OpenAI 兼容模型端点(*_ENDPOINT / *_MODEL) | 同上 | 该提供商和模型的条款 |
| KumoRFM 预测查询服务 | 仅当设置了 KUMO_RFM_API_KEY 时 | Kumo 的条款 |
| 你的源数据库 | 摄取、数据分析和查询执行 | 你与这些系统签订的协议 |
贡献
本项目目前不接受外部贡献。 来自 Auto Ontology 维护团队之外提交的 issue、pull request 和补丁不会被审查或合并。安全相关报告请遵循 SECURITY.md 中描述的流程。维护者工作流程见 CONTRIBUTING.md。
相似文章
NVIDIA Agent Toolkit 扩展,让企业智能体扎根于公司数据
NVIDIA 扩展其开源 Agent Toolkit,新增 Agent Knowledge Foundation,并加入 CUDA-X 库、Auto-Ontology、Nemotron Retriever 和 Kumo 系列结构化数据模型,同时提供 OpenShell 运行时和 NemoClaw 蓝图,帮助企业将 AI 智能体与自有公司数据结合,并施加治理控制。早期采用者包括 Palantir、Databricks、Snowflake 和 Amazon OpenSearch Service。
@nvidia: 每个企业都有不同的数据、工作流程和标准。其AI也应如此。观看了解NVIDIA Nemotro…
NVIDIA强调其Nemotron开放模型如何让团队构建针对业务数据和工作流程量身定制的、值得信赖的专用AI。
智能体数据
NVIDIA 讨论了开放数据和合成数据对于构建稳健 AI 智能体的重要性,并重点介绍了他们用于训练、推理和工具使用的 Nemotron 开放数据集。
欢迎 NVIDIA Cosmos 3:首个用于物理AI推理与行为的开放全能模型
NVIDIA Cosmos 3 是一个面向物理AI的开放全能模型,它将世界生成、推理和行为生成统一到一个模型中,现已可在 Hugging Face 上获取,并提供多种资源。
NOAN
NOAN 为AI代理提供经过验证和版本化的业务事实真相来源,可通过API和MCP访问,以确保模型和应用程序间的一致性。