Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:
Databricks SQL
Databricks Runtime
Important
Deze functie bevindt zich in de bètaversie.
De functie haalt ai_search() informatie op uit een of meer kennisbronnen. Kennisbronnen kunnen AI-zoekindexen of Lakebase-gesynchroniseerde tabellen met Lakebase Search ingeschakeld zijn.
Gegeven een natuurlijke taalzoekopdracht en kennisbronnen geconfigureerd voor de aanroep, genereert de functie geoptimaliseerde zoekzoekopdrachten, haalt resultaten op en dedupliceert ze over bronnen, herrangschikt ze op relevantie en geeft de meest relevante documenten terug. Standaard genereert het ook een gegrond, natuurtaalantwoord over de opgehaalde documenten.
Gebruik ai_search om operationele data op grote schaal te verrijken met relevante context, batch retrieval-augmented generation (RAG) pipelines te bouwen, of retrieval als hulpmiddel bloot te stellen aan een samengesteld AI-systeem — allemaal vanuit één SQL-functieaanroep.
Gegevensbeveiliging
Uw documentgegevens worden verwerkt binnen de Databricks-beveiligingsperimeter. Databricks slaat de parameters die aan de AI-functieaanroepen worden doorgegeven niet op, maar behoudt wel details van de uitvoering van metadata, zoals de gebruikte Databricks Runtime-versie.
Requirements
- Databricks Runtime 18.2 of hoger.
- Een of meer kennisbronnen om te doorzoeken: AI Search-indexen, of Lakebase-gesynchroniseerde tabellen met Lakebase Search ingeschakeld.
- Om een Lakebase-gesynchroniseerde tabel te gebruiken, bereid deze eerst voor op zoek. Zie Lakebase-configuratie.
- Als je Serverless compute gebruikt, moet de serverless omgevingsversie op 3 of hoger worden gezet, omdat dit functies zoals
VARIANTmogelijk maakt. - De
ai_searchfunctie is beschikbaar via Databricks-notebooks, SQL-editor, Databricks-workflows, jobs of Spark Declarative Pipelines op Lakeflow.
Syntax
ai_search(query, knowledge_sources [, instructions] [, options])
Arguments
-
query: EenSTRING- ofVARIANT-expressie. De zoekopdracht in natuurlijke taal.VARIANTinvoer, zoals de uitvoer van een andere AI-functie, wordt intern geserialiseerd naar een JSON-string. -
knowledge_sources: EenVARIANTof expressieSTRINGmet een JSON-array van kennisbronconfiguraties om te doorzoeken. Zie Knowledge source configuratie. Je kunt tot 10 kennisbronnen specificeren. -
instructions: Een optioneleSTRINGexpressie van maximaal 4.000 tekens. Natuurtaalinstructies die het genereren van zoekopdrachten, het genereren van metadatafilters en het herrangschikken begeleiden. Bijvoorbeeld:'Prefer official documentation over internal articles when both cover the same topic.' -
options: Een optioneelMAP<STRING, STRING>. Ondersteunde sleutels:-
'version': De functieversie die gebruikt moet worden. -
'generate_answer':'true'(standaard) of'false'. Wanneer'true', synthetiseert de functie een geaarde natuurtaal-antwoord uit de opgehaalde documenten en geeft dit terug in hetanswerveld. Zet op'false'alleen documenten terugsturen. -
'generate_citations':'true'of'false'(standaard). Wanneer'true', geeft de functie citaties terug die aangeven welke opgehaalde chunks het model gebruikte ter ondersteuning van het gegenereerde antwoord. Deze optie moet'generate_answer'zijn'true'.
-
Configuratie van kennisbron
Het knowledge_sources argument is een JSON-array. Elk element is een {type, config} envelop. Het type veld identificeert hoe ai_search het met de bron verbonden is en is gescheiden van de naam van de klantgerichte bron. Ingesteld type op vector_search voor een AI-zoekindex, of lakebase_search voor een Lakebase-gesynchroniseerde tabel met Lakebase Search ingeschakeld. Het config veld bevat de bronspecifieke configuratie.
| Key | Required | Description |
|---|---|---|
type |
Ja | Het type kennisbron. Eén van vector_search (een AI Search index) of lakebase_search (een Lakebase gesynchroniseerde tabel met Lakebase Search ingeschakeld). |
config |
Ja | Een object met de bronspecifieke configuratie. Zie AI Search indexconfiguratie voor vector_search en Lakebase-configuratie voor lakebase_search. |
Een enkele oproep kan combineren vector_search en lakebase_search bronnen, tot aan de limiet van 10 bronnen.
AI Search indexconfiguratie
Voor een AI-zoekindex met type ingesteld op vector_searchaccepteert de config volgende sleutels:
| Key | Required | Description |
|---|---|---|
index_name |
Ja | De Unity Catalog drie-niveaus naam van de AI Search index, bijvoorbeeld catalog.schema.my_index. |
text_col |
Ja | De kolom in de index die de documenttekst bevat, werd teruggegeven als page_content. |
doc_uri_col |
Ja | De kolom in de index die de document-URI bevat, werd teruggegeven als doc_uri. |
filter_columns |
No | Een komma-gescheiden string of JSON-array van kolommen beschikbaar voor metadata-filtering. Wanneer deze wordt weggelaten, is de lijst afgeleid van het indexschema, met uitzondering van gereserveerde, tekst- en document-URI-kolommen. |
Het volgende voorbeeld configureert één AI Search index als kennisbron:
[
{
"type": "vector_search",
"config": {
"index_name": "prod_catalog.docs.support_articles",
"text_col": "article_body",
"doc_uri_col": "article_url",
"filter_columns": "product,language"
}
}
]
Om een AI-zoekindex te bouwen uit ruwe documenten, gebruik ai_parse_document en ai_prep_search maak zoekklare chunks in een Delta-tabel. Maak vervolgens een AI-zoekindex aan vanuit die tabel. Nadat de index online is, gebruik je de drie-niveaunaam als index_name.
Lakebase-configuratie
Voordat je een Lakebase-gesynchroniseerde tabel als kennisbron kunt gebruiken, bereid deze voor op zoek:
- Schakel Lakebase Search in en installeer de extensies. Volg Lakebase Search om Lakebase Search in je projectinstellingen in te schakelen, maak vervolgens verbinding met de Postgres-database van het project en installeer de
lakebase_vectorextensie doorCREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;. Het biedt de benaderende naaste-buur vectorzoekopdracht dieai_searchgebruikt. Het inschakelen van Lakebase Search vereist bèta-toegang en is onomkeerbaar. - Synchroniseer je Unity Catalog-tabel met het project. Gebruik een gesynchroniseerde tabel, koppel de embeddingkolom aan een
vector(n)kolom en bouw daar eenlakebase_annindex op. De dimensienmoet overeenkomen met de output van je embeddingmodel. - Genereer de embeddings offline met een model serving endpoint. Vul de embeddingkolom met een embeddingmodel — bijvoorbeeld door een embeddingmodel te queryen met
ai_query— en geef datzelfde eindpunt door alsembedding_model(zie hieronder).ai_searchEmbeds elke query ermee tijdens het zoektijd, zodat de query en de opgeslagen document-embeddings één vectorruimte delen.
Voor een Lakebase-kennisbron met type als set op lakebase_searchaccepteert , config de volgende sleutels:
| Key | Required | Description |
|---|---|---|
index_name |
Ja | De Unity Catalog drie-niveaus naam van de Lakebase gesynchroniseerde tabel die de ingesloten chunks bevat, bijvoorbeeld catalog.schema.my_synced_table. |
text_col |
Ja | De kolom in de tabel die de documenttekst bevat, gaf terug als page_content. |
doc_uri_col |
Ja | De kolom in de tabel die de document-URI bevat, werd teruggegeven als doc_uri. |
embedding_column |
Ja | De embedding-kolom in de tabel om te zoeken. |
embedding_model |
Ja | Het model serving endpoint werd gebruikt om offline in te embeden embedding_column .
ai_search Elke query emt bij het zoeken met hetzelfde eindpunt, zodat het moet overeenkomen met het model dat is gebruikt om de opgeslagen embeddings te genereren. Zie de onderstaande notitie. |
lakebase_project_id |
Ja | De naam van het Lakebase-databaseproject (instantie) dat de gesynchroniseerde tabel host, bijvoorbeeld my-lakebase-project. Dit is de projectnaam, geen UUID. |
filter_columns |
No | Een komma-gescheiden string of JSON-array van kolommen beschikbaar voor metadata-filtering. Wanneer deze wordt weggelaten, is de lijst afgeleid van het tabelschema, met uitzondering van gereserveerde, tekst-, document-URI en embedding-kolommen. Stel in op een lege array ([]) om metadata-filtering uit te schakelen, zelfs wanneer de tabel andere kolommen heeft. |
Important
embedding_model Het moet hetzelfde model serving endpoint zijn dat je gebruikte om de embeddings offline embedding_column te genereren.
ai_search elke query wordt bij het moment van de zoekopdracht met dit eindpunt ingebed; als het verschilt van het model dat de opgeslagen vectoren produceerde, nemen de query- en document-embeddings verschillende vectorruimtes in en verslechtert de ophaalkwaliteit sterk.
Het volgende voorbeeld configureert een Lakebase-tabel als kennisbron. Vervang embedding_model het door het eindpunt dat je gebruikte om de tabel offline in te sluiten:
[
{
"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 met het volgende 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
}
]
}
| Veld | Type | Description |
|---|---|---|
document |
ARRAY |
Reeks teruggevonden documenten, geordend op relevantie. |
document[].page_content |
STRING |
Tekstinhoud van het teruggevonden stuk. |
document[].doc_uri |
STRING |
URI van het brondocument. |
document[].metadata |
MAP |
Extra metadata uit de index. |
answer |
STRING |
Een gegrond, natuurlijk taalantwoord gesynthetiseerd uit de teruggevonden documenten.
null wanneer antwoordgeneratie is uitgeschakeld of wanneer er geen documenten worden opgehaald. |
citations |
ARRAY |
Alleen aanwezig wanneer generate_citations is true. Elk item wijst naar een teruggegeven chunk via zijn 0-gebaseerde positie (document_index) in de document array, zodat je kunt zien welke chunks het model gebruikte om zijn antwoord te ondersteunen. Een lege array betekent dat citatiegeneratie is uitgevoerd maar geen citaties heeft opgeleverd. De waarde is null wanneer citatiegeneratie niet beschikbaar is of niet wordt aangeroepen, inclusief wanneer query SQL NULL. Deze citaties zijn de beste keuzes van ondersteunende stukken door het model, geen bewijs van een specifieke bewering. |
Wanneer generate_citations is true, lees de en velden answercitations samen. Elke combinatie van waarden betekent iets anders:
- Een niet-null
answermet een legecitationsarray betekent dat er een antwoord is gegenereerd, maar dat er geen teruggegeven chunk is geselecteerd. - Een null
answermet een legecitationsarray betekent dat citatiegeneratie is uitgevoerd, maar geen citaties heeft opgeleverd omdat er geen geaard antwoord is gegenereerd. - Een nulwaarde
citationsbetekent dat citatiegeneratie niet beschikbaar was of niet werd aangeroepen, inclusief wanneerquerySQLNULL.
Voorbeelden
Basiszoekopdracht
Het volgende voorbeeld doorzoekt één AI Search index en geeft gerangschikte documenten en een gegronde antwoord:
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;
Geef ondersteunende chunks terug voor het gegenereerde antwoord
Het volgende voorbeeld geeft de deelverzameling van opgehaalde chunks terug die het model heeft gekozen als ondersteuning voor het antwoord:
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;
De document array bevat nog steeds de volledige set teruggestuurde chunks. Gebruik de document_index in elke citatie om de ondersteunende uit die array te selecteren. Deze indices zijn alleen geldig binnen één enkele respons. Ze kunnen wisselen tussen gesprekken, wanneer de herrangschikking verandert, of wanneer de index wordt bijgewerkt.
Multi-source zoekopdracht met instructies
Het volgende voorbeeld doorzoekt twee AI-zoekindexen en gebruikt instructions het om zoekopdrachten te genereren en te herrangschikken:
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;
Zoek in een Lakebase-tabel
Het volgende voorbeeld doorzoekt een Lakebase-gesynchroniseerde tabel en geeft gerangschikte documenten en een gegronde antwoord:
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;
Combineer een AI-zoekindex en een Lakebase-tabel
Het volgende voorbeeld zoekt in een AI-zoekindex en een Lakebase-tabel in dezelfde aanroep. Resultaten van beide bronnen worden gededupliceerd, samen opnieuw gerangschikt en teruggegeven als één gerangschikte lijst:
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;
Verrijk een tabel met retrieval en een gegenereerd antwoord
Het volgende voorbeeld verrijkt elk supportticket met relevante documentatie en een voorgestelde oplossing. Omdat antwoordgeneratie standaard is ingeschakeld, is de voorgestelde resolutie direct in het answer veld beschikbaar — er is geen aparte generatiestap nodig.
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;
Om het uitvoerformaat te beheersen of een specifiek model te gebruiken, stel 'generate_answer' je in plaats daarvan de 'false' opgehaalde documenten in en rij je ze aan ai_query .
Limitations
-
ai_searchondersteunt AI Search-indexen ("type": "vector_search") en Lakebase-gesynchroniseerde tabellen ("type": "lakebase_search") als kennisbronnen. - Je kunt tot 10 kennisbronnen per call specificeren, in elke combinatie van de ondersteunde types.
- Het
instructionsargument is beperkt tot 4.000 tekens.