AI智能工牌的建表语句

This commit is contained in:
spllzh
2025-08-07 22:31:05 +08:00
parent 6dfe402eed
commit 58a131e3c8
26 changed files with 817 additions and 42 deletions

View File

@@ -0,0 +1,122 @@
package com.rj.embedding;
import dev.langchain4j.community.store.embedding.redis.RedisEmbeddingStore;
import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.DocumentSplitter;
import dev.langchain4j.data.document.loader.ClassPathDocumentLoader;
import dev.langchain4j.data.document.loader.FileSystemDocumentLoader;
import dev.langchain4j.data.document.parser.apache.pdfbox.ApachePdfBoxDocumentParser;
import dev.langchain4j.data.document.splitter.DocumentSplitters;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.rag.content.retriever.ContentRetriever;
import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.List;
/**
* Author: 李中华 wx: spllzh email(qq): 28668817@qq.com
* Date: 2025/8/4 18:21
**/
@Configuration
public class EnbedingModelConfig {
@Autowired
private EmbeddingModel embeddingModel;
@Autowired
RedisEmbeddingStore redisEmbeddingStore;
/**
* 创建向量数据库操作对象
* @return
*/
@Bean("myEmbeddingStoreInMemory")
// @Primary
public EmbeddingStore embeddingStoreInMemory() {
//1 , 加载知识库文档进 内存
List<Document> documents = ClassPathDocumentLoader.loadDocuments("knowledge");
//2 构建向量数据库操作对象
InMemoryEmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>();
//3 构建EmbeddingStoreIngestor 完成文本数据的切割, 向量化, 存储
EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder()
.embeddingStore(embeddingStore)
.build();
ingestor.ingest( documents);
return embeddingStore;
}
// @Bean("myEmbeddingStoreInMemory2")
// @Primary
public EmbeddingStore embeddingStoreInMemory2() throws IOException {
//1 , 加载知识库文档进 内存
List<Document> documents1 = ClassPathDocumentLoader.loadDocuments("knowledge\\pdf",new ApachePdfBoxDocumentParser());
// List<Document> documents2 = ClassPathDocumentLoader.loadDocuments("knowledge");
//2 构建向量数据库操作对象
InMemoryEmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>();
//构建文档 分割器对象
DocumentSplitter recursiveSplitter = DocumentSplitters.recursive(300, 50);
//3 构建EmbeddingStoreIngestor 完成文本数据的切割, 向量化, 存储
EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder()
.embeddingStore(embeddingStore)
.documentSplitter(recursiveSplitter) //设置文档分割器
// .embeddingModel(embeddingModel)
.build();
ingestor.ingest( documents1);
return embeddingStore;
}
// @Bean("myEmbeddingStoreInRedis") 不要打开,否则每次都会调用 阿里云的向量化模型 消耗token
// @Primary
public EmbeddingStore embeddingStoreInRedis() throws IOException {
//1 , 加载知识库文档进 内存
List<Document> documents1 = ClassPathDocumentLoader.loadDocuments("knowledge\\pdf",new ApachePdfBoxDocumentParser());
// List<Document> documents2 = ClassPathDocumentLoader.loadDocuments("knowledge");
//构建文档 分割器对象
DocumentSplitter recursiveSplitter = DocumentSplitters.recursive(300, 50);
//3 构建EmbeddingStoreIngestor 完成文本数据的切割, 向量化, 存储
EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder()
.embeddingStore(redisEmbeddingStore)
.documentSplitter(recursiveSplitter) //设置文档分割器
.embeddingModel(embeddingModel)
.build();
ingestor.ingest( documents1);
return redisEmbeddingStore;
}
@Bean
public ContentRetriever contentRetriever(){
EmbeddingStoreContentRetriever contentRetriever = EmbeddingStoreContentRetriever.builder()
.embeddingStore(redisEmbeddingStore)
.embeddingModel(embeddingModel)
.minScore(0.5)//相似度
.maxResults(3) //最多返回3条
.build();
return contentRetriever;
}
}