ai_search funkcja

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak 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_search jest 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żenie STRING lub VARIANT. Zapytanie do wyszukiwania w języku naturalnym. VARIANT wejście, takie jak wyjście innej funkcji AI, jest wewnętrznie serializowane do ciągu JSON.
  • knowledge_sources: Wyrażenie VARIANT lub STRING zawierają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: Opcjonalne STRING wyraż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 element MAP<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ą w answer polu. 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:

  1. 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ąc CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;. Zapewnia przybliżone wyszukiwanie wektorowe najbliższego sąsiada, które jest wykorzystywane ai_search . Aktywowanie Lakebase Search wymaga dostępu do wersji beta i jest nieodwracalne.
  2. Zsynchronizuj swoją tabelę Unity Catalog z projektem. Użyj zsynchronizowanej tabeli, przypisz kolumnę osadzenia na kolumnę vector(n) i zbuduj na niej indeks.lakebase_ann Wymiar n musi odpowiadać wynikowi modelu osadzania.
  3. Generuj osadzenia offline z endpointem obsługującym model. Wypełnij kolumnę osadzenia modelem osadzenia — na przykład zapytując model osadzenia — ai_query a następnie przekazuj ten sam punkt końcowy jako embedding_model (patrz niżej). ai_search osadza 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 answer z pustą citations tablicą oznacza, że wygenerowano odpowiedź, ale nie wybrano zwróconego fragmentu.
  • Null answer z pustą tablicą citations oznacza, że generowanie cytowań zostało przeprowadzone, ale nie wygenerowało cytowań, ponieważ nie wygenerowano odpowiedzi opartej na podstawie.
  • Wartość null citations oznacza, że generowanie cytowań nie było dostępne lub nie zostało wywołane, w tym gdy query jest SQL NULL.

Examples

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_search wspiera 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 instructions jest ograniczony do 4 000 znaków.