跳到主要內容

Google Vertex AI Search

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

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

Vertex AI Search 可在 Google Cloud Console 中以及透過 API 用於企業工作流程整合。

此筆記本示範如何配置 Vertex AI Search 並使用 Vertex AI Search 檢索器。Vertex AI Search 檢索器封裝了 Python 客户端函式庫,並使用它來存取 搜尋服務 API

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

整合細節

檢索器自行託管雲端服務套件
VertexAISearchRetrieverlangchain_google_community

設定

安裝

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

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

自 2023 年 8 月起,Vertex AI Search 無需許可清單即可公開使用。

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

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

設定存取 Vertex AI Search API 的憑證

Vertex AI Search 檢索器使用的 Vertex AI Search 客户端函式庫 為以程式設計方式驗證 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 Search 檢索器

Vertex AI Search 檢索器實作於 langchain_google_community.VertexAISearchRetriever 類別中。get_relevant_documents 方法返回 langchain.schema.Document 文件列表,其中每個文件的 page_content 欄位都填充了文件內容。根據 Vertex AI Search 中使用的資料類型(網站、結構化或非結構化),page_content 欄位填充如下

  • 具有進階索引的網站:符合查詢的摘要式答案metadata 欄位填充了從中提取片段或答案的文件的中繼資料(如果有的話)。
  • 非結構化資料來源:符合查詢的摘要式片段摘要式答案metadata 欄位填充了從中提取片段或答案的文件的中繼資料(如果有的話)。
  • 結構化資料來源:包含從結構化資料來源返回的所有欄位的字串 json。metadata 欄位填充了文件的中繼資料(如果有的話)

摘要式答案和摘要式片段

摘要式答案是與每個搜尋結果一起返回的逐字文本。它直接從原始文件中提取。摘要式答案通常顯示在網頁頂部附近,為最終使用者提供簡短的答案,該答案在上下文中與其查詢相關。

摘要式片段是與每個搜尋結果一起返回的逐字文本。摘要式片段通常比摘要式答案更冗長。摘要式片段可以顯示為對查詢的回應,並且可以用於執行後處理任務,以及作為大型語言模型的輸入,以生成答案或新文本。摘要式片段適用於非結構化搜尋。

有關摘要式片段和摘要式答案的更多資訊,請參閱產品文件

注意:摘要式片段需要啟用 Enterprise 版本 功能。

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

必填參數為:

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

其中之一

  • search_engine_id - 您想要使用的搜尋應用程式的 ID。(混合式搜尋的必要條件)
  • 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 - 由 Search API 建立的自動查詢擴展。
  • engine_data_type - 定義 Vertex AI Search 資料類型
    • 0 - 非結構化資料
    • 1 - 結構化資料
    • 2 - 網站資料
    • 3 - 混合式搜尋

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)

設定和使用檢索器來處理**混合式**資料

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 發出單次查詢。由於 retrievers 是 Runnables,我們也可以使用 Runnable 介面 中的任何方法,例如 .batch

在鏈中使用

我們也可以將 retrievers 整合到中,以建構更大的應用程式,例如簡單的 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 參考文件


此頁面是否有幫助?