Searching a semantic knowledge base#
セマンティックKBがスキーマをクロールしたら、自然言語クエリで検索します。
KBは、スキーマのインデックス付けに使用したものと同じモデルでクエリを埋め込み、メタデータがクエリに最も近いテーブル、ビュー、および列を結果ます。すべての検索ファンクションは、KB名をkb_name
として取得します。これは、KBが1つだけ存在する場合に省略できます。
promoteb.semantic_kb_search()#
semantic_kb_search()
は、複合エントリーポイントです。ソースごとのランク付け検索スキーマメタデータと厳選された Semantic aliases を実行し、相互ランク融合RRFで1つのランクリストに融合します。
「スキーマの何がこれに関連していますか?」に対する単一のランク付けの回答が必要な場合に使用します。
SELECT source_type, entity_type, schema_name, relation_name, column_name, rank
FROM aidb.semantic_kb_search(
query_text => which customers spent the most,
kb_name => analytics_kb,
top_k => 5
);
Parameter |
Type |
Default |
Description |
|---|---|---|---|
query_text |
text |
— |
自然言語クエリー。 |
kb_name |
text |
NULL |
検索するKB。 1つのKBのみが存在する場合、単一のKBをターゲットとすることを省略します。 |
top_k |
int |
10 |
返されるランク付けされた行の数。 |
sources |
text[] |
NULL |
検索するソース。アクティブ schema、alias`すべて省略します。 `history、`relationship`は予約されています。 |
entity_types |
text[] |
NULL |
含めるエンティティタイプ。アクティブ Table、View、Column、Alias。すべて省略します。 |
rrf_k |
int |
60 |
ランクフュージョンの減衰定数。 |
min_similarity |
double precision |
NULL |
オプションの類似度フロア。それより低いスコアの行はドロップされます。フロアがない場合は省略します。 |
一致ごとに1行を結果ます。
Column |
Description |
|---|---|
source_type |
行を生成したソース `schema`または`alias`のいずれか。 |
entity_type |
Table、View、Column、または`Alias` |
schema_name |
エンティティが属するスキーマ。 |
relation_name |
テーブルまたはビューの名前。 |
column_name |
列名テーブルレベルおよびビューレベルの一致の場合は空です。 |
object_ref |
一致したオブジェクトへの修飾参照。 |
definition |
埋め込まれた構造定義。 |
comment |
エンティティの`COMMENT ON`テキスト存在する場合。 |
score |
融合されたRRFスコア。 |
rank |
融合された結果セット内の1ベースのランク。 |
components |
フュージョンをフィードしたソースごとのスコアのJSONB詳細。 |
semantic_kb_search()
は、スキーマエンティティと一致するエイリアスの両方を1つのランク付けリストで返すため、これは 例 text-to- SQLエージェント ワークフローでの自然な最初の呼び出しです。
スキーマメタデータファンクション#
より狭いニーズの場合、4つのファンクションはスキーマメタデータのみを検索します。これらは同じオプショナルのkb_name
およびsimilarity
スコアコサイン類似度、高いほど近いを共有し、min_similarity
はオプショナルのフロアとして、ページング用にはtop_k / offset
を使用します。
promoteb.get_metadata()#
これは最も広範なスキーマ検索であり、完全なメタデータとともに列、テーブル、およびビューを結果ます。
SELECT schema_name, relation_name, column_name, entity_type, similarity
FROM aidb.get_metadata(
kb_name => analytics_kb,
query_text => customer email address,
top_k => 10
);
パラメーター kb_name 、 query_text 、 min_similarity 、
top_k デフォルト10 、offset デフォルト0 。
schema_name 、relation_name 、column_name
、entity_type 、definition 、comment
、definition_vector 、およびsimilarity を返します。
promoteb.get_entity_Definitions()#
テーブルとビュー のみに一致します。
SELECT schema_name, relation_name, entity_type, similarity
FROM aidb.get_entity_definitions(
kb_name => analytics_kb,
query_text => orders and line items,
entity_types => ARRAY[Table, View]
);
パラメーター kb_name 、query_text 、min_similarity
、entity_types デフォルトARRAY['Table','View'] 、top_k
、offset 。 schema_name 、relation_name
、entity_type 、definition 、comment
、similarity を返します。
promoteb.get_column_definings()#
一致する列とテーブルの 定義 、最もリーンな結果のみを返します、 SQL生成のコンパクトな基礎として役立ちます。
SELECT definition
FROM aidb.get_column_definitions(
kb_name => analytics_kb,
query_text => order total amount
);
パラメーター kb_name 、query_text 、min_similarity
、top_k 、offset 単一のdefinition 列を結果ます。
promoteb.search_by_comment()#
スキーマ、テーブル、列に添付された自然言語COMMENT ON
テキストのみと一致します。
SELECT relation_name, column_name, comment, similarity
FROM aidb.search_by_comment(
kb_name => analytics_kb,
query_text => order status values
);
パラメーター kb_name 、query_text 、min_similarity
、top_k 、offset schema_name 、relation_name
、column_name 、entity_type 、definition
、comment 、similarity を返します。
これは、スキーマに既に書き込んだドキュメントを活用する最も直接的な方法です。たとえば、
「order lifecycle state:
pending、confirmed、shiped、delivered、Cancelled」
とコメントされた列は、列自分自身の名前がst であっても、 「order
statusvalues」
のようなクエリーに表示されます。コメント検索は十分に文書化されたオブジェクトに依存しているため、
COMMENT ON
ステートメントを最新の状態に保つことが、セマンティックKBの結果を向上させる最も効果的な方法です。
チューニング結果#
``min_similarity`` は、再現率を犠牲にして精度を高めます。クエリが何も返さない場合、それを下げますたとえば
0.3。結果が広範すぎる場合に上げます。``top_k`` / ``offset`` 結果をページスルーします。
``entity_types`` 特定のフィールドをハンティングしているときに、
ARRAY['Column']などの関心のある種類に絞り込みます。
次のステップ#
よくある質問を Semantic aliases を使用して、再利用可能なパラメーター化クエリーとして保存します。
例 text-to- SQLエージェント ワークフローでエージェントにこれらの検索をエンドツーエンドで駆動させます。