Aracılığıyla paylaş


Vektör Araması dizini oluşturma ve sorgulama

Bu makalede Mozaik AI Vektör Araması kullanarak vektör arama dizini oluşturma ve sorgulama işlemleri açıklanmaktadır.

Kullanıcı arabirimini, Python SDK'sını veya REST API'yi kullanarak vektör arama uç noktası ve vektör arama dizinleri gibi Vektör Arama bileşenleri oluşturabilir ve yönetebilirsiniz.

Gereksinimler

  • Unity Kataloğu etkin çalışma alanı.
  • Sunucusuz işlem etkinleştirildi.
  • Kaynak tabloda Veri Akışını Değiştir etkinleştirilmelidir.
  • Dizin oluşturmak için, dizin oluşturmak için katalog şemalarında CREATE TABLE ayrıcalıklarına sahip olmanız gerekir. Başka bir kullanıcıya ait bir dizini sorgulamak için ek ayrıcalıklara sahip olmanız gerekir. Bkz. Vektör Arama uç noktasını sorgulama.
  • Kişisel erişim belirteçlerini kullanmak istiyorsanız (üretim iş yükleri için önerilmez), Kişisel erişim belirteçlerinin etkinleştirilip etkinleştirilmediğini denetleyin. Bunun yerine hizmet sorumlusu belirtecini kullanmak için SDK veya API çağrılarını kullanarak bunu açıkça geçirin.

SDK'yı kullanmak için not defterinize yüklemeniz gerekir. Aşağıdaki kodu kullanın:

%pip install databricks-vectorsearch

dbutils.library.restartPython()

from databricks.vector_search.client import VectorSearchClient

Vektör arama uç noktası oluşturma

Databricks kullanıcı arabirimini, Python SDK'sını veya API'yi kullanarak vektör arama uç noktası oluşturabilirsiniz.

Kullanıcı arabirimini kullanarak vektör arama uç noktası oluşturma

Kullanıcı arabirimini kullanarak vektör arama uç noktası oluşturmak için bu adımları izleyin.

  1. Sol kenar çubuğunda İşlem'e tıklayın.

  2. Vektör Arama sekmesine tıklayın ve Oluştur'a tıklayın.

    Uç nokta formu oluşturma

  3. Uç nokta oluştur formu açılır. Bu uç nokta için bir ad girin.

  4. Onayla'yı tıklatın.

Python SDK'sını kullanarak vektör arama uç noktası oluşturma

Aşağıdaki örnekte vektör arama uç noktası oluşturmak için create_endpoint() SDK işlevi kullanılmaktadır.

# The following line automatically generates a PAT Token for authentication
client = VectorSearchClient()

# The following line uses the service principal token for authentication
# client = VectorSearch(service_principal_client_id=<CLIENT_ID>,service_principal_client_secret=<CLIENT_SECRET>)

client.create_endpoint(
    name="vector_search_endpoint_name",
    endpoint_type="STANDARD"
)

REST API kullanarak vektör arama uç noktası oluşturma

Bkz. POST /api/2.0/vector-search/endpoints.

(İsteğe bağlı) Ekleme modeline hizmet vermek için uç nokta oluşturma ve yapılandırma

Databricks'in eklemeleri hesaplamasını seçerseniz, önceden yapılandırılmış bir Foundation Model API uç noktası kullanabilir veya tercih ettiğiniz ekleme modeline hizmet vermek için bir model sunum uç noktası oluşturabilirsiniz. Yönergeler için bkz. Belirteç başına ödeme temel modeli API'leri veya Uç noktaları sunan üretken yapay zeka modeli oluşturma. Örneğin not defterleri için bkz . Ekleme modelini çağırmak için not defteri örnekleri.

Bir ekleme uç noktasını yapılandırdığınızda Databricks, varsayılan Sıfıra ölçeklendir seçimini kaldırmanızı önerir. Hizmet veren uç noktaların ısınması birkaç dakika sürebilir ve ölçeği azaltılmış uç noktaya sahip bir dizindeki ilk sorgu zaman aşımına neden olabilir.

Not

