Grounding dengan Elasticsearch

Halaman ini menjelaskan cara menggunakan instance Elasticsearch untuk memproses data Anda.

Melakukan grounding Gemini dengan Elasticsearch

Pembentukan dasar melibatkan penggunaan set data publik dan pribadi untuk memberikan konteks dan fakta guna melandasi respons Model Bahasa Besar (LLM). Dengan melakukan perujukan dengan Elasticsearch, Anda dapat memanfaatkan indeks Elasticsearch yang ada untuk membantu meningkatkan kualitas dan keandalan output Gemini, mengurangi halusinasi, dan membantu memastikan respons relevan dengan data Anda. Hal ini memungkinkan Anda mem-build aplikasi RAG yang canggih seperti:

  • Ringkasan penelusuran generatif
  • Chatbot tanya jawab dengan data perusahaan
  • Agen yang didasarkan pada data Anda

Anda dapat mendasarkan jawaban pada hingga 10 sumber data sekaligus. Anda dapat menggabungkan grounding dengan Elasticsearch dengan Grounding dengan Google Penelusuran untuk menghubungkan model dengan pengetahuan umum, rentang potensi topik yang luas, atau informasi terbaru di internet.

Model yang didukung

Model berikut mendukung grounding dengan Elasticsearch hanya dengan input teks:

Menyiapkan template penelusuran di Elasticsearch

Bagian ini menjelaskan cara menggunakan instance Elasticsearch untuk mendasarkan pada data yang disimpan dalam instance.

Praktik terbaik

Untuk mendapatkan respons dasar terbaik, gunakan prinsip-prinsip ini saat membuat template penelusuran:

  • Hanya sertakan data yang relevan dan bermanfaat. Misalnya, dalam katalog produk, menentukan URL gambar mungkin tidak membantu LLM menjawab perintah tentang properti produk kecuali jika perintah tersebut secara khusus meminta URL. Demikian pula, hindari memunculkan vektor penyematan.

  • Pembumian akan menghapus hasil Elasticsearch dengan relevansi rendah terhadap perintah Anda. Anda harus memberikan lebih banyak hasil Elasticsearch untuk menangkap semua konteks yang relevan.

  • Data hasil dapat berada di satu kolom atau tersebar di beberapa kolom.

Contoh template

Anda dapat menggunakan template penelusuran. Namun, sebaiknya gunakan template penelusuran kNN generik dengan grounding Elasticsearch. Untuk template penelusuran tambahan, lihat repositori GitHub.

Penelusuran semantik dengan Vertex AI ini adalah penelusuran kNN generik.

    PUT _scripts/google-template-knn-multioutput
    {
      "script": {
        "lang": "mustache",
        "source": {
          "_source": {
            "excludes": [ "title_embedding", "description_embedding", "images"]
          },
            "size": "num_hits",
              "knn" : [
              {
                "field": "description_embedding",
                "k": 5,
                "num_candidates": 10,
                "query_vector_builder": {
                  "text_embedding": {
                    "model_id": "googlevertexai_embeddings_004",
                    "model_text": "query"
                  }
                },
                "boost": 0.4
              },
              {
                "field": "title_embedding",
                "k": 5,
                "num_candidates": 10,
                "query_vector_builder": {
                  "text_embedding": {
                    "model_id": "googlevertexai_embeddings_004",
                    "model_text": "query"
                }
              },
              "boost": 0.6
              }
              ]
        }
      }
    }

Membuat respons yang relevan dengan Elasticsearch

Konsol

Untuk melakukan grounding dengan Elasticsearch di Google Cloud console, lakukan hal berikut:

  1. Buka Vertex AI Studio ke halaman Create prompt.

    Buka Create prompt

  2. Di panel Setelan, untuk melakukan grounding data, klik tombol Grounding: Data Anda.

  3. Di panel Customize Grounding, pilih Elasticsearch.

  4. Masukkan endpoint di kolom Endpoint Elasticsearch.

  5. Masukkan Kunci API di kolom Kunci API Elasticsearch.

  6. Masukkan indeks di kolom Indeks Elasticsearch.

  7. Masukkan template penelusuran di kolom Template penelusuran Elasticsearch.

  8. Sesuaikan jumlah hit dengan menggeser penggeser Jumlah hit.

  9. Klik Simpan.

  10. Masukkan perintah Anda.

  11. Klik Kirim.

Memahami respons Anda

Jika perintah model Anda berhasil di-grounding ke datastore Elasticsearch menggunakan Vertex AI Studio atau API, respons model akan menyertakan metadata dengan kutipan dan konten sumber. Jika relevansi sumber rendah atau informasi tidak lengkap terjadi dalam respons model, metadata mungkin tidak diberikan, dan respons perintah tidak akan didasarkan.

REST

Bagian ini menjelaskan cara menggunakan Vertex AI API untuk melandasi respons LLM.

Prasyarat

Sebelum dapat mendasarkan respons LLM dengan Elasticsearch, Anda harus menyelesaikan langkah-langkah berikut:

  1. Aktifkan Vertex AI API: Pastikan kedua Vertex AI API diaktifkan untuk project Google Cloud Anda.

  2. Menginstal dan login ke Google Cloud CLI: Instal dan lakukan inisialisasi alat command line gcloud CLI.

  3. Penyiapan Elasticsearch: Gunakan cluster dan indeks Elasticsearch yang ada yang ingin Anda gunakan untuk grounding. Dapatkan informasi berikut dari penyiapan Elasticsearch:

    • Endpoint: URL cluster Elasticsearch Anda.
    • Nama Indeks: Nama indeks yang ingin Anda telusuri seperti my-data-index.
    • Kunci API: Kunci API yang memungkinkan akses ke cluster Elasticsearch Anda. Kunci API harus diawali dengan awalan ApiKey.
  4. Membuat template penelusuran Elasticsearch: Gunakan sumber data Elasticsearch yang menggunakan template referensi yang menampilkan data hasil untuk grounding.

