Java搭建法律AI助手,快速实现RAG应用

Java通过RAG构建专属知识问答机器人_超详细 具体来说,RAG首先利用检索模型从私有或专有的数据源中搜索相关信息,然后将这些信息提供给生成模型,如大型语言模型(LLM),以生成更加准确、基于上下文的回复。这种方法有助于减少大模型在生成过程中可能出现的“幻觉”现象,并且能够使模型的回答更贴合企业的特定数据,从而提高了回答的精确度与相关性。通过良好的抽象设计,Spring AI显著减少了程序员在对接不同类型接口时查阅文档和迁移实现的工作量,为基于Java的AI开发带来了极大的便利性和效率提升。类用于处理索引构建和查询逻辑。,你可以在这里测试你的聊天界面。 阅读详情

本博文给大家介绍一下如何使用AI4J快速接入OpenAI大模型,并且结合Pinecone向量数据库实现一个刑法AI助手的RAG应用。

介绍

由于SpringAI需要使用JDK17和Spring Boot3,但是目前很多应用依旧使用的JDK8版本,所以使用可以支持JDK8的AI4J来接入OpenAI大模型。

AI4J是一款JavaSDK用于快速接入AI大模型应用,整合多平台大模型,如OpenAi、Ollama、智谱Zhipu(ChatGLM)、深度求索DeepSeek、月之暗面Moonshot(Kimi)、腾讯混元Hunyuan、零一万物(01)等等,提供统一的输入输出(对齐OpenAi)消除差异化,优化函数调用(Tool Call),优化RAG调用、支持向量数据库(Pinecone),并且支持JDK1.8,为用户提供快速整合AI的能力。

AI4J-GitHub

Pinecone

Pinecone向量数据库是一个云原生的向量数据库,具有简单的API和无需基础架构的优势。它可以快速处理数十亿条向量数据,并实时更新索引。同时,它还可以与元数据过滤器相结合,以获得更相关、更快速的结果。

Pinecone是完全云托管的,容易上手、扩展轻松,用户可以放心使用。

注册与使用

大家可以进入Pinecone官网进行注册和登录,至于注册账号,这里不在演示,相信大家都会。

选择Database->Indexes->Create Index来创建索引

在这里可以输入你的维度,或者点击Setup by model,根据模型来选择向量维度。这里我以text-embedding-3-large模型为例子

创建完成后,记录自己的Host,我们后面要用到

创建自己的API Key

引入AI4J依赖
<!-- Spring应用 -->
<dependency>
    <groupId>io.github.lnyo-cly</groupId>
    <artifactId>ai4j-spring-boot-stater</artifactId>
    <version>0.6.3</version>
</dependency>

注意版本,尽量选择最新的版本。0.6.3之前的版本对RAG的实现有一些bug

如果你使用阿里源无法引入,可能是阿里云镜像还没有同步。

配置application.yml

注意:

你需要填写上文Pinecone提供的Host和API Key。

由于目前版本的AI4J只实现了OpenAi的Embedding服务,所以这里也需要配置OpenAi的信息。

Chat服务可以使用OpenAi的也可以使用其它的平台如Ollama、Zhipu等等。

如果没有OpenAi的官方key,大家可以使用中转API [低价中转平台] 低价ApiKey

搭建RAG服务Test类

这里以一个简单的Test类来演示,大家可以比葫芦画瓢自己搭建Controller。

建立RAG知识库

既然要建立RAG应用,那肯定少不了知识库。

本文搭建的是一个简单的法律AI助手,所以我们需要一个法律知识库。

接下来我以刑法知识库为例为大家讲解

可以将所需要的知识库,存入一个文本文档当中:

存储至Pinecone向量数据库中
@SpringBootTest
public class RagTest {

    // 1. 注入Pinecone服务
    @Autowired
    private PineconeService pineconeService;

    // 2. 注入AI服务
    @Autowired
    private AiService aiService;

