適用対象:
Databricks SQL
Databricks Runtime
Important
この機能は ベータ版です。
ai_search()関数は、1つ以上の知識源から情報を取得します。 知識ソースには 、AI検索インデックス や Lakebase 検索が有効化された同期テーブルなどが含まれます。
自然言語クエリとコール用に設定された知識ソースが与えられると、この関数は最適化された検索クエリを生成し、ソース間で結果を検索・重複除去し、関連性で再ランク付けし、最も関連性の高い文書を返します。 デフォルトでは、取得した文書に対して根拠のある自然言語の回答を合成します。
ai_searchを活用して、大規模な関連コンテキストで運用データを豊かにしたり、バッチ検索拡張生成(RAG)パイプラインを構築したり、複合AIシステムへのツールとして検索を公開したり、すべて単一のSQL関数呼び出しから実現できます。
データのセキュリティ
ドキュメント データは、Databricks セキュリティ境界内で処理されます。 DatabricksはAI関数呼び出しに渡されるパラメータを保存しませんが、Databricksランタイムバージョンなどのメタデータ実行の詳細は保持します。
Requirements
- Databricks Runtime 18.2 以降。
- 検索できる知識源は、 AI検索インデックスや Lakebase 同期テーブルでLakebase Searchを有効にしている場合です。
- Lakebaseの同期テーブルを使うには、まず検索準備をしてください。 湖 底構成を参照してください。
- サーバーレスコンピュートを使用している場合、サーバーレス環境のバージョンは3以上に設定されており、これにより
VARIANTなどの機能が可能になります。 -
ai_search機能はDatabricksノートブック、SQLエディタ、Databricksのワークフロー、ジョブ、またはLakeflow上のSpark Declarative Pipelinesを通じて利用可能です。
Syntax
ai_search(query, knowledge_sources [, instructions] [, options])
Arguments
-
query:STRINGまたはVARIANT式。 自然言語検索クエリ。VARIANT入力、例えば他のAI関数の出力は内部的にJSON文字列にシリアライズされます。 -
knowledge_sources: JSON配列の知識ソース構成を含むVARIANTまたはSTRING式を検索できます。 「 ナレッジソース構成」を参照してください。 最大10の知識源を指定することができます。 -
instructions最大4,000文字のオプションSTRING式。 クエリ生成、メタデータフィルター生成、再ランキングを導く自然言語命令。 たとえば、'Prefer official documentation over internal articles when both cover the same topic.'のように指定します。 -
options: 省略可能なMAP<STRING, STRING>。 サポートされているキー:-
'version': 使う関数バージョン。 -
'generate_answer':'true'(既定) または'false'。'true'すると、関数は取得した文書から基礎的な自然言語の回答を合成し、それをanswerフィールドに返します。 書類を返却'false'に設定してください。 -
'generate_citations':'true'または'false'(デフォルト)。'true'すると、関数はモデルが生成された回答をサポートするためにどのチャンクを取得したかを示す引用を返します。 この選択肢は'generate_answer'が'true'であることが必要です。
-
ナレッジ ソースの構成
knowledge_sourcesの引数はJSON配列です。 各要素は、 {type, config} エンベロープです。
typeフィールドはai_searchソースへの接続方法を示し、顧客向けリソース名とは別です。
typeをAI検索インデックス用にvector_searchに設定し、Lakebase Searchを有効にしたLakebase同期テーブル用にlakebase_searchに設定してください。
configフィールドにはソース固有の構成が含まれています。
| 鍵 | 必須 | Description |
|---|---|---|
type |
はい | 知識源のタイプです。
vector_search(AI検索インデックス)かlakebase_search(Lakebaseと同期しLakebase Searchを有効にしたテーブル)のいずれかです。 |
config |
はい | ソース固有の構成を含むオブジェクト。
vector_searchについてはAI検索インデックス構成、lakebase_searchについてはLakebase構成をご覧ください。 |
単一の通話で vector_search ソースと lakebase_search ソースを組み合わせることができ、最大10ソースの制限まで可能です。
AI検索インデックスの設定
typeがvector_searchに設定されたAI検索インデックスの場合、configは以下のキーを受け入れます。
| 鍵 | 必須 | Description |
|---|---|---|
index_name |
はい | 例えば、AI検索インデックスのUnityカタログの三段階名称は catalog.schema.my_index。 |
text_col |
はい | ドキュメントテキストを含むインデックスの列は page_contentとして返されます。 |
doc_uri_col |
はい | ドキュメントURIを含むインデックスの列は doc_uriとして返されました。 |
filter_columns |
いいえ | メタデータフィルタリング用のカンマ区切られた文字列またはJSON列の列。 省略した場合、リストはインデックススキーマから派生し、予約済み、テキスト、ドキュメントのURI列は除外されます。 |
以下の例は、1つのAI検索インデックスを知識ソースとして構成しています:
[
{
"type": "vector_search",
"config": {
"index_name": "prod_catalog.docs.support_articles",
"text_col": "article_body",
"doc_uri_col": "article_url",
"filter_columns": "product,language"
}
}
]
生のドキュメントからAI検索インデックスを作成するには、 ai_parse_document と ai_prep_search を使ってDeltaテーブルに検索可能なチャンクを作成します。 そのテーブルから AI検索インデックスを作成します 。 索引がオンラインになったら、その3段階の名称を index_nameとして使う。
湖底配置
Lakebase同期テーブルを知識ソースとして使う前に、まず検索のために準備してください:
- Lakebase Searchを有効にして拡張機能をインストールしてください。 プロジェクト設定で Lakebase Search を有効にし、プロジェクトのPostgresデータベースに接続して
lakebase_vector拡張機能をインストールしてくださいCREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;。 これはai_searchが使用する近傍ベクトル探索の近傍ベクトル探索を提供します。 Lakebase Searchを有効にするにはベータアクセスが必要で、不可逆的です。 - Unityカタログのテーブルをプロジェクトに同期してください。
同期テーブルを使い、埋め込み列を
vector(n)列にマッピングし、lakebase_annインデックスを作成します。 次元n埋め込みモデルの出力と一致しなければなりません。 - モデルがエンドポイントをサービスしてオフラインで埋め込みを生成します。 埋め込み列に埋め込みモデルを埋め込む — 例えば
ai_queryで埋め込みモデルを問い合わせるなど — そして同じ端点をembedding_modelに渡します(下記参照)。ai_search検索時にクエリを埋め込むため、クエリと保存された文書埋め込みが1つのベクトル空間を共有します。
typeがlakebase_searchに設定されたLakebase知識ソースの場合、config以下のキーを受け入れます。
| 鍵 | 必須 | Description |
|---|---|---|
index_name |
はい | 例えば、埋め込みチャンクを保持する Lakebase同期テーブル のUnity Catalogの3レベル名は catalog.schema.my_synced_table。 |
text_col |
はい | 文書のテキストを含むテーブルの列は page_contentとして返されます。 |
doc_uri_col |
はい | 文書URIを含むテーブルの列は doc_uriとして返されました。 |
embedding_column |
はい | 検索用のテーブル内の埋め込み列。 |
embedding_model |
はい | かつてオフラインに埋め込まれたモデルは、 embedding_column を埋め込むために使われていました。
ai_search 検索時にこの同じエンドポイントで各クエリを埋め込むため、保存された埋め込みを生成するために使われたモデルと一致しなければなりません。 以下の注意事項を参照してください。 |
lakebase_project_id |
はい | 同期テーブルをホストするLakebaseデータベースプロジェクト(インスタンス)の名前、例えば my-lakebase-project。 これはプロジェクト名であって、UUIDではありません。 |
filter_columns |
いいえ | メタデータフィルタリング用のカンマ区切られた文字列またはJSON列の列。 リストを省略した場合、保留カラム、テキスト、ドキュメントURI、埋め込みカラムを除外したテーブルスキーマから派生します。 テーブルに他の列があってもメタデータフィルタリングを無効にするために、空配列([])に設定します。 |
Important
embedding_model オフラインで埋め込みを生成する際に使った同じモデルでなければなりません embedding_column 。
ai_search クエリ時にこのエンドポイントを埋め込みます。もし保存されたベクトルを生成したモデルと異なる場合、クエリとドキュメントの埋め込みが異なるベクトル空間を占め、検索品質が急激に低下します。
以下の例は、Lakebaseテーブルを知識ソースとして構成しています。
embedding_modelをオフラインでテーブルを埋め込む際に使ったエンドポイントに置き換えてください:
[
{
"type": "lakebase_search",
"config": {
"index_name": "prod_catalog.docs.support_articles_synced",
"text_col": "article_body",
"doc_uri_col": "article_url",
"embedding_column": "article_embedding",
"embedding_model": "databricks-gte-large-en",
"lakebase_project_id": "my-lakebase-project"
}
}
]
返品
以下の VARIANT のスキーマです:
{
"document": [
{
"page_content": STRING, // Text content of the retrieved chunk
"doc_uri": STRING, // URI of the source document
"metadata": MAP // Additional metadata from the index
}
],
"answer": STRING, // Grounded answer synthesized from the retrieved
// documents, or null
"citations": [ // Present only when generate_citations is true
{
"document_index": INT // Position in the document array above, starting at 0
}
]
}
| フィールド | タイプ | Description |
|---|---|---|
document |
ARRAY |
関連順に並べた取得済み文書の配列。 |
document[].page_content |
STRING |
取得したチャンクのテキスト内容。 |
document[].doc_uri |
STRING |
ソースドキュメントのURIです。 |
document[].metadata |
MAP |
インデックスからの追加メタデータ。 |
answer |
STRING |
回収された文書から合成された、地に足のついた自然言語の答え。
null 回答生成が無効化された場合や文書が取得できない場合。 |
citations |
ARRAY |
generate_citations が trueされている場合にのみ存在します。 各項目はdocument配列内の0ベースの位置(document_index)で返されたチャンクを指し示すため、モデルが回答を支持するために使ったチャンクを確認できます。 空の配列は引用生成は実行されたものの引用は生成されませんでした。 引用生成が利用できない場合や呼び出しられない場合、SQLNULLqueryも含めて、この値はnullされます。 これらの引用はモデルが最善を尽くして選んだ支持部分であり、特定の主張の証拠ではありません。 |
generate_citationsが出trueしたら、answerとフィールドを一緒に読みcitations。 それぞれの値の組み合わせは異なる意味を持ちます:
- 空の
citations配列でnullでないanswerは、回答は生成されたものの、返却されたチャンクは選択されなかったことを意味します。 - 空の
citations配列のヌルanswerは引用生成は実行されましたが、根拠のある回答が生成されなかったため引用は生成されませんでした。 - null
citations値は引用生成が利用できないか、呼び出しられていないことを意味し、SQLNULLである場合も含query。
例示
基本的な検索
以下の例は、1つのAI検索インデックスを検索し、ランク付けされた文書と根拠のある回答を返します。
SELECT ai_search(
'How do I configure auto-scaling for my SQL warehouse?',
PARSE_JSON('[{
"type": "vector_search",
"config": {
"index_name": "prod_catalog.docs.support_articles",
"text_col": "article_body",
"doc_uri_col": "article_url",
"filter_columns": "product,language"
}
}]')
) AS result;
生成された回答の補助チャンクを返します
以下の例は、モデルが答えを支持するとして選択した回収チャンクの部分集合を返します。
SELECT ai_search(
'How do I configure auto-scaling for my SQL warehouse?',
PARSE_JSON('[{
"type": "vector_search",
"config": {
"index_name": "prod_catalog.docs.support_articles",
"text_col": "article_body",
"doc_uri_col": "article_url"
}
}]'),
options => map('generate_citations', 'true')
) AS result;
document配列には返されたチャンクの全セットが依然として含まれています。 各引用の document_index を使って、その配列から支持するものを選びます。 これらの指標は単一の回答内でのみ有効です。 コール間、リランク変更、インデックス更新時などで変更されることがあります。
指示付きマルチソース検索
以下の例は、2つのAI検索インデックスを検索し、 instructions を用いてクエリ生成と再ランキングを誘導しています。
SELECT ai_search(
'What are the networking requirements for serverless SQL warehouses?',
PARSE_JSON('[
{
"type": "vector_search",
"config": {"index_name": "prod_catalog.docs.public_docs", "text_col": "content", "doc_uri_col": "doc_url"}
},
{
"type": "vector_search",
"config": {"index_name": "prod_catalog.docs.internal_kb", "text_col": "body", "doc_uri_col": "source_uri"}
}
]'),
'Focus on firewall rules and VPC/VNet configuration. Prefer official documentation over internal articles when both cover the same topic.'
) AS result;
Lakebaseテーブルを検索
以下の例はLakebase同期テーブルを検索し、ランク付けされた文書と根拠のある回答を返します。
SELECT ai_search(
'How do I configure auto-scaling for my SQL warehouse?',
PARSE_JSON('[{
"type": "lakebase_search",
"config": {
"index_name": "prod_catalog.docs.support_articles_synced",
"text_col": "article_body",
"doc_uri_col": "article_url",
"embedding_column": "article_embedding",
"embedding_model": "databricks-gte-large-en",
"lakebase_project_id": "my-lakebase-project"
}
}]')
) AS result;
AI検索インデックスとLakebaseテーブルを組み合わせる
以下の例は、同じコール内でAI検索インデックスとLakebaseテーブルの両方を検索しています。 両方の結果は重複を除去し、まとめて再ランク付けされ、1つのランク付けリストとして返されます。
SELECT ai_search(
'What are the networking requirements for serverless SQL warehouses?',
PARSE_JSON('[
{
"type": "vector_search",
"config": {"index_name": "prod_catalog.docs.public_docs", "text_col": "content", "doc_uri_col": "doc_url"}
},
{
"type": "lakebase_search",
"config": {
"index_name": "prod_catalog.docs.internal_kb_synced",
"text_col": "body",
"doc_uri_col": "source_uri",
"embedding_column": "body_embedding",
"embedding_model": "databricks-gte-large-en",
"lakebase_project_id": "my-lakebase-project"
}
}
]')
) AS result;
検索と生成された回答でテーブルを豊かにする
以下の例は、各サポートチケットに関連するドキュメントと提案された解決策を補完します。 回答生成がデフォルトでオンになっているため、提案された解像度は answer フィールドで直接利用可能であり、別の生成ステップは必要ありません。
SELECT
ticket_id,
customer_description,
ai_search(
customer_description,
PARSE_JSON('[{
"type": "vector_search",
"config": {
"index_name": "support.docs.product_documentation",
"text_col": "content",
"doc_uri_col": "doc_url"
}
}]'),
'Find product documentation, known issues, and troubleshooting guides relevant to this support ticket.'
):answer::STRING AS suggested_resolution
FROM support.tickets.open_tickets;
出力フォーマットを制御したり特定のモデルを使用する場合は、 'generate_answer' を 'false' に設定し、取得した文書を ai_query に連結させます。
制限事項
-
ai_search知識ソースとしてAI検索インデックス("type": "vector_search")およびLakebase同期テーブル("type": "lakebase_search")をサポートしています。 - 1コールあたり最大10の知識ソースを指定でき、対応可能なタイプの組み合わせで自由に設定できます。
-
instructionsの議論は4,000文字に制限されています。