当前位置: 首页 > news >正文

Spring AI 和 LangChain4j 中文档处理功能对比

前面几篇文章分别介绍了 Spring AI 和 LangChain4j 在 RAG 文档处理各环节的支持——文档读取、解析、分段、清洗、元数据加工。本文将这些知识点汇总到一个完整的对比框架中,以《仙逆》知识库构建为参考场景,帮助你在项目起始阶段快速判断哪个框架更适合团队的技术栈和需求。


一、对比总览

阶段Spring AI(+Alibaba 社区)LangChain4j
文档读取本地文件 + 多种云服务/数据库 + 在线平台(Alibaba 社区提供)本地文件 + 云存储 + URL + Selenium
文档解析PDF / Markdown / JSON / Tika / Jsoup HTMLText / Tika / POI / PDFBox / Markdown / YAML
文本分段TokenTextSplitter / SentenceSplitter(Alibaba 递归分段)段落/行/句子/单词/字符/正则/递归(7+ 种)
文档清洗暂无内置实现HtmlToTextDocumentTransformer
元数据加工ContentFormatTransformer / KeywordMetadataEnricher / SummaryMetadataEnricherDocumentTransformer + TextSegmentTransformer(自定义钩子)

二、文档读取(Extract)

文档读取解决的是"数据从哪里来"——本地磁盘、云存储、数据库、在线平台等。两框架在数据源覆盖面上各有侧重。

2.1 Spring AI(+Alibaba 社区)

