Skip to main content
Open In Colab在 GitHub 上打开

摇滚

Rockset 是一个实时分析数据库,支持对大量半结构化数据进行查询,而不会造成运营负担。使用 Rockset,提取的数据可在一秒内查询,而针对该数据的分析查询通常在几毫秒内执行。Rockset 经过计算优化,使其适合为低于 100TB 范围(或大于 100 TB 的汇总)的高并发应用程序提供服务。

此笔记本演示了如何在 langchain 中使用 Rockset 作为文档加载器。要开始使用,请确保您有 Rockset 账户和 API 密钥可用。

设置环境

  1. 转到 Rockset 控制台并获取 API 密钥。从 API 参考中找到您的 API 区域。对于本笔记本,我们假设您使用的是 RocksetOregon(us-west-2).
  2. 将 you 设置为 environment variableROCKSET_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 文档将用作元数据)。

执行查询并访问生成的Documents,请运行:

loader.lazy_load()

执行查询并访问所有结果Documents 中,运行:

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."page_content的结果Document将:

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

您可以通过设置content_columns_joiner参数中的RocksetLoader构造 函数。content_columns_joiner是一个方法,该方法接受List[Tuple[str, Any]]]作为参数,表示 (column name, column value) 的元组列表。默认情况下,这是一种使用新行联接每个列值的方法。

例如,如果您想用空格而不是新行连接 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
)

page_content的结果Document将:

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.