Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LangChain4j如何自定义文档转换器实现数据清洗?

LangChain4j如何自定义文档转换器实现数据清洗?

作者头像
磊哥
发布于 2025-05-13 00:07:06
发布于 2025-05-13 00:07:06
16700
代码可运行
举报
文章被收录于专栏:王磊的博客王磊的博客
运行总次数:0
代码可运行

LangChain4j 提供了 3 种 RAG(Retrieval-Augmented Generation,检索增强生成)实现,我们通常在原生或高级的 RAG 实现中,要对数据进行清洗,也就是将外接知识库中的原数据进行噪音去除,留下有价值的信息。

例如在带有 HTML 标签的文本中,HTML 标签就是噪音,他对于搜索结果是没有任何帮助,甚至会影响查询结果的,因此我们就需要将 HTML 标签进行清除。

那问题来了,怎么进行数据清洗呢?

这就要使用到文档转换器了,那么在不使用 LangChain4j 内置文档转换器的前提下(因为业务需求是复杂且多变的,因此很多时候我们需要使用自定义文档转换器才能实现预期的效果),那怎么实现呢?接下来一起来看。

自定义文档转换器

以去除文本中的 HTML 标签为例,LangChain4j 中自定义文档转换器的实现步骤如下:

  1. 新建类实现 DocumentTransformer 接口。
  2. 重写 transform 和 transformAll 方法,前者是对 Document 对象进行文档转换,后者是对 List 进行数据转换
  3. 在 transform 和 transformAll 方法中,实现数据清除的具体业务落地。

具体实现代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
    }
}

