跳到主要內容
Open In ColabOpen on GitHub

Google Spanner

Spanner 是一個高度可擴展的資料庫,它將無限的可擴展性與關聯式語意(例如二級索引、強一致性、結構描述和 SQL)結合在一個簡單的解決方案中,提供 99.999% 的可用性。

本筆記本說明如何使用 Spanner,透過 SpannerLoaderSpannerDocumentSaver儲存、載入和刪除 langchain 文件

GitHub 上了解有關該套件的更多資訊。

Open In Colab

開始之前

若要執行此筆記本,您需要執行以下操作

確認在此筆記本的執行階段環境中可以存取資料庫後,填寫以下值並執行儲存格,然後再執行範例指令碼。

# @markdown Please specify an instance id, a database, and a table for demo purpose.
INSTANCE_ID = "test_instance" # @param {type:"string"}
DATABASE_ID = "test_database" # @param {type:"string"}
TABLE_NAME = "test_table" # @param {type:"string"}

🦜🔗 函式庫安裝

此整合位於其自己的 langchain-google-spanner 套件中,因此我們需要安裝它。

%pip install -upgrade --quiet langchain-google-spanner langchain

僅限 Colab:取消註解以下儲存格以重新啟動核心,或使用按鈕重新啟動核心。對於 Vertex AI Workbench,您可以使用頂部的按鈕重新啟動終端機。

# # Automatically restart kernel after installs so that your environment can access the new packages
# import IPython

# app = IPython.Application.instance()
# app.kernel.do_shutdown(True)

☁ 設定您的 Google Cloud 專案

設定您的 Google Cloud 專案,以便您可以在此筆記本中利用 Google Cloud 資源。

如果您不知道您的專案 ID,請嘗試以下操作

  • 執行 gcloud config list
  • 執行 gcloud projects list
  • 請參閱支援頁面:尋找專案 ID
# @markdown Please fill in the value below with your Google Cloud project ID and then run the cell.

PROJECT_ID = "my-project-id" # @param {type:"string"}

# Set the project id
!gcloud config set project {PROJECT_ID}

🔐 身份驗證

以登入此筆記本的 IAM 使用者身分驗證 Google Cloud,以便存取您的 Google Cloud 專案。

  • 如果您使用 Colab 執行此筆記本,請使用以下儲存格並繼續。
  • 如果您使用 Vertex AI Workbench,請查看 此處 的設定說明。
from google.colab import auth

auth.authenticate_user()

基本用法

儲存文件

使用 SpannerDocumentSaver.add_documents(<documents>) 儲存 langchain 文件。若要初始化 SpannerDocumentSaver 類別,您需要提供 3 項資訊

  1. instance_id - 要從中載入資料的 Spanner 執行個體。
  2. database_id - 要從中載入資料的 Spanner 資料庫執行個體。
  3. table_name - Spanner 資料庫中用於儲存 langchain 文件的表格名稱。
from langchain_core.documents import Document
from langchain_google_spanner import SpannerDocumentSaver

test_docs = [
Document(
page_content="Apple Granny Smith 150 0.99 1",
metadata={"fruit_id": 1},
),
Document(
page_content="Banana Cavendish 200 0.59 0",
metadata={"fruit_id": 2},
),
Document(
page_content="Orange Navel 80 1.29 1",
metadata={"fruit_id": 3},
),
]

saver = SpannerDocumentSaver(
instance_id=INSTANCE_ID,
database_id=DATABASE_ID,
table_name=TABLE_NAME,
)
saver.add_documents(test_docs)
API 參考文件:文件

從 Spanner 查詢文件

如需連線至 Spanner 表格的更多詳細資訊,請查看 Python SDK 文件

從表格載入文件

使用 SpannerLoader.load()SpannerLoader.lazy_load() 載入 langchain 文件。lazy_load 傳回一個產生器,該產生器僅在迭代期間查詢資料庫。若要初始化 SpannerLoader 類別,您需要提供

  1. instance_id - 要從中載入資料的 Spanner 執行個體。
  2. database_id - 要從中載入資料的 Spanner 資料庫執行個體。
  3. query - 資料庫方言的查詢。
from langchain_google_spanner import SpannerLoader

query = f"SELECT * from {TABLE_NAME}"
loader = SpannerLoader(
instance_id=INSTANCE_ID,
database_id=DATABASE_ID,
query=query,
)

for doc in loader.lazy_load():
print(doc)
break

刪除文件

使用 SpannerDocumentSaver.delete(<documents>) 從表格中刪除 langchain 文件清單。

