funktion ai_search

gäller för:markerad med ja Databricks SQL markerad med ja Databricks Runtime

Important

Den här funktionen finns i Beta.

Funktionen ai_search() hämtar information från en eller flera kunskapskällor. Kunskapskällor kan inkludera AI-sökningsindex eller Lakebase-synkade tabeller med Lakebase Search aktiverat.

Givet en naturlig språkfråga och kunskapskällor konfigurerade för anropet, genererar funktionen optimerade sökfrågor, hämtar och deduplicerar resultat över källor, rankar om dem efter relevans och returnerar de mest relevanta dokumenten. Som standard syntetiserar den också ett jordat svar på naturligt språk över de hämtade dokumenten.

Använda ai_search för att berika operativ data med relevant kontext i stor skala, bygga batch-retrieval-augmented generation (RAG)-pipelines, eller exponera retrieval som ett verktyg för ett sammansatt AI-system – allt från ett enda SQL-funktionsanrop.

Datasäkerhet

Dina dokumentdata bearbetas inom Databricks säkerhetsperimeter. Databricks lagrar inte parametrarna som skickas till AI-funktionsanropen, men behåller metadata-kördetaljer, såsom Databricks Runtime-versionen som används.

Requirements

  • Databricks Runtime 18.2 eller senare.
  • En eller flera kunskapskällor att söka i: AI-sökningsindex eller Lakebase-synkade tabeller med Lakebase Search aktiverat.
  • För att använda en Lakebase-synkroniserad tabell, förbered den för sökning först. Se Lakebase-konfiguration.
  • Om du använder serverless compute måste versionen av serverless miljöer vara inställd på 3 eller högre, eftersom detta möjliggör funktioner som VARIANT.
  • Funktionen ai_search finns tillgänglig med Databricks-notebooks, SQL-redigerare, Databricks-arbetsflöden, jobb eller Spark Deklarative Pipelines på Lakeflow.

Syntax

ai_search(query, knowledge_sources [, instructions] [, options])

Arguments

  • query: Ett STRING eller VARIANT uttryck. Den naturliga språksökningen. VARIANT indata, såsom utdata från en annan AI-funktion, serialiseras internt till en JSON-sträng.
  • knowledge_sources: Ett VARIANT eller uttryck STRING som innehåller en JSON-array av kunskapskällskonfigurationer att söka i. Se konfiguration av kunskapskällor. Du kan ange upp till 10 kunskapskällor.
  • instructions: Ett valfritt STRING uttryck på upp till 4 000 tecken. Naturligspråksinstruktioner som styr generering av frågor, metadatafilter och omrankning. Till exempel: 'Prefer official documentation over internal articles when both cover the same topic.'
  • options: Ett valfritt MAP<STRING, STRING>. Nycklar som stöds:
    • 'version': Funktionsversionen att använda.
    • 'generate_answer': 'true' (standard) eller 'false'. När 'true', syntetiserar funktionen ett jordat naturligt språksvar från de hämtade dokumenten och returnerar det i answer fält. Ställ in på 'false' att endast returnera dokument.
    • 'generate_citations': 'true' eller 'false' (standard). När 'true', returnerar funktionen citationer som visar vilka hämtade delar modellen använde för att stödja sitt genererade svar. Detta alternativ kräver 'generate_answer' att .'true'

Konfiguration av kunskapskälla

Argumentet knowledge_sources är en JSON-array. Varje element är ett {type, config} kuvert. Fältet type identifierar hur ai_search det kopplas till källan och är separat från det kundanpassade resursnamnet. Ställ type in på vector_search för ett AI-sökningsindex, eller lakebase_search för en Lakebase-synkad tabell med Lakebase Search aktiverat. Fältet config innehåller den källspecifika konfigurationen.

Nyckel Obligatoriskt Description
type Yes Kunskapskällan. En av vector_search (ett AI-sökningsindex) eller lakebase_search (en Lakebase-synkad tabell med Lakebase Search aktiverad).
config Yes Ett objekt som innehåller den källspecifika konfigurationen. Se AI-sökningsindexkonfiguration för vector_search och Lakebase-konfiguration för lakebase_search.

