跳到主要內容
Open In ColabOpen on GitHub

Google Vertex AI 搜尋

Google Vertex AI 搜尋(先前在 Generative AI App Builder 上稱為 Enterprise Search)是 Google Cloud 提供的 Vertex AI 機器學習平台的一部分。

Vertex AI 搜尋 讓組織能夠快速為客戶和員工建置由生成式 AI 驅動的搜尋引擎。它以各種 Google 搜尋 技術為基礎,包括語意搜尋,透過使用自然語言處理和機器學習技術來推斷內容中的關係以及使用者的查詢輸入中的意圖,協助提供比傳統關鍵字搜尋技術更相關的結果。Vertex AI 搜尋也受益於 Google 在理解使用者搜尋方式方面的專業知識,並將內容相關性納入考量以對顯示的結果進行排序。

Vertex AI 搜尋 可在 Google Cloud Console 中使用,也可透過 API 進行企業工作流程整合。

此筆記本示範如何設定 Vertex AI 搜尋 並使用 Vertex AI 搜尋 檢索器。Vertex AI 搜尋檢索器封裝了 Python 用戶端程式庫,並使用它來存取 搜尋服務 API

如需所有 VertexAISearchRetriever 功能和設定的詳細文件,請前往 API 參考

整合詳細資訊

檢索器自行託管雲端供應套件
VertexAISearchRetrieverlangchain_google_community

設定

安裝

您需要安裝 langchain-google-communitygoogle-cloud-discoveryengine 套件才能使用 Vertex AI 搜尋檢索器。

%pip install -qU langchain-google-community google-cloud-discoveryengine

Vertex AI 搜尋自 2023 年 8 月起已全面開放使用,無需加入允許清單。

在使用檢索器之前,您需要完成以下步驟

建立搜尋引擎並填入非結構化資料儲存區

設定憑證以存取 Vertex AI 搜尋 API

Vertex AI 搜尋檢索器使用的 Vertex AI 搜尋用戶端程式庫 為以程式設計方式驗證 Google Cloud 提供高階語言支援。用戶端程式庫支援 應用程式預設憑證 (ADC);程式庫會在定義的一組位置中尋找憑證,並使用這些憑證來驗證對 API 的請求。透過 ADC,您可以讓應用程式在各種環境 (例如本機開發或生產環境) 中使用憑證,而無需修改應用程式程式碼。

如果在 Google Colab 中執行,請使用 google.colab.google.auth 進行驗證,否則請按照 支援的方法 之一,確保您的應用程式預設憑證已正確設定。

import sys

if "google.colab" in sys.modules:
from google.colab import auth as google_auth

google_auth.authenticate_user()

設定和使用 Vertex AI 搜尋檢索器

Vertex AI 搜尋檢索器在 langchain_google_community.VertexAISearchRetriever 類別中實作。get_relevant_documents 方法會傳回 langchain.schema.Document 文件的清單,其中每個文件的 page_content 欄位都填入文件內容。根據 Vertex AI 搜尋中使用的資料類型 (網站、結構化或非結構化),page_content 欄位的填入方式如下

  • 具有進階索引的網站:符合查詢的 extractive answer (擷取式答案)。metadata 欄位會填入從中擷取區段或答案的文件的中繼資料 (如果有的話)。
  • 非結構化資料來源:符合查詢的 extractive segment (擷取式區段) 或 extractive answer (擷取式答案)。metadata 欄位會填入從中擷取區段或答案的文件的中繼資料 (如果有的話)。
  • 結構化資料來源:包含從結構化資料來源傳回之所有欄位的字串 json。metadata 欄位會填入文件的中繼資料 (如果有的話)

擷取式答案和擷取式區段

擷取式答案是與每個搜尋結果一起傳回的逐字文字。它是直接從原始文件中擷取的。擷取式答案通常顯示在網頁頂端附近,為最終使用者提供與其查詢在語境上相關的簡短答案。擷取式答案適用於網站和非結構化搜尋。

擷取式區段是與每個搜尋結果一起傳回的逐字文字。擷取式區段通常比擷取式答案更詳細。擷取式區段可以顯示為查詢的答案,並且可以用於執行後處理任務,以及作為大型語言模型的輸入,以產生答案或新文字。擷取式區段適用於非結構化搜尋。

如需有關擷取式區段和擷取式答案的詳細資訊,請參閱 產品文件

注意:擷取式區段需要啟用 Enterprise 版本 功能。

在建立檢索器的執行個體時,您可以指定許多參數,這些參數控制要存取的資料儲存區以及如何處理自然語言查詢,包括擷取式答案和區段的設定。

強制性參數如下:

  • project_id - 您的 Google Cloud 專案 ID。
  • location_id - 資料儲存區的位置。
    • global (預設)
    • us
    • eu

以下其中之一

  • search_engine_id - 您想要使用的搜尋應用程式 ID。(Blended Search 需填寫)
  • data_store_id - 您想要使用的資料儲存區 ID。

project_idsearch_engine_iddata_store_id 參數可以在檢索器的建構函式中明確提供,也可以透過環境變數 PROJECT_IDSEARCH_ENGINE_IDDATA_STORE_ID 提供。

