LlamaIndex Pebblo 安全数据加载器PebbloSafeReader实战指南为 RAG 数据摄入增加合规与敏感信息可见性【免费下载链接】llama_indexLlamaIndex is the leading document agent and OCR platform项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index导读在将企业数据送入 Gen-AI / RAG 应用之前组织往往需要回答两个问题这份数据里包含哪些主题Topic是否存在需要合规管控的敏感实体Entity本文介绍的PebbloSafeReader是 LlamaIndex 官方集成中的一个数据加载器包装器它能在不改动现有加载逻辑的前提下把每一次文档加载行为上报给 Pebblo Daemon从而获得数据内容层面的深度可见性。读完本文你将掌握PebbloSafeReader的安装、接入、参数含义、底层上报协议app/discover 与 loader/doc 两条链路以及它支持的加载器类型与容错行为并了解对应的源码与测试验证。一、Pebblo 是什么两个组件协同工作Pebblo 是一套让开发者安全加载数据、放心把 Gen-AI 应用推向生产的框架核心目标是降低组织在合规与安全层面的顾虑。Pebblo 由两个组件构成Pebblo Safe DocumentReader for Llama即本文的PebbloSafeReader以包装器wrapper形式包裹 LlamaIndex 的文档加载器负责采集与上报数据加载信息。Pebblo Daemon运行在服务端的守护进程接收上报数据识别其中的语义主题与实体并在 UI 或 PDF 报告中汇总呈现。本仓库中对应集成位于 llama-index-integrations/readers/llama-index-readers-pebbloAPI 参考文档入口为 docs/api_reference/api_reference/readers/pebblo.md。值得注意的一个细节是API 参考文档与 pyproject.toml 中[tool.llamahub.class_authors]记录的名字均为PebbloReader而实际导出的类名为PebbloSafeReader见 llama_index/readers/pebblo/init.py使用时应以PebbloSafeReader为准。二、核心思想包装器模式实现零侵入接入PebbloSafeReader继承自BaseReader构造时接收一个已有的 LlamaIndex 加载器如CSVReader并代理其load_data调用。整个过程可以概括为两条链路应用发现app/discover在PebbloSafeReader初始化时自动把应用元信息应用名、所有者、运行时、框架版本等POST 到 Pebblo Daemon 的/v1/app/discover接口文档上报loader/doc在load_data执行完毕后把每个文档的文本内容、来源路径、文件所有者、内容大小等组装成 payloadPOST 到/v1/loader/doc接口并标记loading_end。原生的加载调用reader.load_data(**kwargs)结果原样返回因此业务代码几乎无需改动即可接入。三、安装与快速开始1. 安装pip install llama-index-readers-pebblo根据 pyproject.toml该包要求python 3.10, 4.0运行时依赖包括llama-index-core0.13.0,0.15llama-index-embeddings-openai0.6.0,0.7llama-index-readers-file2. 原生加载 vs Pebblo 增强加载以读取一个 CSV 文件为例原生写法见 README.mdfrom pathlib import Path from llama_index.readers.file import CSVReader reader CSVReader() documents reader.load_data(filePath(data/corp_sens_data.csv)) print(documents)接入 Pebblo 只需几行改动from pathlib import Path from llama_index.readers.pebblo import PebbloSafeReader from llama_index.readers.file import CSVReader reader CSVReader() pebblo_reader PebbloSafeReader( reader, nameacme-corp-rag-1, # 应用名称必填 ownerJoe Smith, # 所有者可选 descriptionSupport productivity RAG application, # 应用描述可选 ) documents pebblo_reader.load_data(filePath(data/corp_sens_data.csv))3. 启动 Pebblo DaemonPebbloSafeReader默认向http://localhost:8000上报数据因此使用前需要在本机或指定地址启动 Pebblo Daemon 服务并保持该地址可达。四、构造函数与参数详解PebbloSafeReader的构造函数签名如下见 base.pydef __init__( self, llama_reader: BaseReader, name: str, owner: str , description: str , ):参数类型必填说明llama_readerBaseReader是被包装的 LlamaIndex 文档加载器实例namestr是应用名称缺失或非字符串会直接抛出NameError源码第 42-43 行校验ownerstr否应用所有者默认为空字符串descriptionstr否应用描述默认为空字符串初始化时还会做以下事情生成唯一load_iduuid.uuid4()通过反射获取被包装 reader 的类名reader_name并据此判定数据源类型source_type自动调用_send_discover()完成应用发现上报。load_data(**kwargs)的行为见 base.py调用被包装 reader 的load_data(**kwargs)获取Document列表调用_send_reader_doc(loading_endTrue, **kwargs)上报文档原样返回文档列表因此返回值与原生加载器完全一致。五、底层工作流两条上报链路与 payload 结构1. 应用发现/v1/app/discover_send_discover()见 base.py将App模型序列化为 JSON 后 POST 到{CLASSIFIER_URL}/v1/app/discover。App模型定义在 utility.py字段包括字段说明name应用名称owner应用所有者description应用描述load_id本次加载实例的唯一 IDruntime运行时信息Runtime模型framework框架信息Framework模型name 为 Llama Pebblo Readerversion 来自包元数据plugin_version插件版本PLUGIN_VERSION 0.1.0见 utility.pyRuntime模型utility.py通过get_runtime()采集主机名host、当前工作目录path、platform、OS 名与版本、Python 版本、本机 IPget_ip()通过socket.gethostbyname获取。在 macOSDarwin上type与runtime字段会被标记为desktop/Mac OSX。2. 文档上报/v1/loader/doc_send_reader_doc()见 base.py在每次load_data后被调用其 payload 中每个文档包含doc文档纯文本内容以MetadataMode.NONE提取不含元数据source_path来源路径通过get_reader_full_path解析为绝对路径last_modified文档元数据中的最后修改时间若存在file_owner本地文件所有者通过pwd.getpwuid(os.stat(path).st_uid).pw_name解析失败时为unknown见 base.pysource_path_size源文件/目录大小按字节计算目录会递归累加且跳过符号链接见 base.py。同时 payload 顶层包含应用名、所有者、plugin_version、load_id、loader_details加载器类名、源路径、源类型、源大小、loading_end布尔标志最后一次上报为true并附带source_aggr_size累计大小以及source_owner。文档内容大小通过calculate_content_size()按 UTF-8 编码后的字节数计算见 base.py。3. 数据源路径解析get_reader_full_path()见 utility.py按以下优先级解析来源路径SimpleDirectoryReader取实例属性input_dir否则优先取load_data关键字参数中的file其次取input_file网络路径含://、绝对路径、unknown/-/in-memory等特殊值原样返回其余相对路径通过pathlib.Path.resolve()转为绝对路径。六、支持的数据源类型file / dir / in-memoryutility.py 中定义了读者类型映射READER_TYPE_MAPPING类型支持的加载器fileCSVReader、DocxReader、PDFReaderdirSimpleDirectoryReaderin-memory当前为空get_reader_type()会根据被包装 reader 的类名返回上述类型之一无法识别时返回unknown。也就是说目前开箱即用支持 CSV、WordDocx、PDF 单文件加载以及 SimpleDirectoryReader 的目录加载使用其他加载器时仍可正常工作但source_type会被标记为unknown。七、可配置项与容错行为1. 服务地址环境变量CLASSIFIER_URL os.getenv(PEBBLO_CLASSIFIER_URL, http://localhost:8000)上报地址完全由环境变量PEBBLO_CLASSIFIER_URL控制默认为http://localhost:8000。在测试或 CI 环境中可通过设置该变量将上报指向模拟服务。2. 容错与日志两次上报均使用requests.post且timeout20秒响应码为200 OK或502 BAD_GATEWAY时视为成功502被容忍通常是 Pebblo Daemon 上游分类服务不可用的表现其余状态码仅记录logger.warning任何requests.exceptions.RequestException或未预期异常都会被捕获并降级为 warning 日志不会中断文档加载流程——也就是说即使 Pebblo Daemon 不可达你的 RAG 应用也能继续运行。八、测试验证包装器行为有据可查集成包的测试文件 tests/test_readers_pebblo.py 使用pytest-mock对requests.get/requests.post进行打桩验证了以下行为PebbloSafeReader确实继承自BaseReadertest_class包装CSVReader后空 CSV 文件与正常 CSV 文件的load_data均能正确返回文本内容与元数据filename、extension例如正常文件解析结果为column1, column2, column3\nvalue1, value2, value3\nvalue4, value5, value6见test_csv_loader_load_valid_data。这从侧面证明包装器对原加载器结果透明文档内容与元数据不受上报逻辑影响。九、使用注意事项必填参数校验name缺失或非字符串会立即抛出NameError请务必在初始化时提供有效的应用名。Daemon 可达性虽然上报失败不影响加载但若要获得主题/实体识别能力需确保PEBBLO_CLASSIFIER_URL指向已启动的 Pebblo Daemon。内容上报/v1/loader/doc会上报文档的纯文本内容与来源路径涉及敏感数据的环境请确保 Daemon 部署在受信任的网络内。一次性加载语义load_id在构造时生成loading_end在每次load_data后置为true因此该包装器适合一次加载一批文档的使用模式。通过 docs/api_reference/api_reference/readers/pebblo.md 可以继续查阅该模块的完整 API 索引更详细的安装与示例说明见 README.md源码实现见 base.py 与 utility.py。【免费下载链接】llama_indexLlamaIndex is the leading document agent and OCR platform项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考