当前位置: 首页 > news >正文

SpringBoot 集成 LangChain4j RAG Redis 搜索

SpringBoot 集成 LangChain4j RAG Redis 搜索

  • 1 依赖
  • 2 配置
  • 3 代码
    • 1 RagConf
    • 2 RagController
  • 4 测试

1 依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.6</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.xu</groupId><artifactId>lang-chain-redis</artifactId><version>0.0.1-SNAPSHOT</version><name>lang-chain-redis</name><description>Demo project for Spring Boot</description><dependencyManagement><dependencies><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-bom</artifactId><version>1.7.1</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-community-bom</artifactId><version>1.7.1-beta14</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><properties><maven.compiler.source>25</maven.compiler.source><maven.compiler.target>25</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencies><!--Spring Boot 的 Web starter--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--LangChain4j 的 Spring Boot starter--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-spring-boot-starter</artifactId></dependency><!--LangChain4j 对 redis 向量扩展(vector)的支持库--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-community-redis-spring-boot-starter</artifactId></dependency><!-- 本地模型 -->
<!--        <dependency>-->
<!--            <groupId>dev.langchain4j</groupId>-->
<!--            <artifactId>langchain4j-embeddings-bge-small-zh-v15-q</artifactId>-->
<!--        </dependency>--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-embeddings-all-minilm-l6-v2</artifactId></dependency><!-- 文档解析 --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-document-parser-apache-tika</artifactId></dependency><!--Spring Boot 的开发工具,提供热部署、自动重启等功能,加速开发过程--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!--简化 Java 代码的工具库--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--Spring Boot 的测试 starter--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></path></annotationProcessorPaths></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build><repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories><pluginRepositories><pluginRepository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></pluginRepository></pluginRepositories></project>

2 配置

server:port: 8080servlet:context-path: /spring:application:name: lang-chain-redislogging:file:name: logs/ lang-chain-redis.loglevel:root: INFOcom.xu: INFOlangchain4j:community:redis:host: localhostport: 6379user: langchain4jpassword: 123456indexName: langchain4jprefix: ":lc4j:"dimension: 384

3 代码

1 RagConf

package com.xu.conf;import dev.langchain4j.community.store.embedding.redis.RedisEmbeddingStore;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.embedding.onnx.allminilml6v2.AllMiniLmL6V2EmbeddingModelFactory;
import dev.langchain4j.store.embedding.EmbeddingStore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import redis.clients.jedis.JedisPooled;@Configuration
public class RagConf {@Beanpublic EmbeddingModel embeddingModel() {return new AllMiniLmL6V2EmbeddingModelFactory().create();//return new BgeSmallZhV15QuantizedEmbeddingModelFactory().create();}@Bean@Primarypublic EmbeddingStore<TextSegment> embeddingStore() {return RedisEmbeddingStore.builder().jedisPooled(new JedisPooled("127.0.0.1", 6379, "langchain4j", "123456")).dimension(384).build();}}

2 RagController

package com.xu.controller;import dev.langchain4j.data.document.loader.FileSystemDocumentLoader;
import dev.langchain4j.data.document.parser.apache.tika.ApacheTikaDocumentParser;
import dev.langchain4j.data.document.splitter.DocumentByWordSplitter;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.store.embedding.EmbeddingSearchRequest;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping("/rag")
public class RagController {private final EmbeddingModel embeddingModel;private final EmbeddingStore<TextSegment> embeddingStore;/*** RAG数据入库** @return 数量*/@GetMapping("/save")public Object chat() {// 1️⃣ 使用 Tika 解析 docx/pdf 等文件var documents = FileSystemDocumentLoader.loadDocuments("D:\\SourceCode\\简历",new ApacheTikaDocumentParser());// 2️⃣ 定义自定义的文本拆分器 chunkSize=50 表示每段最大 50 tokens,overlap=10 表示重叠 10 tokensvar splitter = new DocumentByWordSplitter(50, 10);// 3️⃣ 构建带自定义拆分器的 ingestorvar ingestor = EmbeddingStoreIngestor.builder().documentSplitter(splitter).embeddingStore(embeddingStore).embeddingModel(embeddingModel).build();// 4️⃣ 执行嵌入生成与存储ingestor.ingest(documents);return documents.size();}/*** RAG数据查询** @param query 查询* @return 结果*/@GetMapping("/search")public Object search(@RequestParam String query) {// 添加日志输出查询内容System.out.println("查询内容: " + query);var embedding = embeddingModel.embed(TextSegment.from(query)).content();System.out.println("查询向量维度: " + embedding.dimension());var searchRequest = EmbeddingSearchRequest.builder().queryEmbedding(embedding).maxResults(5).minScore(0.6).build();var matches = embeddingStore.search(searchRequest).matches();System.out.println("匹配结果数量: " + matches.size());var results = matches.stream().map(match -> {Map<String, Object> map = new HashMap<>();map.put("embeddingScore", match.score());map.put("embeddingId", match.embeddingId());// 添加文本内容以便调试map.put("embedded", match.embedded().text());return map;}).collect(Collectors.toList());return ResponseEntity.ok(results);}}

4 测试

在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/a/483355.html

相关文章:

  • 宿迁市住房城乡建设局网站网站建设基础策划书
  • 3.5 JSON Schema回顾
  • 艺术学校示范校建设专题网站wordpress 评论模板制作
  • 图像分类项目:Fashion-MNIST 分类(SimpleCNN )
  • 【BIO、NIO、AIO】——原理、优缺点、使用场景
  • 金坛网站建设报价庆阳网站建设报价
  • 广州手表网站大学生职业生涯规划ppt
  • 学校安全教育网站建设上海浦东新区
  • OpenAI智能体框架_Num1
  • LLM 论文精读(十)The Landscape of Agentic Reinforcement Learning for LLMs: A Survey
  • 用模板做企业网站防城港市建设工程质量监督站网站
  • 湖南益阳网站建设工作态度和责任心句子
  • 购物网站网页模板制作一个简单的网站
  • Twitter内容分发如何优化?
  • 西安网站建设云速百度登录个人中心官网
  • 哪些行业做网站推广的多网站首页制作代码
  • 汽车HIL测试:电子开发的关键验证环节
  • 小说网站怎么做权重适配网站建设模版
  • 2.1 欧拉集群安装Keystone认证服务
  • pq|二维前缀和
  • 西安商城网站开发品牌营销型网站建设
  • vector,咕咕咕!
  • <数据集>药丸缺陷识别数据集<目标检测>
  • Java 在AWS上使用SDK凭证获取顺序
  • 百度手机网站自助建站青岛硅谷网站建设
  • 做响应式网站的物流微信商城网站案例展示
  • 【java】springboot分库分表 12 种分片算法(下)
  • Java多线程编程实战技巧深度解析:从并发基础到高吞吐架构的艺术
  • Nginx 自动化脚本安装方案
  • 巩义网站建设托管邹平建设项目网站公示