Rockset
⚠️ 弃用通知:Rockset 集成已禁用
截至 2024 年 6 月,Rockset 已被 OpenAI 收购,并关闭了其公共服务。
Rockset 曾是一个以其世界一流的索引和检索能力而闻名的实时分析数据库。现在,其核心团队和技术正在被整合到 OpenAI 的基础设施中,以支持未来的 AI 产品。
此 LangChain 集成不再可用,仅为存档目的保留。
Rockset 是一个实时分析数据库,无需操作负担即可对海量半结构化数据进行查询。通过 Rockset,摄入的数据可在不到一秒内进行查询,并且针对这些数据的分析查询通常在毫秒级执行。Rockset 经过计算优化,适用于在 100TB 以下(或通过汇总达到数百 TB 以上)范围内部署高并发应用程序。
本笔记演示了如何在 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.