Ekleme uç noktası veri kümesi için uygun şekilde yapılandırılmamışsa vektör arama dizini başlatma zaman aşımına neden olabilir. Cpu uç noktalarını yalnızca küçük veri kümeleri ve testler için kullanmanız gerekir. Daha büyük veri kümeleri için en iyi performans için bir GPU uç noktası kullanın.

Vektör arama dizini oluşturma

Kullanıcı arabirimini, Python SDK'sını veya REST API'yi kullanarak vektör arama dizini oluşturabilirsiniz. Kullanıcı arabirimi en basit yaklaşımdır.

İki tür dizin vardır:

  • Delta Eşitleme Dizini , delta tablosundaki temel veriler değiştikçe dizini otomatik olarak ve artımlı olarak güncelleştirerek kaynak Delta Tablosu ile otomatik olarak eşitlenir.
  • Doğrudan Vektör Erişim Dizini , vektörlerin ve meta verilerin doğrudan okunmasını ve yazmasını destekler. Kullanıcı, REST API veya Python SDK'sını kullanarak bu tabloyu güncelleştirmekle sorumludur. Bu dizin türü kullanıcı arabirimi kullanılarak oluşturulamaz. REST API'sini veya SDK'sını kullanmanız gerekir.

Kullanıcı arabirimini kullanarak dizin oluşturma

  1. Sol kenar çubuğunda Katalog'a tıklayarak Katalog Gezgini kullanıcı arabirimini açın.

  2. Kullanmak istediğiniz Delta tablosuna gidin.

  3. Sağ üst köşede bulunan Oluştur düğmesine tıklayın ve açılan menüden Vektör arama dizini'ni seçin.

    Dizin oluştur düğmesi

  4. dizini yapılandırmak için iletişim kutusundaki seçicileri kullanın.

    dizin oluştur iletişim kutusu

    Ad: Unity Kataloğu'ndaki çevrimiçi tablo için kullanılacak ad. Ad için üç düzeyli bir ad alanı gerekir: <catalog>.<schema>.<name>. Yalnızca alfasayısal karakterlere ve alt çizgilere izin verilir.

    Birincil anahtar: Birincil anahtar olarak kullanılacak sütun.

    Uç nokta: Kullanmak istediğiniz vektör arama uç noktasını seçin.

    Ekleme kaynağı: Databricks'in Delta tablosundaki bir metin sütunu için eklemeleri hesaplamasını isteyip istemediğinizi (İşlem eklemeleri) veya Delta tablonuzun önceden derlenmiş eklemeler içerip içermediğini belirtin (Mevcut ekleme sütununu kullanın).

    • İşlem eklemeleri'ni seçtiyseniz, ekleme işleminin hesaplanmasını istediğiniz sütunu ve ekleme modeline hizmet veren uç noktayı seçin. Yalnızca metin sütunları desteklenir.
    • Var olan ekleme sütununu kullan'ı seçtiyseniz, önceden derlenmiş eklemeleri ve ekleme boyutunu içeren sütunu seçin. Önceden derlenmiş ekleme sütununun biçimi olmalıdır array[float].

    Hesaplanan eklemeleri eşitle: Oluşturulan eklemeleri bir Unity Kataloğu tablosuna kaydetmek için bu ayarı değiştirin. Daha fazla bilgi için bkz . Oluşturulan ekleme tablosunu kaydetme.

    Eşitleme modu: Sürekli , dizini saniyeler boyunca gecikme süresiyle eşitlenmiş durumda tutar. Ancak, sürekli eşitleme akışı işlem hattını çalıştırmak için bir işlem kümesi sağlandığından onunla ilişkili maliyeti daha yüksektir. Tetiklenen daha uygun maliyetlidir, ancak API kullanılarak el ile başlatılmalıdır. Hem Süreklihem de Tetiklenen için güncelleştirme artımlı olur; yalnızca son eşitleme işlendiğinden bu yana değişen verilerdir.

  5. Dizini yapılandırmayı bitirdiğinizde Oluştur'a tıklayın.

Python SDK'sını kullanarak dizin oluşturma

Aşağıdaki örnek, Databricks tarafından hesaplanan eklemelerle bir Delta Eşitleme Dizini oluşturur.

