砍材农夫砍材农夫
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 首页

    • 介绍
    • 框架比较
  • spring-ai

    • spring-ai 第一步入门
    • spring-ai 第二提示词介绍
    • spring-ai 第三结构化输出
    • spring-ai 第四多模态API
    • spring-ai 第五模型介绍
    • spring-ai 第六模型介绍-聊天模型
    • spring-ai 第七模型介绍-向量模型
    • spring-ai 第八模型介绍-图像模型
    • spring-ai 第九模型介绍-聊天记录
    • spring-ai 第十tool调用
    • spring-ai 第十一 MCP server 调用入门(stdio协议)
    • spring-ai 第十二 MCP server 调用入门(http协议)
    • spring-ai 第十三 MCP client 调用入门
    • spring-ai 第十四 MCP和tool区别
    • spring-ai 第十五 RAG
    • spring-ai 第十五一节 RAG(加更ETL)
    • spring-ai 第十六 向量数据库
  • spring-ai-alibaba

    • 搭建demo
    • 相关概念
    • demo搭建springAIAlibaba
  • spring-skills

    • 搭建demo
    • 相关概念
    • demo搭建springAIAlibaba
  • AgentScopeJava
    • 搭建demo
    • demo搭建springAIAlibaba
  • langchain

    • v1.0

      • 如何升级版本
      • 环境搭建
      • 架构结构
      • 模型
      • langchain核心
      • langchain-model
      • langchain提示词模板
      • langchain语言模型
      • 调用本地大模型
      • langChain中Chain链使用
      • langChain流程编排
      • langChain服务部署与链路监控
      • langChain消息管理与聊天历史存储
      • langchain_loader
      • langchain中RAG
      • langchain中Agent
  • dify

    • dify入门和安装
    • dify模型配置和验证
  • n8n

    • n8n入门和安装
  • coze

    • coze入门和安装
  • spring-ai 第十五一节 RAG(加更ETL)
    • 官网
    • ETL管道有三个主要组成部分
      • DocumentReader
      • DocumentTransformer
        • 相关参数
      • DocumentWriter
    • 完整源码示例(解析一个pdf文件知识文档)
      • 验证结果

spring-ai 第十五一节 RAG(加更ETL)

官网

spring-ai网址【https://docs.spring.io/spring-ai/reference/api/etl-pipeline.html】

提取、转换和加载(ETL)框架是数据处理的支柱

ETL管道协调从原始数据源到结构化向量存储的数据流,确保数据以最佳格式供AI模型检索

  • ETL 管道创建、转换和存储Document 实例 Image text

ETL管道有三个主要组成部分

  • DocumentReader (读取)
  • DocumentTransformer (转换)
  • DocumentWriter (写入) Image text

DocumentReader

  • json、text文本、html、pdf、markdown等
  • json pom相关增加配置如下:
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-jsoup-document-reader</artifactId>
</dependency>
  • pdf pom相关增加配置如下:
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-pdf-document-reader</artifactId>
</dependency>

DocumentTransformer

  • TextSplitter
  • TokenTextSplitter
相关参数
  • chunkSize每个文本块的令牌目标大小(默认:800)
  • minChunkSizeChars每个文本块的最小字符数(默认:350)
  • minChunkLengthToEmbed: 包含的块的最小长度(默认:5)
  • maxNumChunks从文本生成的最大块数(默认:10000)
  • keepSeparator是否在块中保留分隔符(如换行符)(默认:true)
  • punctuationMarks:用于分割句子的字符列表(默认: .,?,!,\n)
@Component
class MyInternationalTextSplitter {

    public List<Document> splitChineseText(List<Document> documents) {
        // Use Chinese punctuation marks
        TokenTextSplitter splitter = TokenTextSplitter.builder()
            .withChunkSize(800)
            .withMinChunkSizeChars(350)
            .withPunctuationMarks(List.of('。', '?', '!', ';'))  // Chinese punctuation
            .build();

        return splitter.apply(documents);
    }

    public List<Document> splitWithCustomMarks(List<Document> documents) {
        // Mix of English and other punctuation marks
        TokenTextSplitter splitter = TokenTextSplitter.builder()
            .withChunkSize(800)
            .withPunctuationMarks(List.of('.', '?', '!', '\n', ';', ':', '。'))
            .build();

        return splitter.apply(documents);
    }
}

DocumentWriter

将Document对象列表的内容写入文件

  • FileDocumentWriter
List<Document> documents = // initialize your documents
FileDocumentWriter writer = new FileDocumentWriter("output.txt", true, MetadataMode.ALL, true);
writer.accept(documents);

完整源码示例(解析一个pdf文件知识文档)

https://gitee.com/kcnf_open/spring-ai-sample/tree/master/spring-ai/spring-ai-sample11-rag/spring-ai-sample11-rag-02-etl

http://127.0.0.1:8082/api/rag/search

{
    "question": "spring ai"
}

验证结果

Image text

最近更新: 2026/4/10 22:13
Contributors: kcnf
Prev
spring-ai 第十五 RAG
Next
spring-ai 第十六 向量数据库