Replies: 1 comment
-
|
期待,改善文本文件的加载和解析对科研学习或者文本型工作很有帮助。 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
1. 摘要 (Summary)
本 RFC 提议正式确立
@lobechat/file-loaders包作为 LobeChat 项目中处理本地文件加载和内容提取的核心模块。该包提供了一个统一的loadFile函数,能够根据文件扩展名自动识别并处理多种常见文件格式(文本、PDF、Word、Excel、PowerPoint 等),将文件内容及其元数据转换为标准化的FileDocument和DocumentPage对象结构,为后续的文件预览、内容分析、知识库构建等功能提供一致的数据源。2. 动机 (Motivation)
随着 LobeChat 功能的扩展,特别是涉及到用户上传文件进行 RAG(检索增强生成)或内容预览时,需要一种健壮、可扩展的方式来处理各种不同的文件格式。直接在应用层处理这些格式会导致代码重复、依赖管理复杂以及难以维护。
之前在做知识库的时候曾实现过一个基于 langchain 的模块,但是那个模块是直接做了文件读取 -> 分块的全流程。而随着桌面端的读文件,与大家对知识库直接读文件的诉求越发强烈,因此我们有必要单独抽取一个模块来做相应实现。
@lobechat/file-loaders的目标是:3. 详细设计 (Detailed Design)
3.1 核心概念
loadFile(filePath: string): Promise<FileDocument>作为所有文件加载操作的唯一入口点。loadFile内部根据filePath的扩展名,动态选择合适的加载器 (loader) 来处理文件。FileDocument接口的对象。FileDocument包含文件级元数据和一个DocumentPage[]数组,其中每个DocumentPage代表文件的一个逻辑部分(如 PDF 页面、Word 段落、Excel 工作表、PPT 幻灯片或纯文本块)及其内容和元数据。3.2 架构
3.3 数据结构
主要的输出数据结构是
FileDocument和DocumentPage,其详细字段已在README.md中定义,关键字段包括:FileDocument:filename,fileType,source,content(聚合内容),pages(DocumentPage 数组),metadata(文件级元数据如作者、标题、创建/修改时间),totalCharCount,totalLineCount。DocumentPage:pageContent(页面/块内容),metadata(页面/块级元数据如页码、工作表名、幻灯片编号、错误信息),charCount,lineCount。3.4 支持的格式与依赖
根据
loaders目录结构和package.json,当前支持:fs模块,通过isTextReadableFile判断。pdfjs-distmammothxlsx(可能通过officeparser封装)officeparser@xmldom/xmldom。3.5 错误处理
loadFile抛出异常或返回带有metadata.error的FileDocument。DocumentPage的metadata.error字段中,尽量保证加载过程的健壮性。4. 使用方式 (Usage)
5. 备选方案考虑 (Alternatives Considered)
@lobechat/file-loaders部分依赖了@langchain/community(可能用于某些加载器或类型定义),但创建一个独立的、更贴合 LobeChat 数据结构和需求的封装层,可以提供更好的控制和定制化,并避免强耦合 Langchain 的特定实现。本项目选择了构建一个专用包,以更好地控制依赖、接口和错误处理逻辑,同时借鉴了 Langchain 的Document概念。当前方案通过模块化加载器和统一接口,在灵活性、可维护性和控制力之间取得了较好的平衡。
6. 未来考虑 (Future Considerations)
.epub,.odt,.rtf等。loadFile或创建类似接口以支持从 URL 加载内容。实现进展
Beta Was this translation helpful? Give feedback.
All reactions