1. AI Agentはどのようにデータベースと対話すべきか
私のエンジニアとしてのキャリアの前半は、一貫してビジネスインテリジェンス(BI)領域に関わってきました。初期は現場のビジネスチーム向けに、SQLを用いたデータサービスの開発やカスタムダッシュボードの構築、TableauやPower BIなどを活用したセルフサービス分析の支援を行っていました。その後、内製BIプラットフォームの開発へとシフトし、大規模言語モデル(LLM)の台頭とともに、自社プロダクトも自然言語によるデータ対話(ChatBI)へと舵を切りました。
しかし、自然言語によるデータ検索はデモとしては非常に目を引くものの、日々の実務に定着させるには大きな壁がありました。その理由は主に次の2点です:
- モデル性能の限界による「NL2DSL」アプローチの制約:精度を担保するため、自然言語を一度メトリクス(指標)定義用のDSL(ドメイン特化言語)に変換する方式を採用しましたが、DSLの枠組みに縛られ、自由なアドホック分析が制限されてしまいました。
- 現場が求めていたのは「単体のアプリ」ではなく「既存業務への組み込み」:実際のエンタープライズ導入において、顧客が求めていたのは独立した「Data Agent」アプリではなく、日常的な業務フローの中にNL2SQL機能が自然に組み込まれることでした。
昨年、Anthropicが Model Context Protocol (MCP) を発表したとき、「データベースを標準的なMCPサービスとして直接公開し、軽量なメタデータ管理を組み合わせれば、クリーンでプラグアンドプレイ可能なNL2SQLコンポーネントが実現できるはずだ」という確信に至りました。これにより、専用アプリを一から開発することなく、Agentが柔軟にデータ分析を行うために必要なコンテキストを提供できます。
この発想から生まれたのが DatI (Data Intelligence) です。
DatIの設計思想は非常にシンプルかつ明快です。データベースに接続し、業務メタデータを管理し、プリセットおよびカスタムツールを設定して、標準的なMCPエンドポイントとして公開する――これだけです。利用しているAgent環境に連携すれば、即座にアドホックなデータ分析が可能になります。さらに、安全なCRUD(作成・更新・削除)操作にも対応しているため、定型コードを書くことなく軽量な業務管理ワークフローを動かすことも可能です。
2. DatIの動作フロー:ステップ・バイ・ステップで見る実際の流れ
データベースの接続からAI Agentによるクエリ実行まで、DatIがどのように機能するのかを一連の流れでご紹介します。設定はWebコンソールから手動で行うことも、dati-ops Agent Skillを使って自動化することも可能です。
Step 1: データソースの接続とメタデータの設定
DatIはデータベースへ直接接続し、テーブルスキーマを自動的に読み込みます。ここでテーブルやカラム、カラム値(ステータスなどの列挙値・Enum)の説明やエイリアス(論理名・別名)を設定しておくことで、AIが各項目のビジネス的な意味を正しく理解できるようになります。
Step 2: セマンティックサブジェクト(主題領域)と業務用語の定義
セマンティックサブジェクト(主題領域)では、関連するテーブルを業務ドメインごとにグループ化します。これによりテーブルの対象範囲(スコープ)が明確になり、生成されたMCPサービスはこの境界内でのみデータを検索・クエリするようになります。またこのステップでは、社内独自の専門用語や指標の定義をAIが正しく理解できるよう、業務用語(ビジネス用語集)もあわせて登録します。
Step 3: ツールの設定とMCPサービスの公開
対象とするテーブルと、Agentに公開するツールを設定します:
- プリセットツール(Preset Tools):メタデータ検索、テーブルスキーマ確認、SQL実行(SELECTのみに制限するか、書き込みを許可するかなど、操作権限を細かく制御可能)。
- カスタムツール(Custom Tools):頻出クエリや安全な更新処理のためのパラメータ化SQLテンプレート。
「公開」を実行すると、アクセストークンで保護された標準仕様(Streamable HTTP)のMCPエンドポイントが即座に生成されます。
Step 4: AI Agentを接続してデータ分析を実行
ここではクライアント環境として Google Antigravity を例にデータ分析を行います。DatIのMCPエンドポイントに接続すると、Antigravityはセマンティック検索ツールを活用して関連テーブルを自動特定し、的確なSQLを生成・実行します。さらに、Antigravityが備えているデータ可視化機能を活かして、抽出結果からそのままダッシュボードやグラフを作成することも可能です。
3. アーキテクチャと実装
DatIは主に以下の3つのコンポーネントで構成されています:
-
データソース接続(Data Ingestion):MySQL、PostgreSQL、ClickHouse、Apache Doris、MariaDBをネイティブサポートしており、新しいDBエンジンの追加も容易なモジュール設計となっています。
なぜバックエンドにJavaを採用したのか? AIエコシステムではPython、TypeScript、Rustが主流ですが、DatIのバックエンドはJavaで構築されています。データベース基盤において最も重要なのは、何よりも堅牢な安定性です。JDBCとHikariCPによる実績あるコネクションプール管理、成熟したドライバエコシステムにより、高負荷環境下でも極めて安定したリソース管理を実現できます。
- セマンティックモデリング(Semantic Modeling):テーブル、カラム、列挙値、業務用語に対してエイリアスや説明文を設定でき、LLMのプロンプトへ的確な業務コンテキストを注入します。
-
MCPサービス生成(MCP Service Generation):対象テーブルの選択、ツール権限およびシステムプロンプトの設定を行い、ワンクリックで標準MCPエンドポイントを公開できます。
なぜMCPを採用したのか? ローカル完結型のAgent Skillと比較して、MCPはエンタープライズのシステム構成に非常に適しています。DB接続情報はサーバー側で暗号化・一元管理され、エンドユーザーには個別のアクセストークンのみが発行されます。これにより接続情報の安全性を担保しつつ、メタデータやツール設定をチーム全体で再利用できます。
ツール設計と機能
ツール(Tool)はMCPサービスの根幹をなす要素です:
プリセットツール
- メタデータ検索(Metadata Search):対象となるテーブル、カラム、列挙値、業務用語がElasticsearchにインデックス化されます。Agentは1回のキーワード検索で、関連するスキーマと定義を瞬時に特定できます。
- テーブル一覧・スキーマ確認(Table List & Table Schema):必要なタイミングでテーブル構造をオンデマンドで確認できる軽量な探索ツール。
- 制御可能なSQL実行(Controlled SQL Execution):生成されたSQLを直接実行可能ですが、厳格なガード機能を備えています(管理者はSELECTのみに制限することも、INSERT/UPDATE/DELETEおよびトランザクションを許可することも可能です)。
- メタデータの継続的改善(Metadata Evolution):日々の利用を通じて、Agentや管理者がスキーマ説明や用語集をアップデートし、セマンティック層を継続的に改善・進化させることができます。
カスタムツール
- パラメータ化SQL(Parameterized SQL):複数テーブルの複雑な結合や、更新など慎重を期す操作に対して、管理者が事前にSQLテンプレートを定義できます。Handlebars風のテンプレートエンジンにより、動的条件分岐やユーザーコンテキストの自動注入に対応しています:
UPDATE transaction SET
{{#if amount}}amount = {{amount}},{{/if}}
{{#if category}}category_id = (SELECT id FROM category WHERE name = {{category}}),{{/if}}
updated_at = now()
WHERE id = {{transaction_id}} AND user_name = {{_user.name}}
これにより、LLMは構造化されたパラメータを入力するだけで済み、SQLのコアロジックを誤って改変するリスクを排除できます。また、{{_user.name}} などのシステム変数はゲートウェイ側から直接注入されるため、マルチテナント環境におけるデータ分離が確実に担保されます。
4. 既存アプローチとの比較
言語モデルをデータベースに接続する試み自体は新しいものではありません。単一DB向けのシンプルなMCPサーバーや、DBHub / MCP Toolboxのようなツール、スタンドアロンのChatBIプラットフォーム、あるいは手作業でコーディングされたAgentなど、多様なアプローチが存在します。
その中でDatIはどこに位置づけられるのでしょうか?DatIのコアな立ち位置は 「AI Agentのために設計された、エンタープライズ仕様のデータベース・セマンティックゲートウェイ」 です。
| 比較項目 | DatI | カスタム実装 | 公式DB MCP / Skill | DBHub / MCP Toolbox | スタンドアロンChatBI |
|---|---|---|---|---|---|
| 提供形態 | サーバーサイドMCP | 任意 | ローカルMCP | ローカルMCP | 独立したWebアプリ |
| 接続情報の管理 | サーバー側で一元管理 | 方式による | ローカルに平文保存 | ローカルに平文保存 | サーバー側で一元管理 |
| セマンティック層 | 業務メタデータをフルサポート | シナリオごとに都度開発 | 生のスキーマのみ | 生のスキーマのみ | 業務メタデータをフルサポート |
| 複雑クエリの安全性 | スキーマ探索 + パラメータ化SQL | コード側で制御 | なし | カスタムツールで対応 | 固定メトリクス・固定DSL |
| ワークフローへの組み込み | 高(任意のMCPクライアントに統合可) | 極めて高い(要実装) | 高 | 高 | 低(独立アプリに依存) |
まとめると、DatIは以下の5つの重要な課題を解決します:
- セキュリティとガバナンス:きめ細やかな権限制御と、DB接続情報の一元管理。
- メタデータコンテキスト:業務用語やEnum定義をプロンプトに補完し、ハルシネーション(誤ったテーブル結合やカラム誤認)を防止。
- 柔軟性:MCPに対応したあらゆるAgentクライアントや業務ホストとシームレスに連携。
- 導入効率:ローコードでの設定が可能で、エンドユーザー側のデプロイ負担がゼロ。
- マルチソース対応:主要なリレーショナルDBおよびOLAPエンジンをネイティブサポート。
5. まとめとフィードバック
開発者向けツールは、実際の開発現場でのフィードバックを通じてこそ洗練されていくものだと考えています。DatIをぜひお試しいただき、ご意見・フィードバックやプロジェクトへのコントリビュートをお待ちしています:
- GitHub リポジトリ: https://github.com/yimindev/dati
注記: 本記事は原著者が中国語で執筆した内容を、LLMを活用して日本語に翻訳・編集した技術記事です。