    @Test
    public void test_rag_store() throws Exception {
        // 3. 获取Embedding服务
        IEmbeddingService embeddingService = aiService.getEmbeddingService(PlatformType.OPENAI);

        // 4. Tika读取file文件内容
        String fileContent = TikaUtil.parseFile(new File("D:\\data\\test.txt"));
        System.out.println(fileContent);

        // 5. 分割文本内容
        RecursiveCharacterTextSplitter recursiveCharacterTextSplitter = new RecursiveCharacterTextSplitter(1000, 200);
        List<String> contentList = recursiveCharacterTextSplitter.splitText(fileContent);
        System.out.println(contentList.size());

        // 6. 转为向量
        Embedding build = Embedding.builder()
                .input(contentList)
                .model("text-embedding-3-large")
                .build();
        EmbeddingResponse embedding = embeddingService.embedding(build);
        List<List<Float>> vectors = embedding.getData().stream().map(EmbeddingObject::getEmbedding).collect(Collectors.toList());

        VertorDataEntity vertorDataEntity = new VertorDataEntity();
        vertorDataEntity.setVector(vectors);
        vertorDataEntity.setContent(contentList);
        System.out.println(vertorDataEntity);

        // 7. 向量存储至pinecone
        Integer count = pineconeService.insert(vertorDataEntity, "abc-123-abc");
        System.out.println(count > 0 ? "存储成功" : "存储失败");
    }

}

下图是插入成功的数据

RAG查询
    @Test
    public void test_rag_query() throws Exception {
        // 8. 获取Embedding服务
        IEmbeddingService embeddingService = aiService.getEmbeddingService(PlatformType.OPENAI);

        // 9. 构建要查询的问题,转为向量
        String question = "如何挑选最甜的西瓜?";

        Embedding build = Embedding.builder()
                .input(question)
                .model("text-embedding-3-large")
                .build();
        EmbeddingResponse embedding = embeddingService.embedding(build);
        List<Float> questionEmbedding = embedding.getData().get(0).getEmbedding();

        // 10. 构建向量数据库的查询对象
        PineconeQuery pineconeQueryReq = PineconeQuery.builder()
                .namespace("abc-123-abc")
                .topK(5)
                .vector(questionEmbedding)
                .build();

        // 11. 查询
        // PineconeQueryResponse queryResponse = pineconeService.query(pineconeQueryReq);
        // delimiter为想用什么字符拼接查询出来的内容
        String retrievalContent = pineconeService.query(pineconeQueryReq, " ");

        String contentFormat = "你是一个善于回答中华人民共和国刑法相关问题的助手。请使用以下提供的检索内容和自身知识来回答问题。如果你不知道答案,请直接说不知道,不要杜撰答案。请用三句话以内回答,保持简洁。\n" +
                "\n" +
                "问题:%s\n" +
                "\n" +
                "检索内容:%s";

        String content = String.format(contentFormat, question, retrievalContent);

        // 12. 获取Chat服务
        IChatService chatService = aiService.getChatService(PlatformType.OPENAI);

        // 13. 构建Chat请求
        ChatCompletion chatCompletion = ChatCompletion.builder()
                .model("gpt-4o")
                .message(ChatMessage.withUser(content))
                .build();

        // 14. 发送Chat请求
        ChatCompletionResponse chatCompletionResponse = chatService.chatCompletion(chatCompletion);
        System.out.println("问题:" + question);
        System.out.println("回答:" + chatCompletionResponse.getChoices().get(0).getMessage().getContent());
        System.out.println("花费tokens:" + chatCompletionResponse.getUsage().getTotalTokens());
    }

下图是测试的结果:

至此我们已经完成了一个RAG应用的搭建,大家可以根据自己的需求搭建自己的RAG应用。

 如何系统的去学习大模型LLM ?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

事实上,抢你饭碗的不是AI,而是会利用AI的人。

继科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。

基于此,我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近70次后,终于把整个AI大模型的学习门槛,降到了最低!

在这个版本当中:

