Rockset
Rockset 是一個即時分析資料庫,可以對大量半結構化資料進行查詢,而無需任何運營負擔。 使用 Rockset,攝入的資料在一秒內即可查詢,針對該資料的分析查詢通常在幾毫秒內執行。 Rockset 經過計算優化,適合為小於 100TB 範圍(或透過彙總大於數百 TB)的高並發應用程式提供服務。
本筆記本演示如何使用 Rockset 作為 langchain 中的文件載入器。 首先,請確保您擁有 Rockset 帳戶和可用的 API 金鑰。
設定環境
- 前往 Rockset 控制台 並取得 API 金鑰。 從 API 參考中找到您的 API 區域。 就本筆記本而言,我們將假設您從
Oregon(us-west-2)
使用 Rockset。 - 設定環境變數
ROCKSET_API_KEY
。 - 安裝 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
)
在這裡,您可以看到執行了以下查詢
SELECT * FROM langchain_demo LIMIT 3
集合中的 text
欄位用作頁面內容,記錄的 id
和 date
欄位用作元資料(如果您沒有將任何內容傳遞到 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
)
假設 "sentence1" 欄位是 "This is the first sentence."
並且 "sentence2" 欄位是 "This is the second sentence."
,則結果 Document
的 page_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
)
結果 Document
的 page_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.