Akses API

Gunakan petunjuk berikut untuk menghubungkan Gemini dengan sumber data Elasticsearch menggunakan Vertex AI API.

Menyiapkan permintaan pembuatan yang di-ground

Untuk mengirim perintah teks dan melandasinya dengan Elasticsearch, kirim permintaan POST ke Vertex AI API. Minimal, Anda harus memberikan isi permintaan. Pastikan untuk melakukan penggantian berikut:

  • QUERY: Perintah teks untuk di-ground.
  • ELASTIC_SEARCH_ENDPOINT: Jalur endpoint absolut untuk resource Elasticsearch yang akan digunakan.
  • ELASTIC_SEARCH_API_KEY: Kunci API untuk endpoint data Elasticsearch.
  • INDEX_NAME: Nama indeks Elasticsearch yang digunakan untuk pembumian.
  • SEARCH_TEMPLATE_NAME: Template penelusuran Elasticsearch yang digunakan untuk grounding.
  • NUM_HITS: Jumlah hasil yang ditampilkan dari sumber data Elasticsearch dan digunakan untuk grounding.

Meminta isi JSON:

    {
      "contents": [
        {
          "role": "user",
          "parts": [
            {
              "text": "QUERY"
            }
          ]
        }
      ],
      "tools": [{
        "retrieval": {
          "externalApi": {
            "api_spec": "ELASTIC_SEARCH",
            "endpoint": "ELASTIC_SEARCH_ENDPOINT",
            "apiAuth": {
              "apiKeyConfig": {
                "apiKeyString": "ApiKey ELASTIC_SEARCH_API_KEY"
              }
            },
            "elasticSearchParams": {
              "index": "INDEX_NAME",
              "searchTemplate": "SEARCH_TEMPLATE_NAME",
              "numHits": "NUM_HITS",
            }
          }
        }
      }]
    }

Untuk mengetahui informasi selengkapnya tentang kolom API lainnya seperti petunjuk sistem dan chat multi-giliran, lihat Panduan pemula AI Generatif.

Mengirim permintaan API

Anda dapat menyimpan isi permintaan dalam file bernama request.json. Kemudian, jalankan permintaan POST API, dan lakukan penggantian berikut:

  • LOCATION: Region untuk memproses permintaan. Untuk mengetahui informasi selengkapnya tentang lokasi yang tersedia, lihat AI Generatif di lokasi Vertex AI.
  • PROJECT_ID: Project ID Google Cloud Anda. Untuk informasi selengkapnya tentang project ID, lihat Membuat dan mengelola project.
  • MODEL_ID: ID model model multimodal.
  curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
  "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent"

Anda akan melihat respons JSON seperti berikut:

  {
    "candidates": [
      {
        "content": {
          "role": "model",
          "parts": [
            {
              "text": "Based on the information ..."
            }
          ]
        },
        "finishReason": "STOP",
        "safetyRatings": [ "..." ],
        "groundingMetadata": {
          "groundingChunks": [
            {
              "retrievedContext": {
                "text": "ipsum lorem ..."
              }
            },
            {...},
            {...},
          ],
          "groundingSupports": [
            {
              "segment": {
                "startIndex": 25,
                "endIndex": 147,
                "text": "ipsum lorem ..."
              },
              "groundingChunkIndices": [1,2],
              "confidenceScores": [0.6626542, 0.82018316],
            },
          ],
        },
      }
    ],
  }

Memahami respons Anda

Respons dari kedua API tersebut menyertakan teks yang dihasilkan LLM, yang disebut kandidat. Jika perintah model Anda berhasil dihubungkan ke sumber data Elasticsearch, respons akan menyertakan metadata grounding, yang mengidentifikasi bagian respons yang berasal dari data Elasticsearch Anda. Namun, ada beberapa alasan metadata ini mungkin tidak diberikan, dan respons prompt tidak akan didasarkan. Alasan ini mencakup relevansi sumber yang rendah atau informasi yang tidak lengkap dalam respons model.

Berikut adalah pengelompokan data output:

  • Peran: Menunjukkan pengirim jawaban yang berdasar. Karena respons selalu berisi teks yang dirujuk, perannya selalu model.
  • Teks: Jawaban yang di-grounding yang dihasilkan oleh LLM.
  • Metadata pentanahan: Informasi tentang sumber pentanahan, yang berisi elemen berikut:
    • Potongan dasar: Daftar hasil dari indeks Elasticsearch Anda yang mendukung jawaban.
    • Dukungan grounding: Informasi tentang klaim tertentu dalam jawaban yang dapat digunakan untuk menampilkan kutipan:
    • Segmen: Bagian dari jawaban model yang dibuktikan oleh bagian dasar.
    • Indeks chunk ground: Indeks chunk ground dalam daftar chunk ground yang sesuai dengan klaim ini.
    • Skor keyakinan: Angka dari 0 hingga 1 yang menunjukkan seberapa kuat klaim dalam kumpulan bagian dasar yang diberikan.

Langkah berikutnya