文档核对日期:2026 年 11 月 7 日。部署步骤按当日官方仓库 main 分支整理。

1. 信息摘要

NVIDIA 开源的 Auto Ontology 用来解决一类常见问题:数据库里有数据,但智能体不知道业务名词对应什么字段,也不清楚应该按什么口径计算。

例如,用户问“上个月的销售额是多少”,数据库里可能同时有订单金额、开票金额、实收金额,还涉及退款、取消订单和统计日期。即使 SQL 能执行,选错字段或漏掉条件,结果也会出错。

Auto Ontology 会读取数据库的结构和部分数据,建立业务术语、计算表达式与表关系的初稿,再由使用者检查和确认。智能体回答问题时,可以检索这些定义、生成 SQL,并返回查询结果和所用 SQL,方便核对。

项目采用 Apache-2.0 许可证,提供 Web 界面,以及供程序和智能体使用的 API、MCP 接口。

来源:官方仓库与项目说明。

2. 具体功能

把业务名称对应到数据库字段

系统可以为“客户”“订单”“发票明细”等概念建立说明、别名及字段映射,也可以整理表之间的连接关系。

这里的“本体”可以理解为一套业务词典,加上词语之间的关系和计算规则。例如:

客户 → 有哪些订单
订单 → 包含哪些明细
销售额 → 使用哪个金额字段、按什么条件汇总

这些信息存入语义层后,智能体查询时就有了可参考的定义。

保存可复用的指标计算规则

业务指标可以关联经过审核的 SQL 表达式。这样,不同问题涉及同一个指标时,可以复用已确认的计算规则。

以“净销售额”为例,是否扣除退款、如何处理折扣,需要业务人员先说清楚。系统可以帮助生成初稿,但审核这一步仍然必要。

用自然语言查询,并查看计算过程

用户可以直接提问。系统会检索相关术语、字段和计算表达式,生成并执行 SQL,返回答案、SQL 和结果数据。

这让使用者能够核对时间范围、过滤条件和关联关系。查询可以执行,只说明语法和运行条件满足要求,业务结果仍需与已确认的口径对照。

工作流程见:官方原理说明。

接入多种数据库

当前文档列出的数据源包括 PostgreSQL、MySQL、Databricks、Snowflake、ClickHouse、Trino、Apache Kyuubi、HeavyDB、DuckDB 和 SQLite。

数据源既可以通过界面配置,也可以写入环境变量。DuckDB、SQLite 目前需要使用连接字符串配置。

来源:数据库连接文档。

给已有智能体提供查询工具

MCP 接口提供的主要工具包括:

工具作用
check_readiness检查语义层和数据库连接是否具备查询条件
search_terms查找业务术语
get_term查看术语定义和关联关系
check_answerable检查现有语义层能否覆盖问题
ask_question执行问答,返回答案、SQL 和数据行

这些工具采用只读方式提供查询能力,并按登录用户的权限工作。它们适合接到已有的数据助手或业务问答智能体中。

来源:MCP 文档。

3. 如何接入

第一步:准备运行环境

本地试用可以使用 Docker Compose。先准备:

  • Git、Docker 和 Docker Compose v2。
  • 可访问的测试数据库,建议使用只读账号。
  • NVIDIA API Key,用于调用默认配置中的模型服务。

项目默认调用 NVIDIA NIM 服务,也支持配置自托管 NIM。使用托管服务试用时,不需要在本机加载这些模型;推理、向量化和重排序请求需要能访问相应服务。

模型配置见:官方环境变量示例。

第二步:下载并配置

Windows PowerShell 中执行:

git clone https://github.com/NVIDIA/auto-ontology.git
cd auto-ontology
Copy-Item .env.example .env

打开 .env,至少检查以下配置:

配置项填写内容
DEFAULT_MODELS_API_KEY从 NVIDIA 平台获取的密钥
REASONING_API_KEY、NON_REASONING_API_KEY、EMBED_API_KEY、RERANK_API_KEY替换各处密钥占位符;或删除这些密钥行,使其回退到默认密钥
AUTH_SECRET自行生成的长随机字符串
POSTGRES_PASSWORD项目自身 PostgreSQL 的密码
AUTO_ONTOLOGY_ADMIN_EMAIL初始管理员邮箱
AUTO_ONTOLOGY_ADMIN_PASSWORD初始管理员密码
PGADMIN_PASSWORDpgAdmin 密码
APP_URL本地试用设为 http://localhost:3000
CONNECTION_STRINGS本文通过界面添加业务数据库,因此设为空值

