网站首页 > 博客文章 正文
LangChain4j 提供了 3 种 RAG(Retrieval-Augmented Generation,检索增强生成)实现,我们通常在原生或高级的 RAG 实现中,要对数据进行清洗,也就是将外接知识库中的原数据进行噪音去除,留下有价值的信息。
例如在带有 HTML 标签的文本中,HTML 标签就是噪音,他对于搜索结果是没有任何帮助,甚至会影响查询结果的,因此我们就需要将 HTML 标签进行清除。
那问题来了,怎么进行数据清洗呢?
这就要使用到文档转换器了,那么在不使用 LangChain4j 内置文档转换器的前提下(因为业务需求是复杂且多变的,因此很多时候我们需要使用自定义文档转换器才能实现预期的效果),那怎么实现呢?接下来一起来看。
自定义文档转换器
以去除文本中的 HTML 标签为例,LangChain4j 中自定义文档转换器的实现步骤如下:
- 新建类实现 DocumentTransformer 接口。
- 重写 transform 和 transformAll 方法,前者是对 Document 对象进行文档转换,后者是对 List<Document> 进行数据转换。
- 在 transform 和 transformAll 方法中,实现数据清除的具体业务落地。
具体实现代码
import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.DocumentTransformer;
import java.util.ArrayList;
import java.util.List;
/**
* 自定义文档转换器
*/
public class HtmlToTextDocumentTransformer implements DocumentTransformer {
@Override
public Document transform(Document document) {
return Document.from(removeHtmlTags(document.text()));
}
// 使用正则表达式清除内容中的 HTML 标签
public static String removeHtmlTags(String html) {
if (html == null || html.isEmpty()) {
return "";
}
// 定义正则表达式,匹配所有HTML标签
String regex = "<[^>]+>";
// 替换所有匹配的标签为空字符串
return html.replaceAll(regex, "").trim();
}
@Override
public List<Document> transformAll(List<Document> documents) {
List<Document> list = new ArrayList<Document>();
documents.stream().forEach(document -> {
list.add(this.transform(document));
});
return list;
}
}
调用文档转换器
Document htmlDoc = Document.from(
"<html><body><p>Clean <b>me</b>!</p></body></html>"
);
// 文档转换器
DocumentTransformer transformer = new HtmlToTextDocumentTransformer();
Document cleanedDoc = transformer.transform(htmlDoc);
System.out.println(cleanedDoc.text());
最终的执行结果为:
Clean me!
小结
文档转换器只是实现生产级别 RAG 的实现步骤之一,生产级别的 RAG 实现的步骤通常包含:文档加载器、文档解析器、文档转换器、文档分词器、文档向量化、向量持久化、向量检索等过程,而且每个过程可能都要反复调优,才能实现生产级别的准确性要求,所以道阻且长,吾辈尚需努力啊!
本文已收录到我的技术小站 [www.javacn.site](https://www.javacn.site),其中包含的内容有:Spring AI、LangChain4j、Dify、Agent、MCP、Function Call、RAG、向量数据库、Prompt、多模态、向量数据库、嵌入模型等内容。
猜你喜欢
- 2025-07-14 批量将 HTML 转换为 Word/Txt/PDF 等其它格式
- 2025-07-14 大数据清洗方法与工具总结(大数据清洗需要清洗哪些数据)
- 2024-08-11 HTML 表格标签(HTML表格标签和表单标签的区别)
- 2024-08-11 HTML的pre标签(html5 pre标签)
- 2024-08-11 HTML标签之链接标签(html链接代码)
- 2024-08-11 HTML简单的 标签(html标签总结)
- 2024-08-11 看电影、看网页广告很烦,很碍眼?php教你一招去除网页广告
- 2024-08-11 HTML网页编程之折叠标签(html table折叠)
- 2024-08-11 【HTML】概念和基本标签(html基本标签包含哪些)
- 2024-08-11 HTML 表单标签(HTML表单标签type属性值代表单选按钮)
你 发表评论:
欢迎- 最近发表
-
- 解决Win10打开软件提示“服务器没有及时响应或控制请求”
- 用友UAP解开非结构化大数据处理与分析的密码
- Windows 25H2 修复底层崩溃(windows修复环境)
- 开源技巧:使用Docker实现交互式任务
- Win11 任意版本 直接安装 Android 应用 教程完整版
- Windows Terminal已成为Windows 11操作系统的默认终端
- 那些好莱坞电影中炫酷的特效 原来是这么拍的
- Windows 10 Build 21327.1010发布:测试服务管道更新
- Made in China: The story behind the label
- PowerShell登录远程Linux系统(powershell开启远程桌面)
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- flutterrun (59)
- 系统设计图 (58)
- powershellfor (73)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)