您也可以設定許多選用參數,包括

  • max_documents - 用於提供擷取式區段或擷取式答案的文件最大數量
  • get_extractive_answers - 預設情況下,檢索器設定為傳回擷取式區段。
    • 將此欄位設定為 True 以傳回擷取式答案。這僅在 engine_data_type 設定為 0 (非結構化) 時使用
  • max_extractive_answer_count - 每個搜尋結果中傳回的擷取式答案最大數量。
    • 最多會傳回 5 個答案。這僅在 engine_data_type 設定為 0 (非結構化) 時使用。
  • max_extractive_segment_count - 每個搜尋結果中傳回的擷取式區段最大數量。
    • 目前將傳回一個區段。這僅在 engine_data_type 設定為 0 (非結構化) 時使用。
  • filter - 搜尋結果的篩選條件運算式,根據與資料儲存區中文件相關聯的中繼資料。
  • query_expansion_condition - 規格,用於判斷應在何種條件下進行查詢擴充。
    • 0 - 未指定的查詢擴充條件。在這種情況下,伺服器行為預設為停用。
    • 1 - 已停用查詢擴充。即使 SearchResponse.total_size 為零,也只會使用精確的搜尋查詢。
    • 2 - 由搜尋 API 建置的自動查詢擴充。
  • engine_data_type - 定義 Vertex AI 搜尋資料類型
    • 0 - 非結構化資料
    • 1 - 結構化資料
    • 2 - 網站資料
    • 3 - Blended search

GoogleCloudEnterpriseSearchRetriever 的移轉指南

在先前的版本中,此檢索器稱為 GoogleCloudEnterpriseSearchRetriever

若要更新至新的檢索器,請進行以下變更

  • 將匯入項目從:from langchain.retrievers import GoogleCloudEnterpriseSearchRetriever 變更為 -> from langchain_google_community import VertexAISearchRetriever
  • 將所有類別參考從 GoogleCloudEnterpriseSearchRetriever 變更為 -> VertexAISearchRetriever

注意:使用檢索器時,如果您想要從個別查詢取得自動追蹤,您也可以設定您的 LangSmith API 金鑰,方法是取消註解下方內容

# os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
# os.environ["LANGSMITH_TRACING"] = "true"

執行個體化

設定和使用適用於非結構化資料且具有擷取式區段的檢索器

from langchain_google_community import (
VertexAIMultiTurnSearchRetriever,
VertexAISearchRetriever,
)

PROJECT_ID = "<YOUR PROJECT ID>" # Set to your Project ID
LOCATION_ID = "<YOUR LOCATION>" # Set to your data store location
SEARCH_ENGINE_ID = "<YOUR SEARCH APP ID>" # Set to your search app ID
DATA_STORE_ID = "<YOUR DATA STORE ID>" # Set to your data store ID
retriever = VertexAISearchRetriever(
project_id=PROJECT_ID,
location_id=LOCATION_ID,
data_store_id=DATA_STORE_ID,
max_documents=3,
)
query = "What are Alphabet's Other Bets?"

result = retriever.invoke(query)
for doc in result:
print(doc)

設定和使用適用於非結構化資料且具有擷取式答案的檢索器

retriever = VertexAISearchRetriever(
project_id=PROJECT_ID,
location_id=LOCATION_ID,
data_store_id=DATA_STORE_ID,
max_documents=3,
max_extractive_answer_count=3,
get_extractive_answers=True,
)

result = retriever.invoke(query)
for doc in result:
print(doc)

設定和使用適用於結構化資料的檢索器

retriever = VertexAISearchRetriever(
project_id=PROJECT_ID,
location_id=LOCATION_ID,
data_store_id=DATA_STORE_ID,
max_documents=3,
engine_data_type=1,
)

result = retriever.invoke(query)
for doc in result:
print(doc)

設定和使用適用於網站資料且具有進階網站索引的檢索器

retriever = VertexAISearchRetriever(
project_id=PROJECT_ID,
location_id=LOCATION_ID,
data_store_id=DATA_STORE_ID,
max_documents=3,
max_extractive_answer_count=3,
get_extractive_answers=True,
engine_data_type=2,
)

result = retriever.invoke(query)
for doc in result:
print(doc)

設定和使用適用於 blended 資料的檢索器

retriever = VertexAISearchRetriever(
project_id=PROJECT_ID,
location_id=LOCATION_ID,
search_engine_id=SEARCH_ENGINE_ID,
max_documents=3,
engine_data_type=3,
)

result = retriever.invoke(query)
for doc in result:
print(doc)

使用後續問題搜尋 是基於生成式 AI 模型,並且與一般非結構化資料搜尋不同。

retriever = VertexAIMultiTurnSearchRetriever(
project_id=PROJECT_ID, location_id=LOCATION_ID, data_store_id=DATA_STORE_ID
)

result = retriever.invoke(query)
for doc in result:
print(doc)

用法

依照上述範例,我們使用 .invoke 發出單一查詢。由於檢索器是 Runnables,我們也可以使用 Runnable 介面 中的任何方法,例如 .batch

在鏈中使用

我們也可以將檢索器整合到 中,以建置更大的應用程式,例如簡單的 RAG 應用程式。為了示範目的,我們也執行個體化 VertexAI 聊天模型。請參閱對應的 Vertex 整合文件 以取得設定指示。

%pip install -qU langchain-google-vertexai
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_google_vertexai import ChatVertexAI

prompt = ChatPromptTemplate.from_template(
"""Answer the question based only on the context provided.

Context: {context}

Question: {question}"""
)

llm = ChatVertexAI(model_name="chat-bison", temperature=0)


def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)


chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
chain.invoke(query)

API 參考文檔

如需所有 VertexAISearchRetriever 功能和設定的詳細文件,請前往 API 參考


此頁面是否對您有幫助?