Rockset
Rockset 是一个实时分析数据库,它能够对海量的半结构化数据进行查询,而无需操作负担。使用 Rockset,摄入的数据在一秒内即可查询,并且针对该数据的分析查询通常在毫秒内执行。Rockset 针对计算进行了优化,使其适合服务于100TB以下范围的高并发应用程序(或通过汇总处理超过100TB的数据)。
本笔记本演示了如何在langchain中使用Rockset作为文档加载器。要开始使用,请确保您有一个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.