保留 .env.example 中各模型的地址和模型名,先按默认方案跑通。向量模型需要与数据采集时使用的模型一致。

项目自身的 PostgreSQL 用于保存目录、语义定义和应用数据;需要分析的业务数据库另行连接。

不要一边在 CONNECTION_STRINGS 填写一套连接,一边在界面配置另一套。当前文档说明,采集和问答对两种配置的优先顺序不同,混用容易造成采集、查询的数据源不一致。

第三步:启动服务并连接测试数据库

执行:

docker compose up -d --build

打开 http://localhost:3000,使用配置的管理员账号登录。在 Settings → Connections 中添加测试数据库连接,填写数据库地址、账号和密码,并按需要限制可采集的 schema 和表。

数据库地址必须能从容器内访问。如果数据库在 Docker Desktop 所在的电脑上,可按网络配置使用 host.docker.internal;容器里的 localhost 指向容器自身。

完成连接后,发起数据采集,在 Settings → Semantic Compilation 中启用语义编译,等待语义层准备完成。然后检查生成的术语、指标和关联关系,修正后再认证,尤其要核对金额、时间范围和去重方式。

先选几条已知答案的问题,将返回 SQL 和结果与人工查询进行对比,再接入正式应用。

部署方式见:官方快速开始。

第四步:通过 API 接入应用

在用户菜单的 API Tokens 中创建令牌,保存为环境变量:

pip install requests
$env:AUTO_ONTOLOGY_API_TOKEN = "替换成应用内创建的令牌"

Python 调用示例:

import json
import os

import requests

with requests.post(
    "http://localhost:3000/api/chat/completions",
    headers={
        "x-api-key": os.environ["AUTO_ONTOLOGY_API_TOKEN"]
    },
    json={"question": "上个月各产品的销售额是多少?"},
    stream=True,
    timeout=(10, 900),
) as response:
    response.raise_for_status()
    response.encoding = "utf-8"

    for line in response.iter_lines(decode_unicode=True):
        if not line or not line.startswith("data:"):
            continue
        payload = line[5:].strip()
        if payload == "[DONE]":
            break
        event = json.loads(payload)
        if event.get("type") == "result":
            answer = event["answer"]
            print(answer["response"])
            print(answer["sql_code"])
            print(answer.get("sql_response_from_db"))
        elif event.get("type") == "error":
            raise RuntimeError(event["message"])

这里的返回值是 SSE 事件流,不能直接把整个响应当成一个 JSON 解析。result 事件包含最终结果,[DONE] 表示本轮结束。

如需多轮追问,请在请求中传入 conversation_id:首次由客户端生成 UUID,后续复用同一个值,并等待上一轮结束后再发送。省略该字段时,接口按单次问答处理。

接口说明:Conversation API。

第五步:通过 MCP 接入智能体

如果已有支持 MCP 的客户端,可以安装 uv 后,在 PowerShell 启动 MCP 服务:

$env:AUTO_ONTOLOGY_API_URL = "http://localhost:3000"
uvx --from "git+https://github.com/NVIDIA/auto-ontology.git#subdirectory=mcp" auto-ontology-mcp

在客户端的 MCP 配置中添加:

{
  "mcpServers": {
    "auto-ontology": {
      "url": "http://localhost:3003/mcp"
    }
  }
}

该示例适用于支持 HTTP MCP 和登录授权的客户端;不同客户端的配置入口可能不同。连接后按提示登录 Auto Ontology,先调用 check_readiness,再用 check_answerable 检查问题是否有数据支持,最后交给 ask_question 查询。

部署到服务器时,应用请求应经过 3000 端口的认证网关。按官方部署说明,3001、3002 端口应保留在私有网络中;业务数据库权限也应由数据库账号本身限制。

MCP 配置和登录说明:官方 MCP 文档。

Logo

更多推荐