Skip to main content

lc_rag/loaders/
mod.rs

1// src/retrieval/loaders/mod.rs
2//! 文档加载器实现
3//!
4//! 提供从不同格式文件加载文档的功能,包括 PDF、CSV、Text、JSON、Markdown、HTML 等。
5//! v0.4.1 新增: WebScraper、Sitemap、Docx 加载器。
6
7mod csv;
8mod docx;
9mod html;
10mod json;
11mod markdown;
12mod pdf;
13mod sitemap;
14mod text;
15mod web_scraper;
16
17pub use csv::CSVLoader;
18pub use docx::DocxLoader;
19pub use html::HTMLLoader;
20pub use json::JSONLoader;
21pub use markdown::MarkdownLoader;
22pub use pdf::PDFLoader;
23pub use sitemap::SitemapLoader;
24pub use text::TextLoader;
25pub use web_scraper::WebScraperLoader;
26
27use async_trait::async_trait;
28use lc_vector_stores::Document;
29
30/// 文档加载器错误类型
31#[derive(Debug, thiserror::Error)]
32#[non_exhaustive]
33pub enum LoaderError {
34    /// IO 错误
35    #[error("IO error: {0}")]
36    IoError(#[from] std::io::Error),
37
38    /// CSV 解析错误
39    #[error("CSV parse error: {0}")]
40    CsvError(String),
41
42    /// PDF 解析错误
43    #[error("PDF parse error: {0}")]
44    PdfError(String),
45
46    /// JSON 解析错误
47    #[error("JSON parse error: {0}")]
48    JsonError(String),
49
50    /// 未知错误
51    #[error("unknown error: {0}")]
52    Other(String),
53}
54
55impl From<pdf_extract::Error> for LoaderError {
56    fn from(err: pdf_extract::Error) -> Self {
57        LoaderError::PdfError(err.to_string())
58    }
59}
60
61/// 文档加载器 trait
62///
63/// 定义从源加载文档的通用接口。
64#[async_trait]
65pub trait DocumentLoader: Send + Sync {
66    /// 从源加载文档
67    ///
68    /// # 返回
69    /// 加载的文档列表
70    async fn load(&self) -> Result<Vec<Document>, LoaderError>;
71}