Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek popisuje, jak dotazovat index vektorového vyhledávání, včetně použití filtrů a opětovného řazení.
Například poznámkové bloky znázorňující vytváření koncových bodů a indexů vektorového vyhledávání a jejich dotazování najdete v příkladech poznámkových bloků vektorového vyhledávání. Referenční informace najdete v referenčních informacích k sadě Python SDK.
Installation
Pokud chcete použít sadu SDK pro vektorové vyhledávání, musíte ji nainstalovat do notebooku. K instalaci balíčku použijte následující kód:
%pip install databricks-vectorsearch
dbutils.library.restartPython()
Potom pomocí následujícího příkazu naimportujte VectorSearchClient:
from databricks.vector_search.client import VectorSearchClient
Informace o ověřování najdete v tématu Ochrana a ověřování dat.
Dotazování indexu vektorového vyhledávání
Index vektorového vyhledávání můžete dotazovat pouze pomocí sady Python SDK, rozhraní REST API nebo funkce SQL vector_search() AI.
Poznámka:
Pokud uživatel dotazující se na index není vlastníkem indexu vektorového vyhledávání, musí mít uživatel následující oprávnění UC:
- USE CATALOG v katalogu, který obsahuje index vektorového vyhledávání.
- USE SCHEMA ve schématu, které obsahuje index vektorového vyhledávání.
- SELECT na indexu vektorového vyhledávání.
Výchozí typ dotazu je ann (přibližný nejbližší soused). Chcete-li provést hybridní vyhledávání podobnosti klíčových slov, nastavte parametr query_type na hybrid. Při hybridním vyhledávání se zahrnou všechny sloupce textových metadat a vrátí se maximálně 200 výsledků.
Pokud chcete v dotazu použít nástroj pro přeřaování pořadí, přečtěte si téma Použití nástroje pro opětovné řazení v dotazu.
Důležité
Fulltextové vyhledávání je k dispozici jako beta funkce. Chcete-li provést fulltextové vyhledávání, nastavte parametr query_type na FULL_TEXT. Pomocí fulltextového vyhledávání můžete načíst až 200 výsledků na základě párování klíčových slov bez použití vložených vektorů.
Standardní koncový bod sady Python SDK
Podrobnosti najdete v referenčních informacích k sadě Python SDK.
# Delta Sync Index with embeddings computed by Databricks
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "field2"],
num_results=2
)
# Delta Sync Index using hybrid search, with embeddings computed by Databricks
results3 = index.similarity_search(
query_text="Greek myths",
columns=["id", "field2"],
num_results=2,
query_type="hybrid"
)
# Delta Sync Index using full-text search (Beta)
results4 = index.similarity_search(
query_text="Greek myths",
columns=["id", "field2"],
num_results=2,
query_type="FULL_TEXT"
)
# Delta Sync Index with pre-calculated embeddings
results2 = index.similarity_search(
query_vector=[0.9] * 1024,
columns=["id", "text"],
num_results=2
)
Koncový bod optimalizovaný pro úložiště sady Python SDK
Podrobnosti najdete v referenčních informacích k sadě Python SDK.
Stávající rozhraní filtru bylo znovu navržené pro indexy vektorového vyhledávání optimalizované pro úložiště, aby místo slovníku filtru používaného ve standardních koncových bodech vektorového vyhledávání přijalo více řetězce filtru podobného JAZYKu SQL.
client = VectorSearchClient()
index = client.get_index(index_name="vector_search_demo.vector_search.en_wiki_index")
# similarity search with query vector
results = index.similarity_search(
query_vector=[0.2, 0.33, 0.19, 0.52],
columns=["id", "text"],
num_results=2
)
# similarity search with query vector and filter string
results = index.similarity_search(
query_vector=[0.2, 0.33, 0.19, 0.52],
columns=["id", "text"],
# this is a single filter string similar to SQL WHERE clause syntax
filters="language = 'en' AND country = 'us'",
num_results=2
)
REST API
Projděte si referenční dokumentaci k rozhraní REST API: POST /api/2.0/vector-search/indexes/{index_name}/query.
V produkčních aplikacích Databricks doporučuje používat služební identity místo osobních přístupových tokenů. Kromě vylepšené správy zabezpečení a přístupu může používání služebních principálů zvýšit výkon až o 100 milisekund na dotaz.
Následující příklad kódu ukazuje, jak dotazovat index pomocí služebního účtu.
export SP_CLIENT_ID=...
export SP_CLIENT_SECRET=...
export INDEX_NAME=...
export WORKSPACE_URL=https://...
export WORKSPACE_ID=...
# Set authorization details to generate OAuth token
export AUTHORIZATION_DETAILS='{"type":"unity_catalog_permission","securable_type":"table","securable_object_name":"'"$INDEX_NAME"'","operation": "ReadVectorIndex"}'
# If you are using an route_optimized embedding model endpoint, then you need to have additional authorization details to invoke the serving endpoint
# export EMBEDDING_MODEL_SERVING_ENDPOINT_ID=...
# export AUTHORIZATION_DETAILS="$AUTHORIZATION_DETAILS"',{"type":"workspace_permission","object_type":"serving-endpoints","object_path":"/serving-endpoints/'"$EMBEDDING_MODEL_SERVING_ENDPOINT_ID"'","actions": ["query_inference_endpoint"]}'
# Generate OAuth token
export TOKEN=$(curl -X POST --url $WORKSPACE_URL/oidc/v1/token -u "$SP_CLIENT_ID:$SP_CLIENT_SECRET" --data 'grant_type=client_credentials' --data 'scope=all-apis' --data-urlencode 'authorization_details=['"$AUTHORIZATION_DETAILS"']' | jq .access_token | tr -d '"')
# Get index URL
export INDEX_URL=$(curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url $WORKSPACE_URL/api/2.0/vector-search/indexes/$INDEX_NAME | jq -r '.status.index_url' | tr -d '"')
# Query vector search index.
curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url https://$INDEX_URL/query --data '{"num_results": 3, "query_vector": [...], "columns": [...], "debug_level": 1}'
# Query vector search index.
curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url https://$INDEX_URL/query --data '{"num_results": 3, "query_text": "...", "columns": [...], "debug_level": 1}'
Následující příklad kódu ukazuje, jak dotazovat index pomocí tokenu PAT (Personal Access Token).
export TOKEN=...
export INDEX_NAME=...
export WORKSPACE_URL=https://...
# Query vector search index with `query_vector`
curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url $WORKSPACE_URL/api/2.0/vector-search/indexes/$INDEX_NAME/query --data '{"num_results": 3, "query_vector": [...], "columns": [...], "debug_level": 1}'
# Query vector search index with `query_text`
curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url $WORKSPACE_URL/api/2.0/vector-search/indexes/$INDEX_NAME/query --data '{"num_results": 3, "query_text": "...", "columns": [...], "debug_level": 1}'
SQL
Důležité
Funkce vector_search() AI je ve verzi Veřejná ukázka.
Pokud chcete použít funkci AI, přečtěte si vector_search funkci.
Použití filtrů u dotazů
Dotaz může definovat filtry na základě libovolného sloupce v tabulce Delta.
similarity_search vrátí pouze řádky, které odpovídají zadaným filtrům.
V následující tabulce jsou uvedené podporované filtry.
| Operátor filtru | Chování | Examples |
|---|---|---|
NOT |
Standardní: Neguje filtr. Klíč musí končit textem NOT. Například "barva NE" s hodnotou "červená" odpovídá dokumentům, kde barva není červená. Optimalizované pro úložiště: Viz != operátor (znaménko bangeq). |
Standardní: {"id NOT": 2}{“color NOT”: “red”}Optimalizované pro úložiště: "id != 2" "color != 'red'" |
< |
Standardní: Zkontroluje, jestli je hodnota pole menší než hodnota filtru. Klíč musí končit " <". Například "price <" s hodnotou 200 odpovídá dokumentům, u kterých je cena menší než 200. Optimalizované pro úložiště: Viz < operátor (lt sign). |
Standardní: {"id <": 200}Optimalizované pro úložiště: "id < 200" |
<= |
Standardní: Zkontroluje, jestli je hodnota pole menší nebo rovna hodnotě filtru. Klíč musí končit "<=". Například "price <=" s hodnotou 200 odpovídá dokumentům, ve kterých je cena menší nebo rovna 200. Optimalizované pro úložiště: Viz <= operátor (lt eq sign). |
Standardní: {"id <=": 200}Optimalizované pro úložiště: "id <= 200" |
> |
Standardní: Zkontroluje, jestli je hodnota pole větší než hodnota filtru. Klíč musí končit " >". Například "price >" s hodnotou 200 odpovídá dokumentům, kde je cena větší než 200. Optimalizované pro úložiště: Viz > operátor (gt) |
Standardní: {"id >": 200}Optimalizované pro úložiště: "id > 200" |
>= |
Standardní: Zkontroluje, jestli je hodnota pole větší nebo rovna hodnotě filtru. Klíč musí končit ">=". Například "price >=" s hodnotou 200 odpovídá dokumentům, kde je cena větší nebo rovna 200. Optimalizováno pro úložiště: Viz >= operátor (gt eq sign). |
Standardní: {"id >=": 200}Optimalizované pro úložiště: "id >= 200" |
OR |
Standardní: Zkontroluje, jestli hodnota pole odpovídá některé z hodnot filtru. Klíč musí obsahovat OR k oddělení více podklíčů. Například color1 OR color2 s hodnotou ["red", "blue"] odpovídá dokumentům, kde je color1red nebo color2 je blue.Optimalizace pro úložiště: Viz or operátor. |
Standardní: {"color1 OR color2": ["red", "blue"]}Optimalizované pro úložiště: "color1 = 'red' OR color2 = 'blue'" |
LIKE |
Standardní: Odpovídá tokenům odděleným prázdným znakem v řetězci. Podívejte se na příklady kódu níže. Optimalizace pro úložiště: Viz like operátor. |
Standardní: {"column LIKE": "hello"}Optimalizované pro úložiště: "column LIKE 'hello'" |
| Nebyl zadán žádný operátor filtru. |
Standardní: Filtr kontroluje přesnou shodu. Pokud je zadáno více hodnot, odpovídá některé z těchto hodnot. Optimalizované pro úložiště: Viz = operátor (eq sign) a in predikát. |
Standardní: {"id": 200}{"id": [200, 300]}Optimalizováno pro potřeby úložiště: "id = 200""id IN (200, 300)" |
to_timestamp (pouze koncové body optimalizované pro úložiště) |
Optimalizované pro úložiště: Filtrujte podle časového razítka. Viz to_timestamp funkce |
Optimalizované pro úložiště: "date > TO_TIMESTAMP('1995-01-01')" |
Podívejte se na následující příklady kódu:
Standardní koncový bod sady Python SDK
# Match rows where `title` exactly matches `Athena` or `Ares`
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "text"],
filters={"title": ["Ares", "Athena"]},
num_results=2
)
# Match rows where `title` or `id` exactly matches `Athena` or `Ares`
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "text"],
filters={"title OR id": ["Ares", "Athena"]},
num_results=2
)
# Match only rows where `title` is not `Hercules`
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "text"],
filters={"title NOT": "Hercules"},
num_results=2
)
Koncový bod optimalizovaný pro úložiště sady Python SDK
# Match rows where `title` exactly matches `Athena` or `Ares`
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "text"],
filters='title IN ("Ares", "Athena")',
num_results=2
)
# Match rows where `title` or `id` exactly matches `Athena` or `Ares`
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "text"],
filters='title = "Ares" OR id = "Athena"',
num_results=2
)
# Match only rows where `title` is not `Hercules`
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "text"],
filters='title != "Hercules"',
num_results=2
)
REST API
Viz. POST /api/2.0/vector-search/indexes/{index_name}/query.
LIKE
LIKE příklady
{"column LIKE": "apple"}: odpovídá řetězcům "jablko" a "jablko hruška", ale neodpovídá "ananas" nebo "hruška". Všimněte si, že se neshoduje s "ananas", i když obsahuje podřetězec "jablko" --- hledá přesnou shodu mezi mezerami oddělenými výrazy, jako je "jablko hruška".
{"column NOT LIKE": "apple"} dělá opak. Odpovídá "ananasu" a "hrušce", ale neodpovídá "jablku" nebo "jablečné hrušce".
Použití rerankeru v dotazu
Důležité
Tato funkce je ve verzi Public Preview.
Výkon agenta závisí na načtení nejrelevavantnějších informací pro dotaz. Přehodnocování je technika, která zlepšuje kvalitu načítání vyhodnocením načtených dokumentů, aby identifikovala ty, které jsou sémanticky nejrelevantní. Databricks vyvinul složený systém AI založený na výzkumu, který tyto dokumenty identifikuje. Můžete také zadat sloupce obsahující metadata, které má nástroj pro opětovné řazení použít pro další kontext při posuzování relevance jednotlivých dokumentů.
Opětovné řazení způsobuje malé zpoždění latence, ale může výrazně zlepšit kvalitu načítání a výkon agenta. Databricks doporučuje vyzkoušet opakované hodnocení pro případ použití agenta RAG.
Příklady v této části ukazují, jak použít funkci opětovného řazení vektorového vyhledávání. Když použijete reranker, nastavíte sloupce tak, aby se vracely (columns) a sloupce metadat, které se mají použít k opětovnému řazení (columns_to_rerank) samostatně.
num_results je konečný počet výsledků, které se mají vrátit. To nemá vliv na počet výsledků použitých k opětovnému řazení.
Zpráva ladění dotazu obsahuje informace o tom, jak dlouho trvalo opětovné řazení. Například:
'debug_info': {'response_time': 1647.0, 'ann_time': 29.0, 'reranker_time': 1573.0}
Pokud se volání rerankeru nezdaří, tyto informace budou zahrnuty do ladicí zprávy.
'debug_info': {'response_time': 587.0, 'ann_time': 331.0, 'reranker_time': 246.0, 'warnings': [{'status_code': 'RERANKER_TEMPORARILY_UNAVAILABLE', 'message': 'The reranker is temporarily unavailable. Results returned have not been processed by the reranker. Please try again later for reranked results.'}]}
Poznámka:
Pořadí, ve columns_to_rerank které jsou sloupce uvedeny, je důležité. Přehodnocený výpočet přebírá sloupce v pořadí, ve kterém jsou uvedeny, a považuje pouze prvních 2000 znaků, které najde.
Python SDK
# Install the most recent version.
# Databricks SDK version 0.57 or above is required to use the reranker.
%pip install databricks-vectorsearch --force-reinstall
dbutils.library.restartPython()
from databricks.vector_search.reranker import DatabricksReranker
results = index.similarity_search(
query_text = "How to create a Vector Search index",
columns = ["id", "text", "parent_doc_summary", "date"],
num_results = 10,
query_type = "hybrid",
reranker=DatabricksReranker(columns_to_rerank=["text", "parent_doc_summary", "other_column"])
)
REST API
Abyste měli jistotu, že získáte informace o latenci, nastavte debug_level alespoň 1.
export TOKEN=...
export INDEX_NAME=...
export WORKSPACE_URL=https://...
curl -X GET -H 'Content-Type: application/json' -H "Authorization: Bearer $TOKEN" --url $WORKSPACE_URL/api/2.0/vector-search/indexes/$INDEX_NAME/query --data '{"num_results": 10, "query_text": "How to create a Vector Search index", "columns": ["id", "text", "parent_doc_summary", "date"], "reranker": {"model": "databricks_reranker",
"parameters": {
"columns_to_rerank":
["text", "parent_doc_summary"]
}
},
"debug_level": 1}'
Vyhledávání bodů
Pokud chcete provést vyhledávání bodů, použijte filtr u libovolného sloupce primárního klíče.