Spring AI ETL 流水线

embedded/2024/9/25 17:33:45/

请添加图片描述

先纠正 Spring AI 使用本地 Ollama Embeddings 中的一个错误,当启动 Ollama 之后,Windows会有托盘图标,此时已经启动了 Ollama 的服务,访问 Embedding 时不需要运行 ollama run gemma ,只有访问 chat 时才需要启动一个大模型。

在这里插入图片描述

Spring AI 提供的 ETL 流水线比较全面,使用很简单。提取、转换和加载 (ETL) 框架是检索增强生成 (RAG) 用例中数据处理的支柱。ETL 管道协调从原始数据源到结构化向量存储的流程,确保数据采用最佳格式,以便 AI 模型进行检索。

Extract - 提取 - DocumentReader

spring-ai-core 中提供了 TextReader 和 JsonReader,这两个可以读取文本或者JSON中指定的key作为文档(Document)。

spring-ai-pdf-document-reader 中提供了 PagePdfDocumentReader(按页读) 和 ParagraphPdfDocumentReader(按目录读,注意,并非所有 PDF 文档都包含 PDF 目录)两个实现,可以用来读取PDF文件。

spring-ai-tika-document-reader 中提供了一个比较万能的 TikaDocumentReader,支持读取 PDF、DOC/DOCX、PPT/PPTX 和 HTML等格式(支持格式很多,详情看 https://tika.apache.org/2.9.0/formats.html )。

Transform - 转换 - DocumentTransformer

  1. ContentFormatTransformer 内容格式转换器:确保所有文档的内容格式统一。
  2. KeywordMetadataEnricher 关键字MetadataEnricher:使用基本关键字元数据扩充文档。
  3. SummaryMetadataEnricher 摘要元数据丰富:使用摘要元数据丰富文档,以增强检索能力。
  4. TokenTextSplitter:拆分文档,同时保留令牌级完整性。

这里面有意思的是 KeywordMetadataEnricherSummaryMetadataEnricher,这两个通过提示词模板让 AI 给出上下文(前面提取内容)的关键字和总结内容:

public static final String KEYWORDS_TEMPLATE = """{context_str}. Give %s unique keywords for thisdocument. Format as comma separated. Keywords: """;public static final String DEFAULT_SUMMARY_EXTRACT_TEMPLATE = """Here is the content of the section:{context_str}Summarize the key topics and entities of the section.Summary: """;

Load - 加载 - DocumentWriter

ETL最后的阶段就是存储文档,提供了两个实现,一个是 FileDocumentWriter,将文档保存到文件中。另一个就是前面用过的 VectorStore,存储向量数据。

这里的ETL和Spring AI Embeddings 和 Vector 入门 相比多了一个文档的来源,文档的来源除了PDF等文件外,还可以是 Spring AI 应用 - 智能记者 中网页查询的结果,还可以是数据库查询的结果,ES查询的结果。


http://www.ppmy.cn/embedded/4837.html

相关文章

python爬虫原理和编程实战:爬取CSDN博主的账号信息

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

2024年第十五届蓝桥杯C/C++B组复盘(持续更新)

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 试题A:握手问题问题描述思路 试题B:小球反弹问题描述思路…

sklearn【F1 Scoree】F1分数原理及实战代码!

目录 一、F1 Scoree 介绍二、案例学习三、总结 一、F1 Scoree 介绍 在分类任务中,评估模型的性能是至关重要的。除了准确率(Accuracy)之外,我们还需要考虑其他指标,如精确度(Precision)和查全率…

C++类和对象(中)(1)

一、类的6个默认成员函数 在一个类中,如果这个类什么都没有,那么这个类我们称之为空类,那么空类中真的什么都没有吗?其实并不是,任何类在什么都不写的情况下,编译器也会自动生成六个默认成员函数。 默认成…

Jmeter 性能-死锁问题定位+分析

1、环境搭建 ①准备脚本,执行压测 ②用Jstack 打印日志 jstack 112759 >dead.log ③下载日志到本地 sz dead.log 2、问题定位 ①打开dead.log,搜索deadlock ②查看死锁的线程 ③查看死锁位置 3、问题分析 ①下载死锁的类文件 Sz CaseControlle…

艾体宝方案 | ITT-Profitap IOTA——铁路运输的远程网络捕获和故障排除方案

在移动互联时代,铁路运输的数字化转型已成不可逆转的趋势。然而,随之而来的是对网络连接质量和故障排查的更高要求。本文将探讨如何利用艾体宝Profitap IOTA技术,在火车上实现远程网络捕获和故障排查,助力铁路运输行业迈向智能化未…

MATLAB 构建协方差矩阵,解算特征值和特征向量(63)

MATLAB 局部点云构建协方差矩阵,解算特征值和特征向量(63) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 对于某片有待分析的点云,我们希望构建协方差矩阵,计算特征值和特征向量,这是很多算法必要的分析方法,这里提供完整的计算代码(验证正确) !!! 特别需要注意…

Swift面向对象编程

类的定义与实例化: Swift中定义一个类使用class关键字,类的属性和方法都写在大括号内。示例代码如下: class MyClass {var property1: Intvar property2: Stringinit(property1: Int, property2: String) {self.property1 property1self.pr…