Example#
この例では、小さなsales
スキーマを介した完全なセマンティックナレッジベースのワークフローを説明します。スキーマの文書化、インデックス付け、意味による検索、および再利用可能なエイリアスとしての繰り返しの質問のキャプチャ。
ステップ1エンベディングモデルを登録する#
セマンティックKBは、テキスト埋め込みモデルを使用してスキーマメタデータを埋め込みます。最初に1つ登録します
SELECT aidb.create_model(sales_embeddings, bert_local);
__OUTPUT__
create_model
- -------------------
sales_embeddings
(1 row)
ステップ2スキーマを作成および文書化する#
コメントは構造メタデータとともに埋め込まれるため、スキーマを直接文書化すると検索品質が向上します。
CREATE SCHEMA sales;
CREATE TABLE sales.customers (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
email TEXT NOT NULL,
region TEXT
);
CREATE TABLE sales.orders (
id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
customer_id INT NOT NULL REFERENCES sales.customers(id),
amount NUMERIC(12,2) NOT NULL,
status TEXT NOT NULL,
order_date DATE NOT NULL
);
COMMENT ON TABLE sales.orders IS One row per customer order, with its monetary amount and lifecycle status.;
COMMENT ON COLUMN sales.orders.amount IS Order total in USD.;
COMMENT ON COLUMN sales.orders.status IS Order lifecycle state: pending, confirmed, shipped, delivered, cancelled.;
COMMENT ON COLUMN sales.customers.email IS Customer contact email address.;
ステップ3セマンティックKBを作成する#
sales スキーマを介してKBを作成します。 model は必須です。
Live
自動処理は、スキーマの変更に応じてインデックスを最新の状態に保ちます。
SELECT aidb.create_semantic_kb(
name => analytics_kb,
model => sales_embeddings,
schemas => ARRAY[sales],
auto_processing => Live
);
__OUTPUT__
create_semantic_kb
- -------------------
analytics_kb
(1 row)
ステップ4インデックスされた内容を確認する#
aidb.semantic_kb_stats()
は、エンティティ数と保留中のスキーマの変更をレポートします。
SELECT * FROM aidb.semantic_kb_stats(kb_name => analytics_kb);
__OUTPUT__
total | tables | views | columns | pending
- ------+--------+-------+---------+---------
10 | 2 | 0 | 8 | 0
(1 row)
ステップ5意味で検索する#
名前が使用されている単語と一致しない場合でも、コンセプトにマップするスキーマエンティティを見つけます。
semantic_kb_search()
は、スキーマエンティティと一致するエイリアスを1つのランク付けリストで結果ます。
SELECT source_type, entity_type, schema_name, relation_name, column_name, rank
FROM aidb.semantic_kb_search(
query_text => customer email address,
kb_name => analytics_kb,
top_k => 3
);
__OUTPUT__
source_type | entity_type | schema_name | relation_name | column_name | rank
- ------------+-------------+-------------+---------------+-------------+------
schema | Column | sales | customers | email | 1
schema | Table | sales | customers | | 2
schema | Column | sales | orders | customer_id | 3
(3 rows)
コメント検索は、名前だけでなく文書化したインテントを介してエンティティを見つけます。
SELECT relation_name, column_name, comment
FROM aidb.search_by_comment(
query_text => order status values,
kb_name => analytics_kb,
top_k => 1
);
__OUTPUT__
relation_name | column_name | comment
- --------------+-------------+------------------------------------------------------------------
orders | status | Order lifecycle state: pending, confirmed, shipped, delivered...
(1 row)
ステップ6定期的な質問をエイリアスとして保存する#
「特定の月にいくらの収益がありましたか?」という質問は繰り返し発生するため、毎回SQLを再生成するのではなく、 Semantic aliases としてキャプチャします。
AIDBは、エイリアスがanalytics_kb
のメンバーであると推論し、クエリーが読み取るsales
スキーマを所有するKB
SELECT aidb.create_semantic_alias(
name => monthly_revenue,
description => Total revenue for a given month and year,
query_text => $$
SELECT SUM(amount) AS total
FROM sales.orders
WHERE EXTRACT(MONTH FROM order_date) = ${month}
AND EXTRACT(YEAR FROM order_date) = ${year}
$$,
params => [
{"name": "month", "param_type": "integer", "description": "Month number (1-12)"},
{"name": "year", "param_type": "integer", "description": "Four-digit year"}
]
);
__OUTPUT__
create_semantic_alias
- ----------------------
monthly_revenue
(1 row)
ステップ7エイリアスを見つけて実行する#
検索は自然言語の質問をエイリアスに解決します。
SELECT name, similarity
FROM aidb.search_semantic_aliases(
query_text => how much money did we make last month,
kb_name => analytics_kb,
top_k => 1
);
__OUTPUT__
name | similarity
- ----------------+------------
monthly_revenue | 0.83
(1 row)
パラメーターを使用して実行します。
SELECT result
FROM aidb.execute_semantic_alias(
alias_name => monthly_revenue,
args => {"month": 3, "year": 2025}
);
__OUTPUT__
result
- ----------------------
{"total": 48250.00}
(1 row)
エージェントからの使用#
上記はすべて Agents reference
でも利用できます。エージェントにセマンティックKB
search tools およびrun_sql_query
を与えると、自由形式の質問に自分自身で回答できます。semantic_kb_search
を呼び出して関連するテーブルと列を検出し、これらの定義に基づいてSQLを生成、実行します- 例 text-to- SQLエージェント ワークフロー。
あなたが構築したもの#
文書化された
salesスキーマをインデックスするセマンティックKBanalytics_kbLiveモードで最新の状態に保たれます。意味によってリレーションと列を見つける自然言語スキーマ検索。
繰り返しの質問の再利用可能なパラメーター化されたエイリアス、意味によって見つけられ、パラメーターを使用して実行可能。