diff --git a/src/main/java/com/supervision/pdfqaserver/config/MybatisPlusConfig.java b/src/main/java/com/supervision/pdfqaserver/config/MybatisPlusConfig.java index b72981c..76cd897 100644 --- a/src/main/java/com/supervision/pdfqaserver/config/MybatisPlusConfig.java +++ b/src/main/java/com/supervision/pdfqaserver/config/MybatisPlusConfig.java @@ -1,6 +1,7 @@ package com.supervision.pdfqaserver.config; import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; @@ -31,6 +32,16 @@ public class MybatisPlusConfig { return interceptor; } + + + @Bean + public ConfigurationCustomizer mybatisConfigurationCustomizer() { + return configuration -> { + configuration.getTypeHandlerRegistry() + .register(float[].class, new VectorTypeHandler()); + }; + } + private PaginationInnerInterceptor paginationInterceptor() { PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor(); paginationInterceptor.setOverflow(false); diff --git a/src/main/java/com/supervision/pdfqaserver/config/VectorTypeHandler.java b/src/main/java/com/supervision/pdfqaserver/config/VectorTypeHandler.java new file mode 100644 index 0000000..2d22b37 --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/config/VectorTypeHandler.java @@ -0,0 +1,56 @@ +package com.supervision.pdfqaserver.config; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.postgresql.util.PGobject; + +import java.sql.*; + +public class VectorTypeHandler extends BaseTypeHandler { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, + float[] parameter, JdbcType jdbcType) throws SQLException { + // 将float数组转换为PostgreSQL vector格式字符串 + PGobject vector = new PGobject(); + vector.setType("vector"); + vector.setValue(arrayToVectorString(parameter)); + ps.setObject(i,vector); ; + } + + @Override + public float[] getNullableResult(ResultSet rs, String columnName) throws SQLException { + return vectorStringToArray(rs.getString(columnName)); + } + + @Override + public float[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return vectorStringToArray(rs.getString(columnIndex)); + } + + @Override + public float[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return vectorStringToArray(cs.getString(columnIndex)); + } + + private String arrayToVectorString(float[] array) { + StringBuilder sb = new StringBuilder("["); + for (int i = 0; i < array.length; i++) { + if (i > 0) sb.append(","); + sb.append(array[i]); + } + sb.append("]"); + return sb.toString(); + } + + private float[] vectorStringToArray(String vector) { + if (vector == null || vector.isEmpty()) return null; + String cleaned = vector.replace("[", "").replace("]", ""); + String[] parts = cleaned.split(","); + float[] result = new float[parts.length]; + for (int i = 0; i < parts.length; i++) { + result[i] = Float.parseFloat(parts[i].trim()); + } + return result; + } +} diff --git a/src/main/java/com/supervision/pdfqaserver/domain/QuestionCategory.java b/src/main/java/com/supervision/pdfqaserver/domain/QuestionCategory.java new file mode 100644 index 0000000..5a7dce5 --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/domain/QuestionCategory.java @@ -0,0 +1,46 @@ +package com.supervision.pdfqaserver.domain; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +/** + * 问题分类表 + * @TableName question_category + */ +@TableName(value ="question_category") +@Data +public class QuestionCategory implements Serializable { + /** + * 主键 + */ + @TableId + private String id; + + /** + * 分类名 + */ + private String categoryName; + + /** + * 父级id + */ + private String parentId; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/src/main/java/com/supervision/pdfqaserver/domain/QuestionCategoryIntention.java b/src/main/java/com/supervision/pdfqaserver/domain/QuestionCategoryIntention.java new file mode 100644 index 0000000..220d316 --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/domain/QuestionCategoryIntention.java @@ -0,0 +1,45 @@ +package com.supervision.pdfqaserver.domain; + +import com.baomidou.mybatisplus.annotation.*; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +/** + * 问题分类意图关联表 + * @TableName question_category_intention + */ +@TableName(value ="question_category_intention") +@Data +public class QuestionCategoryIntention implements Serializable { + /** + * 主键 + */ + @TableId + private String id; + + /** + * 问题分类id + */ + private String categoryId; + + /** + * 意图id + */ + private String intentId; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/src/main/java/com/supervision/pdfqaserver/domain/QuestionHandlerMapping.java b/src/main/java/com/supervision/pdfqaserver/domain/QuestionHandlerMapping.java new file mode 100644 index 0000000..fb933e6 --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/domain/QuestionHandlerMapping.java @@ -0,0 +1,46 @@ +package com.supervision.pdfqaserver.domain; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Data; + +/** + * 问题处理器映射表 + * @TableName question_handler_mapping + */ +@TableName(value ="question_handler_mapping") +@Data +public class QuestionHandlerMapping implements Serializable { + /** + * 主键 + */ + @TableId + private String id; + + /** + * 问题分类id + */ + private String questionCategoryId; + + /** + * 处理器 + */ + private String handler; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/src/main/java/com/supervision/pdfqaserver/domain/TextVector.java b/src/main/java/com/supervision/pdfqaserver/domain/TextVector.java new file mode 100644 index 0000000..00009da --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/domain/TextVector.java @@ -0,0 +1,54 @@ +package com.supervision.pdfqaserver.domain; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import com.supervision.pdfqaserver.config.VectorTypeHandler; +import lombok.Data; + +/** + * 文本向量表 + * @TableName text_vector + */ +@TableName(value ="text_vector", autoResultMap = true) +@Data +public class TextVector implements Serializable { + /** + * 主键 + */ + @TableId + private String id; + + /** + * 文本内容 + */ + private String content; + + /** + * 向量值 + */ + @TableField(typeHandler = VectorTypeHandler.class) + private float[] embedding; + + /** + * 分类id + */ + private String categoryId; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/src/main/java/com/supervision/pdfqaserver/dto/TextVectorDTO.java b/src/main/java/com/supervision/pdfqaserver/dto/TextVectorDTO.java new file mode 100644 index 0000000..7fbdba7 --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/dto/TextVectorDTO.java @@ -0,0 +1,31 @@ +package com.supervision.pdfqaserver.dto; + +import lombok.Data; + +@Data +public class TextVectorDTO { + + private String id; + + + private double similarityScore; + + /** + * 文本内容 + */ + private String content; + + + + /** + * 分类id + */ + private String categoryId; + + + /** + * 向量值 + */ + private float[] embedding; + +} diff --git a/src/main/java/com/supervision/pdfqaserver/mapper/QuestionCategoryIntentionMapper.java b/src/main/java/com/supervision/pdfqaserver/mapper/QuestionCategoryIntentionMapper.java new file mode 100644 index 0000000..c2fdfdc --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/mapper/QuestionCategoryIntentionMapper.java @@ -0,0 +1,18 @@ +package com.supervision.pdfqaserver.mapper; + +import com.supervision.pdfqaserver.domain.QuestionCategoryIntention; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author Administrator +* @description 针对表【question_category_intention(问题分类意图关联表)】的数据库操作Mapper +* @createDate 2025-06-13 11:29:01 +* @Entity com.supervision.pdfqaserver.domain.QuestionCategoryIntention +*/ +public interface QuestionCategoryIntentionMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/supervision/pdfqaserver/mapper/QuestionCategoryMapper.java b/src/main/java/com/supervision/pdfqaserver/mapper/QuestionCategoryMapper.java new file mode 100644 index 0000000..91d44b4 --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/mapper/QuestionCategoryMapper.java @@ -0,0 +1,18 @@ +package com.supervision.pdfqaserver.mapper; + +import com.supervision.pdfqaserver.domain.QuestionCategory; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author Administrator +* @description 针对表【question_category(问题分类表)】的数据库操作Mapper +* @createDate 2025-06-13 11:29:01 +* @Entity com.supervision.pdfqaserver.domain.QuestionCategory +*/ +public interface QuestionCategoryMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/supervision/pdfqaserver/mapper/QuestionHandlerMappingMapper.java b/src/main/java/com/supervision/pdfqaserver/mapper/QuestionHandlerMappingMapper.java new file mode 100644 index 0000000..3c06ba1 --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/mapper/QuestionHandlerMappingMapper.java @@ -0,0 +1,18 @@ +package com.supervision.pdfqaserver.mapper; + +import com.supervision.pdfqaserver.domain.QuestionHandlerMapping; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author Administrator +* @description 针对表【question_handler_mapping(问题处理器映射表)】的数据库操作Mapper +* @createDate 2025-06-13 11:29:01 +* @Entity com.supervision.pdfqaserver.domain.QuestionHandlerMapping +*/ +public interface QuestionHandlerMappingMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/supervision/pdfqaserver/mapper/TextVectorMapper.java b/src/main/java/com/supervision/pdfqaserver/mapper/TextVectorMapper.java new file mode 100644 index 0000000..321ff3d --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/mapper/TextVectorMapper.java @@ -0,0 +1,23 @@ +package com.supervision.pdfqaserver.mapper; + +import com.supervision.pdfqaserver.domain.TextVector; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.supervision.pdfqaserver.dto.TextVectorDTO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* @author Administrator +* @description 针对表【text_vector(文本向量表)】的数据库操作Mapper +* @createDate 2025-06-11 16:40:57 +* @Entity com.supervision.pdfqaserver.domain.TextVector +*/ +public interface TextVectorMapper extends BaseMapper { + + List findSimilarByCosine(@Param("embedding")float[] embedding, @Param("threshold") double threshold, @Param("limit")int limit); +} + + + + diff --git a/src/main/java/com/supervision/pdfqaserver/service/AiCallService.java b/src/main/java/com/supervision/pdfqaserver/service/AiCallService.java index 523474a..d1ee5e2 100644 --- a/src/main/java/com/supervision/pdfqaserver/service/AiCallService.java +++ b/src/main/java/com/supervision/pdfqaserver/service/AiCallService.java @@ -2,6 +2,7 @@ package com.supervision.pdfqaserver.service; import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.chat.prompt.Prompt; +import org.springframework.ai.embedding.Embedding; import reactor.core.publisher.Flux; /** @@ -14,5 +15,5 @@ public interface AiCallService { Flux stream(Prompt prompt); - abstract void embedding(String text); + Embedding embedding(String text); } diff --git a/src/main/java/com/supervision/pdfqaserver/service/DeepSeekApiImpl.java b/src/main/java/com/supervision/pdfqaserver/service/DeepSeekApiImpl.java index d54ba18..2fddf1d 100644 --- a/src/main/java/com/supervision/pdfqaserver/service/DeepSeekApiImpl.java +++ b/src/main/java/com/supervision/pdfqaserver/service/DeepSeekApiImpl.java @@ -4,6 +4,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.chat.prompt.Prompt; +import org.springframework.ai.embedding.Embedding; import org.springframework.ai.openai.OpenAiChatModel; import reactor.core.publisher.Flux; import org.springframework.stereotype.Service; @@ -28,7 +29,8 @@ public class DeepSeekApiImpl implements AiCallService { } @Override - public void embedding(String text) { + public Embedding embedding(String text) { + return null; } } diff --git a/src/main/java/com/supervision/pdfqaserver/service/QuestionCategoryIntentionService.java b/src/main/java/com/supervision/pdfqaserver/service/QuestionCategoryIntentionService.java new file mode 100644 index 0000000..a3f004f --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/service/QuestionCategoryIntentionService.java @@ -0,0 +1,13 @@ +package com.supervision.pdfqaserver.service; + +import com.supervision.pdfqaserver.domain.QuestionCategoryIntention; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author Administrator +* @description 针对表【question_category_intention(问题分类意图关联表)】的数据库操作Service +* @createDate 2025-06-13 11:29:01 +*/ +public interface QuestionCategoryIntentionService extends IService { + +} diff --git a/src/main/java/com/supervision/pdfqaserver/service/QuestionCategoryService.java b/src/main/java/com/supervision/pdfqaserver/service/QuestionCategoryService.java new file mode 100644 index 0000000..fe3ad72 --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/service/QuestionCategoryService.java @@ -0,0 +1,13 @@ +package com.supervision.pdfqaserver.service; + +import com.supervision.pdfqaserver.domain.QuestionCategory; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author Administrator +* @description 针对表【question_category(问题分类表)】的数据库操作Service +* @createDate 2025-06-13 11:29:01 +*/ +public interface QuestionCategoryService extends IService { + +} diff --git a/src/main/java/com/supervision/pdfqaserver/service/QuestionHandlerMappingService.java b/src/main/java/com/supervision/pdfqaserver/service/QuestionHandlerMappingService.java new file mode 100644 index 0000000..dc192fa --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/service/QuestionHandlerMappingService.java @@ -0,0 +1,13 @@ +package com.supervision.pdfqaserver.service; + +import com.supervision.pdfqaserver.domain.QuestionHandlerMapping; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author Administrator +* @description 针对表【question_handler_mapping(问题处理器映射表)】的数据库操作Service +* @createDate 2025-06-13 11:29:01 +*/ +public interface QuestionHandlerMappingService extends IService { + +} diff --git a/src/main/java/com/supervision/pdfqaserver/service/TextVectorService.java b/src/main/java/com/supervision/pdfqaserver/service/TextVectorService.java new file mode 100644 index 0000000..418d8ca --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/service/TextVectorService.java @@ -0,0 +1,18 @@ +package com.supervision.pdfqaserver.service; + +import com.supervision.pdfqaserver.domain.TextVector; +import com.baomidou.mybatisplus.extension.service.IService; +import com.supervision.pdfqaserver.dto.TextVectorDTO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* @author Administrator +* @description 针对表【text_vector(文本向量表)】的数据库操作Service +* @createDate 2025-06-11 16:40:57 +*/ +public interface TextVectorService extends IService { + + List findSimilarByCosine(float[] embedding, double threshold , int limit); +} diff --git a/src/main/java/com/supervision/pdfqaserver/service/impl/OllamaCallServiceImpl.java b/src/main/java/com/supervision/pdfqaserver/service/impl/OllamaCallServiceImpl.java index a3de512..b6b657e 100644 --- a/src/main/java/com/supervision/pdfqaserver/service/impl/OllamaCallServiceImpl.java +++ b/src/main/java/com/supervision/pdfqaserver/service/impl/OllamaCallServiceImpl.java @@ -32,12 +32,9 @@ public class OllamaCallServiceImpl implements AiCallService { return ollamaChatModel.stream(prompt); } - public void embedding(String text) { + public Embedding embedding(String text) { - EmbeddingResponse embeddingResponse = embeddingModel.call( - new EmbeddingRequest(List.of("Hello World", "World is big and salvation is near"), - OllamaOptions.builder().model("quentinz/bge-large-zh-v1.5:latest").build())); - Embedding result = embeddingResponse.getResult(); - System.out.println(result); + EmbeddingResponse embeddingResponse = embeddingModel.call(new EmbeddingRequest(List.of(text),null)); + return embeddingResponse.getResult(); } } diff --git a/src/main/java/com/supervision/pdfqaserver/service/impl/QuestionCategoryIntentionServiceImpl.java b/src/main/java/com/supervision/pdfqaserver/service/impl/QuestionCategoryIntentionServiceImpl.java new file mode 100644 index 0000000..dac304b --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/service/impl/QuestionCategoryIntentionServiceImpl.java @@ -0,0 +1,22 @@ +package com.supervision.pdfqaserver.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.supervision.pdfqaserver.domain.QuestionCategoryIntention; +import com.supervision.pdfqaserver.service.QuestionCategoryIntentionService; +import com.supervision.pdfqaserver.mapper.QuestionCategoryIntentionMapper; +import org.springframework.stereotype.Service; + +/** +* @author Administrator +* @description 针对表【question_category_intention(问题分类意图关联表)】的数据库操作Service实现 +* @createDate 2025-06-13 11:29:01 +*/ +@Service +public class QuestionCategoryIntentionServiceImpl extends ServiceImpl + implements QuestionCategoryIntentionService{ + +} + + + + diff --git a/src/main/java/com/supervision/pdfqaserver/service/impl/QuestionCategoryServiceImpl.java b/src/main/java/com/supervision/pdfqaserver/service/impl/QuestionCategoryServiceImpl.java new file mode 100644 index 0000000..446e91d --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/service/impl/QuestionCategoryServiceImpl.java @@ -0,0 +1,22 @@ +package com.supervision.pdfqaserver.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.supervision.pdfqaserver.domain.QuestionCategory; +import com.supervision.pdfqaserver.service.QuestionCategoryService; +import com.supervision.pdfqaserver.mapper.QuestionCategoryMapper; +import org.springframework.stereotype.Service; + +/** +* @author Administrator +* @description 针对表【question_category(问题分类表)】的数据库操作Service实现 +* @createDate 2025-06-13 11:29:01 +*/ +@Service +public class QuestionCategoryServiceImpl extends ServiceImpl + implements QuestionCategoryService{ + +} + + + + diff --git a/src/main/java/com/supervision/pdfqaserver/service/impl/QuestionHandlerMappingServiceImpl.java b/src/main/java/com/supervision/pdfqaserver/service/impl/QuestionHandlerMappingServiceImpl.java new file mode 100644 index 0000000..18d1817 --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/service/impl/QuestionHandlerMappingServiceImpl.java @@ -0,0 +1,22 @@ +package com.supervision.pdfqaserver.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.supervision.pdfqaserver.domain.QuestionHandlerMapping; +import com.supervision.pdfqaserver.service.QuestionHandlerMappingService; +import com.supervision.pdfqaserver.mapper.QuestionHandlerMappingMapper; +import org.springframework.stereotype.Service; + +/** +* @author Administrator +* @description 针对表【question_handler_mapping(问题处理器映射表)】的数据库操作Service实现 +* @createDate 2025-06-13 11:29:01 +*/ +@Service +public class QuestionHandlerMappingServiceImpl extends ServiceImpl + implements QuestionHandlerMappingService{ + +} + + + + diff --git a/src/main/java/com/supervision/pdfqaserver/service/impl/TextVectorServiceImpl.java b/src/main/java/com/supervision/pdfqaserver/service/impl/TextVectorServiceImpl.java new file mode 100644 index 0000000..739d5de --- /dev/null +++ b/src/main/java/com/supervision/pdfqaserver/service/impl/TextVectorServiceImpl.java @@ -0,0 +1,29 @@ +package com.supervision.pdfqaserver.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.supervision.pdfqaserver.domain.TextVector; +import com.supervision.pdfqaserver.dto.TextVectorDTO; +import com.supervision.pdfqaserver.service.TextVectorService; +import com.supervision.pdfqaserver.mapper.TextVectorMapper; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** +* @author Administrator +* @description 针对表【text_vector(文本向量表)】的数据库操作Service实现 +* @createDate 2025-06-11 16:40:57 +*/ +@Service +public class TextVectorServiceImpl extends ServiceImpl + implements TextVectorService{ + + @Override + public List findSimilarByCosine(float[] embedding, double threshold , int limit) { + return super.getBaseMapper().findSimilarByCosine(embedding, threshold,limit); + } +} + + + + diff --git a/src/main/resources/mapper/QuestionCategoryIntentionMapper.xml b/src/main/resources/mapper/QuestionCategoryIntentionMapper.xml new file mode 100644 index 0000000..5e6c3aa --- /dev/null +++ b/src/main/resources/mapper/QuestionCategoryIntentionMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + id,category_id,intent_id, + create_time,update_time + + diff --git a/src/main/resources/mapper/QuestionCategoryMapper.xml b/src/main/resources/mapper/QuestionCategoryMapper.xml new file mode 100644 index 0000000..cb2b0aa --- /dev/null +++ b/src/main/resources/mapper/QuestionCategoryMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + id,category_name,parent_id, + create_time,update_time + + diff --git a/src/main/resources/mapper/QuestionHandlerMappingMapper.xml b/src/main/resources/mapper/QuestionHandlerMappingMapper.xml new file mode 100644 index 0000000..f710036 --- /dev/null +++ b/src/main/resources/mapper/QuestionHandlerMappingMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + id,question_category_id,handler, + create_time,update_time + + diff --git a/src/main/resources/mapper/TextVectorMapper.xml b/src/main/resources/mapper/TextVectorMapper.xml new file mode 100644 index 0000000..7198ecc --- /dev/null +++ b/src/main/resources/mapper/TextVectorMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + id,content,embedding, + category_id,create_time,update_time + + + diff --git a/src/test/java/com/supervision/pdfqaserver/PdfQaServerApplicationTests.java b/src/test/java/com/supervision/pdfqaserver/PdfQaServerApplicationTests.java index 5f034cf..25d4ff3 100644 --- a/src/test/java/com/supervision/pdfqaserver/PdfQaServerApplicationTests.java +++ b/src/test/java/com/supervision/pdfqaserver/PdfQaServerApplicationTests.java @@ -1,21 +1,23 @@ package com.supervision.pdfqaserver; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import com.supervision.pdfqaserver.constant.DocumentContentTypeEnum; import com.supervision.pdfqaserver.domain.PdfAnalysisOutput; +import com.supervision.pdfqaserver.domain.TextVector; import com.supervision.pdfqaserver.dto.*; import com.supervision.pdfqaserver.service.*; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.neo4j.driver.*; import org.neo4j.driver.Record; +import org.springframework.ai.embedding.Embedding; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; + +import java.util.*; import java.util.stream.Collectors; import static org.neo4j.driver.Values.parameters; @@ -206,8 +208,8 @@ class PdfQaServerApplicationTests { @Test void testQueryGraph2() { - aiCallService.embedding(""); - System.out.println("done"); + Embedding embedding = aiCallService.embedding("你好"); + System.out.println(embedding.getOutput().length); } @@ -295,4 +297,44 @@ class PdfQaServerApplicationTests { List domainMetadataDTOS = domainMetadataService.listByIntentionIds(List.of("1928020787140612097"), "1"); System.out.println(domainMetadataDTOS); } + + + @Autowired + private TextVectorService textVectorService; + @Test + public void textVectorTest() { + String texts = """ + 公司办公地点是哪里 + 请问贵公司的注册办公地址在哪里? + 能否告知公司总部所在地的具体位置? + 公司的主要办公场所设在什么地方? + 贵司的办公场所位于哪个城市/区域? + 请提供公司目前办公地点的详细地址? + """; + String[] split = texts.split("\n"); + List list = Arrays.stream(split).toList(); + for (String text : list) { + TextVector textVector = new TextVector(); + textVector.setContent(text.trim()); + textVector.setCategoryId("查询办公地点"); + float[] output = aiCallService.embedding(textVector.getContent()).getOutput(); + textVector.setEmbedding(output); + textVectorService.save(textVector); + } + + } + @Test + public void textVectorTest2() { + String queryText = "告诉我龙源电力的办公地点?"; + float[] output = aiCallService.embedding(queryText).getOutput(); + List similarByCosine = textVectorService.findSimilarByCosine(output, 0.3f, 10); + similarByCosine = similarByCosine.stream().sorted(Comparator.comparingDouble(TextVectorDTO::getSimilarityScore).reversed()).collect(Collectors.toList()); + log.info("<<<===========================>>>" ); + for (TextVectorDTO vectorDTO : similarByCosine) { + String content = vectorDTO.getContent(); + double similarityScore = vectorDTO.getSimilarityScore(); + String categoryId = vectorDTO.getCategoryId(); + System.out.printf("%s\t%s\t%s\t%s%n",queryText, categoryId , NumberUtil.decimalFormat("0.0000",similarityScore),content); + } + } }