docs = loader.load()
print("Documents before delete:", docs)

doc = test_docs[0]
saver.delete([doc])
print("Documents after delete:", loader.load())

進階用法

自訂客戶端

依預設建立的客戶端是預設客戶端。若要明確傳入 credentialsproject,可以將自訂客戶端傳遞至建構函式。

from google.cloud import spanner
from google.oauth2 import service_account

creds = service_account.Credentials.from_service_account_file("/path/to/key.json")
custom_client = spanner.Client(project="my-project", credentials=creds)
loader = SpannerLoader(
INSTANCE_ID,
DATABASE_ID,
query,
client=custom_client,
)

自訂文件頁面內容和元數據

載入器將傳回文件清單,其中包含來自特定資料欄的頁面內容。所有其他資料欄將新增至元數據。每一列都會變成一個文件。

自訂頁面內容格式

SpannerLoader 假設有一個名為 page_content 的欄。這些預設值可以變更,如下所示

custom_content_loader = SpannerLoader(
INSTANCE_ID, DATABASE_ID, query, content_columns=["custom_content"]
)

如果指定了多個欄,則頁面內容的字串格式將預設為 text(空格分隔的字串串連)。使用者可以指定其他格式,包括 textJSONYAMLCSV

自訂元數據格式

SpannerLoader 假設有一個名為 langchain_metadata 的元數據欄,用於儲存 JSON 資料。元數據欄將用作基礎字典。依預設,將新增所有其他欄資料,並且可能會覆寫原始值。這些預設值可以變更,如下所示

custom_metadata_loader = SpannerLoader(
INSTANCE_ID, DATABASE_ID, query, metadata_columns=["column1", "column2"]
)

自訂 JSON 元數據欄名稱

依預設,載入器使用 langchain_metadata 作為基礎字典。可以自訂此設定,以選取 JSON 欄作為文件元數據的基礎字典。

custom_metadata_json_loader = SpannerLoader(
INSTANCE_ID, DATABASE_ID, query, metadata_json_column="another-json-column"
)

自訂陳舊性

預設的陳舊性為 15 秒。可以透過指定較弱的界限(可以是執行所有讀取作業時的給定時間戳記),或過去的給定持續時間來自訂此設定。

import datetime

timestamp = datetime.datetime.utcnow()
custom_timestamp_loader = SpannerLoader(
INSTANCE_ID,
DATABASE_ID,
query,
staleness=timestamp,
)
duration = 20.0
custom_duration_loader = SpannerLoader(
INSTANCE_ID,
DATABASE_ID,
query,
staleness=duration,
)

開啟資料加速

依預設,載入器不會使用資料加速,因為它具有相關的額外成本,並且需要額外的 IAM 權限。但是,使用者可以選擇開啟它。

custom_databoost_loader = SpannerLoader(
INSTANCE_ID,
DATABASE_ID,
query,
databoost=True,
)

自訂客戶端

依預設建立的客戶端是預設客戶端。若要明確傳入 credentialsproject,可以將自訂客戶端傳遞至建構函式。

from google.cloud import spanner

custom_client = spanner.Client(project="my-project", credentials=creds)
saver = SpannerDocumentSaver(
INSTANCE_ID,
DATABASE_ID,
TABLE_NAME,
client=custom_client,
)

SpannerDocumentSaver 的自訂初始化

SpannerDocumentSaver 允許自訂初始化。這允許使用者指定如何將文件儲存到表格中。

content_column:這將用作文件頁面內容的欄名稱。預設為 page_content

metadata_columns:如果金鑰存在於文件的元數據中,則這些元數據將儲存到特定欄中。

metadata_json_column:這將是特殊 JSON 欄的欄名稱。預設為 langchain_metadata

custom_saver = SpannerDocumentSaver(
INSTANCE_ID,
DATABASE_ID,
TABLE_NAME,
content_column="my-content",
metadata_columns=["foo"],
metadata_json_column="my-special-json-column",
)

初始化 Spanner 的自訂結構描述

SpannerDocumentSaver 將具有 init_document_table 方法,以建立新表格來儲存具有自訂結構描述的文件。

from langchain_google_spanner import Column

new_table_name = "my_new_table"

SpannerDocumentSaver.init_document_table(
INSTANCE_ID,
DATABASE_ID,
new_table_name,
content_column="my-page-content",
metadata_columns=[
Column("category", "STRING(36)", True),
Column("price", "FLOAT64", False),
],
)

此頁面是否對您有幫助?