调用文档转换器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,其中包含的内容有:Spring AI、LangChain4j、Dify、Agent、MCP、Function Call、RAG、向量数据库、Prompt、多模态、向量数据库、嵌入模型等内容。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[大模型]基于 InternLM 和 LangChain 搭建知识库助手
同时,我们需要使用到开源词向量模型 Sentence Transformer,可以将其模型参数以类似于下载 InternLM 模型参数的方式下载到本地 /root/autodl-tmp/embedding_model。同时,在本节中,InternLM-Chat-7B-V1.1 的模型参数文件存储在本地 /root/autodl-tmp/model。
云未归来
2025/07/17
1080
[大模型]基于 InternLM 和 LangChain 搭建知识库助手
LangChain4j比SpringAI强在哪?一文读懂
LangChain4j 和 Spring AI 是 Java 生态中实现大模型应用开发的两个最重要的框架,但二者的区别是啥?生产级别又该使用哪种框架?令很多人犯了难,所以本文就来浅聊一下,希望给大家在技术选型时有一个简单的参考。
磊哥
2025/05/07
1.6K0
聊聊langchain4j的RAG
RAG(Retrieval-Augmented Generation)即检索增强生成,它通过检索来获取相关信息,注入到prompt,然后用增强的prompt然后输入给LLM让LLM在回答的时候能够利用检索到信息,从而降低幻觉。常见的信息检索方法包括:全文(关键词)搜索、向量搜索(语义搜索)、混合搜索。目前langchain4j以向量搜索为主(例如通过Qdrant等向量数据库构建高效检索系统),后续会扩展支持全文搜索及混合搜索(目前Azure AI Search支持,详细见AzureAiSearchContentRetriever)。
code4it
2025/03/17
3620
聊聊langchain4j的RAG
RAG技术全面解析:Langchain4j如何实现智能问答的跨越式进化?
LLM 的知识仅限于其训练数据。如希望使 LLM 了解特定领域的知识或专有数据,可:
JavaEdge
2024/09/24
7.7K0
RAG技术全面解析:Langchain4j如何实现智能问答的跨越式进化?
【微服务】SpringBoot整合LangChain4j 操作AI大模型实战详解
随着人工智能技术的飞速发展,AI大模型已经在众多领域展现出强大的能力,为业务拓展和商业价值提升带来了新的机遇。SpringBoot作为一款广受欢迎的Java微服务框架,以其简洁、高效的特点深受开发者喜爱。而LangChain4j作为一款专注于AI大模型集成的开源库,为Java开发者提供了一种简单且高效的方式来接入和利用各种AI大模型。本文将详细介绍如何在SpringBoot中整合LangChain4j,实现对AI大模型的操作,帮助读者快速上手并应用到实际项目中。
全干程序员demo
2025/04/09
1.7K1
【微服务】SpringBoot整合LangChain4j 操作AI大模型实战详解
Java + LangChain 开发大语言模型应用!
在 Baeldung 上看到了一篇介绍基于 Java + LangChain 开发大语言模型应用的基础入门文章,写的非常不错,非常适合初学者。于是,我抽空翻译了一下。
码农编程进阶笔记
2025/03/29
7330
Java + LangChain 开发大语言模型应用!
Spring AI 与 LangChain4j 对比分析,实际项目中该如何选择?
一、引言 在 Java 技术栈中,Spring AI 和 LangChain4j 是目前比较热门的两个 AI 开发框架。它们都为开发者提供了便捷的 AI 功能集成方式,但又有着各自的特点和优势。本文将从多个方面对 Spring AI 与 LangChain4j 进行对比分析,并探讨如何根据实际情况进行选择。 二、框架概述
用户7353950
2025/06/15
8490
Spring AI 与 LangChain4j 对比分析,实际项目中该如何选择?
聊聊langchain4j的核心RAG APIs
langchain4j提供了一套丰富的API来构建自定义的RAG(检索增强生成)pipelines,从简单的到高级的都有涵盖。
code4it
2025/03/18
4500
聊聊langchain4j的核心RAG APIs
LangChain4j炸裂!Java开发者打造AI应用从未如此简单
LangChain4j目标是简化将大语言模型(LLM)集成到 Java 应用程序的过程。
JavaEdge
2024/09/19
1.8K0
LangChain4j炸裂!Java开发者打造AI应用从未如此简单
如何在Spring Boot中无缝集成LangChain4j,玩转AI大模型!
Spring Boot 启动器帮助通过属性创建和配置 语言模型、嵌入模型、嵌入存储 和其他核心 LangChain4j 组件。
JavaEdge
2024/09/20
9.2K0
如何在Spring Boot中无缝集成LangChain4j,玩转AI大模型!
聊聊langchain4j的Advanced RAG
dev/langchain4j/rag/RetrievalAugmentor.java
code4it
2025/03/21
2780
聊聊langchain4j的Advanced RAG
用 Java 开发 AI 项目,太爽了!
大家好,我是程序员鱼皮。现在 AI 应用开发可以说是程序员必备的技能了,求职时能够大幅增加竞争力。之前我用 Spring AI 带大家做过一个 开源的 AI 超级智能体项目,这次我来带大家快速掌握另一个主流的 Java AI 应用开发框架 LangChain4j。
程序员鱼皮
2025/07/12
3011
用 Java 开发 AI 项目,太爽了!
探索 AI 森林:LangChain 框架核心组件全景解读
目前围绕 LangChain 框架核心模块主要有六个,包括模型输入输出(Model I/O)、数据连接(Data Connection)、链(Chains)、记忆(Memory)、代理(Agents)和回调(Callbacks)。
朝雾轻寒
2023/09/06
4.5K0
探索 AI 森林:LangChain 框架核心组件全景解读
LangChain4j 项目概览
LangChain4j 是一个专为 Java 开发者设计的大语言模型 (LLM) 集成框架,旨在简化 Java 应用程序与各种 LLM 提供商的集成过程。该项目受到 Python 的 LangChain、Haystack、LlamaIndex 等框架的启发,为 Java 生态系统提供了强大而统一的 LLM 工具链。
martinzh7
2025/07/03
1980
LangChain4j 项目概览
使用GraphRAG+LangChain+Ollama:LLaMa 3.1跑通知识图谱与向量数据库集成(Neo4j)
我将向你展示如何使用 LLama 3.1(一个本地运行的模型)来执行GraphRAG操作,总共就50号代码。。。
AI进修生
2024/12/02
1.7K0
使用GraphRAG+LangChain+Ollama:LLaMa 3.1跑通知识图谱与向量数据库集成(Neo4j)
Quarkus 开发基于 LangChain4j 的扩展,方便将 LLM 集成到 Quarkus 应用程序中
LangChain for Java(LangChain4J)战略顾问和布道师 Lize Raes 在 2023 年比利时 Devoxx 大会上做了“Java Meets AI”的演讲,受此启发,Quarkus 团队开始开发基于 LangChain4J 库的扩展,这是 LangChain 库的 Java 重新实现版本(最初用 Python 或 JavaScript 实现)。这将允许开发人员将大语言模型(LLM)集成到他们的 Quarkus 应用程序中。Quarkus LangChain4J 第一个公开版本,即 0.1 版本,在 2023 年 11 月中旬发布。这个扩展几乎每周都会发布一次,最新版本是 0.5.1。
深度学习与Python
2024/01/11
1.4K0
Quarkus 开发基于 LangChain4j 的扩展,方便将 LLM 集成到 Quarkus 应用程序中
聊聊langchain4j的Naive RAG
dev/langchain4j/rag/content/retriever/ContentRetriever.java
code4it
2025/03/19
1560
聊聊langchain4j的Naive RAG
揭秘Langchain4j的Chat Memory功能!
手动维护和管理ChatMessage比较繁琐。因此,LangChain4j 提供了ChatMemory抽象以及多个开箱即用的实现:
JavaEdge
2024/09/23
6980
揭秘Langchain4j的Chat Memory功能!
基于InternLM和LangChain搭建自己的知识库
为了突破LLM的局限性,目前有两种范式可行:RAG(检索增强生成)和Finetune(模型微调)。
阿提说说
2024/03/01
1.2K0
基于InternLM和LangChain搭建自己的知识库
聊聊langchain4j的AiServices
dev/langchain4j/service/DefaultAiServices.java
code4it
2025/03/11
6310
聊聊langchain4j的AiServices
推荐阅读
相关推荐
[大模型]基于 InternLM 和 LangChain 搭建知识库助手
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验