第一您不需要具备任何算法和数学的基础
第二不要求准备高配置的电脑
第三不必懂Python等任何编程语言

您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型教程已经给大家整理并打包,现在将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

​

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

在这里插入图片描述

二、640套LLM大模型报告合集

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)
在这里插入图片描述

三、LLM大模型系列视频教程

在这里插入图片描述

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

在这里插入图片描述

五、AI产品经理大模型教程

在这里插入图片描述

LLM大模型学习路线 ↓

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。

  • 内容:

    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

  • 内容:

    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.3 流水线工程
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

  • 内容:

    • L3.1 Agent模型框架
    • L3.2 MetaGPT
    • L3.3 ChatGLM
    • L3.4 LLAMA
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

  • 内容:

    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

​

SpringBoot快速接入OpenAI大模型(JDK8) 由于SpringAI需要使用JDK17和Spring Boot3,但是目前很多应用依旧使用的JDK8版本,所以使用可以支持JDK8的AI4J来接入OpenAI大模型。 阅读详情

相关推荐

ai4j:面向JDK 8+的Java AI全栈开发套件,统一多模型API与Agent构建

在Java应用开发中,集成人工智能能力已成为提升应用智能化的关键路径。其核心原理在于通过统一的API抽象层,将不同大模型服务(如OpenAI、智谱GLM)的异构接口标准化,使开发者能够以一致的编程模式调用多种AI能力。这一设计的技术价值在于显著降低了多平台适配的复杂性和维护成本,尤其对于运行在JDK 8或11等传统环境的企业级系统,提供了平滑引入AI功能的可行性。在实际应用场景中,开发者不仅需要基础的模型调用,更常涉及检索增强生成(RAG)以构建知识库问答、以及智能体(Agent)运行时以实现自主规划与工具

weixin_42515392的博客 433

一文搞懂在JAVA中实现RAG(检索增强生成)模式!

问答接口主要流程是:传入问题和对应要查的ES库->问题进行向量化->使用ES的cos余弦函数算法实现查找相关性文档->这里的文档要做限制(因为大模型支持传入的token是有限的,token就是传入的内容单位)->问题和召回内容都传入prompt中组合成传给大模型的信息。下图就是RAG模式的一个大致流程,我个人觉得预训练和RAG模式一起使用可能会导致一些问题,比如我预训练的数据中把LLM训练成一个厨师,然后我提问的时候,召回的信息都是法律信息,那么大模型肯定会乱掉,传回的信息肯定质量也出问题。

小泽的博客 1954

基于Claude API构建法律AI助手:提示词工程与RAG架构实践

大语言模型(LLM)在垂直领域的应用正成为技术热点,其核心在于如何将通用AI能力安全、准确地引导至专业场景。通过提示词工程(Prompt Engineering)技术,开发者可以为模型设定明确的角色、规则和思考链,从而构建出具备领域专业性的对话能力。结合检索增强生成(RAG)架构,将外部权威知识库(如法律法规条文)向量化并实时检索,能有效解决模型“幻觉”问题,大幅提升回答的准确性和时效性。这种“通用模型+专业技能”的模式,在需要高度严谨性的法律咨询、合同审查等场景中展现出巨大技术价值,实现了低成本、高可控性

weixin_30386713的博客 486

Spring AI,搭建个人AI助手

