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 參考文件。
整合細節
檢索器 | 自行託管 | 雲端服務 | 套件 |
---|---|---|---|
VertexAISearchRetriever | ❌ | ✅ | langchain_google_community |
設定
安裝
您需要安裝 langchain-google-community
和 google-cloud-discoveryengine
套件才能使用 Vertex AI Search 檢索器。
%pip install -qU langchain-google-community google-cloud-discoveryengine
設定 Google Cloud 和 Vertex AI Search 的存取權限
自 2023 年 8 月起,Vertex AI Search 無需許可清單即可公開使用。
在您可以使用檢索器之前,您需要完成以下步驟
建立搜尋引擎並填充非結構化資料儲存區
- 請按照 Vertex AI Search 入門指南 中的說明設定 Google Cloud 專案和 Vertex AI Search。
- 使用 Google Cloud Console 建立非結構化資料儲存區
- 使用來自
gs://cloud-samples-data/gen-app-builder/search/alphabet-investor-pdfs
Cloud Storage 資料夾的範例 PDF 文件填充它。 - 請務必使用
Cloud Storage(不含元數據)
選項。
- 使用來自
設定存取 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_id
、search_engine_id
和 data_store_id
參數可以在檢索器的建構子中明確提供,或透過環境變數 - PROJECT_ID
、SEARCH_ENGINE_ID
和 DATA_STORE_ID
提供。
您還可以配置多個選填參數,包括
max_documents
- 用於提供摘要式片段或摘要式答案的最大文件數量get_extractive_answers
- 預設情況下,檢索器配置為返回摘要式片段。- 將此欄位設定為
True
以返回摘要式答案。僅當engine_data_type
設定為0
(非結構化)時使用。
- 將此欄位設定為
max_extractive_answer_count
- 每個搜尋結果中返回的最大摘要式答案數量。- 最多將返回 5 個答案。僅當
engine_data_type
設定為0
(非結構化)時使用。
- 最多將返回 5 個答案。僅當
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 參考文件。