跳至主要內容

Rockset

Rockset 是一個即時分析資料庫,可以對大量半結構化資料進行查詢,而無需任何運營負擔。 使用 Rockset,攝入的資料在一秒內即可查詢,針對該資料的分析查詢通常在幾毫秒內執行。 Rockset 經過計算優化,適合為小於 100TB 範圍(或透過彙總大於數百 TB)的高並發應用程式提供服務。

本筆記本演示如何使用 Rockset 作為 langchain 中的文件載入器。 首先,請確保您擁有 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.

此頁面是否對您有所幫助?