Ett enda samtal kan kombinera vector_search och lakebase_search källa, upp till gränsen på 10 källor.

AI-sökningsindexkonfiguration

För ett AI-sökningsindex med type satt till vector_search, config accepterar följande nycklar:

Nyckel Obligatoriskt Description
index_name Yes Unity Catalog trenivånamnet på AI Search-indexet, till exempel catalog.schema.my_index.
text_col Yes Kolumnen i indexet som innehåller dokumenttexten returnerades som page_content.
doc_uri_col Yes Kolumnen i indexet som innehåller dokumentets URI returnerades som doc_uri.
filter_columns No En kommaseparerad sträng eller JSON-array av kolumner tillgänglig för metadatafiltrering. När listan utelämnas härleds den från indexschemat, exklusive reserverade, text- och dokument-URI-kolumner.

Följande exempel konfigurerar ett AI-sökningsindex som en kunskapskälla:

[
  {
    "type": "vector_search",
    "config": {
      "index_name": "prod_catalog.docs.support_articles",
      "text_col": "article_body",
      "doc_uri_col": "article_url",
      "filter_columns": "product,language"
    }
  }
]

För att bygga ett AI-sökindex från råa dokument, använd ai_parse_document och ai_prep_search skapa sökklara delar i en Delta-tabell. Skapa sedan ett AI-sökindex från den tabellen. Efter att indexet är online, använd dess trenivånamn som index_name.

Lakebase-konfiguration

Innan du kan använda en Lakebase-synkroniserad tabell som kunskapskälla, förbered den för sökning:

  1. Aktivera Lakebase Search och installera tilläggen. Följ Lakebase Search för att aktivera Lakebase Search i dina projektinställningar, koppla sedan till projektets Postgres-databas och installera tillägget lakebase_vector genom att köra CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;. Den tillhandahåller den ungefärliga närmaste-granne-vektorsökning som ai_search använder. Att aktivera Lakebase Search kräver betaåtkomst och är irreversibelt.
  2. Synka din Unity-katalogtabell till projektet. Använd en synkad tabell, mappa inbäddningskolumnen till en vector(n) kolumn och bygg ett lakebase_ann index på den. Dimensionen n måste matcha din inbäddningsmodells utdata.
  3. Generera inbäddningarna offline med en modellbetjänande endpoint. Fyll inbäddningskolumnen med en inbäddningsmodell — till exempel genom att fråga en inbäddningsmodell med ai_query — och skicka sedan samma slutpunkt som embedding_model (se nedan). ai_search Bäddar in varje fråga med den vid söktid, så att frågan och de lagrade dokumentinbäddningarna delar ett vektorutrymme.

För en Lakebase-kunskapskälla med type satt till lakebase_search, config accepterar följande nycklar:

Nyckel Obligatoriskt Description
index_name Yes Unity Catalogs trenivånamn på den Lakebase-synkade tabellen som innehåller de inbäddade chunks, till exempel catalog.schema.my_synced_table.
text_col Yes Kolumnen i tabellen som innehåller dokumenttexten returnerades som page_content.
doc_uri_col Yes Kolumnen i tabellen som innehåller dokumentets URI returnerade som doc_uri.
embedding_column Yes Inbäddningskolumnen i tabellen för sökning.
embedding_model Yes Modell-serveringsendpointen används för att bädda embedding_column in offline. ai_search Bäddar in varje fråga med samma slutpunkt vid söktillfället, så den måste matcha modellen som används för att generera de lagrade inbäddningarna. Se noten nedan.
lakebase_project_id Yes Namnet på Lakebase-databasprojektet (instansen) som är värd för den synkroniserade tabellen, till exempel my-lakebase-project. Det här är projektets namn, inte en UUID.
filter_columns No En kommaseparerad sträng eller JSON-array av kolumner tillgänglig för metadatafiltrering. När listan utelämnas härleds den från tabellschemat, exklusive reserverade, text-, dokument-URI och inbäddningskolumner. Ställ in på en tom array ([]) för att inaktivera metadatafiltrering även när tabellen har andra kolumner.