类别读取器Maven Artifact数据源示例
本地文件JsonReader/TextReader内置(spring-ai-commons.txt,.json
本地文件PagePdfDocumentReaderspring-ai-pdf-document-readerPDF 逐页读取
本地文件ParagraphPdfDocumentReaderspring-ai-pdf-document-readerPDF 段落读取
本地文件MarkdownDocumentReaderspring-ai-markdown-document-reader.md按标题/HR 分段
通用格式TikaDocumentReaderspring-ai-tika-document-readerPDF/DOCX/PPTX/HTML/XML/RTF/EPUB
HTMLJsoupDocumentReaderspring-ai-jsoup-document-readerCSS 选择器提取网页内容
云存储(Alibaba 社区)阿里云 OSS / 腾讯云 COSAlibaba Starter对象存储文件
数据库(Alibaba 社区)MySQL / MongoDB / Elasticsearch / SQLiteAlibaba Starter数据库查询结果
在线平台(Alibaba 社区)GitHub / GitLab / Notion / 语雀 / 飞书 / B站 / YouTube / ObsidianAlibaba Starter在线知识库或视频字幕

2.2 LangChain4j

类别加载器Maven Artifact数据源示例
本地文件FileSystemDocumentLoader内置(langchain4j核心)本地路径 + glob 匹配 + 递归遍历
本地文件ClassPathDocumentLoader内置(langchain4j核心)resources/目录
URLUrlDocumentLoader内置(langchain4j核心)HTTP/HTTPS URL
云存储AmazonS3DocumentLoaderlangchain4j-document-loader-amazon-s3AWS S3
云存储AzureBlobStorageDocumentLoaderlangchain4j-document-loader-azure-storage-blobAzure Blob
云存储GoogleCloudStorageDocumentLoaderlangchain4j-document-loader-google-cloud-storageGCS
云存储TencentCosDocumentLoaderlangchain4j-document-loader-tencent-cos腾讯云 COS
在线平台GitHubDocumentLoaderlangchain4j-document-loader-githubGitHub 仓库
动态网页SeleniumDocumentLoaderlangchain4j-document-loader-selenium需 JS 渲染的网页

2.3 读取覆盖面对比

数据源类型Spring AI 原生Spring AI AlibabaLangChain4j
本地文本/JSON✔️✔️✔️
PDF✔️✔️✔️
Markdown✔️✔️✔️
Office 文档(DOCX/PPTX/XLS)✔️(Tika)✔️✔️(POI/Tika)
HTML✔️(Jsoup)✔️✔️(Selenium 含动态)
Amazon S3✖️✖️✔️
Azure Blob✖️✖️✔️
Google Cloud Storage✖️✖️✔️
腾讯云 COS✖️✔️✔️
阿里云 OSS✖️✔️✖️
MySQL/MongoDB✖️✔️✖️
GitHub✖️✔️✔️
Notion / 语雀 / 飞书✖️✔️✖️
B站 / YouTube✖️✔️✖️

小结:Spring AI Alibaba 在中国本土生态(OSS/语雀/B站/飞书等)覆盖面最全;LangChain4j 在海外云存储(S3/Azure/GCS)和动态网页方面更强;Spring AI 原生较轻量,专注基础格式。

2.4 读取《仙逆》资料的代码对比

假设《仙逆》资料存储在三种位置:本地 Markdown、GitHub 仓库、腾讯云 COS。

Spring AI Alibaba 方案

// 读取本地 MarkdownMarkdownDocumentReader mdReader = new MarkdownDocumentReader( "classpath:仙逆/全文.md", MarkdownDocumentReaderConfig.builder() .withAdditionalMetadata("source", "本地归档") .build());// 读取 GitHub 仓库中的仙逆百科(Alibaba 社区插件)// GitHubDocumentReader githubReader = new GitHubDocumentReader(// "github.com/xianni-fans/wiki", "main", "docs/");// -> 自动获取仓库文件转为 Document 列表// 读取腾讯云 COS 中的仙逆音频字幕// TencentCosDocumentReader cosReader = ... // Alibaba 社区插件

LangChain4j 方案

// 读取本地 MarkdownDocument mdDoc= FileSystemDocumentLoader.loadDocument( Path.of("D:/仙逆/全文.md"), new MarkdownDocumentParser());// 读取 GitHub 仓库GitHubDocumentLoader ghLoader= GitHubDocumentLoader.builder() .gitHubToken(System.getenv("GITHUB_TOKEN")) .owner("xianni-fans") .repository("wiki") .branch("main") .build();List<Document> ghDocs = ghLoader.loadDocuments("docs/", new TextDocumentParser());// 读取腾讯云 COSTencentCosDocumentLoader cosLoader= TencentCosDocumentLoader.builder() .secretId(System.getenv("COS_SECRET_ID")) .secretKey(System.getenv("COS_SECRET_KEY")) .region("ap-beijing") .bucketName("xianni-rag") .build();List<Document> cosDocs = cosLoader.loadDocuments("novels/");

三、文档解析(Parse → Document 对象)

读取文件后,需要将原始字节/文本解析为统一的Document对象(包含 content + metadata)。

3.1 Spring AI

解析器/Reader支持格式核心特性
MarkdownDocumentReaderMarkdownHorizontalRuleCreateDocument按分割线分段;可配置是否包含代码块/引用
PagePdfDocumentReaderPDFpagesPerDocument控制每 N 页生成一个 Document
ParagraphPdfDocumentReaderPDF基于 PDF 目录(TOC)智能分段落
TikaDocumentReaderPDF/DOCX/PPTX/HTML 等自动检测格式,自动提取元数据
JsonReaderJSONjsonKeysToUse指定使用哪些 key 作为内容
JsoupDocumentReaderHTMLCSS 选择器提取内容块,可选提取链接 URL

3.2 LangChain4j

解析器支持格式核心特性
TextDocumentParser纯文本按字面内容解析
ApacheTikaDocumentParserPDF/DOCX/PPTX/HTML/XML 等与 Spring AI 的 TikaReader 功能一致
ApachePoiDocumentParserDOCX/XLSX/PPTX精确解析 Office 文档,返回每段或每幻灯片为 Document
ApachePdfBoxDocumentParserPDF按页解析,可选 includePageNumberInText
MarkdownDocumentParserMarkdown清理 Markdown 标记后提取纯文本
YamlDocumentParserYAML解析 YAML 文件

3.3 《仙逆》场景对比

源资料Spring AI 解析方式LangChain4j 解析方式
仙逆_二次化凡.mdMarkdownDocumentReader→ 按标题层级分段FileSystemDocumentLoader+MarkdownDocumentParser→ 整篇读入后由 Splitter 切分
修行体系.pdfPagePdfDocumentReader→ 每页一个 DocumentApachePdfBoxDocumentParser→ 每页一个 Document
人物卡片.docxTikaDocumentReader→ 自动检测ApachePoiDocumentParser→ 专门处理 DOCX

四、文本分段(Transform)

这是两框架差异最大的环节。

4.1 Spring AI

分段器原理关键参数
TokenTextSplitter按 Token 固定长度切分,通过边界搜索找最优断点defaultChunkSize/minChunkSizeChars/minChunkLengthToEmbed/maxNumChunks/keepSeparator
SentenceSplitter(Alibaba)按句子语义切分sentenceSplitLength/minSentenceLength/maxSentenceLength
RecursiveCharacterTextSplitter(Alibaba)递归尝试多个分隔符找最优断点chunkSize/chunkOverlap/ 自定义分隔符列表

4.2 LangChain4j

分段器原理关键参数
DocumentByParagraphSplitter按连续换行符(空行)切分maxSegmentSize/maxOverlapSize
DocumentBySentenceSplitter按句子语义切分(OpenNLP 英文)maxSegmentSize/maxOverlapSize
DocumentByLineSplitter按换行切分maxSegmentSize/maxOverlapSize
DocumentByWordSplitter按空格/单词切分maxSegmentSize/maxOverlapSize
DocumentByCharacterSplitter按字符数切分maxSegmentSize/maxOverlapSize
DocumentByRegexSplitter按正则表达式切分自定义 regex
DocumentSplitters.recursive()递归尝试段落→行→句子→单词→字符maxSegmentSizeInTokens/maxOverlapSizeInTokens

4.3 分段策略对比

对比维度Spring AILangChain4j
分段粒度Token 级 + 句子级 + 递归段落/行/句子/单词/字符/正则/递归(7 种)
英文语义分段SentenceSplitter(Alibaba 提供)DocumentBySentenceSplitter(OpenNLP 英文模型)
中文语义分段RecursiveCharacterTextSplitter+ 中文分隔符["。","!","?",";"]无专用中文句子模型(需自定义 Regex)
重叠控制chunkOverlap(字符数)maxOverlapSize(字符数或 Token 数)
递归分段AlibabaRecursiveCharacterTextSplitterDocumentSplitters.recursive()

4.4 《仙逆》分段效果对比

对以下《仙逆》原文分别用两框架分段:

王林自封修为,在落月村化身木匠陪伴儿子王平七十二年。这七十二年里,王平三次问父亲能不能修道,次次被拒绝。化神先化凡,这是化神期的关键一步。雷道子看穿王平怨婴体质,要拿他炼器。王林解开封印,以问鼎中期修为越级斩杀阴虚强者。

Spring AI TokenTextSplitter(chunkSize=30 tokens)

块 1: "王林自封修为,在落月村化身木匠陪伴儿子王平七十二年。"块 2: "这七十二年里,王平三次问父亲能不能修道,次次被拒绝。"块 3: "化神先化凡,这是化神期的关键一步。"块 4: "雷道子看穿王平怨婴体质,要拿他炼器。王林解开封印,以问鼎中期修为越级斩杀阴虚强者。"

LangChain4j recursive(maxSegmentSizeInTokens=30)

块 1: "王林自封修为,在落月村化身木匠陪伴儿子王平七十二年。"块 2: "这七十二年里,王平三次问父亲能不能修道,次次被拒绝。"块 3: "化神先化凡,这是化神期的关键一步。雷道子看穿王平怨婴体质,要拿他炼器。"块 4: "王林解开封印,以问鼎中期修为越级斩杀阴虚强者。"

LangChain4j 递归分段在句号处更灵活——块 3/4 的切分位置因剩 7 个 token 而选择合并到前一句,避免了孤立碎片。


五、文档清洗(Transform)

5.1 Spring AI

Spring AI暂无内置的文档清洗 Transformer。如果 PDF 含页眉页脚或噪声文本,需自行实现DocumentTransformer接口或在上游用 Tika 做预处理。

5.2 LangChain4j

LangChain4j 提供了HtmlToTextDocumentTransformer——将 HTML 内容转为纯文本,去除 HTML 标签和格式噪音:

// 清洗《仙逆》百科的 HTML 页面DocumentTransformer cleaner = new HtmlToTextDocumentTransformer();List<Document> rawDocs = UrlDocumentLoader.loadDocuments( "https://xianni.fandom.com/wiki/王林", new TextDocumentParser());List<Document> cleanDocs = cleaner.apply(rawDocs);// 转换前:<div class="infobox">王林,主角...<br/><b>修为</b>:踏天境</div>// 转换后:王林,主角...修为:踏天境
清洗能力Spring AILangChain4j
HTML → 纯文本✖️(需自行实现)✔️(HtmlToTextDocumentTransformer
去噪声/去重✖️自定义DocumentTransformer钩子
格式预处理Tika 间接处理Parser 层处理

六、元数据加工(Transform)

6.1 Spring AI

Spring AI 在这一环节提供了最完整的内置支持——三个专用 Enricher:

Enricher作用使用 LLMkey 字段
ContentFormatTransformer统一多来源文档的键值对格式✖️统一格式
KeywordMetadataEnricher自动提取文档关键词✔️excerpt_keywords
SummaryMetadataEnricher对前/当前/后段落生成摘要✔️section_summary/prev_section_summary/next_section_summary

6.2 LangChain4j

LangChain4j 不提供现成的 Enricher 类,但通过DocumentTransformerTextSegmentTransformer两个函数式接口,可以完全自由地实现自定义逻辑:

// 用 LangChain4j 实现等效的《仙逆》关键词提取EmbeddingStoreIngestor ingestor= EmbeddingStoreIngestor.builder() .documentTransformer(document -> { // 自定义:为仙逆人物档案补充元数据 String content= document.text(); if (content.contains("王林")) { document.metadata().put("character", "王林"); } if (content.contains("落月村") || content.contains("化凡")) { document.metadata().put("topic", "化凡"); } return document; }) .textSegmentTransformer(textSegment -> { // 自定义:检索时将文件名注入文本段,提升检索质量 String fileName= textSegment.metadata().getString("file_name"); return TextSegment.from(fileName + "\n" + textSegment.text(), textSegment.metadata()); }) .embeddingModel(embeddingModel) .embeddingStore(embeddingStore) .build();

6.3 元数据加工对比

能力Spring AILangChain4j
元数据格式统一✔️ContentFormatTransformer自行实现DocumentTransformer
AI 关键词提取✔️KeywordMetadataEnricher自行调用 LLM + 写入 metadata
AI 摘要生成✔️SummaryMetadataEnricher自行调用 LLM + 写入 metadata
自定义元数据注入实现DocumentTransformerDocumentTransformer+TextSegmentTransformer双钩子
开箱即用程度高——三个 Enricher 可直接声明低——全部自行实现,但自由度更高

七、完整功能矩阵

能力维度Spring AI(+Alibaba)LangChain4j
数据源数量10+(含 Alibaba 社区 20+)9(核心 3 + 扩展 6)
国内平台覆盖✔️ 语雀/飞书/B站/OSS(Alibaba)仅腾讯 COS
海外云存储✖️✔️ S3 / Azure / GCS
解析格式PDF/MD/JSON/Tika/Jsoup HTMLText/Tika/POI/PDFBox/MD/YAML
分段策略数量3 种7+ 种
中文分隔符支持✔️(Alibaba 递归分段)需自定义 Regex
HTML 清洗✖️✔️HtmlToTextDocumentTransformer
元数据 Enricher✔️ 3 种内置✖️ 自行实现
管道串联手动组合reader.get() → splitter.apply() → store.accept()EmbeddingStoreIngestor一键串联

八、《仙逆》场景的技术选型

场景推荐框架理由
仙逆全文 + 中文书评 + 百科,多格式混合Spring AI Alibaba国内平台覆盖全(B站/语雀/飞书),中文分隔符支持好,内置元数据 Enricher 可直接增强人物卡片
海外团队,仙逆英文翻译版 + 英文 WikiLangChain4jS3/GitHub 原生支持,7 种分段策略灵活组合,英文句子分割成熟
已有 Spring Boot,快速搭建仙逆问答Spring AI Alibaba与 Spring 自动配置深度集成,Embedding 模型和 VectorStore 一键注入
需要动态网页抓取仙逆讨论帖LangChain4jSeleniumDocumentLoader是唯一支持动态 JS 网页的读取器
已有 PostgreSQL,需 SQL + 向量混合查询两框架均可pgvector 在两边都有 Starter,改配置切换,业务代码不变

九、总结

核心结论只有几条:

  • 数据源选 Spring AI Alibaba——如果你需要接语雀/飞书/B站/MySQL 等国内平台,LangChain4j 完全覆盖不到。
  • 分段策略选 LangChain4j——7 种分段器 + 递归策略,比 Spring AI 的选择更多更细。
  • 元数据加工选 Spring AI——三个 Enricher 开箱即用,LangChain4j 需全部手动实现。
  • 管道串联选 LangChain4j——EmbeddingStoreIngestor声明式构建,代码量更少。
  • 不要为某单一能力强行迁就框架——两框架的DocumentVectorStore抽象高度相似,可以在读取阶段用 Spring AI Alibaba 的 Reader,在分段阶段用 LangChain4j 的 Splitter,最终都用 pgvector 存储——关键在于Document对象本身可以互相转换(都是 content + metadata 的键值对)。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

http://www.jsqmd.com/news/900634/

相关文章:

  • 行业深度盘点:浙江十家优质 GEO 优化公司实力评级与口碑参考 - 玖叁鹿
  • 嘉立创/捷配下单必看:PCB和钢网一起下单,这个Mark点选项千万别漏勾!
  • 深入浅出聊MIPI CSI时序:为什么高像素摄像头更容易出问题?
  • 电磁夹爪选购思路解析:精选2026年电磁夹爪品牌 - 品牌2025
  • 随笔:宜搭根据条件搜索表单实例详情列表中如何排序
  • UKey Wallet:2026自托管趋势下的硬件钱包安全观察
  • 别再死记硬背了!用Vivado 2023.1手把手配置ZYNQ VDMA的四种Genlock模式
  • ROS启动卡在‘Done checking log file disk usage’?别慌,三步搞定IP配置(附日志清理指南)
  • Ai Agent 简述
  • 2026年哈尔滨职业技能培训TOP5榜单:国考省考辅导、电工焊工叉车考证、退役军人免费培训与学历提升优选 - 品牌企业推荐师(官方)
  • 别再手动调了!用Visio画深度学习网络图的5个隐藏技巧(附避坑指南)
  • 为AI智能体项目Hermes Agent配置自定义模型供应商
  • 系统工程与系统设计
  • 2026年第二季度四川碳晶板选购指南:为何赛科装饰材料有限责任公司是优选? - 2026年企业资讯
  • 2026年 宝钢冷轧HC420/780DP双相钢厂家/品牌推荐榜单:高强轻量化与卓越成形性能的行业优选 - 品牌企业推荐师(官方)
  • AutoDL 租用
  • 基于易失性忆阻器的超低功耗神经锋电位编码技术
  • 别再只画骨架了!用MediaPipe Hands API获取21个关键点坐标,玩转手势交互(Python+OpenCV)
  • 深度解析2026年当前贵州悬臂模板品牌公司哪家好:专业视角与市场洞察 - 2026年企业资讯
  • 2026宁波最权威GEO优化公司TOP10深度攻略:万字全景解析 + 口碑服务商完整解读 - 玖叁鹿
  • 从‘timeout’命令看Linux信号机制:SIGTERM和SIGKILL到底该怎么选?
  • 从UObject垃圾回收陷阱到TSharedPtr实战:UE4内存管理避坑指南(4.26/5.0)
  • 浙江GEO优化服务商怎么选?深度盘点十大机构口碑排名与选型全指南 - 玖叁鹿
  • 手把手教你用SPI配置AD9164 DAC:从时钟计算到JESD204B链路建立(附避坑指南)
  • LLM推理优化:MLA与MoE架构突破内存与计算瓶颈
  • 2026年 电磁制动器厂家推荐榜单:通电式/失电式/微型制动器,高精度与稳定制动实力之选! - 品牌企业推荐师(官方)
  • OpenClaw 环境搭建|Windows 零代码部署方案
  • 2026年当下,河北靠谱的玻璃杯源头厂家推荐与采购决策全解析 - 2026年企业资讯
  • GD32单片机环境搭建避坑实录:从Keil 5安装到固件库配置,我踩过的雷你别踩
  • AI写论文的宝藏工具!4款AI论文生成神器,为你的论文加分!