本期主要为实操性内容,聊聊AI大模型,并使用Spring AI搭建属于自己的AI助手、知识库。 本期所需的演示源码笔者托管在Gitee上(https://gitee.com/catoncloud/spring-ai-demo),读者朋友可自行查阅。

qq_42969817的博客 2321

用JAVA实现人工智能:采用框架Spring AI Java

过去,Java在AI应用框架方面存在不足,缺乏一个能够良好支持AI开发的统一框架。SpringAI应运而生,它是一个专为AI工程设计的应用框架,旨在将Spring生态系统的设计原则如可移植性和模块化引入AI领域。SpringAI的核心优势在于它提供了一套标准化接口,使得开发者可以轻松地切换不同的AI服务提供商,仅需修改配置即可。此外,SpringAI与现有的Spring生态兼容性极好,同时也完美地融入了Java面向对象编程的特点。这不仅简化了开发流程,还极大地减少了迁移和维护的成本。

web18285482512的博客 2080

如何使用Java Spring Boot执行RAG架构GenAI项目的示例.zip

如何使用Java Spring Boot执行RAG架构GenAI项目的示例.zip

实战:Spring AI + DeepSeek + RAG:快速搭建本地AI对话服务

在AI大模型技术快速发展的背景下,如何通过本地调用充分利用AI大模型的能力,解决复杂任务,满足开发者对高性能AI服务的需求。特别是在企业知识库、教育问答等场景中,连续对话AI应用具有巨大的应用价值。文章结合Spring AI、Spring AI Alibaba、DeepSeek-R1模型以及RAG技术,手把手教你如何利用Docker容器化部署Redis和Elasticsearch,搭建一个支持连续对话的AI应用,为开发者提供强大的AI能力支持。

二流的吃货 4674

allegro转AD-(附工具)

本文介绍了将Allegro的.brd文件转换为Altium Designer可用的.alg文件的操作流程。首先需要下载专用转换工具,然后通过运行.bat脚本将.brd文件转换为.alg格式。最后在Altium Designer中使用导入向导完成文件转换,生成可用的PCB设计文件。整个过程简单快捷,只需三个步骤即可实现Allegro到Altium Designer的工程文件转换。

weixin_50120208的博客 1717

使用 langchain4j 快速搭建一个 RAG 应用。

•。

2401_85280106的博客 1963

【信号与系统实战解析】—— 拉普拉斯变换在电路分析中的关键应用

本文深入解析了拉普拉斯变换在电路分析中的关键应用。通过将时域微分方程转换为复频域的代数方程,系统化处理初始条件,并利用零极点图分析电路稳定性与频率响应。文章以RLC串联电路为例,详细演示了s域建模、性质运用及综合分析方法,为工程师提供了分析动态电路的强大工具与清晰视角。

weixin_29093017的博客 174

Matlab安装Embedded Coder Support Package for Texas Instruments C2000 Processors教程

Matlab安装Embedded Coder Support Package for Texas Instruments C2000 Processors

m0_69133594的博客 2826

【spring ai】java 实现RAG检索增强,超快速入门

spring ai rag 人工智能检索增强能力提升,快速入门

whisperzzza的博客 4148

AAAI 2025杰出论文解读:神经符号推理与生物多样性计算的突破性进展

本文深度解读了AAAI 2025两篇杰出论文的突破性进展。南京大学周志华团队提出“溯因反射”框架,高效解决神经符号推理中的“不一致性”核心难题,为构建可靠、可解释的AI系统提供了新路径。斯坦福大学等机构的DiVShift研究,则系统分析了公民科学数据中的复杂分布偏移,为利用海量数据精准监测生物多样性及应对AI数据偏差提供了关键方法论。

weixin_29085865的博客 501

【大模型】快速体验百度智能云千帆AppBuilder搭建知识库与小助手

前天,在【百度智能云智算大会】上,百度智能云千帆AppBuilder正式开放服务。这是一个AI原生应用开发工作台,可以满足企业对敏捷和高效地进行AI原生应用开发与运维的需求。简单来说,就是将开发大模型应用的常见模式、工具、流程,沉淀成一个工作台,帮助开发者、企业聚焦在自身业务,分钟级快速搭建AI原生应用,赋能企业高效开发,降低AI原生应用开发门槛。千帆AppBuilder是百度智能云推出的一个工作台:旨在加速AI原生应用开发,使人人都能开发出属于自己的AI原生应用。

阿Q的小窝 1万+

数字IC/FPGA 秋招知识点不全面整理

数字IC/FPGA 秋招知识点不全面整理

w0shishabi的博客 7866

MMC混合型换流器系统设计与开关模型仿真

摘要:本文针对220kV交流/400kV直流电压等级,设计了由20个半桥和20个全桥子模块组成的混合型MMC换流器系统。通过建立开关函数等效模型,研究了其拓扑结构、工作原理及控制策略,包括NLM调制、电容电压均衡和环流抑制。MATLAB/Simulink仿真结果表明,系统直流电压波动控制在±5%以内,交流电流THD低于1.8%,验证了混合型MMC在高压大功率应用中的良好性能。该研究为工程实践提供了参考依据。 关键词:模块化多电平换流器;开关函数模型;混合子模块;最近电平逼近调制;电容电压均衡

huanghm88的专栏 133

SpringAI学习及搭建AI原生应用

SpringAI的推出被认为是Java开发领域的一大福音,因为它结合了Spring生态系统的设计原则和模块化的概念,降低了接入大型语言模型(LLM)的学习成本。此外,在输入封装和输出处理等配套类的帮助下,聊天模型 API 统一了与 AI 模型的通信。简单而言,Spring AI 是AI工程师所使用的一种应用性框架,通过提供出来的API和API key来进行开发应用,所用在于使用AI应用来简化开发工序流程。

qq_43548590的博客 1万+

华为防火墙——本地Portal认证

配置IP地址、路由、Nat策略使得内网主机可以访问公网服务器对网段不进行认证,对网段进行portal认证。

m0_49864110的博客 3259

✨快速搭建✨DeepSeek本地RAG应用

由深度求索开源的DeepSeek-R1推理模型在性能上已经能够对标OpenAI-o1正式版,正巧马上大年初四轮到我值班处理告警,突发奇想能不能让DeepSeek-R1来帮我识别告警并结合之前同事们处理告警时的记录信息来合理给出处置建议

用朴素的话说技术。 1441

手把手教你学Simulink--基于Simulink的高增益DC-DC变换器仿真建模

特点高电压增益:可以在不使用变压器的情况下实现较大的电压升压比。适用于低电压源:如太阳能电池板、燃料电池等提供的低压直流电源。效率问题:设计时需特别注意提高效率,减少能量损失。挑战电路复杂性:通常涉及多个电感和电容,以及复杂的开关模式。元件选择:合适的元件参数对于达到理想性能至关重要。控制策略:确保高效稳定运行的同时,适应负载变化。首先明确要模拟的任务内容。实现特定的电压增益比(例如从24V升至380V)。根据预期的输入输出电压确定合适的电路拓扑和元件值。

MHD0815的博客 173

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

从青铜到王者,DeepSeek+Spring AI 搭建 RAG 知识库

在人工智能飞速发展的当下,大语言模型(LLMs)已广泛应用于各种自然语言处理任务。但它们也存在一些局限性,如 “幻觉” 问题,即生成的内容可能与事实不符或缺乏足够的准确性。为了解决这些问题,检索增强生成(Retrieval-Augmented Generation,RAG)技术应运而生。RAG 技术的核心在于将检索与生成相结合。传统的生成模型依赖大量的训练数据来生成回答,当面对新问题或新兴领域知识时,可能会产生不准确或不合逻辑的回答。

xxue345678的博客 2908

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring AI: 为Java应用赋能人工智能

Spring AI 是 Spring 生态系统的一部分,旨在简化 Java 应用中人工智能功能的集成。它通过统一接口支持多个主流 AI 模型提供商,如 OpenAI 和 Google Vertex AI,并强调可移植性和模块化设计。文章详细介绍了 Spring AI 的核心组件、快速入门步骤和高级功能,例如 RAG(检索增强生成)与向量数据库集成。此外,还涵盖了最佳实践、安全性和性能优化策略,并展望了其未来发展。

lenyan~的博客 1849

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 大模型这么火,今天手把手教大家从搭建环境开始实现本地部署ChatGLM2 6B 大模型
下一篇: 教你六个步骤完成本地知识库搭建
Llama-Turbo
博客等级 码龄4年 9901粉丝 2022原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值