Initial commit
This commit is contained in:
58
langchain4j-ai-rag/pom.xml
Normal file
58
langchain4j-ai-rag/pom.xml
Normal 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>
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
5
langchain4j-ai-rag/src/main/resources/application.yml
Normal file
5
langchain4j-ai-rag/src/main/resources/application.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
server:
|
||||
port: 9010
|
||||
spring:
|
||||
application:
|
||||
name: langchain4j-ai-rag
|
||||
1
langchain4j-ai-rag/src/main/resources/files/test.txt
Normal file
1
langchain4j-ai-rag/src/main/resources/files/test.txt
Normal file
@@ -0,0 +1 @@
|
||||
电子科技大学,简称“成电”(UESTC) [12],位于四川成都,是中华人民共和国教育部直属全国重点大学 [127],国家首批“211工程”“985工程”重点建设大学,首批国家“双一流”建设高校; [188]入选111计划 [140]、101计划 [141]、强基计划 [137]、珠峰计划 [138]、英才计划 [120]、卓越工程师教育培养计划 [139]、国家建设高水平大学公派研究生项目 [136];是一所以电子信息科学技术为核心,以工为主,理工渗透,理、工、管、文、医协调发展的多科性研究型大学,被誉为“中国民族电子工业摇篮”和“中国电子类院校排头兵”。
|
||||
21
langchain4j-ai-rag/src/main/resources/files/电子科大.md
Normal file
21
langchain4j-ai-rag/src/main/resources/files/电子科大.md
Normal file
@@ -0,0 +1,21 @@
|
||||
电子科技大学(University of Electronic Science and Technology of China,简称 **UESTC** 或 **“成电”**)是中国电子信息领域顶尖的高等学府,也是国家“985工程”“211工程”和首批“双一流”A类建设高校。以下是其核心简介:
|
||||
|
||||
------
|
||||
|
||||
### 📍 基本信息
|
||||
|
||||
- **所在地**:四川省成都市(主校区为清水河校区,另有沙河、九里堤校区)
|
||||
- **创办时间**:1956年
|
||||
- **主管部门**:中华人民共和国教育部
|
||||
- **校训**:求实求真,大气大为
|
||||
|
||||
------
|
||||
|
||||
### 🏛️ 历史沿革
|
||||
|
||||
- 由周恩来总理亲自部署,整合:
|
||||
- 交通大学(现上海交大、西安交大)
|
||||
- 南京工学院(现东南大学)
|
||||
- 华南工学院(现华南理工大学) 的**电讯工程专业**,组建 **成都电讯工程学院**。
|
||||
- 1988年更名为 **电子科技大学**。
|
||||
- 1960年即被列为全国重点高校,1961年成为“国防七子”之一。
|
||||
BIN
langchain4j-ai-rag/src/main/resources/files/电子科大.pdf
Normal file
BIN
langchain4j-ai-rag/src/main/resources/files/电子科大.pdf
Normal file
Binary file not shown.
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user