Menggunakan RagManagedDb dengan Mesin RAG Vertex AI

Halaman ini memperkenalkan RagManagedDb dan menunjukkan cara mengelola konfigurasi tingkatnya serta strategi pengambilan tingkat korpus RAG.

Vertex AI RAG Engine menggunakan RagManagedDb, yang merupakan database vektor siap perusahaan yang digunakan untuk menyimpan dan mengelola representasi vektor dokumen Anda. Database vektor kemudian digunakan untuk mengambil dokumen yang relevan berdasarkan kemiripan semantik dokumen dengan kueri tertentu.

Mengelola strategi pengambilan

RagManagedDb menawarkan strategi pengambilan berikut untuk mendukung kasus penggunaan RAG Anda:

Strategi pengambilan Deskripsi
K-Nearest Neighbors (KNN) (Default) Menemukan tetangga terdekat yang tepat dengan membandingkan semua titik data dalam korpus RAG Anda. Jika Anda tidak menentukan strategi selama pembuatan korpus RAG, KNN adalah strategi pengambilan default yang digunakan.
  • Memastikan recall sempurna (1,0) selama pengambilan.
  • Sangat cocok untuk aplikasi yang sensitif terhadap recall.
  • Sangat cocok untuk korpus RAG berukuran kecil hingga sedang, yang menyimpan kurang dari 10.000 file RAG.
  • Memerlukan penelusuran di setiap titik data, sehingga latensi meningkat seiring dengan jumlah file RAG dalam korpus.
Approximate Nearest Neighbors (ANN) Menggunakan teknik perkiraan untuk menemukan tetangga yang serupa lebih cepat daripada teknik KNN.
  • Mengurangi latensi kueri secara signifikan pada korpus RAG yang besar.
  • Recall sedikit diturunkan karena teknik perkiraan yang digunakan.
  • Menjadi sangat efektif jika Anda memiliki korpus RAG yang besar, yaitu sekitar lebih dari 10.000 file RAG.
  • Jumlah kehilangan recall yang dapat Anda terima bergantung pada kasus penggunaan, tetapi dalam sebagian besar kasus skala besar, kehilangan sedikit recall sebagai imbalan atas peningkatan performa kueri adalah kompromi yang dapat diterima.

Membuat korpus RAG dengan KNN RagManagedDb

Contoh kode ini menunjukkan cara membuat korpus RAG menggunakan RagManagedDb KNN.

Python

from vertexai import rag
import vertexai

PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

vector_db = rag.RagManagedDb(retrieval_strategy=rag.KNN())
rag_corpus = rag.create_corpus(
    display_name=DISPLAY_NAME, backend_config=rag.RagVectorDbConfig(vector_db=vector_db))

REST

Ganti variabel berikut:

  • PROJECT_ID: Project ID Anda.
  • LOCATION: Region untuk memproses permintaan.
  • CORPUS_DISPLAY_NAME: Nama tampilan korpus RAG.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
CORPUS_DISPLAY_NAME=CORPUS_DISPLAY_NAME

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora \
-d '{
      "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
      "vector_db_config": {
        "ragManagedDb": {
          "knn": {}
        }
      }
    }'

Membuat korpus RAG dengan ANN RagManagedDb

Untuk menawarkan fitur ANN, RagManagedDb menggunakan struktur berbasis hierarki untuk mempartisi data dan memfasilitasi penelusuran yang lebih cepat. Untuk mengaktifkan recall dan latensi terbaik, struktur hierarki ini harus dikonfigurasi dengan eksperimen agar sesuai dengan ukuran dan distribusi data Anda. RagManagedDb memungkinkan Anda mengonfigurasi tree_depth dan leaf_count hierarki.

tree_depth menentukan jumlah lapisan atau tingkat dalam hierarki. Ikuti pedoman berikut:

  • Jika Anda memiliki sekitar 10.000 file RAG dalam korpus RAG, tetapkan nilainya ke 2.
  • Jika Anda memiliki lebih banyak file RAG, tetapkan ke 3.
  • Jika tree_depth tidak ditentukan, Vertex AI RAG Engine akan menetapkan nilai default 2 untuk parameter ini.

