Nvidia – オープンソースのAuto Ontology
Nvidia – open-source auto-ontology (github.com)
要約
NVIDIA Auto Ontologyは、エンタープライズメタデータからコンテキストレイヤーを構築し、システム間の定義を調和させ、エージェントがデータソース、意味、利用方法などを理解できるようにするオープンライブラリです。これにより、開発者はAI対応のナレッジグラフを構築し、エージェントに信頼できるビジネス上の意味を与え、クエリの検証やプロビナンスの取得が可能になります。
全文翻訳
Auto Ontology
エージェントはドキュメントを取得したりデータベースをクエリしたりできますが、エージェントによる分析の信頼性は、それがどれだけ速く回答できるかに依存します。もし数値が間違っていれば、速く回答されても意味がありません。エージェントには、データがどこに存在するか、その意味は何か、使用すべきか、どのように使用すべきか、どこから来たのか、そして何と類似しているのかを伝えるコンテキストレイヤーが必要です。NVIDIA Auto Ontologyは、エンタープライズメタデータからそのレイヤーを構築し、システム間の定義を調和させ、MCP、CLI、APIを通じてあらゆるエージェントハーネスに公開するオープンライブラリです。これは、顧客が既に所有しているセマンティックモデルを補完します。
これにより、開発者は以下のことが可能になります:
- 発見: メタデータからエンタープライズオントロジーを生成する。既存のオントロジーやセマンティックモデルを接続する。AI対応のナレッジグラフを構築する。
- グラウンディング: エージェントにメトリクス、エンティティ、リレーションシップの信頼できるビジネス上の意味を与える。システム間の不整合な定義を調和させる。
- 検証: 生成されたクエリを認定された定義とリネージに対してチェックする。すべての回答にプロビナンス(来歴)を返す。
- 公開: MCP、CLI、APIを通じてコンテキストをあらゆるエージェントハーネスに提供する。学習: 認定された修正と使用状況をオントロジーにフィードバックし、共有コンテキストを質問ごとに改善する。
ベンチマーク
BIRDのようなテキスト・トゥ・SQLベンチマークを実行するには、オントロジーSQL評価リポジトリを参照してください。
ライセンスと貢献. Auto OntologyはApache License 2.0の下で配布されます。このプロジェクトにバンドル、リンク、またはその他の方法で使用されるサードパーティのオープンソースコンポーネントは、
THIRD_PARTY_NOTICES.mdにリストされています。現在、外部からの貢献は受け付けていません。
[画像: Auto Ontology Architecture]
主要機能
- 構造化データに対する自然言語クエリ — NVIDIA NIMによって、質問はSQLに変換され、接続されたデータベースに対して実行されます。
- リレーショナルソースに対するセマンティックカタログ/オントロジーレイヤー。カタログ自体は、それが記述するカタログと共にPostgresに保存されます。
- 認証とRBAC — Better Authを使用。
- チャット、分析、データカタログ、アナリティクス、設定用のWeb UI。
- 柔軟なデプロイ — Kubernetes用のHelmチャート、またはローカルスタック用のDocker Compose。
ソフトウェアコンポーネント
| コンポーネント | テクノロジー | 役割 | デフォルトポート |
|---|---|---|---|
| Frontend | Next.js 16 (React 19, TypeScript, Tailwind CSS 4), Better Auth, Prisma | Web UI、認証、APIゲートウェイ | 3000 |
| Backend | FastAPI (Python 3.12+), LangChain | チャット/NL-to-SQL、カタログ、データソースAPI | 3001 |
| Ingestion worker | FastAPI (Python 3.12+) | 表形式データをインジェストし、埋め込みを書き込む | 3002 |
| Postgres + pgvector | リレーショナルデータベース | アプリメタデータ、カタログとオントロジー、ベクトルストア | 5432 |
| HashiCorp Vault | オプション | 接続資格情報の安全な保管 | — |
NVIDIA NIM
Auto Ontologyは、推論のためにNVIDIA NIMエンドポイントを使用します。これは、ホストされているNVIDIA APIカタログ (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が必要です。
モデルトリプレット
各モデルの役割は、環境変数のトリプレットで設定されます — <PREFIX>_ENDPOINT (URL)、<PREFIX>_API_KEY、および<PREFIX>_MODEL:
| プレフィックス | 役割 |
|---|---|
DEFAULT_MODELS | 共有デフォルト。以下のすべてのフィールドがこれにフォールバックします。 |
REASONING | メインチャット/NL-to-SQLモデル。 |
NON_REASONING | エンティティ抽出に使用される軽量モデル。 |
EMBED | テキスト埋め込みモデル(インジェストとクエリで一致する必要があります)。 |
RERANK | 検索フローで使用されるリランカー。 |
トリプレット全体を設定することも、一部のフィールドのみを設定することも、何も設定しないことも可能です — 設定されていないフィールドは、対応するDEFAULT_MODELS_<FIELD>にフォールバックします。したがって、最も簡単なセットアップは、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 NIM用のNVIDIA APIキー(
nvapi-...)。https://build.nvidia.comのNVIDIA APIカタログから取得します。 - クエリしたいソースデータベース(Databricks、Postgres、Snowflake、またはDuckDB)への接続詳細。
インストール
Kubernetes
Auto OntologyをKubernetesクラスターにデプロイするには、DEPLOYMENT.mdを参照してください。
ローカル(Docker Compose)
-
リポジトリをクローンします:
git clone <repo-url> 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の「デフォルトシークレット」エラーが発生します。POSTGRES_PORTはホスト側のポートマッピングのみを変更します(マシン上で5432が既に使われている場合に設定してください)。コンテナは内部ネットワークポートでPostgresに常に到達します。
-
イメージをビルドし、スタックを開始します:
docker compose up -d --buildこれにより、バックエンド(
auto_ontology)とフロントエンド(auto-ontology-frontend)のイメージがビルドされ、PostgresとpgAdminが起動し、データベーススキーマを同期するためのワンショットジョブfrontend-migrateが実行され、アプリ(バックエンド、インジェストサービス、フロントエンド)が開始されます。 -
http://localhost:3000でUIを開きます(バックエンドAPIは
:3001、pgAdminは:5050です)。トラブルシューティング: UIが左側のナビゲーションパネルなしでロードされた場合(または再起動後に破損したように見える場合)、ブラウザが古いセッションCookieを保持しています — これは
AUTH_SECRETが変更されたり、データベースがリセットされたりすると発生します。localhost:3000のサイトデータをクリアするか(またはbetter-auth.session_tokenCookieを削除)、再度サインインしてください。
接続管理
Auto Ontologyは、以下の2つのソースから接続するソースデータベースを解決します:
-
UIから追加された接続 — アプリ内から作成された接続。このオプションでは、接続資格情報はVaultが設定されていない限りPostgresに平文で保存されます:
- 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=<CONNECTION-STRINGS>フラグ)。これはフォールバックであり、UIから追加された接続がない場合にのみ使用されます。
認証
Auto OntologyはSSOを認証にサポートしています。IdPでリダイレクトURIを次のように設定する必要があります:APP_URL/api/auth/sso/callback
APIトークン(スクリプティング用)
ブラウザはサインインしてセッションCookieを取得しますが、スクリプトはそれを取得できません。スクリプト、ノートブック、およびスケジュールされたジョブのために、代わりにAPIトークンを発行してください:
- ユーザーメニュー(右上)→ API Tokens → New token を開きます。
- 名前を付け、オプションで有効期限(デフォルト: 無期限)を選択し、トークンをコピーします。Auto OntologyはトークンのSHA-256ハッシュのみを保存するため、一度しか表示されません。紛失した場合は、新しいトークンを発行する必要があります。
これを/api/...への任意の呼び出しでx-api-keyとして送信します — Authorization: Bearer <token>も機能します:
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()
知っておくと良いこと:
- トークンはその所有者として機能します。 トークン自体には権限はありません — すべての呼び出しは、ブラウザの場合と同じように、所有者のロールに対して承認されます。ビューアーのトークンでは管理者権限のある操作はできません。
- APIの全表面がこれをサポートします。 認証はすべてのルートで1か所(
frontend/auth/resolve-user.ts)で解決されるため、docs/openapi/auto-ontology-api.jsonのwithPublicではないエンドポイントはすべてトークンで機能します。 - 取り消しは即時です。 UIでトークンを削除するか、所有ユーザーを削除/禁止すると、それを使用した次のリクエストは401エラーになります。
- トークンはトークンを管理できません。 作成と取り消しにはサインインセッションが必要なため、漏洩したトークンは後継を発行できません。
エージェントAPI会話
公開クライアントは、認証されたNext.jsゲートウェイにPOST /api/chat/completionsで呼び出します。レスポンスは、step、result、またはerrorイベント、それに続く[DONE]を含むSSEストリームです。
conversation_idはオプションです:
- ステートレスなワンショットリクエストの場合は省略します。
- 会話を生成または継続するには、クライアント生成のUUIDを指定します。
- スレッドのすべてのターンで同じUUIDを再利用します。次のターンを送信する前に
[DONE]を待ちます。1つの会話に対する重複リクエストは409 Conversation in progressを返します。
{
"question": "What about last month?",
"conversation_id": "d61d8aa3-d496-4fa7-97ce-4f831c162e7f"
}
会話リクエストの場合、FastAPIは直近5つの完了したターン(12,000文字に制限)までをロードし、「先月はどうですか?」のようなコンテキスト入力がスタンドアロンの質問に書き換えられてから、既存のテキスト・トゥ・SQLグラフが実行されます。独立した質問は変更されずに渡されます。内部エージェントの思考、チャートペイロード、エラー、および生のSQL結果セットはコンテキストとして再利用されません。
会話履歴は、認証されたAuto Ontologyユーザーのスコープに限定されます。ブラウザおよびサービス呼び出し元は、Next.jsゲートウェイを使用する必要があります。これはユーザーを解決し、内部のx-auto-ontology-user-idヘッダーをFastAPIに転送します。FastAPIポートは信頼された内部サービス境界です。このヘッダーはFastAPIによって個別に検証されないため、公開しないでください。conversation_idなしの直接のFastAPIリクエストはステートレスのままですが、conversation_idありの直接リクエストには信頼されたIDヘッダーが必要です。
Web UIはUUIDを自動的に管理します。APIで作成された会話は、サインインしているユーザーに属する場合、/chat?focus=<conversation_id>でUIで開くことができます。
エージェントスキル
コーディングエージェント:AGENTS.mdから開始します。スキルはskills/(nvidia-ontology-setup、nvidia-ontology-management、nvidia-ontology-query)にあります。メンテナーはCLAUDE.mdを使用し続けます。
MCPサーバー
CursorやClaude Desktopなどのエージェントハーネスは、Auto OntologyのMCPサーバーを通じてデータをクエリできます。実行方法については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に別途リストされています。
通知と免責事項
通知と免責事項:このソフトウェアは、外部資料を自動的に取得、アクセス、またはそれらとやり取りします。取得された資料は、このソフトウェアと共に配布されるものではなく、別途の利用規約およびライセンスによってのみ管理されます。適用されるすべての利用規約およびライセンスを見つけ、レビューし、遵守すること、および取得された資料のセキュリティ、完全性、およびお客様の特定のユースケースへの適合性を検証することは、お客様の単独の責任です。このソフトウェアは「現状有姿」で提供され、いかなる保証もありません。著者は、取得された資料に関して一切の表明または保証を行わず、このソフトウェアまたは取得された資料の使用または使用不能から生じるいかなる損失、損害、責任、または法的結果についても一切の責任を負いません。このソフトウェアおよび取得された資料は、お客様のリスクでご使用ください。
Auto Ontologyが実行時にやり取りする外部資料:
| 資料 | 時期 | 利用規約 |
|---|---|---|
NVIDIAホストモデルAPI(build.nvidia.com、integrate.api.nvidia.com) - LLM、埋め込み、リランキング用 | デフォルトモデル構成でのチャット、インジェスト、セマンティックコンパイル | NVIDIA APIカタログおよび各モデルの利用規約 |
設定したその他のOpenAI互換モデルエンドポイント(*_ENDPOINT / *_MODEL) | 同上 | そのプロバイダーおよびモデルの利用規約 |
| KumoRFM予測クエリサービス | KUMO_RFM_API_KEYが設定されている場合のみ | Kumoの利用規約 |
| ソースデータベース | インジェスト、プロファイリング、クエリ実行 | お客様のシステムに関する契約 |
貢献
現在、外部からの貢献は受け付けていません。 Auto Ontologyメンテナーチーム以外から提出されたIssue、プルリクエスト、パッチはレビューまたはマージされません。セキュリティ関連の報告は、SECURITY.mdに記載されたプロセスに従ってください。メンテナーのワークフローについては、CONTRIBUTING.mdを参照してください。