spring-ai-alibaba提供了许多读取外部文档的包,例如语雀、飞书、notion笔记等

这些包以spring-ai-alibaba-starter-document-reader开头,实现了spring-ai的DocumentReader接口

最简单样例

我们一起来看一个最简单的例子,以spring-ai-alibaba-starter-document-reader-bilibili为例

使用分为三步

第一步:引入jar包

		<dependency>
			<groupId>com.alibaba.cloud.ai</groupId>
			<artifactId>spring-ai-alibaba-starter-document-reader-bilibili</artifactId>
		</dependency>

 第二步:申请权限并添加配置

这一步某些平台可以省略,比如样例的bilibili,无需申请api-key之类的令牌即可访问

第三步:调用代码

        BilibiliDocumentReader reader = new BilibiliDocumentReader("BV1ErERzUEqg");
        List<Document> documents = reader.get();
        System.out.println(documents.size());
        System.out.println(documents.get(0).getText());
        System.out.println(documents.get(0).getMetadata().get("title"));

这里我是读取的B站的全网最最全的AI推荐!历时半年,我们选出了Top100【全网首发】_哔哩哔哩_bilibili,在其网址中找到BV开头的那串字符(这是视频的id),传入BilibiliDocumentReader即可实现读取。

ps:BilibiliDocumentReader并不会读取视频中的语音或字幕,读取的主要是标题和下方的文字描述。

进阶知识

内部原理

spring-ai-alibaba的document-reader包中,一般包含2部分:

META-INF:元信息,主要是pom文件引入外部依赖

java实现类:实现类数量不同jar包不一样,一般为1-3个,主要有以下三个角色

        1)代表访问权限的类:接收用户api-key或access-token等身份识别信息,确保用户有权限访问平台数据

        2)代表资源路径的类:接收资源位置,如本地路径、网址等,用来访问目标资源

        3)代表解析器的类:根据目标资源的类型实现文档解析,如html解析、xml解析、markdown解析等

整体流程一般是根据访问权限和资源路径拼装请求,得到回复后使用对应的解析器,解析为Document格式的结果。

DocumentParser

上面提到的第三种角色,代表解析器的类,在spring-ai-alibaba中被提炼为一个接口:DocumentParser

public interface DocumentParser {

	List<Document> parse(InputStream inputStream);

}

DocumentParser接收一个输入流,输出Document列表

DocumentParser与DocumentReader接口不同,DocumentParser不关心数据如何来,只关心拿到数据后,如何转换为Document

除了spring-ai-alibaba-core中包含的JsonDocumentParser和TextDocumentParser,spring-ai-alibaba还提供了许多document-parser的扩展包,如Markdown、pdf等(具体可以参考spring-ai-alibaba 1.0.0.2 学习(二)——jar包盘点-CSDN博客

DocumentParser可以理解为DocumentReader接口实现过程中的一个子步骤,主要是为了将文档平台和文档格式进行解耦

举个例子,在语雀平台有markdown格式的文档,在notion笔记中也有markdown格式的文档,那么在接入各个平台的markdown格式文档时,为了避免重复造轮子,那么就将markdown格式文档转换成Document的代码提取为MarkdownDocumentParser(spring-ai-alibaba-starter-document-parser-markdown),那么在各个平台的DocumentReader的构造函数中传入同一个MarkdownDocumentParser即可

换个角度,语雀平台有markdown格式的文档,也可能有yaml格式或者其他格式的文档,那么YuQueDocumentReader的构造函数只需要传入一个DocumentParser,即可兼容各种格式文档的解析。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