client = VectorSearchClient()

index = client.create_delta_sync_index(
  endpoint_name="vector_search_demo_endpoint",
  source_table_name="vector_search_demo.vector_search.en_wiki",
  index_name="vector_search_demo.vector_search.en_wiki_index",
  pipeline_type='TRIGGERED',
  primary_key="id",
  embedding_source_column="text",
  embedding_model_endpoint_name="e5-small-v2"
)

Aşağıdaki örnek bir Doğrudan Vektör Erişim Dizini oluşturur.


client = VectorSearchClient()

index = client.create_direct_access_index(
    endpoint_name="storage_endpoint",
    index_name="{catalog_name}.{schema_name}.{index_name}",
    primary_key="id",
    embedding_dimension=1024,
    embedding_vector_column="text_vector",
    schema={
     "id": "int",
     "field2": "str",
     "field3": "float",
     "text_vector": "array<float>"}
)

REST API kullanarak dizin oluşturma

Bkz. POST /api/2.0/vector-search/indexes.

Oluşturulan ekleme tablosunu kaydetme

Databricks eklemeleri oluşturursa, oluşturulan eklemeleri Unity Kataloğu'ndaki bir tabloya kaydedebilirsiniz. Bu tablo vektör diziniyle aynı şemada oluşturulur ve vektör dizini sayfasından bağlanır.

Tablonun adı, tarafından _writeback_tableeklenen vektör arama dizininin adıdır. Ad düzenlenemez.

Unity Kataloğu'ndaki diğer tablolarda olduğu gibi tabloya erişebilir ve tabloya sorgulayabilirsiniz. Ancak, el ile güncelleştirilmesi amaçlanmadığından tabloyu bırakmamalı veya değiştirmemelisiniz. Dizin silinirse tablo otomatik olarak silinir.

Vektör arama dizinini güncelleştirme

Delta Eşitleme Dizinini Güncelleştirme

Sürekli eşitleme moduyla oluşturulan dizinler, kaynak Delta tablosu değiştiğinde otomatik olarak güncelleştirilir. Tetiklenen eşitleme modunu kullanıyorsanız, eşitlemeyi başlatmak için Python SDK'sını veya REST API'yi kullanabilirsiniz.

Python SDK'sı

index.sync()

REST API

Bkz. REST API (POST /api/2.0/vector-search/indexes/{index_name}/sync).

Doğrudan Vektör Erişim Dizinini Güncelleştirme

Doğrudan Vektör Erişim Dizini'nden veri eklemek, güncelleştirmek veya silmek için Python SDK'sını veya REST API'yi kullanabilirsiniz.

Python SDK'sı

   index.upsert([{"id": 1,
       "field2": "value2",
       "field3": 3.0,
       "text_vector": [1.0, 2.0, 3.0]
       },
       {"id": 2,
        "field2": "value2",
        "field3": 3.0,
        "text_vector": [1.1, 2.1, 3.0]
        }
        ])

REST API

Bkz. REST API (POST /api/2.0/vector-search/indexes).

Vektör Arama uç noktasını sorgulama

Vektör Arama uç noktasını yalnızca Python SDK'sını, REST API'yi veya SQL vector_search() AI işlevini kullanarak sorgulayabilirsiniz.

Not

Uç noktayı sorgulayan kullanıcı vektör arama dizininin sahibi değilse, kullanıcının aşağıdaki UC ayrıcalıklarına sahip olması gerekir:

  • Katalogda vektör arama dizinini içeren KATALOĞU KULLANIN.
  • Vektör arama dizinini içeren şemada SCHEMA kullanın.
  • Vektör arama dizininde SELECT.

Karma anahtar sözcük benzerliği araması yapmak için parametresini query_type olarak hybridayarlayın. Varsayılan değerdir ann (yaklaşık en yakın komşu).

Python SDK'sı

# Delta Sync Index with embeddings computed by Databricks
results = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "text"],
    num_results=2
    )

# Delta Sync Index using hybrid search, with embeddings computed by Databricks
results3 = index.similarity_search(
    query_text="Greek myths",
    columns=["id", "text"],
    num_results=2,
    query_type="hybrid"
    )