leaf_count menentukan jumlah node daun dalam struktur berbasis hierarki. Setiap node daun berisi grup vektor yang terkait erat beserta centroid yang sesuai. Ikuti pedoman berikut:

  • Nilai yang direkomendasikan adalah 10 * sqrt(num of RAG files in your RAG corpus).
  • Jika tidak ditentukan, Vertex AI RAG Engine akan menetapkan nilai default 500 untuk parameter ini.

Python

from vertexai import rag
import vertexai

PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME
TREE_DEPTH = YOUR_TREE_DEPTH # Optional: Acceptable values are 2 or 3. Default is 2.
LEAF_COUNT = YOUR_LEAF_COUNT # Optional: Default is 500.

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

ann_config = rag.ANN(tree_depth=TREE_DEPTH, leaf_count=LEAF_COUNT)
vector_db = rag.RagManagedDb(retrieval_strategy=ann_config)
rag_corpus = rag.create_corpus(
    display_name=DISPLAY_NAME, backend_config=rag.RagVectorDbConfig(vector_db=vector_db))

REST

Ganti variabel berikut:

  • PROJECT_ID: Project ID Anda.
  • LOCATION: Region untuk memproses permintaan.
  • CORPUS_DISPLAY_NAME: Nama tampilan korpus RAG.
  • TREE_DEPTH: Kedalaman hierarki Anda.
  • LEAF_COUNT: Jumlah node daun Anda.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
CORPUS_DISPLAY_NAME=CORPUS_DISPLAY_NAME
TREE_DEPTH=TREE_DEPTH
LEAF_COUNT=LEAF_COUNT

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora \
-d '{
      "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
      "vector_db_config": {
        "ragManagedDb": {
          "ann": {
            "tree_depth": '"${TREE_DEPTH}"',
            "leaf_count": '"${LEAF_COUNT}"'
          }
        }
      }
    }'

Mengimpor data ke ANN RagManagedDb

Anda dapat menggunakan ImportRagFiles API atau UploadRagFile API untuk mengimpor data ke ANN RagManagedDb. Namun, tidak seperti strategi pengambilan KNN, pendekatan ANN mengharuskan indeks berbasis hierarki yang mendasarinya dibangun ulang setidaknya sekali dan secara opsional setelah mengimpor data dalam jumlah besar untuk recall yang optimal. Agar Vertex AI RAG Engine mem-build ulang indeks ANN Anda, tetapkan rebuild_ann_index ke true dalam permintaan API ImportRagFiles.

Hal berikut ini penting:

  1. Sebelum membuat kueri korpus RAG, Anda harus membuat ulang indeks ANN setidaknya sekali.
  2. Hanya satu pembuatan ulang indeks serentak yang didukung pada project di setiap lokasi.

Untuk mengupload file lokal ke korpus RAG, lihat Mengupload file RAG. Untuk mengimpor data ke korpus RAG dan memicu pembuatan ulang indeks ANN, lihat contoh kode berikut yang menunjukkan cara mengimpor dari Cloud Storage. Untuk mempelajari sumber data yang didukung, lihat Sumber data yang didukung untuk RAG.

Python

from vertexai import rag
import vertexai

PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
CORPUS_ID = YOUR_CORPUS_ID
PATHS = ["gs://my_bucket/my_files_dir"]
REBUILD_ANN_INDEX = REBUILD_ANN_INDEX # Choose true or false.

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

corpus_name = f"projects/{PROJECT_ID}/locations/{LOCATION}/ragCorpora/{CORPUS_ID}"
# This is a non blocking call.
response = await rag.import_files_async(
    corpus_name=corpus_name,
    paths=PATHS,
    rebuild_ann_index=REBUILD_ANN_INDEX
)

# Wait for the import to complete.
await response.result()

REST

GCS_URI=GCS_URI
REBUILD_ANN_INDEX=<true/false>

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora/${CORPUS_ID}/ragFiles:import \
-d '{
  "import_rag_files_config": {
    "gcs_source": {
      "uris": '\""${GCS_URI}"\"',
      },
    "rebuild_ann_index": '${REBUILD_ANN_INDEX}'
  }
}'

