Skip to main content
本指南简要介绍如何开始使用 JSONLoader 文档加载器。有关所有 JSONLoader 功能和配置的详细文档,请前往 API 参考
  • TODO:添加其他相关链接,例如底层 API 信息等。

概述

集成详情

本地可序列化JS 支持
JSONLoaderlangchain-community

加载器功能

来源文档延迟加载原生异步支持
JSONLoader

设置

要访问 JSON 文档加载器,您需要安装 langchain-community 集成包以及 jq Python 包。

凭证

使用 JSONLoader 类不需要任何凭证。 要启用模型调用的自动跟踪,请设置您的 LangSmith API 密钥:
os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
os.environ["LANGSMITH_TRACING"] = "true"

安装

安装 langchain-communityjq
pip install -qU langchain-community jq

初始化

现在我们可以实例化模型对象并加载文档:
  • TODO:使用相关参数更新模型实例化。
from langchain_community.document_loaders import JSONLoader

loader = JSONLoader(
    file_path="./example_data/facebook_chat.json",
    jq_schema=".messages[].content",
    text_content=False,
)

加载

docs = loader.load()
docs[0]
Document(metadata={'source': '/Users/isaachershenson/Documents/langchain/docs/docs/integrations/document_loaders/example_data/facebook_chat.json', 'seq_num': 1}, page_content='Bye!')
print(docs[0].metadata)
{'source': '/Users/isaachershenson/Documents/langchain/docs/docs/integrations/document_loaders/example_data/facebook_chat.json', 'seq_num': 1}

延迟加载

pages = []
for doc in loader.lazy_load():
    pages.append(doc)
    if len(pages) >= 10:
        # 执行分页操作,例如
        # index.upsert(pages)

        pages = []

从 JSON 行文件读取

如果要从 JSON 行文件加载文档,请传递 json_lines=True 并指定 jq_schema 以从单个 JSON 对象提取 page_content
loader = JSONLoader(
    file_path="./example_data/facebook_chat_messages.jsonl",
    jq_schema=".content",
    text_content=False,
    json_lines=True,
)

docs = loader.load()
print(docs[0])
page_content='Bye!' metadata={'source': '/Users/isaachershenson/Documents/langchain/docs/docs/integrations/document_loaders/example_data/facebook_chat_messages.jsonl', 'seq_num': 1}

读取特定内容键

另一种方法是设置 jq_schema='.' 并提供 content_key,以便仅加载特定内容:
loader = JSONLoader(
    file_path="./example_data/facebook_chat_messages.jsonl",
    jq_schema=".",
    content_key="sender_name",
    json_lines=True,
)

docs = loader.load()
print(docs[0])
page_content='User 2' metadata={'source': '/Users/isaachershenson/Documents/langchain/docs/docs/integrations/document_loaders/example_data/facebook_chat_messages.jsonl', 'seq_num': 1}

使用 jq 模式 content_key 的 JSON 文件

要使用 jq 模式中的 content_key 从 JSON 文件加载文档,请设置 is_content_key_jq_parsable=True。确保 content_key 兼容且可以使用 jq 模式解析。
loader = JSONLoader(
    file_path="./example_data/facebook_chat.json",
    jq_schema=".messages[]",
    content_key=".content",
    is_content_key_jq_parsable=True,
)

docs = loader.load()
print(docs[0])
page_content='Bye!' metadata={'source': '/Users/isaachershenson/Documents/langchain/docs/docs/integrations/document_loaders/example_data/facebook_chat.json', 'seq_num': 1}

提取元数据

通常,我们希望将 JSON 文件中可用的元数据包含到我们从内容创建的文档中。 以下演示如何使用 JSONLoader 提取元数据。 需要注意一些关键变化。在之前未收集元数据的示例中,我们能够直接在模式中指定从何处提取 page_content 的值。 在此示例中,我们必须告诉加载器迭代 messages 字段中的记录。然后 jq_schema 必须是 .messages[] 这允许我们将记录(字典)传递给必须实现的 metadata_funcmetadata_func 负责识别记录中哪些信息应包含在最终 Document 对象的元数据中。 此外,我们现在必须通过 content_key 参数在加载器中显式指定记录中需要从中提取 page_content 值的键。
# 定义元数据提取函数。
def metadata_func(record: dict, metadata: dict) -> dict:
    metadata["sender_name"] = record.get("sender_name")
    metadata["timestamp_ms"] = record.get("timestamp_ms")

    return metadata


loader = JSONLoader(
    file_path="./example_data/facebook_chat.json",
    jq_schema=".messages[]",
    content_key="content",
    metadata_func=metadata_func,
)

docs = loader.load()
print(docs[0].metadata)
{'source': '/Users/isaachershenson/Documents/langchain/docs/docs/integrations/document_loaders/example_data/facebook_chat.json', 'seq_num': 1, 'sender_name': 'User 2', 'timestamp_ms': 1675597571851}

API 参考

有关所有 JSONLoader 功能和配置的详细文档,请前往 API 参考