之前做个几个大模型的应用,都是使用Python语言,后来有一个项目使用了Java,并使用了Spring AI框架。随着Spring AI不断地完善,最近它发布了1.0正式版,意味着它已经能很好的作为企业级生产环境的使用。对于Java开发者来说真是一个福音,其功能已经能满足基于大模型开发企业级应用。借着这次机会,给大家分享一下Spring AI框架。
注意:由于框架不同版本改造会有些使用的不同,因此本次系列中使用基本框架是 Spring AI-1.0.0,JDK版本使用的是19,Spring-AI-Alibaba-1.0.0.3-SNAPSHOT。
代码参考: https://github.com/forever1986/springai-study
在《Spring AI 系列之十四 - RAG-ETL之一》中讲了RAG中文档读取部分,但是很遗憾Spring AI对于文档的扩展支持其实远远不如LangChain4J,这也是Spring AI的遗憾。不过好在Spring AI Alibaba弥补了这一部分的空缺,在Spring AI Alibaba中,对于文档读取已经形成了一个较好的生态。这一章将讲一下Spring AI Alibaba的DocumentReader。
1 DocumentReader 扩展
1.1 社区实现的扩展
Spring AI Alibaba 官方社区提供了很多 DocumentReader 插件扩展实现,在 RAG 场景中,当需要集成不同来源、不同格式的私域数据时,这些插件会非常有用,它可以帮助开发者快速的读取数据,免去重复开发带来的麻烦。
以下是截止到目前为止实现的一些解析插件(注意:版本号截止到目前为止,亲测有效,另外有些插件只支持了Spring-Boot-2.X版本,需要在使用时注意):
| 名称 | 说明 | Maven依赖 | 版本 |
|---|---|---|---|
| ArxivDocumentReader | arXiv学术论文阅读器,支持论文元数据提取、PDF下载和内容解析 | spring-ai-alibaba-starter-document-reader-arxiv | 1.0.0.3-SNAPSHOT |
| BilibiliDocumentReader | B站视频内容解析器,支持视频信息提取和字幕抓取 | spring-ai-alibaba-starter-document-reader-bilibili | 1.0.0.3-SNAPSHOT |
| ChatGptDataDocumentReader | ChatGPT对话记录解析器,支持导出数据的结构化处理 | spring-ai-alibaba-starter-document-reader-chatgpt-data | 1.0.0.3-SNAPSHOT |
| EmailDocumentReader | 邮件文档解析器,支持EML/MSG格式,可提取正文、附件和元数据 | spring-ai-alibaba-starter-document-reader-email | 1.0.0.3-SNAPSHOT |
| FeiShuDocumentReader | 飞书文档库读取器,可用在 RAG 场景中,将飞书中的文档源读取并写入向量数据库 | spring-ai-alibaba-starter-document-reader-feishu | 0.0.1-SNAPSHOT |
| GitHubDocumentReader | GitHub仓库文档解析器,支持Markdown/README等格式抓取 | spring-ai-alibaba-starter-document-reader-github | 1.0.0.3-SNAPSHOT |
| GitLabDocumentReader | GitLab仓库内容读取器,支持Issue和代码仓库文档解析 | spring-ai-alibaba-starter-document-reader-gitlab | 1.0.0.3-SNAPSHOT |
| MongoDBDocumentReader | MongoDB数据库连接器,支持集合文档的批量读取和查询 | spring-ai-alibaba-starter-document-reader-mongodb | 1.0.0.3-SNAPSHOT |
| MySQLDocumentReader | MySQL数据库阅读器,支持SQL查询结果转换为文档 | spring-ai-alibaba-starter-document-reader-mysql | 1.0.0.3-SNAPSHOT |
| NotionDocumentReader | Notion知识库集成工具,支持页面内容和块级元素解析 | spring-ai-alibaba-starter-document-reader-notion | 1.0.0.3-SNAPSHOT |
| TencentCOSDocumentReader | 腾讯云对象存储集成工具,支持COS文档内容批量处理 | spring-ai-alibaba-starter-document-reader-tencent-cos | 1.0.0.3-SNAPSHOT |
| YouTubeDocumentReader | YouTube视频内容解析器,支持视频信息和字幕提取 | spring-ai-alibaba-starter-document-reader-youtube | 1.0.0.3-SNAPSHOT |
| ObsidianDocumentReader | Obsidian笔记解析器,支持Markdown文件和双向链接处理 | spring-ai-alibaba-starter-document-reader-obsidian | 1.0.0.3-SNAPSHOT |
| HuggingFaceFSDocumentReader | HuggingFace数据集文件阅读器,支持JSONL格式解析 | spring-ai-alibaba-starter-document-reader-huggingface-fs | 1.0.0.3-SNAPSHOT |
| MboxDocumentReader | Mbox邮箱文件解析器,支持多邮件内容提取 | spring-ai-alibaba-starter-document-reader-mbox | 1.0.0.3-SNAPSHOT |
| GitbookDocumentReader | Gitbook文档阅读器,支持API方式获取书籍内容 | spring-ai-alibaba-starter-document-reader-gitbook | 1.0.0.3-SNAPSHOT |
| ElasticsearchDocumentReader | Elasticsearch文档连接器,支持单节点/集群模式、HTTPS安全连接和基础认证,提供文档检索、ID查询和自定义搜索功能 | spring-ai-alibaba-starter-document-reader-es | 1.0.0-M6.1 |
| YuQueDocumentReader | 语雀知识库集成工具,支持通过API获取文档内容并保留源文件路径信息 | spring-ai-alibaba-starter-document-reader-yuque | 1.0.0.3-SNAPSHOT |
| OneNoteDocumentReader | OneNote文档解析器,支持通过Microsoft Graph API获取笔记本内容和页面结构 | spring-ai-alibaba-starter-document-reader-onenote | 1.0.0.3-SNAPSHOT |
| GptRepoDocumentReader | Git仓库分析工具,支持代码库全量读取、文件过滤和结构化文档生成 | spring-ai-alibaba-starter-document-reader-gpt-repo | 1.0.0.3-SNAPSHOT |
1.2 示例演示
代码参考lesson28子模块
示例说明:使用ArxivDocumentReader读取Arxiv网站的论文,并解析为document
1)新建lesson28子模块,其pom引入如下:
<dependencies>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-document-reader-arxiv</artifactId>
</dependency>
</dependencies>
2)创建ArxivReaderTest 作为测试类:
import com.alibaba.cloud.ai.reader.arxiv.ArxivDocumentReader;
import org.springframework.ai.document.Document;
import java.util.List;
public class ArxivReaderTest {
public static void main(String[] args) {
//两个参数,第一个是查询条件,第二个是返回文档数量
ArxivDocumentReader arxivDocumentReader = new ArxivDocumentReader("Batch Normalization--1502.03167v3", 1);
List<Document> documents = arxivDocumentReader.get();
int i = 0;
for (Document document : documents){
System.out.println("--------"+(++i)+"--------");
System.out.println(document.getMetadata().keySet());
System.out.println(document.getText());
}
System.out.println("======== 总结 ============");
System.out.println(arxivDocumentReader.getSummaries());
}
}
3)演示效果
首先运行过程中,可以在Temp目录(Windows系统)下找到已经下载的pdf(程序运行完会自动删除)

其次,在控制台可以看到已经解析好了document文档

说明:从示例中可以看到,其DocumentReader的使用非常简单,并且Spring AI Alibaba已经实现了很多类型文档读取,对于使用者来说非常方便,这里就不一一讲解。
结语:本章讲解了Spring AI Alibaba的DocumentReader生态,可以看出在Spring AI的基础上,Spring AI Alibaba扩展了很多插件,这样也是丰富了Spring AI的生态,对于java用户来说是一个很好的福音。
Spring AI系列上一章:《Spring AI 系列之三十六 - Spring AI Alibaba-nl2sql》
Spring AI系列下一章:《Spring AI 系列之三十八 - Spring AI Alibaba-Tool Calling》
242

被折叠的 条评论
为什么被折叠?