Mengelola tingkat

Vertex AI RAG Engine memungkinkan pengguna menskalakan instance RagManagedDb mereka berdasarkan penggunaan dan persyaratan performa menggunakan pilihan dua tingkat:

  • Paket Enterprise (default): Paket ini menawarkan performa skala produksi bersama dengan fungsi penskalaan otomatis. Solusi ini cocok untuk pelanggan dengan data dalam jumlah besar atau beban kerja yang sensitif terhadap performa.

  • Paket dasar: Paket ini menawarkan paket hemat biaya dan komputasi rendah, yang mungkin cocok untuk beberapa kasus berikut:

    • Bereksperimen dengan RagManagedDb.
    • Ukuran data kecil.
    • Beban kerja yang tidak sensitif terhadap latensi.
    • Hanya gunakan Vertex AI RAG Engine dengan database vektor lainnya.

Tingkat adalah setelan tingkat project yang tersedia di resource RagEngineConfig dan memengaruhi korpus RAG yang menggunakan RagManagedDb. Untuk mendapatkan atau memperbarui tingkat, gunakan GetRagEngineConfig API dan UpdateRagEngineConfig API.

Baca RagEngineConfig Anda

Kode contoh berikut menunjukkan cara membaca RagEngineConfig:

Python

from vertexai import rag
import vertexai

PROJECT_ID = "PROJECT_ID"
LOCATION = "LOCATION"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

rag_engine_config = rag.rag_data.get_rag_engine_config(
    name=f"projects/{PROJECT_ID}/locations/{LOCATION}/ragEngineConfig"
)

print(rag_engine_config)

REST

Ganti variabel berikut:

  • PROJECT_ID: Project ID Anda.
  • LOCATION: Region untuk memproses permintaan.
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragEngineConfig

Mengupdate RagEngineConfig ke tingkat Enterprise

Contoh kode berikut menunjukkan cara menetapkan RagEngineConfig ke tingkat Enterprise:

Python

from vertexai import rag
import vertexai

PROJECT_ID = "PROJECT_ID"
LOCATION = "LOCATION"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

rag_engine_config_name=f"projects/{PROJECT_ID}/locations/{LOCATION}/ragEngineConfig"

new_rag_engine_config = rag.RagEngineConfig(
    name=rag_engine_config_name,
    rag_managed_db_config=rag.RagManagedDbConfig(tier=rag.Enterprise()),
)

updated_rag_engine_config = rag.rag_data.update_rag_engine_config(
    rag_engine_config=new_rag_engine_config
)

print(updated_rag_engine_config)

REST

Ganti variabel berikut:

  • PROJECT_ID: Project ID Anda.
  • LOCATION: Region untuk memproses permintaan.
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragEngineConfig -d "{'ragManagedDbConfig': {'enterprise': {}}}"

Mengupdate RagEngineConfig ke tingkat Dasar

Jika Anda memiliki data dalam jumlah besar di RagManagedDb di semua korpus RAG, downgrade ke tingkat Dasar mungkin akan gagal. Anda harus memiliki kapasitas komputasi dan penyimpanan minimum yang menyimpan resource Anda.

Python

from vertexai import rag
import vertexai

PROJECT_ID = "PROJECT_ID"
LOCATION = "LOCATION"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

rag_engine_config_name=f"projects/{PROJECT_ID}/locations/{LOCATION}/ragEngineConfig"

new_rag_engine_config = rag.RagEngineConfig(
    name=rag_engine_config_name,
    rag_managed_db_config=rag.RagManagedDbConfig(tier=rag.Basic()),
)

updated_rag_engine_config = rag.rag_data.update_rag_engine_config(
    rag_engine_config=new_rag_engine_config
)

print(updated_rag_engine_config)

REST

Ganti variabel berikut:

  • PROJECT_ID: Project ID Anda.
  • LOCATION: Region untuk memproses permintaan.
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragEngineConfig -d "{'ragManagedDbConfig': {'basic': {}}}"

Langkah berikutnya