Files
wehub-resource-sync a0c8464e58
Build Package / build (ubuntu-latest) (push) Failing after 1s
CodeQL / Analyze (python) (push) Failing after 1s
Core Typecheck / core-typecheck (push) Failing after 1s
Linting / lint (push) Failing after 1s
llama-dev tests / test-llama-dev (push) Failing after 1s
Publish Sub-Package to PyPI if Needed / publish_subpackage_if_needed (push) Has been skipped
Sync Docs to Developer Hub / sync-docs (push) Failing after 0s
Build Package / build (windows-latest) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:26:52 +08:00

214 lines
6.1 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Databricks Vector Search\n",
"\n",
"Databricks Vector Search is a vector database that is built into the Databricks Intelligence Platform and integrated with its governance and productivity tools. Full docs here: https://docs.databricks.com/en/generative-ai/vector-search.html"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Install llama-index and databricks-vectorsearch. You must be inside a Databricks runtime to use the Vector Search python client."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%pip install llama-index llama-index-vector-stores-databricks\n",
"%pip install databricks-vectorsearch"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Import databricks dependencies"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from databricks.vector_search.client import (\n",
" VectorSearchIndex,\n",
" VectorSearchClient,\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Import LlamaIndex dependencies"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from llama_index.core import (\n",
" VectorStoreIndex,\n",
" SimpleDirectoryReader,\n",
" ServiceContext,\n",
" StorageContext,\n",
")\n",
"from llama_index.vector_stores.databricks import DatabricksVectorSearch"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Load example data"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"!mkdir -p 'data/paul_graham/'\n",
"!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Read the data"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# load documents\n",
"documents = SimpleDirectoryReader(\"./data/paul_graham/\").load_data()\n",
"print(f\"Total documents: {len(documents)}\")\n",
"print(f\"First document, id: {documents[0].doc_id}\")\n",
"print(f\"First document, hash: {documents[0].hash}\")\n",
"print(\n",
" \"First document, text\"\n",
" f\" ({len(documents[0].text)} characters):\\n{'='*20}\\n{documents[0].text[:360]} ...\"\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a Databricks Vector Search endpoint which will serve the index"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Create a vector search endpoint\n",
"client = VectorSearchClient()\n",
"client.create_endpoint(\n",
" name=\"llamaindex_dbx_vector_store_test_endpoint\", endpoint_type=\"STANDARD\"\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create the Databricks Vector Search index, and build it from the documents"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Create a vector search index\n",
"# it must be placed inside a Unity Catalog-enabled schema\n",
"\n",
"# We'll use self-managed embeddings (i.e. managed by LlamaIndex) rather than a Databricks-managed index\n",
"databricks_index = client.create_direct_access_index(\n",
" endpoint_name=\"llamaindex_dbx_vector_store_test_endpoint\",\n",
" index_name=\"my_catalog.my_schema.my_test_table\",\n",
" primary_key=\"my_primary_key_name\",\n",
" embedding_dimension=1536, # match the embeddings model dimension you're going to use\n",
" embedding_vector_column=\"my_embedding_vector_column_name\", # you name this anything you want - it'll be picked up by the LlamaIndex class\n",
" schema={\n",
" \"my_primary_key_name\": \"string\",\n",
" \"my_embedding_vector_column_name\": \"array<double>\",\n",
" \"text\": \"string\", # one column must match the text_column in the DatabricksVectorSearch instance created below; this will hold the raw node text,\n",
" \"doc_id\": \"string\", # one column must contain the reference document ID (this will be populated by LlamaIndex automatically)\n",
" # add any other metadata you may have in your nodes (Databricks Vector Search supports metadata filtering)\n",
" # NOTE THAT THESE FIELDS MUST BE ADDED EXPLICITLY TO BE USED FOR METADATA FILTERING\n",
" },\n",
")\n",
"\n",
"databricks_vector_store = DatabricksVectorSearch(\n",
" index=databricks_index,\n",
" text_column=\"text\",\n",
" columns=None, # YOU MUST ALSO RECORD YOUR METADATA FIELD NAMES HERE\n",
") # text_column is required for self-managed embeddings\n",
"storage_context = StorageContext.from_defaults(\n",
" vector_store=databricks_vector_store\n",
")\n",
"index = VectorStoreIndex.from_documents(\n",
" documents, storage_context=storage_context\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Query the index"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"query_engine = index.as_query_engine()\n",
"response = query_engine.query(\"Why did the author choose to work on AI?\")\n",
"\n",
"print(response.response)"
]
}
],
"metadata": {
"application/vnd.databricks.v1+notebook": {
"dashboards": [],
"language": "python",
"notebookMetadata": {
"pythonIndentUnit": 4
},
"notebookName": "Databricks Vector Search Demo (LlamaIndex Integration)",
"widgets": {}
},
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 0
}