Initial commit

This commit is contained in:
userpu
2025-12-17 19:47:14 +08:00
commit 0d15e20780
119 changed files with 3582 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.iwe3</groupId>
<artifactId>langchain4j-ai-java</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>langchain4j-ai-rag</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 简单的rag实现 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-easy-rag</artifactId>
</dependency>
<!-- 解析pdf文档 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-document-parser-apache-pdfbox</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--导入低阶依赖-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
<version>1.9.1-beta17</version>
</dependency>
<!--导入高阶依赖-->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
<version>1.9.1-beta17</version>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,12 @@
package com.iwe3.langchain4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class RagApplication {
public static void main(String[] args) {
SpringApplication.run(RagApplication.class,args);
}
}

View File

@@ -0,0 +1,23 @@
package com.iwe3.langchain4j.config;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class LLMConfig {
/**
* @Description: 普通对话接口 ChatModel
*/
@Bean(name = "qwen")
public ChatModel chatModelQwen()
{
return OpenAiChatModel.builder()
.apiKey(System.getenv("DASH_SCOPE_API_KEY"))
.modelName("qwen-plus")
.baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
.build();
}
}

View File

@@ -0,0 +1,5 @@
server:
port: 9010
spring:
application:
name: langchain4j-ai-rag

View File

@@ -0,0 +1 @@
电子科技大学简称“成电”UESTC [12],位于四川成都,是中华人民共和国教育部直属全国重点大学 [127]国家首批“211工程”“985工程”重点建设大学首批国家“双一流”建设高校 [188]入选111计划 [140]、101计划 [141]、强基计划 [137]、珠峰计划 [138]、英才计划 [120]、卓越工程师教育培养计划 [139]、国家建设高水平大学公派研究生项目 [136];是一所以电子信息科学技术为核心,以工为主,理工渗透,理、工、管、文、医协调发展的多科性研究型大学,被誉为“中国民族电子工业摇篮”和“中国电子类院校排头兵”。

View File

@@ -0,0 +1,21 @@
电子科技大学University of Electronic Science and Technology of China简称 **UESTC****“成电”**是中国电子信息领域顶尖的高等学府也是国家“985工程”“211工程”和首批“双一流”A类建设高校。以下是其核心简介
------
### 📍 基本信息
- **所在地**:四川省成都市(主校区为清水河校区,另有沙河、九里堤校区)
- **创办时间**1956年
- **主管部门**:中华人民共和国教育部
- **校训**:求实求真,大气大为
------
### 🏛️ 历史沿革
- 由周恩来总理亲自部署,整合:
- 交通大学(现上海交大、西安交大)
- 南京工学院(现东南大学)
- 华南工学院(现华南理工大学) 的**电讯工程专业**,组建 **成都电讯工程学院**
- 1988年更名为 **电子科技大学**
- 1960年即被列为全国重点高校1961年成为“国防七子”之一。

View File

@@ -0,0 +1,83 @@
package com.iwe3.langchain4j;
import ai.djl.huggingface.tokenizers.HuggingFaceTokenizer;
import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.loader.FileSystemDocumentLoader;
import dev.langchain4j.data.document.parser.apache.pdfbox.ApachePdfBoxDocumentParser;
import dev.langchain4j.data.document.splitter.DocumentByParagraphSplitter;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.output.TokenUsage;
import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class RagApplicationTest {
@Resource
private ChatModel chatModel;
@Test
public void testCountToken(){
var res = chatModel.chat(UserMessage.from("你好,这是一段文字!"));
var result = res.aiMessage().text();
System.out.println("通过调用大模型返回结果:" + result);
/*Token用量计算底层API*/
var tu = res.tokenUsage();
System.out.println("本地调用销毁的TOKEN" + tu);
}
/**
* 加载文档并存入向量数据库
*/
@Test
public void testReadDocumentAndStore() {
// 使用FileSystemDocumentLoader读取指定目录下的知识库文档
// 并使用默认的文档解析器TextDocumentParser对文档进行解析
var document = FileSystemDocumentLoader.loadDocument("D:/files/电子科大.md");
// 为了简单起见,我们暂时使用基于内存的向量存储
InMemoryEmbeddingStore<TextSegment> db = new InMemoryEmbeddingStore<>();
// /ingest
// /1、分割文档默认使用递归分割器将文档分割为多个文本片段每个片段包含不超过 300个token并且有 30个token的重叠部分保证连贯性
// /2、文本向量化使用一个LangChain4j内置的轻量化向量模型对每个文本片段进行向量化
// /3、将原始文本和向量存储到向量数据库中(InMemoryEmbeddingStore)
EmbeddingStoreIngestor.ingest(document, db);
// 查看向量数据库内容
System.out.println(db);
}
/**
* 解析PDF
*/
@Test
public void testParsePDF() {
var document = FileSystemDocumentLoader.loadDocument(
"D:/files/电子科大.pdf",
new ApachePdfBoxDocumentParser()
);
System.out.println(document);
}
@Test
public void testReadDocument() {
// 使用FileSystemDocumentLoader读取指定目录下的知识库文档
// 并使用默认的文档解析器TextDocumentParser对文档进行解析
var document = FileSystemDocumentLoader
.loadDocument("D:/files/test.txt");
System.out.println(document.metadata());
System.out.println(document.text());
}
}