LlamaIndex 集成指南:使用 PatentsviewReader 加载专利摘要数据
【免费下载链接】llama_indexLlamaIndex is the leading document agent and OCR platform项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index
导读
本指南介绍 LlamaIndex 官方集成包llama-index-readers-patentsview的核心组件PatentsviewReader,说明如何借助 Patentsview 开放 API,将一组专利号批量转换为可供 LlamaIndex 索引与检索的Document对象。读完本文,你将掌握该 Reader 的安装方式、API Key 配置、load_data调用规范、返回数据格式以及底层请求行为,并能直接在自己的 RAG 应用中接入专利摘要数据。
一、组件定位:从专利号到 LlamaIndex Document
PatentsviewReader是 LlamaIndex 生态中的官方数据连接器(Reader),其作用是读取"专利摘要"(patent abstract)。它实现了 LlamaIndex Core 中定义的BaseReader抽象基类,因此可以无缝接入索引构建、文档加载等标准数据管线。
从源码结构看,该集成包的导入入口定义在 llama_index/readers/patentsview/init.py,对外暴露的 API 为:
from llama_index.readers.patentsview import PatentsviewReader其类继承关系在测试 test_readers_patentsview.py 中被明确验证:PatentsviewReader的 MRO 中包含BaseReader,即它是标准 Reader 体系的一员,可与VectorStoreIndex、SummaryIndex等 LlamaIndex 索引直接配合使用。
二、安装与环境准备
2.1 安装集成包
在 README.md 中给出的安装方式为:
pip install llama-index-readers-patentsview该包的元数据定义在 pyproject.toml:
- 包名:
llama-index-readers-patentsview(当前版本1.1.0) - Python 版本要求:
>=3.10,<4.0 - 核心依赖:
llama-index-core>=0.13.0,<0.15 - 许可证:MIT
也就是说,安装后你同时需要可用的llama-index-core环境(版本 0.13 至 0.15 区间),Reader 运行时的请求依赖requests库。
2.2 获取 Patentsview API Key
Patentsview API 现在强制要求 API Key。在 README.md 中明确提示:API Key 需通过 Patentsview 官方支持渠道申请,PatentsviewReader默认从环境变量PATENTSVIEW_API_KEY中读取该值。
配置环境变量后即可使用:
export PATENTSVIEW_API_KEY="your_api_key_here"三、快速上手:加载专利摘要
3.1 基础用法
README.md 提供了最简示例,在代码中结合环境变量传入 API Key:
import os from llama_index.readers.patentsview import PatentsviewReader loader = PatentsviewReader(api_key=os.getenv("PATENTSVIEW_API_KEY")) patents = ["8848839", "10452978"] abstracts = loader.load_data(patents)3.2 将摘要送入索引
load_data返回List[Document],与 LlamaIndex 的标准文档格式完全兼容,可直接用于构建索引:
from llama_index.core import VectorStoreIndex index = VectorStoreIndex.from_documents(abstracts) query_engine = index.as_query_engine() response = query_engine.query("该专利的核心技术是什么?")四、深入解析:PatentsviewReader 的实现细节
PatentsviewReader的完整实现位于 base.py,理解其内部逻辑有助于你在生产环境中合理使用。
4.1 初始化与 API Key 解析
构造函数__init__的签名如下:
def __init__(self, api_key: Optional[str] = None)内部逻辑(见 base.py 第 24-42 行):
- 优先使用传入的
api_key参数; - 若未传入,则回退读取环境变量
PATENTSVIEW_API_KEY; - 若两者皆无,直接抛出
ValueError("The API key [PATENTSVIEW_API_KEY] is required.")。
该行为在测试用例test_init_without_api_key中被验证(测试文件第 42-48 行)。API Key 最终以请求头X-Api-Key的形式附加到每次请求中。
4.2 请求体结构
初始化时,Reader 预置了一份请求体(base.py 第 29-33 行):
self.json = { "q": {"patent_id": None}, "f": ["patent_id", "patent_abstract"], "o": {"size": 1000}, # API's max return }三个关键字段含义如下:
| 字段 | 作用 | 说明 |
|---|---|---|
q | 查询条件 | 按patent_id精确匹配专利号,运行时被填充为用户传入的专利号列表 |
f | 返回字段 | 只请求patent_id与patent_abstract,避免多余负载 |
o | 输出选项 | size固定为 1000,即 API 单次返回的最大条数上限 |
请求通过POST发送到 Patentsview 官方接口https://search.patentsview.org/api/v1/patent(base.py 第 13 行),请求体为上述 JSON,请求头携带X-Api-Key。
4.3 load_data:参数校验与限流重试
load_data接收List[str]形式的专利号列表,返回List[Document]。其执行流程包含两处关键校验:
校验一:空列表拦截(base.py 第 55-56 行)
if not patent_number: raise ValueError("Please input patent number")校验二:数量上限拦截(base.py 第 58-61 行)
if len(patent_number) > 1000: raise ValueError( f"List patent number size is too large: {len(patent_number)} elements. Maximum allowed is 1000." )超过 1000 个专利号会直接抛出ValueError,该行为同样有测试覆盖(test_load_data_overload,见测试文件第 50-55 行)。这是因为 API 单次返回上限即为 1000 条,超大列表只会导致结果被截断,因此提前拒绝。
限流重试机制:当响应状态码为429(Too Many Requests)时,Reader 会读取响应头中的Retry-After字段(默认回退为 60 秒),等待后自动重发一次请求(base.py 第 66-70 行)。这意味着在调用频率较高的场景下,Reader 具备基础的自我保护能力,但仍建议你在应用层自行控制请求节奏。
响应解析:请求成功后(状态码 200),从响应 JSON 的patents列表中逐条提取数据,为每个专利构造一个Document(base.py 第 72-84 行):
Document.text:patent_abstract字段(专利摘要文本);Document.metadata:{"patent_id": ...}(专利号),可后续用于过滤与溯源。
测试中的模拟响应mock_json_response展示了标准响应结构(测试文件第 19-36 行):
{ "error": false, "count": 2, "total_hits": 2, "patents": [ {"patent_id": "8848839", "patent_abstract": "Four score and seven years ago..."}, {"patent_id": "10452978", "patent_abstract": "When in the course of human events..."} ] }其他非 200 状态码(如 401 鉴权失败、5xx 服务端错误)会抛出Exception("Request failed with status code: ...")。
五、实用技巧与注意事项
- 控制批量大小:受 API 单次 1000 条上限约束,若需加载超过 1000 个专利,建议分片调用
load_data后合并结果列表。 - 复用 Reader 实例:
load_data内部会更新预置请求体中的q.patent_id,可多次调用,但请注意并发场景下共享实例存在请求体被覆盖的潜在风险,必要时为每个批次创建新实例。 - 结合 metadata 使用:
patent_id已写入Document.metadata,可在构建索引后借助MetadataFilters按专利号精确筛选检索范围。 - 环境变量优先:官方推荐通过
PATENTSVIEW_API_KEY环境变量注入密钥,避免在代码或版本库中硬编码;测试与 CI 环境可借助 mock 模拟请求,具体可参考 test_readers_patentsview.py 中基于unittest.mock.patch的写法。
六、小结
PatentsviewReader是一个轻量、聚焦的数据连接器:输入一组专利号,输出可直接用于 LlamaIndex 索引的专利摘要Document列表。其核心价值在于把专利数据接入 RAG 管线的复杂度收敛为一次load_data调用,同时通过参数校验、限流重试与标准BaseReader接口,保证了在 LlamaIndex 生态中的可靠性与兼容性。对于需要以专利文献为知识库构建问答、摘要或分析类应用的开发者,这是接入官方数据源的直接路径。
【免费下载链接】llama_indexLlamaIndex is the leading document agent and OCR platform项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考