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

SpringBoot 集成 LangChain4j RAG PostgreSQL 搜索

SpringBoot 集成 LangChain4j RAG PostgreSQL 搜索

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

LangChain4j 提供了一系列官方封装的 ONNX 模型包,全部可离线使用。

模型名artifactId语言向量维度特点
all-MiniLM-L6-v2langchain4j-embeddings-all-minilm-l6-v2英文384轻量、快速、英文检索推荐
bge-small-en-v1.5-qlangchain4j-embeddings-bge-small-en-v15-q英文384比MiniLM准确度更高(特别是长句)
bge-small-zh-v1.5-qlangchain4j-embeddings-bge-small-zh-v15-q中文384中文优化模型,性能优异
bge-large-zh-v1.5-qlangchain4j-embeddings-bge-large-zh-v15-q中文1024高精度中文语义模型
e5-small-v2langchain4j-embeddings-e5-small-v2英文384优化了通用信息检索性能(英文)
gte-smalllangchain4j-embeddings-gte-small英文384平衡速度与精度的通用英文模型
gte-baselangchain4j-embeddings-gte-base英文768准确度更高,速度略慢
gte-largelangchain4j-embeddings-gte-large英文1024高精度版本(对语义检索更强)
bge-m3langchain4j-embeddings-bge-m3多语言1024多语言语义统一空间

1 依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"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-pg</artifactId><version>1.0.0</version><name>lang-chain-pg</name><description>Demo project for Spring Boot</description><properties><java.version>25</java.version></properties><dependencyManagement><dependencies><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-bom</artifactId><version>1.6.0</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><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 针对 OpenAI 的 Spring Boot starter--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai-spring-boot-starter</artifactId></dependency><!--LangChain4j 对 PostgreSQL 向量扩展(pgvector)的支持库--><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-pgvector</artifactId></dependency><!-- 本地模型 --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-embeddings-bge-small-zh-v15-q</artifactId><version>1.7.1-beta14</version></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></project>

2 配置

spring:application:name: lang-chain-rag

3 代码

1 RagConf

package com.xu.conf;import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.embedding.onnx.bgesmallzhv15q.BgeSmallZhV15QuantizedEmbeddingModelFactory;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.pgvector.PgVectorEmbeddingStore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RagConf {@Beanpublic EmbeddingModel embeddingModel() {//return new AllMiniLmL6V2EmbeddingModelFactory().create();// 使用 BGE-small-zh-v1.5-quantized 模型return new BgeSmallZhV15QuantizedEmbeddingModelFactory().create();}@Beanpublic EmbeddingStore<TextSegment> embeddingStore() {return PgVectorEmbeddingStore.builder().dropTableFirst(true).createTable(true).table("embedding").user("postgres").host("localhost").password("123456").database("postgres").port(5432).dimension(512).build();}}

2 RagController

package com.xu.controller;import dev.langchain4j.data.document.DocumentSplitter;
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 org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
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;@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=100 表示每段最大 500 tokens,overlap=30 表示重叠 30 tokensvar splitter = new DocumentByWordSplitter(100, 30);// 3️⃣ 构建带自定义拆分器的 ingestorvar ingestor = EmbeddingStoreIngestor.builder().documentSplitter(splitter).embeddingStore(embeddingStore).build();// 4️⃣ 执行嵌入生成与存储ingestor.ingest(documents);return documents.size();}/*** RAG数据查询** @param query 查询* @return 结果*/@GetMapping("/search")public Object search(@RequestParam String query) {var searchRequest = EmbeddingSearchRequest.builder().queryEmbedding(embeddingModel.embed(TextSegment.from(query)).content()).maxResults(5).minScore(0.6).build();var matches = embeddingStore.search(searchRequest).matches();var results = matches.stream().map(match -> {Map<String, Object> map = new HashMap<>();map.put("embeddingScore", match.score());map.put("embeddingId", match.embeddingId());return map;}).collect(Collectors.toList());return ResponseEntity.ok(results);}}

4 测试

在这里插入图片描述

在这里插入图片描述

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

相关文章:

  • 扫地机器人算法分析
  • C语言——深入解析C语言指针:从基础到实践从入门到精通(二)
  • JSAR 空间小程序开发全指南:从环境搭建到跨场景应用落地
  • 驻马店网站建设价格上海人才市场招聘网
  • http 长链接和短链接
  • Java:将 Word 文档转换为密码保护的 PDF 文件
  • 267-基于Django的携程酒店数据分析推荐系统
  • Redis中Geospatial 实际应用指南
  • React水合技术:优化SSR和CSR的完美结合
  • 【六级】全国大学英语六级历年真题及答案解析PDF电子版(2015-2025年6月)
  • Adware Zap - Malware Cleaner for Mac v2.12.0 轻量级广告和恶意软件清理工具
  • 从底层到上层的“外挂”:deque、stack、queue、priority_queue 全面拆解
  • 淘客网站做弹窗广告注册公司的网址是什么
  • 域名是否就是网站网站建站网站建站
  • 李宏毅机器学习笔记21
  • 自动化脚本快速批量处理
  • 哈尔滨建工建设有限公司织梦网站后台如何做百度优化
  • 第 96 场周赛:三维形体投影面积、救生艇、索引处的解码字符串、细分图中的可到达节点
  • 网站建设宁夏凤凰云什么是电子商务系统
  • 用php做电子商务网站微信做商城网站
  • 【LeetCode】146. LRU 缓存
  • Linux Cgroup与Device Whitelist详解
  • 恶意代码防范技术与原理(二)
  • Facebook广告投放:地域定向流量不精准?x个优化指南
  • 【Linux指令 (三)】从理解到熟悉:探索Linux底层逻辑与指令的高效之道,理解Linux系统理论核心概念与基础指令
  • 2025年10月实时最新获取地图边界数据方法,省市区县街道多级联动【文末附实时geoJson数据下载】
  • 基于单片机的燃气热水器智能控制系统设计
  • 江苏省建设厅网站怎么登不上html网页代码编辑器
  • 云服务器怎么架设网站wordpress删除月份归档
  • go语言返回值 于defer的特殊原理