Important

embedding_model Det måste vara samma modell-serverande endpoint som du använde för att generera inbäddningarna som lagras offline embedding_column . ai_search bäddar in varje fråga i denna endpoint vid frågetillfället; om den skiljer sig från modellen som producerade de lagrade vektorerna, upptar fråge- och dokumentinbäddningarna olika vektorutrymmen och hämtningskvaliteten försämras kraftigt.

Följande exempel konfigurerar en Lakebase-tabell som kunskapskälla. Ersätt embedding_model med den slutpunkt du använde för att bädda in tabellen 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"
    }
  }
]

Retur

A VARIANT med följande schema:

{
  "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
    }
  ]
}
Fält Type Description
document ARRAY Samling av återfunna dokument, ordnade efter relevans.
document[].page_content STRING Textinnehållet i den återhämtade biten.
document[].doc_uri STRING URI för källdokumentet.
document[].metadata MAP Ytterligare metadata från indexet.
answer STRING Ett jordat svar på naturligt språk syntetiserat från de återfunna dokumenten. null när svarsgenerering är inaktiverad eller när inga dokument hämtas.
citations ARRAY Presentera endast när generate_citations är true. Varje objekt pekar på en returnerad chunk med sin 0-baserade position (document_index) i arrayen document , så du kan se vilka chunks modellen använde för att stödja sitt svar. En tom array betyder att citeringsgenerering kördes men inte producerade några citat. Värdet ligger null när citationsgenerering inte är tillgänglig eller inte anropas, inklusive när query SQL NULLär . Dessa citater är modellens bästa val av stödjande bitar, inte bevis för något specifikt påstående.

När generate_citations är true, läs och citations fälten answer tillsammans. Varje kombination av värden betyder något olika:

  • En icke-null answer med en tom citations array betyder att ett svar genererades, men ingen returnerad chunk valdes.
  • En null answer med en tom citations array betyder att citationsgenerering kördes men inte gav några citater eftersom inget jordat svar genererades.
  • Ett nullvärde citations betyder att citeringsgenerering inte var tillgänglig eller inte anropades, inklusive när query SQL NULLär .

Examples

Följande exempel söker i ett AI-sökningsindex och ger rankade dokument samt ett grundat svar:

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;

Returnera stödjande chunks för det genererade svaret

Följande exempel returnerar den delmängd av hämtade bitar som modellen valde som stöd för svaret:

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;

Arrayen document innehåller fortfarande hela uppsättningen returnerade chunks. Använd i document_index varje citat för att välja ut de stödjande ur den mängden. Dessa index är endast giltiga inom ett enda svar. De kan ändras mellan samtal, när omklassificering ändras eller när indexet uppdateras.

Multikällsökning med instruktioner

Följande exempel söker i två AI-sökningsindex och används instructions för att styra frågegenerering och omplacering:

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;

Sök i en Lakebase-tabell

Följande exempel söker i en Lakebase-synkad tabell och returnerar rankade dokument och ett jordat svar:

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;

Kombinera ett AI-sökningsindex och en Lakebase-tabell

Följande exempel söker i ett AI-sökningsindex och en Lakebase-tabell i samma anrop. Resultat från båda källorna dedupliceras, rankas om tillsammans och återlämnas som en rankad lista:

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;

Berika en tabell med retrieval och ett genererat svar

Följande exempel berikar varje supportärende med relevant dokumentation och ett förslag på lösning. Eftersom svargenerering är påslagen som standard är den föreslagna lösningen tillgänglig direkt i answer fältet — inget separat genereringssteg krävs.

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;

För att styra utdataformatet eller använda en specifik modell, ställ 'generate_answer' in och 'false' kedja de hämtade dokumenten istället ai_query .

Limitations

  • ai_search stöder AI-sökningsindex ("type": "vector_search") och Lakebase-synkade tabeller ("type": "lakebase_search") som kunskapskällor.
  • Du kan ange upp till 10 kunskapskällor per samtal, i valfri kombination av de stödda typerna.
  • Argumentet instructions är begränsat till 4 000 tecken.