Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:
Databricks SQL
Databricks Runtime
Ważna
Ta funkcja jest dostępna w wersji beta.
Funkcja pobiera ai_search() informacje z jednego lub więcej źródeł wiedzy. Źródła wiedzy mogą obejmować indeksy wyszukiwania AI lub tabele synchronizowane w Lakebase z włączonym Lakebase Search.
Dla zapytania i źródeł wiedzy w języku naturalnym skonfigurowanym dla wywołania, funkcja generuje zoptymalizowane zapytania wyszukiwania, pobiera i deduplikuje wyniki między źródłami, ponownie je klasyfikuje według trafności oraz zwraca najbardziej istotne dokumenty. Domyślnie syntetyzuje także ugruntowaną odpowiedź w języku naturalnym na podstawie odzyskanych dokumentów.
Wykorzystaj do wzbogacania danych operacyjnych o istotny kontekst na dużą skalę, budowania potoków generowania wsadowego i uzupełnionego generowania (RAG) lub udostępniania ai_search pobierania jako narzędzia do systemu AI złożonego — wszystko to z jednego wywołania funkcji SQL.
Bezpieczeństwo danych
Dane dokumentu są przetwarzane w ramach strefy bezpieczeństwa Databricks. Databricks nie przechowuje parametrów przekazywanych do wywołań funkcji AI, ale zachowuje szczegóły metadanych, takie jak używana wersja Databricks Runtime.
Requirements
- Databricks Runtime 18.2 lub nowszy.
- Jedno lub więcej źródeł wiedzy do przeszukiwania: indeksy AI Search lub tabele synchronizowane w Lakebase z włączonym Lakebase Search.
- Aby użyć tabeli synchronizowanej w Lakebase, przygotuj ją najpierw do wyszukiwania. Zobacz konfigurację bazy jeziora.
- Jeśli korzystasz z obliczeń serwerowych, wersja środowiska serwerless musi być ustawiona na 3 lub wyższą, ponieważ umożliwia to funkcje takie jak
VARIANT. - Funkcja ta
ai_searchjest dostępna za pomocą notatników Databricks, edytora SQL, workflowów Databricks, zadań lub Spark Declarative Pipelines w Lakeflow.
Składnia
ai_search(query, knowledge_sources [, instructions] [, options])
Arguments
-
query: wyrażenieSTRINGlubVARIANT. Zapytanie do wyszukiwania w języku naturalnym.VARIANTwejście, takie jak wyjście innej funkcji AI, jest wewnętrznie serializowane do ciągu JSON. -
knowledge_sources: WyrażenieVARIANTlubSTRINGzawierające tablicę JSON konfiguracji źródeł wiedzy do przeszukiwania. Zobacz Konfiguracja źródła wiedzy. Możesz określić do 10 źródeł wiedzy. -
instructions: OpcjonalneSTRINGwyrażenie do 4 000 znaków. Instrukcje w języku naturalnym, które kierują generowaniem zapytań, generowaniem filtrów metadanych i ponownym rankingiem. Na przykład'Prefer official documentation over internal articles when both cover the same topic.' -
options: opcjonalny elementMAP<STRING, STRING>. Obsługiwane klucze:-
'version': Wersja funkcjonalna do użycia. -
'generate_answer':'true'(wartość domyślna) lub'false'. Gdy'true', funkcja syntetyzuje ugruntowaną odpowiedź w języku naturalnym z odzyskanych dokumentów i zwraca ją wanswerpolu. Ustaw na'false'tylko do zwrotu dokumentów. -
'generate_citations': lub'true''false'(domyślnie). Gdy'true', funkcja zwraca cytowania pokazujące, które fragmenty pobrał model do wsparcia wygenerowanej odpowiedzi. Ta opcja musi'generate_answer'być .'true'
-
Konfiguracja źródła wiedzy
Argument knowledge_sources dotyczy tablicy JSON. Każdy element to koperta {type, config} . Pole type to identyfikuje, jak ai_search łączy się ze źródłem i jest oddzielne od nazwy zasobu skierowanego do klienta. Ustawione type na dla vector_search indeksu AI Search lub lakebase_search dla tablicy synchronizowanej z Lakebase z włączonym Lakebase Search. Pole config zawiera konfigurację specyficzną dla źródła.
| Key | Wymagane | Opis |
|---|---|---|
type |
Yes | Typ źródła wiedzy. Jeden z vector_search (indeks wyszukiwania AI) lub lakebase_search (tabela synchronizowana z Lakebase z włączonym Lakebase Search). |
config |
Yes | Obiekt zawierający specyficzną dla źródła konfigurację. Zobacz konfigurację indeksu AI Search dla vector_search oraz konfigurację Lakebase dla lakebase_search. |
Pojedyncze wywołanie może łączyć vector_search źródła do lakebase_search limitu 10 źródeł.
Konfiguracja indeksu wyszukiwania AI
Dla indeksu wyszukiwania AI ustawionym type na , vector_searchconfig akceptuje następujące klucze:
| Key | Wymagane | Opis |
|---|---|---|
index_name |
Yes | Na przykład catalog.schema.my_indextrzypoziomowa nazwa indeksu AI Search w katalogu Unity . |
text_col |
Yes | Kolumna w indeksie zawierająca tekst dokumentu zwracała jako page_content. |
doc_uri_col |
Yes | Kolumna w indeksie zawierająca URI dokumentu zwracała jako doc_uri. |
filter_columns |
No | Ciąg kolumn oddzielony przecinkami lub tablica kolumn JSON dostępna do filtrowania metadanych. Po pominięciu lista jest wyprowadzana ze schematu indeksu, z wyłączeniem kolumn URI zarezerwowanych, tekstowych i dokumentów. |
Poniższy przykład konfiguruje jeden indeks wyszukiwania AI jako źródło wiedzy:
[
{
"type": "vector_search",
"config": {
"index_name": "prod_catalog.docs.support_articles",
"text_col": "article_body",
"doc_uri_col": "article_url",
"filter_columns": "product,language"
}
}
]
Aby zbudować indeks AI Search z surowych dokumentów, użyj ai_parse_document i ai_prep_search tworz gotowe do wyszukiwania fragmenty w tabeli Delta. Następnie stwórz indeks wyszukiwania AI z tej tabeli. Po uruchomieniu indeksu używamy jego trzypoziomowej nazwy jako index_name.
Konfiguracja bazy jeziora
Zanim będziesz mógł użyć zsynchronizowanej tabeli Lakebase jako źródła wiedzy, przygotuj ją do wyszukiwania:
- Włącz Lakebase Search i zainstaluj rozszerzenia. Kliknij Lakebase Search , aby włączyć Lakebase Search w ustawieniach projektu, następnie połącz się z bazą danych Postgres projektu i zainstaluj rozszerzenie
lakebase_vector, uruchamiającCREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;. Zapewnia przybliżone wyszukiwanie wektorowe najbliższego sąsiada, które jest wykorzystywaneai_search. Aktywowanie Lakebase Search wymaga dostępu do wersji beta i jest nieodwracalne. - Zsynchronizuj swoją tabelę Unity Catalog z projektem. Użyj zsynchronizowanej tabeli, przypisz kolumnę osadzenia na kolumnę
vector(n)i zbuduj na niej indeks.lakebase_annWymiarnmusi odpowiadać wynikowi modelu osadzania. - Generuj osadzenia offline z endpointem obsługującym model. Wypełnij kolumnę osadzenia modelem osadzenia — na przykład zapytując model osadzenia —
ai_querya następnie przekazuj ten sam punkt końcowy jakoembedding_model(patrz niżej).ai_searchosadza każde zapytanie w tym samym momencie wyszukiwania, dzięki czemu zapytanie i zapisane dokumenty dzielą jedną przestrzeń wektorową.
Dla źródła wiedzy Lakebase z type ustawionym na , lakebase_searchconfig akceptuje następujące klucze:
| Key | Wymagane | Opis |
|---|---|---|
index_name |
Yes | Trzypoziomowa nazwa Unity Catalog dla tablicy synchronizowanej Lakebase, która zawiera osadzone fragmenty, na przykład catalog.schema.my_synced_table. |
text_col |
Yes | Kolumna w tabeli zawierająca tekst dokumentu zwracała jako .page_content |
doc_uri_col |
Yes | Kolumna w tabeli, która zawiera URI dokumentu, zwracała jako doc_uri. |
embedding_column |
Yes | Kolumna osadzania w tabeli do wyszukiwania. |
embedding_model |
Yes | Endpoint obsługujący model był używany do osadzania embedding_column offline.
ai_search osadza każde zapytanie z tym samym punktem końcowym podczas wyszukiwania, więc musi odpowiadać modelu użytemu do generowania zapisanych osadzeń. Zobacz notatkę poniżej. |
lakebase_project_id |
Yes | Nazwa projektu (instancji) bazy danych Lakebase, która hostuje zsynchronizowaną tabelę, na przykład my-lakebase-project. To jest nazwa projektu, a nie UUID. |
filter_columns |
No | Ciąg kolumn oddzielony przecinkami lub tablica kolumn JSON dostępna do filtrowania metadanych. Po pominięciu lista jest wyprowadzana ze schematu tabeli, z wyłączeniem kolumn zarezerwowanych, tekstowych, dokumentowych i osadzających. Ustaw pustą tablicę ([]), aby wyłączyć filtrowanie metadanych nawet wtedy, gdy tabela ma inne kolumny. |
Ważna
embedding_model Musi to być ten sam endpoint obsługujący model, którego użyłeś do generowania osadzeń przechowywanych offline embedding_column .
ai_search osadza każde zapytanie z tym punktem końcowym w czasie zapytania; jeśli różni się od modelu, który wygenerował przechowywane wektory, zapytania i dokumenty zajmują różne przestrzenie wektorowe, a jakość wyszukiwania gwałtownie się pogarsza.
Poniższy przykład konfiguruje tabelę Lakebase jako źródło wiedzy. Zamień embedding_model punkt końcowy, którego użyłeś do osadzenia tabeli offline:
[
{
"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"
}
}
]
Returns
A VARIANT z następującym schematem:
{
"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
}
]
}
| Pole | Typ | Opis |
|---|---|---|
document |
ARRAY |
Zestaw odzyskanych dokumentów, uporządkowanych według znaczenia. |
document[].page_content |
STRING |
Treść tekstu pobranego fragmentu. |
document[].doc_uri |
STRING |
URI dokumentu źródłowego. |
document[].metadata |
MAP |
Dodatkowe metadane z indeksu. |
answer |
STRING |
Ugruntowana odpowiedź w naturalnym języku syntetyzowana z odzyskanych dokumentów.
null gdy generowanie odpowiedzi jest wyłączone lub gdy nie są pobierane żadne dokumenty. |
citations |
ARRAY |
Występuje tylko wtedy, gdy generate_citations jest true. Każdy element wskazuje na zwrócony fragment przez jego pozycję opartą na zerze (document_index) w tablicy document , więc możesz zobaczyć, których fragmentów model użył do wsparcia swojej odpowiedzi. Pusta tablica oznacza, że generowanie cytowań zostało przeprowadzone, ale nie wygenerowało cytowań. Wartość ta występuje, null gdy generowanie cytowań jest niedostępne lub nie jest wywoływane, w tym gdy query jest SQL NULL. Te cytowania są najlepszym wyrazem modelu dotyczącymi fragmentów wspierających, a nie dowodem na konkretne twierdzenie. |
Gdy generate_citations jest , trueczytaj answer pola i citations razem. Każda kombinacja wartości oznacza coś innego:
- Nie-null
answerz pustącitationstablicą oznacza, że wygenerowano odpowiedź, ale nie wybrano zwróconego fragmentu. - Null
answerz pustą tablicącitationsoznacza, że generowanie cytowań zostało przeprowadzone, ale nie wygenerowało cytowań, ponieważ nie wygenerowano odpowiedzi opartej na podstawie. - Wartość null
citationsoznacza, że generowanie cytowań nie było dostępne lub nie zostało wywołane, w tym gdyqueryjest SQLNULL.
Examples
Wyszukiwanie podstawowe
Poniższy przykład wyszukuje jeden indeks AI Search i zwraca dokumenty o rankingu oraz osadzoną odpowiedź:
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;
Zwróć chunks wspierające dla wygenerowanej odpowiedzi
Poniższy przykład zwraca podzbiór odzyskanych fragmentów, które model wybrał jako wspierające odpowiedź:
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;
Tablica document nadal zawiera pełny zestaw zwróconych chunków. Użyj w każdym cytowaniu do document_index wybrania wspierających z tego zestawu. Te indeksy są ważne tylko w jednej odpowiedzi. Mogą się zmieniać między połączeniami, podczas zmiany rankingu lub aktualizacji indeksu.
Wyszukiwanie wieloźródłowe z instrukcjami
Poniższy przykład wyszukuje dwa indeksy AI Search i wykorzystuje je instructions do sterowania generowaniem zapytań oraz rerankingiem:
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;
Wyszukaj w tabeli Lakebase
Poniższy przykład przeszukuje zsynchronizowaną tabelę Lakebase i zwraca dokumenty o klasyfikacji oraz odpowiedź opartą na podstawie:
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;
Połącz indeks AI Search i tabelę Lakebase
Poniższy przykład przeszukuje indeks AI Search oraz tabelę Lakebase w tym samym połączeniu. Wyniki z obu źródeł są deduplikowane, ponownie klasyfikowane i zwracane jako jedna lista rankingowa:
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;
Wzbogać tabelę o wyszukiwanie i wygenerowaną odpowiedź
Poniższy przykład wzbogaca każde zgłoszenie wsparcia odpowiednią dokumentacją i sugerowaną rezolucją. Ponieważ generowanie odpowiedzi jest domyślnie włączone, sugerowana rozdzielczość jest dostępna bezpośrednio w answer terenie — nie jest wymagany osobny etap generowania.
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;
Aby kontrolować format wyjściowy lub użyć konkretnego modelu, ustaw 'generate_answer' na i 'false' łańcuch połącz pobrane dokumenty ai_query .
Ograniczenia
-
ai_searchwspiera indeksy AI Search ("type": "vector_search") oraz Lakebase synchronizowane tabele ("type": "lakebase_search") jako źródła wiedzy. - Możesz określić do 10 źródeł wiedzy na każde połączenie, w dowolnej kombinacji obsługiwanych typów.
- Argument
instructionsjest ograniczony do 4 000 znaków.