HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

Nvidia – オープンソースのAuto Ontology

Nvidia – open-source auto-ontology (github.com)

65 pointsby campervans12 コメント

要約

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。

ソフトウェアコンポーネント

コンポーネントテクノロジー役割デフォルトポート
FrontendNext.js 16 (React 19, TypeScript, Tailwind CSS 4), Better Auth, PrismaWeb UI、認証、APIゲートウェイ3000
BackendFastAPI (Python 3.12+), LangChainチャット/NL-to-SQL、カタログ、データソースAPI3001
Ingestion workerFastAPI (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)

  1. リポジトリをクローンします:

    git clone <repo-url> auto_ontology && cd auto_ontology
    
  2. テンプレートから環境ファイル(.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に常に到達します。
  3. イメージをビルドし、スタックを開始します:

    docker compose up -d --build
    

    これにより、バックエンド(auto_ontology)とフロントエンド(auto-ontology-frontend)のイメージがビルドされ、PostgresとpgAdminが起動し、データベーススキーマを同期するためのワンショットジョブfrontend-migrateが実行され、アプリ(バックエンド、インジェストサービス、フロントエンド)が開始されます。

  4. http://localhost:3000でUIを開きます(バックエンドAPIは:3001、pgAdminは:5050です)。

    トラブルシューティング: UIが左側のナビゲーションパネルなしでロードされた場合(または再起動後に破損したように見える場合)、ブラウザが古いセッションCookieを保持しています — これはAUTH_SECRETが変更されたり、データベースがリセットされたりすると発生します。localhost:3000のサイトデータをクリアするか(またはbetter-auth.session_token Cookieを削除)、再度サインインしてください。

接続管理

Auto Ontologyは、以下の2つのソースから接続するソースデータベースを解決します:

  1. UIから追加された接続 — アプリ内から作成された接続。このオプションでは、接続資格情報はVaultが設定されていない限りPostgresに平文で保存されます:

    • Vaultなし: 接続オブジェクト全体(パスワードを含む)がJSONシリアライズされ、暗号化されずにカタログのデータベース行に保存されます。
    • Vaultあり: 資格情報はVaultに書き込まれ、データベース名をキーとします。カタログ行には資格情報は保存されません(データベース名がルックアップキーであり、個別の参照フィールドはありません)。

    Vaultは、VAULT_ADDR、VAULT_NAMESPACE、VAULT_ROLE_ID、VAULT_SECRET_IDがすべて設定されている場合のみ有効になります(VAULT_AUTH_MOUNTとVAULT_KV_MOUNTはオプションのオーバーライドです)。デフォルトでは無効になっており、部分的な設定は警告とともに無視され、平文ストレージにフォールバックします。

  2. CONNECTION_STRINGS環境変数 — デプロイ時に提供される接続文字列のカンマ区切りリスト(例: Helmの--set connectionStrings=<CONNECTION-STRINGS>フラグ)。これはフォールバックであり、UIから追加された接続がない場合にのみ使用されます。

認証

Auto OntologyはSSOを認証にサポートしています。IdPでリダイレクトURIを次のように設定する必要があります:APP_URL/api/auth/sso/callback

APIトークン(スクリプティング用)

ブラウザはサインインしてセッションCookieを取得しますが、スクリプトはそれを取得できません。スクリプト、ノートブック、およびスケジュールされたジョブのために、代わりにAPIトークンを発行してください:

  1. ユーザーメニュー(右上)→ API Tokens → New token を開きます。
  2. 名前を付け、オプションで有効期限(デフォルト: 無期限)を選択し、トークンをコピーします。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を参照してください。