Spring AI 和 LangChain4j 中文档处理功能对比
前面几篇文章分别介绍了 Spring AI 和 LangChain4j 在 RAG 文档处理各环节的支持——文档读取、解析、分段、清洗、元数据加工。本文将这些知识点汇总到一个完整的对比框架中以《仙逆》知识库构建为参考场景帮助你在项目起始阶段快速判断哪个框架更适合团队的技术栈和需求。一、对比总览阶段Spring AIAlibaba 社区LangChain4j文档读取本地文件 多种云服务/数据库 在线平台Alibaba 社区提供本地文件 云存储 URL Selenium文档解析PDF / Markdown / JSON / Tika / Jsoup HTMLText / Tika / POI / PDFBox / Markdown / YAML文本分段TokenTextSplitter / SentenceSplitterAlibaba 递归分段段落/行/句子/单词/字符/正则/递归7 种文档清洗暂无内置实现HtmlToTextDocumentTransformer元数据加工ContentFormatTransformer / KeywordMetadataEnricher / SummaryMetadataEnricherDocumentTransformer TextSegmentTransformer自定义钩子二、文档读取Extract文档读取解决的是数据从哪里来——本地磁盘、云存储、数据库、在线平台等。两框架在数据源覆盖面上各有侧重。2.1 Spring AIAlibaba 社区类别读取器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/EPUBHTMLJsoupDocumentReaderspring-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/TikaHTML✔️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();ListDocument 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();ListDocument cosDocs cosLoader.loadDocuments(novels/);三、文档解析Parse → Document 对象读取文件后需要将原始字节/文本解析为统一的Document对象包含 content metadata。3.1 Spring AI解析器/Reader支持格式核心特性MarkdownDocumentReaderMarkdownHorizontalRuleCreateDocument按分割线分段可配置是否包含代码块/引用PagePdfDocumentReaderPDFpagesPerDocument控制每 N 页生成一个 DocumentParagraphPdfDocumentReaderPDF基于 PDF 目录TOC智能分段落TikaDocumentReaderPDF/DOCX/PPTX/HTML 等自动检测格式自动提取元数据JsonReaderJSONjsonKeysToUse指定使用哪些 key 作为内容JsoupDocumentReaderHTMLCSS 选择器提取内容块可选提取链接 URL3.2 LangChain4j解析器支持格式核心特性TextDocumentParser纯文本按字面内容解析ApacheTikaDocumentParserPDF/DOCX/PPTX/HTML/XML 等与 Spring AI 的 TikaReader 功能一致ApachePoiDocumentParserDOCX/XLSX/PPTX精确解析 Office 文档返回每段或每幻灯片为 DocumentApachePdfBoxDocumentParserPDF按页解析可选 includePageNumberInTextMarkdownDocumentParserMarkdown清理 Markdown 标记后提取纯文本YamlDocumentParserYAML解析 YAML 文件3.3 《仙逆》场景对比源资料Spring AI 解析方式LangChain4j 解析方式仙逆_二次化凡.mdMarkdownDocumentReader→ 按标题层级分段FileSystemDocumentLoaderMarkdownDocumentParser→ 整篇读入后由 Splitter 切分修行体系.pdfPagePdfDocumentReader→ 每页一个 DocumentApachePdfBoxDocumentParser→ 每页一个 Document人物卡片.docxTikaDocumentReader→ 自动检测ApachePoiDocumentParser→ 专门处理 DOCX四、文本分段Transform这是两框架差异最大的环节。4.1 Spring AI分段器原理关键参数TokenTextSplitter按 Token 固定长度切分通过边界搜索找最优断点defaultChunkSize/minChunkSizeChars/minChunkLengthToEmbed/maxNumChunks/keepSeparatorSentenceSplitterAlibaba按句子语义切分sentenceSplitLength/minSentenceLength/maxSentenceLengthRecursiveCharacterTextSplitterAlibaba递归尝试多个分隔符找最优断点chunkSize/chunkOverlap/ 自定义分隔符列表4.2 LangChain4j分段器原理关键参数DocumentByParagraphSplitter按连续换行符空行切分maxSegmentSize/maxOverlapSizeDocumentBySentenceSplitter按句子语义切分OpenNLP 英文maxSegmentSize/maxOverlapSizeDocumentByLineSplitter按换行切分maxSegmentSize/maxOverlapSizeDocumentByWordSplitter按空格/单词切分maxSegmentSize/maxOverlapSizeDocumentByCharacterSplitter按字符数切分maxSegmentSize/maxOverlapSizeDocumentByRegexSplitter按正则表达式切分自定义 regexDocumentSplitters.recursive()递归尝试段落→行→句子→单词→字符maxSegmentSizeInTokens/maxOverlapSizeInTokens4.3 分段策略对比对比维度Spring AILangChain4j分段粒度Token 级 句子级 递归段落/行/句子/单词/字符/正则/递归7 种英文语义分段SentenceSplitterAlibaba 提供DocumentBySentenceSplitterOpenNLP 英文模型中文语义分段RecursiveCharacterTextSplitter 中文分隔符[。,,,]无专用中文句子模型需自定义 Regex重叠控制chunkOverlap字符数maxOverlapSize字符数或 Token 数递归分段AlibabaRecursiveCharacterTextSplitterDocumentSplitters.recursive()4.4 《仙逆》分段效果对比对以下《仙逆》原文分别用两框架分段王林自封修为在落月村化身木匠陪伴儿子王平七十二年。这七十二年里王平三次问父亲能不能修道次次被拒绝。化神先化凡这是化神期的关键一步。雷道子看穿王平怨婴体质要拿他炼器。王林解开封印以问鼎中期修为越级斩杀阴虚强者。Spring AI TokenTextSplitterchunkSize30 tokens块 1: 王林自封修为在落月村化身木匠陪伴儿子王平七十二年。块 2: 这七十二年里王平三次问父亲能不能修道次次被拒绝。块 3: 化神先化凡这是化神期的关键一步。块 4: 雷道子看穿王平怨婴体质要拿他炼器。王林解开封印以问鼎中期修为越级斩杀阴虚强者。LangChain4j recursivemaxSegmentSizeInTokens30块 1: 王林自封修为在落月村化身木匠陪伴儿子王平七十二年。块 2: 这七十二年里王平三次问父亲能不能修道次次被拒绝。块 3: 化神先化凡这是化神期的关键一步。雷道子看穿王平怨婴体质要拿他炼器。块 4: 王林解开封印以问鼎中期修为越级斩杀阴虚强者。LangChain4j 递归分段在句号处更灵活——块 3/4 的切分位置因剩 7 个 token 而选择合并到前一句避免了孤立碎片。五、文档清洗Transform5.1 Spring AISpring AI暂无内置的文档清洗 Transformer。如果 PDF 含页眉页脚或噪声文本需自行实现DocumentTransformer接口或在上游用 Tika 做预处理。5.2 LangChain4jLangChain4j 提供了HtmlToTextDocumentTransformer——将 HTML 内容转为纯文本去除 HTML 标签和格式噪音// 清洗《仙逆》百科的 HTML 页面DocumentTransformer cleaner new HtmlToTextDocumentTransformer();ListDocument rawDocs UrlDocumentLoader.loadDocuments( https://xianni.fandom.com/wiki/王林, new TextDocumentParser());ListDocument cleanDocs cleaner.apply(rawDocs);// 转换前div classinfobox王林主角...br/b修为/b踏天境/div// 转换后王林主角...修为踏天境清洗能力Spring AILangChain4jHTML → 纯文本✖️需自行实现✔️HtmlToTextDocumentTransformer去噪声/去重✖️自定义DocumentTransformer钩子格式预处理Tika 间接处理Parser 层处理六、元数据加工Transform6.1 Spring AISpring AI 在这一环节提供了最完整的内置支持——三个专用 EnricherEnricher作用使用 LLMkey 字段ContentFormatTransformer统一多来源文档的键值对格式✖️统一格式KeywordMetadataEnricher自动提取文档关键词✔️excerpt_keywordsSummaryMetadataEnricher对前/当前/后段落生成摘要✔️section_summary/prev_section_summary/next_section_summary6.2 LangChain4jLangChain4j 不提供现成的 Enricher 类但通过DocumentTransformer和TextSegmentTransformer两个函数式接口可以完全自由地实现自定义逻辑// 用 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自行实现DocumentTransformerAI 关键词提取✔️KeywordMetadataEnricher自行调用 LLM 写入 metadataAI 摘要生成✔️SummaryMetadataEnricher自行调用 LLM 写入 metadata自定义元数据注入实现DocumentTransformerDocumentTransformerTextSegmentTransformer双钩子开箱即用程度高——三个 Enricher 可直接声明低——全部自行实现但自由度更高七、完整功能矩阵能力维度Spring AIAlibabaLangChain4j数据源数量10含 Alibaba 社区 209核心 3 扩展 6国内平台覆盖✔️ 语雀/飞书/B站/OSSAlibaba仅腾讯 COS海外云存储✖️✔️ S3 / Azure / GCS解析格式PDF/MD/JSON/Tika/Jsoup HTMLText/Tika/POI/PDFBox/MD/YAML分段策略数量3 种7 种中文分隔符支持✔️Alibaba 递归分段需自定义 RegexHTML 清洗✖️✔️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声明式构建代码量更少。•不要为某单一能力强行迁就框架——两框架的Document和VectorStore抽象高度相似可以在读取阶段用 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%免费】