本頁說明如何使用 Elasticsearch 執行個體,根據您的資料進行基礎訓練。
使用 Elasticsearch 建立 Gemini 基準
建立基準:使用公開和私人資料集提供背景資訊和事實,以建立大型語言模型 (LLM) 回覆的基準。透過 Elasticsearch 建立基準,您可以運用現有的 Elasticsearch 索引,提升 Gemini 輸出內容的品質和可靠性、減少幻覺,並確保回覆內容與您的資料相關。這可讓您建構強大的 RAG 應用程式,例如:
- 生成式搜尋摘要
- 使用企業資料的問答聊天機器人
- 以資料為依據的服務專員
一次最多可根據 10 個資料來源提供答案。您可以結合「以 Elasticsearch 建立基準」和「以 Google 搜尋建立基準」,將模型連結至網際網路中的世界知識、各種主題或最新資訊。
支援的模型
下列模型支援運用 Elasticsearch 建立基準,但僅限輸入文字:
- Gemini 2.5 Flash (預先發布版)
- Gemini 2.5 Flash-Lite (預先發布版)
- Gemini 2.5 Flash-Lite
- Gemini 2.5 Flash,搭配 Live API 原生音訊 (預先發布版)
- Gemini 2.0 Flash with Live API (Preview)
- Gemini 2.5 Pro
- Gemini 2.5 Flash
- Gemini 2.0 Flash
在 Elasticsearch 中設定搜尋範本
本節說明如何使用 Elasticsearch 執行個體,根據儲存在該執行個體中的資料進行基礎訓練。
最佳做法
如要獲得最佳的基礎回應,請在建立搜尋範本時遵循下列原則:
只納入相關且實用的資料。舉例來說,在產品目錄中,除非提示詞明確要求提供網址,否則指定圖片網址可能無法協助 LLM 回答有關產品屬性的提示詞。同樣地,請避免輸出嵌入向量。
建立基準會移除與提示關聯性低的 Elasticsearch 結果。 建議您提供較多的 Elasticsearch 結果,以擷取所有相關內容。
結果資料可以位於一個欄位,也可以分散在多個欄位。
範例範本
你可以使用搜尋範本。不過,建議您使用一般 kNN 搜尋範本,並以 Elasticsearch 做為基礎。如需其他搜尋範本,請參閱 GitHub 存放區。
這項 Vertex AI 語意搜尋功能是一般 kNN 搜尋。
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 } ] } } } 使用 Elasticsearch 生成有憑有據的回覆
本節說明如何使用 Vertex AI API,為 LLM 回應建立基準。
必要條件
如要使用 Elasticsearch 建立 LLM 回覆的基礎,請先完成下列步驟:
啟用 Vertex AI API:請確保已為 Google Cloud 專案啟用 Vertex AI API。
安裝並登入 Google Cloud CLI:安裝並初始化 gcloud CLI 指令列工具。
Elasticsearch 設定:使用現有的 Elasticsearch 叢集和索引,做為建立基準的依據。從 Elasticsearch 設定取得下列資訊:
- 端點:Elasticsearch 叢集的網址。
- 索引名稱:要搜尋的索引名稱,例如「my-data-index」。
- API 金鑰:可存取 Elasticsearch 叢集的 API 金鑰。 API 金鑰開頭必須為「ApiKey」ApiKey前置字串。
建立 Elasticsearch 搜尋範本:使用 Elasticsearch 資料來源,該資料來源會使用參照範本,傳回用於建立基準的結果資料。
生成有憑有據的回覆
控制台
如要在 Google Cloud 控制台使用 Elasticsearch 做為基礎模型,請按照下列步驟操作:
前往 Vertex AI Studio 的「建立提示」頁面。
在「設定」面板中,按一下「資料基礎:您的資料」切換鈕,為資料奠定基礎。
在「Customize Grounding」(自訂基礎) 窗格中,選取「Elasticsearch」。
在「Elasticsearch endpoint」(Elasticsearch 端點) 欄位中輸入端點。
在「Elasticsearch API Key」欄位中輸入
ApiKey YOUR_API_KEY。在「Elasticsearch index」(Elasticsearch 索引) 欄位中輸入索引。
在「Elasticsearch 搜尋範本」欄位中輸入搜尋範本。
滑動「命中次數」滑桿,調整命中次數。
按一下 [儲存]。
輸入提示。
按一下「提交」。
瞭解回覆內容
如果模型提示成功使用 Vertex AI Studio 或 API,以 Elasticsearch 資料儲存庫為基礎,模型的回應就會包含附有引文和來源內容的中繼資料。如果模型回覆的來源關聯性偏低或資訊不完整,系統可能不會提供中繼資料,且提示回覆不會以來源為依據。
Python
安裝
pip install --upgrade google-genai
詳情請參閱 SDK 參考說明文件。
設定環境變數,透過 Vertex AI 使用 Gen AI SDK:
# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values # with appropriate values for your project. export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT export GOOGLE_CLOUD_LOCATION=global export GOOGLE_GENAI_USE_VERTEXAI=True
from google import genai from google.genai.types import ( GenerateContentConfig, Elasticsearch, Retrieval, Tool, HttpOptions, ) client = genai.Client(http_options=HttpOptions(api_version="v1")) # Replace with your Elasticsearch details ELASTIC_SEARCH_ENDPOINT = "YOUR_ELASTICSEARCH_ENDPOINT" ELASTIC_SEARCH_API_KEY = "YOUR_ELASTICSEARCH_API_KEY" INDEX_NAME = "YOUR_INDEX_NAME" SEARCH_TEMPLATE_NAME = "YOUR_SEARCH_TEMPLATE_NAME" NUM_HITS = 5 tool = Tool( retrieval=Retrieval( external_api=Elasticsearch( api_spec="ELASTIC_SEARCH", endpoint=ELASTIC_SEARCH_ENDPOINT, api_auth={ "apiKeyConfig": { "apiKeyString": f"ApiKey {ELASTIC_SEARCH_API_KEY}" } }, elastic_search_params={ "index": INDEX_NAME, "searchTemplate": SEARCH_TEMPLATE_NAME, "numHits": NUM_HITS, }, ) ) ) response = client.models.generate_content( model="gemini-2.5-flash", # Or another supported model contents="What are the main features of product X?", # Your query config=GenerateContentConfig( tools=[tool], ), ) print(response.text) REST
如要傳送文字提示詞並以 Elasticsearch 做為基礎,請將 POST 要求傳送至 Vertex AI API。您至少必須提供要求主體。請務必將以下項目改為對應的值:
- PROMPT:要做為基礎的文字提示。
- ELASTIC_SEARCH_ENDPOINT:要使用的 Elasticsearch 資源的絕對端點路徑。
- ELASTIC_SEARCH_API_KEY:Elasticsearch 資料端點的 API 金鑰。
- INDEX_NAME:用於基礎的 Elasticsearch 索引名稱。
- SEARCH_TEMPLATE_NAME:用於基礎的 Elasticsearch 搜尋範本。
NUM_HITS:從 Elasticsearch 資料來源傳回並用於基礎的結果數量。
HTTP 方法和網址:
POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContentJSON 要求內文:
{ "contents": [ { "role": "user", "parts": [ { "text": "PROMPT" } ] } ], "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", } } } }] }
如要進一步瞭解其他 API 欄位 (例如系統指令和多輪對話),請參閱生成式 AI 初學者指南。
傳送 API 要求
您可以將要求主體儲存在名為 request.json 的檔案中。 接著執行 POST API 要求,並進行下列替換:
- LOCATION:處理要求的區域。如要使用全域端點,請從端點名稱中排除位置,並將資源位置設為
global。 - PROJECT_ID:您的 Google Cloud 專案 ID。如要進一步瞭解專案 ID,請參閱「建立及管理專案」。
- MODEL_ID:多模態模型的模型 ID。
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" 您應該會收到如下的 JSON 回應:
{ "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], }, ], }, } ], } 瞭解回覆內容
這兩個 API 的回覆都會包含 LLM 生成的文字,稱為「候選項目」。如果模型提示成功以 Elasticsearch 資料來源為依據,回覆內容就會包含依據中繼資料,指出回覆中衍生自 Elasticsearch 資料的部分。不過,這類中繼資料可能因多種原因而未提供,導致提示回應未根據中繼資料生成。這些原因包括來源關聯性偏低,或是模型回覆中資訊不完整。
輸出資料的細目如下:
- 角色:指出已建立基準答案的傳送者。由於回覆一律包含有根據的文字,因此角色一律為
model。 - 文字:LLM 生成的依據答案。
- 建立基準中繼資料:建立基準來源的相關資訊,包含下列元素:
- 建立基準的區塊:Elasticsearch 索引中的結果清單,可做為答案的依據。
- 建立基準支援:答案中特定聲明相關資訊,可用於顯示引文:
- 區段:模型回覆中由基礎事實塊佐證的部分。
- 基礎事實區塊索引:基礎事實區塊清單中的基礎事實區塊索引,對應這項聲明。
- 信心分數:介於 0 到 1 之間的數字,表示聲明在所提供的基礎區塊集中,有多大程度的根據。不適用於 Gemini 2.5 Pro 和 Gemini 2.5 Flash 以上版本。