# Delta Sync Index with pre-calculated embeddings
results2 = index.similarity_search(
    query_vector=[0.2, 0.33, 0.19, 0.52],
    columns=["id", "text"],
    num_results=2
    )

REST API

Bkz . POST /api/2.0/vector-search/indexes/{index_name}/query.

SQL

Önemli

AI vector_search() işlevi Genel Önizleme aşamasındadır.

Bkz. vector_search işlevi.

Sorgularda filtre kullanma

Sorgu, Delta tablosundaki herhangi bir sütunu temel alan filtreler tanımlayabilir. similarity_search yalnızca belirtilen filtrelerle eşleşen satırları döndürür. Aşağıdaki filtreler desteklenir:

Filtre işleci Davranış Örnekler
NOT Filtreyi olumsuzlar. Anahtar "DEĞİl" ile bitmelidir. Örneğin, "kırmızı" değerine sahip "RENK DEĞİl" değeri, rengin kırmızı olmadığı belgelerle eşleşir. {"id NOT": 2} {“color NOT”: “red”}
< Alan değerinin filtre değerinden küçük olup olmadığını denetler. Anahtar " " <ile bitmelidir. Örneğin, değeri 100 olan "fiyat <", fiyatın 100'den küçük olduğu belgelerle eşleşir. {"id <": 200}
<= Alan değerinin filtre değerinden küçük veya buna eşit olup olmadığını denetler. Anahtar " =" <ile bitmelidir. Örneğin, 100 değerine sahip "price <=" değeri, fiyatın 100'den küçük veya buna eşit olduğu belgelerle eşleşir. {"id <=": 200}
> Alan değerinin filtre değerinden büyük olup olmadığını denetler. Anahtar " " >ile bitmelidir. Örneğin, değeri 100 olan "fiyat >", fiyatın 100'den büyük olduğu belgelerle eşleşir. {"id >": 200}
>= Alan değerinin filtre değerinden büyük veya buna eşit olup olmadığını denetler. Anahtar " =" >ile bitmelidir. Örneğin, 100 değerine sahip "price >=" değeri, fiyatın 100'den büyük veya buna eşit olduğu belgelerle eşleşir. {"id >=": 200}
OR Alan değerinin filtre değerlerinden herhangi biri ile eşleşip eşleşmediğini denetler. Anahtarın birden çok alt anahtarı ayırmak için içermesi OR gerekir. Örneğin, color1 OR color2 değeri ["red", "blue"] ile veya olan redcolor1color2 belgelerle eşleşirblue. {"color1 OR color2": ["red", "blue"]}
LIKE Kısmi dizelerle eşleşir. {"column LIKE": "hello"}
Filtre işleci belirtilmedi Filtre tam eşleşmeyi denetler. Birden çok değer belirtilirse, değerlerden herhangi biri ile eşleşir. {"id": 200} {"id": [200, 300]}

Aşağıdaki kod örneklerine bakın:

Python SDK'sı

# 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
    )

REST API

Bkz . POST /api/2.0/vector-search/indexes/{index_name}/query.

Örnek not defterleri

Bu bölümdeki örneklerde Vektör Arama Python SDK'sının kullanımı gösterilmektedir.

LangChain örnekleri

LangChain paketleriyle tümleştirmede Mozaik AI Vektör Arama özelliğini kullanmak için bkz . Mozaik AI Vektör Araması ile LangChain'i kullanma.

Aşağıdaki not defterinde benzerlik arama sonuçlarınızı LangChain belgelerine nasıl dönüştürdüğünüz gösterilmektedir.

Python SDK not defteriyle Vektör Arama

Not defterini alma

Ekleme modelini çağırmak için not defteri örnekleri

Aşağıdaki not defterleri, ekleme oluşturma için Databricks Model Sunum uç noktasının nasıl yapılandırıldığını gösterir.

Databricks Model Sunma not defterini kullanarak OpenAI ekleme modelini çağırma

Not defterini alma

Databricks Model Sunma not defterini kullanarak BGE embeddings modelini çağırma

Not defterini alma

İşletim sistemi ekleme modeli not defterini kaydetme ve sunma

Not defterini alma