跳到主要內容
Open In ColabOpen on GitHub

Rockset

Rockset 是一個即時分析資料庫,能夠對巨量、半結構化資料進行查詢,而無需額外操作負擔。透過 Rockset,攝取的資料在一秒內即可查詢,且針對該資料的分析查詢通常在毫秒內執行。Rockset 經過運算最佳化,使其適用於在小於 100TB 範圍內(或透過彙總大於數百 TB)服務高並發應用程式。

本筆記本示範如何在 langchain 中使用 Rockset 作為文件載入器。若要開始使用,請確保您擁有 Rockset 帳戶和可用的 API 金鑰。

設定環境

  1. 前往 Rockset 主控台 並取得 API 金鑰。從 API 參考文件 中找到您的 API 區域。為了本筆記本的目的,我們將假設您從 Oregon(us-west-2) 使用 Rockset。
  2. 設定您的環境變數 ROCKSET_API_KEY
  3. 安裝 Rockset python 用戶端,langchain 將使用它與 Rockset 資料庫互動。
%pip install --upgrade --quiet  rockset

載入文件

Rockset 與 LangChain 的整合讓您可以使用 SQL 查詢從 Rockset 集合載入文件。為了做到這一點,您必須建構一個 RocksetLoader 物件。以下是一個範例程式碼片段,初始化 RocksetLoader

from langchain_community.document_loaders import RocksetLoader
from rockset import Regions, RocksetClient, models

loader = RocksetLoader(
RocksetClient(Regions.usw2a1, "<api key>"),
models.QueryRequestSql(query="SELECT * FROM langchain_demo LIMIT 3"), # SQL query
["text"], # content columns
metadata_keys=["id", "date"], # metadata columns
)
API 參考:RocksetLoader

在這裡,您可以看到以下查詢正在執行

SELECT * FROM langchain_demo LIMIT 3

集合中的 text 欄位用作頁面內容,而記錄的 iddate 欄位用作元數據(如果您沒有將任何內容傳遞到 metadata_keys 中,則整個 Rockset 文件將用作元數據)。

若要執行查詢並存取結果 Document 的迭代器,請執行

loader.lazy_load()

若要執行查詢並一次存取所有結果 Document,請執行

loader.load()

以下是 loader.load() 的範例回應

[
Document(
page_content="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas a libero porta, dictum ipsum eget, hendrerit neque. Morbi blandit, ex ut suscipit viverra, enim velit tincidunt tellus, a tempor velit nunc et ex. Proin hendrerit odio nec convallis lobortis. Aenean in purus dolor. Vestibulum orci orci, laoreet eget magna in, commodo euismod justo.",
metadata={"id": 83209, "date": "2022-11-13T18:26:45.000000Z"}
),
Document(
page_content="Integer at finibus odio. Nam sit amet enim cursus lacus gravida feugiat vestibulum sed libero. Aenean eleifend est quis elementum tincidunt. Curabitur sit amet ornare erat. Nulla id dolor ut magna volutpat sodales fringilla vel ipsum. Donec ultricies, lacus sed fermentum dignissim, lorem elit aliquam ligula, sed suscipit sapien purus nec ligula.",
metadata={"id": 89313, "date": "2022-11-13T18:28:53.000000Z"}
),
Document(
page_content="Morbi tortor enim, commodo id efficitur vitae, fringilla nec mi. Nullam molestie faucibus aliquet. Praesent a est facilisis, condimentum justo sit amet, viverra erat. Fusce volutpat nisi vel purus blandit, et facilisis felis accumsan. Phasellus luctus ligula ultrices tellus tempor hendrerit. Donec at ultricies leo.",
metadata={"id": 87732, "date": "2022-11-13T18:49:04.000000Z"}
)
]

使用多個欄位作為內容

您可以選擇使用多個欄位作為內容

from langchain_community.document_loaders import RocksetLoader
from rockset import Regions, RocksetClient, models

loader = RocksetLoader(
RocksetClient(Regions.usw2a1, "<api key>"),
models.QueryRequestSql(query="SELECT * FROM langchain_demo LIMIT 1 WHERE id=38"),
["sentence1", "sentence2"], # TWO content columns
)
API 參考:RocksetLoader

假設 "sentence1" 欄位是 "This is the first sentence.",而 "sentence2" 欄位是 "This is the second sentence.",則產生的 Documentpage_content 將會是

This is the first sentence.
This is the second sentence.

您可以透過在 RocksetLoader 建構函式中設定 content_columns_joiner 參數來定義自己的函式以聯結內容欄位。content_columns_joiner 是一種方法,它接受 List[Tuple[str, Any]]] 作為參數,表示 (欄位名稱、欄位值) 元組的列表。預設情況下,這是一種使用新行聯結每個欄位值的方法。

例如,如果您想使用空格而不是新行來聯結 sentence1 和 sentence2,您可以像這樣設定 content_columns_joiner

RocksetLoader(
RocksetClient(Regions.usw2a1, "<api key>"),
models.QueryRequestSql(query="SELECT * FROM langchain_demo LIMIT 1 WHERE id=38"),
["sentence1", "sentence2"],
content_columns_joiner=lambda docs: " ".join(
[doc[1] for doc in docs]
), # join with space instead of /n
)

產生的 Documentpage_content 將會是

This is the first sentence. This is the second sentence.

通常,您會希望在 page_content 中包含欄位名稱。您可以這樣做

RocksetLoader(
RocksetClient(Regions.usw2a1, "<api key>"),
models.QueryRequestSql(query="SELECT * FROM langchain_demo LIMIT 1 WHERE id=38"),
["sentence1", "sentence2"],
content_columns_joiner=lambda docs: "\n".join(
[f"{doc[0]}: {doc[1]}" for doc in docs]
),
)

這將產生以下 page_content

sentence1: This is the first sentence.
sentence2: This is the second sentence.

此頁面是否對您有幫助?