使用 LlamaIndex ReadwiseReader 将阅读高亮数据导入 RAG 流水线【免费下载链接】llama_indexLlamaIndex is the leading document agent and OCR platform项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index本指南围绕 LlamaIndex 官方集成包llama-index-readers-readwise展开介绍如何通过 ReadwiseReader 读取 Readwise 平台上的全部高亮笔记highlights并将其转化为 LlamaIndex 的Document后接入索引与问答流程。读完本文你将掌握安装方式、API Token 配置、全量加载与增量同步两种加载策略以及该 Reader 底层基于 Readwise Export API 的分页实现原理。一、ReadwiseReader 是什么Readwise 是一款聚合阅读工具可以把来自网页文章、电子书epub、PDF、Kindle、YouTube 等来源的高亮内容统一收集起来。ReadwiseReader是 LlamaIndex 官方提供的数据加载器Loader它调用 Readwise 的 Export API 将上述来源的高亮导出为纯文本再交给 LLM 构建索引与检索问答。该 Reader 的核心实现在仓库 base.py 中模块结构如下llama-index-integrations/readers/llama-index-readers-readwise/ ├── llama_index/readers/readwise/ │ ├── __init__.py # 导出 ReadwiseReader │ └── base.py # Reader 核心实现 ├── tests/ │ └── test_readers_readwise.py ├── README.md # 官方使用说明 └── pyproject.tomlReadwiseReader继承自 LlamaIndex Core 的 BaseReader其职责是把外部数据源读成统一的Document列表因此它天然可以与其他 LlamaIndex 组件VectorStoreIndex、查询引擎等无缝衔接。二、安装Readwise Reader 作为独立集成包发布执行pip install llama-index-readers-readwise从 pyproject.toml 可以看到其运行依赖为llama-index-core0.13.0,0.15并要求 Python 版本3.10,4.0。也就是说安装该包时 LlamaIndex Core 会作为依赖一并安装。三、获取 Readwise API Token使用前需要先拿到 Readwise 的访问令牌登录 Readwise 账号在账号设置页面生成 Access Token官方入口为 readwise.io/access_token将 Token 写入环境变量READWISE_API_KEY或在代码中直接传入。推荐将 Token 放入环境变量避免硬编码到源码中export READWISE_API_KEY你的_token四、基本用法加载全部高亮并构建索引官方 README 给出的标准用法如下import os from llama_index.core import VectorStoreIndex from llama_index.readers.readwise import ReadwiseReader token os.getenv(READWISE_API_KEY) loader ReadwiseReader(api_keytoken) documents loader.load_data() index VectorStoreIndex.from_documents(documents) index.query(What was the paper Attention is all you need about?)关键步骤拆解实例化ReadwiseReader(api_keytoken)保存 API Token供后续请求使用加载loader.load_data()调用 Readwise Export API将返回结果包装为Document列表建索引VectorStoreIndex.from_documents(documents)完成切分与向量化问答index.query(...)基于已建索引执行检索增强生成RAG。五、增量加载只同步指定时间之后的高亮Readwise 的高亮会随时间不断累积。每次全量拉取既慢又浪费 Token官方为此提供了updated_after参数只加载某时间点之后更新过的高亮非常适合用来定时增量更新索引。import os import datetime from llama_index.core import VectorStoreIndex from llama_index.readers.readwise import ReadwiseReader token os.getenv(READWISE_API_KEY) loader ReadwiseReader(api_keytoken) # 只取最近 7 天更新过的高亮 seven_days_ago datetime.datetime.now() - datetime.timedelta(days7) documents loader.load_data(updated_afterseven_days_ago) index VectorStoreIndex.from_documents(documents) index.query(What has Elon Musk done this time?)updated_after是datetime.datetime类型。在实践中你可以把上次成功同步的时间记录下来下次同步时传入实现真正的增量更新# 记录上次同步时间 last_sync datetime.datetime.now() - datetime.timedelta(days7) docs loader.load_data(updated_afterlast_sync) # 同步完成后更新游标 cursor datetime.datetime.now()六、底层实现解析Export API 的分页拉取从 base.py 的源码可以看到加载过程由模块级辅助函数_get_readwise_data完成其核心逻辑如下def _get_readwise_data(api_key: str, updated_after: Optional[datetime.datetime] None): result [] next_page None while True: response requests.get( urlhttps://readwise.io/api/v2/export/, params{ pageCursor: next_page, updatedAfter: updated_after.isoformat() if updated_after else None, }, headers{Authorization: fToken {api_key}}, ) response.raise_for_status() result.extend(response.json()[results]) next_page response.json().get(nextPageCursor) if not next_page: break return result几个值得注意的实现细节认证方式请求头使用Authorization: Token {api_key}即 Readwise 的 Token 认证分页机制通过pageCursor请求参数传入当前游标响应中读取nextPageCursor判断是否还有下一页当nextPageCursor为空时终止循环。这意味着即使高亮数量很多也会全量拉取完毕时间过滤updatedAfter参数接受 ISO 8601 格式的时间字符串updated_after.isoformat()由 Readwise 服务端按更新时间过滤避免把全量数据下载到本地再过滤错误处理response.raise_for_status()保证在请求失败如 Token 无效、触发限流时直接抛出异常不会静默返回部分数据。随后load_data将每条高亮记录序列化为 JSON 字符串并包装成Documentreturn [Document(textjson.dumps(d)) for d in readwise_response]也就是说每条高亮对应一个Document其正文是整条高亮记录含标题、作者、来源 URL、高亮文本、标签等字段的 JSON 序列化字符串。这样的设计保留了原始结构化信息但也意味着后续切分NodeParser会直接作用在这段 JSON 文本上对高亮内容做相似度检索时效果取决于原始字段的语义密度。七、单元测试验证仓库在 tests/test_readers_readwise.py 中提供了针对该 Reader 的测试验证其类继承关系from llama_index.core.readers.base import BaseReader from llama_index.readers.readwise import ReadwiseReader def test_class(): names_of_base_classes [b.__name__ for b in ReadwiseReader.__mro__] assert BaseReader.__name__ in names_of_base_classes该测试通过__mro__方法解析顺序断言ReadwiseReader确实是BaseReader的子类从侧面印证了它与 LlamaIndex Core 数据读取抽象的一致性任何接受BaseReader的 LlamaIndex 流程都可以直接替换为ReadwiseReader。八、应用场景与注意事项典型场景个人知识库PKM检索把 Kindle、网页、PDF 中的高亮汇总后建立索引用自然语言提问我读过的某本书里对 X 是怎么说的定期增量同步配合updated_after实现定时任务只同步新增/变更的高亮控制 Token 消耗与索引体积多来源聚合Readwise 天然聚合了多种阅读来源一次拉取即可覆盖文章、书籍、视频等多种内容形态。注意事项API Token 安全Token 应通过环境变量或密钥管理服务注入不要提交到版本库数据量全量加载会一次性拉取所有历史高亮首次建索引耗时较长建议先用updated_after限定范围Document 粒度每个Document是一条高亮记录的 JSON 序列化文本若高亮数量极大生成的 Document 数量也会很多可结合 LlamaIndex 的文档后处理如去重、Metadata 提取优化索引质量网络依赖Reader 运行时需要访问 Readwise 的api/v2/export/端点离线环境无法使用。九、参考文件集成包说明文档README.mdReader 源码实现base.py模块导出init.py单元测试test_readers_readwise.pyAPI 参考索引页docs/api_reference/api_reference/readers/readwise.md【免费下载链接】llama_indexLlamaIndex is the leading document agent and OCR platform项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考