作者 lixiang

删除无用代码

package org.jeecg.modules.airag.app.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
// @Bean(name = "mysqlDataSource")
// @Primary
// @ConfigurationProperties(prefix = "spring.datasource.mysql")
// public DataSource mysqlDataSource() {
// return DataSourceBuilder.create().build();
// }
//
// @Bean(name = "postgresDataSource")
// @ConfigurationProperties(prefix = "spring.datasource.postgres")
// public DataSource postgresDataSource() {
// return DataSourceBuilder.create().build();
// }
}
//package org.jeecg.modules.airag.app.config;
//
//import org.springframework.beans.factory.annotation.Qualifier;
//import org.springframework.boot.context.properties.ConfigurationProperties;
//import org.springframework.boot.jdbc.DataSourceBuilder;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.jdbc.core.JdbcTemplate;
//
//import javax.sql.DataSource;
//
//@Configuration
//public class PgVectorDataSourceConfig {
//
// @Bean(name = "pgVectorDataSource")
// @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.pgvector")
// public DataSource pgVectorDataSource() {
// return DataSourceBuilder.create().build();
// }
//
// @Bean(name = "pgVectorJdbcTemplate")
// public JdbcTemplate pgVectorJdbcTemplate(
// @Qualifier("pgVectorDataSource") DataSource dataSource) {
// return new JdbcTemplate(dataSource);
// }
//}
\ No newline at end of file
//package org.jeecg.modules.airag.app.config;
//import dev.langchain4j.data.document.Metadata;
//import dev.langchain4j.data.embedding.Embedding;
//import dev.langchain4j.data.segment.TextSegment;
//import dev.langchain4j.store.embedding.EmbeddingMatch;
//import dev.langchain4j.store.embedding.EmbeddingSearchRequest;
//import dev.langchain4j.store.embedding.EmbeddingSearchResult;
//import dev.langchain4j.store.embedding.EmbeddingStore;
//import dev.langchain4j.store.embedding.filter.Filter;
//import dev.langchain4j.store.embedding.pgvector.PgVectorEmbeddingStore;
//import lombok.extern.log4j.Log4j2;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Qualifier;
//import org.springframework.jdbc.core.JdbcTemplate;
//import org.springframework.stereotype.Component;
//
//import javax.sql.DataSource;
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.List;
//import java.util.Map;
//import java.util.Collection;
//import java.util.List;
//import java.util.stream.Collectors;
//
//@Component
//@Log4j2
//public class PostgreEmbeddingStore implements EmbeddingStore<TextSegment> {
//
// @Autowired
// private PgVectorEmbeddingStore pgVectorEmbeddingStore;
//
// @Autowired
// private JdbcTemplate pgJdbcTemplate;
//
// @Autowired
// public PostgreEmbeddingStore(
// PgVectorEmbeddingStore pgVectorEmbeddingStore) {
// this.pgJdbcTemplate = pgJdbcTemplate;
// this.pgVectorEmbeddingStore = pgVectorEmbeddingStore;
// }
//
//
// @Override
// public String add(Embedding embedding) {
// return "";
// }
//
// @Override
// public void add(String id, Embedding embedding) {
//
// }
//
// @Override
// public String add(Embedding embedding, TextSegment textSegment) {
// return "";
// }
//
// @Override
// public List<String> addAll(List<Embedding> embeddings) {
// return List.of();
// }
//
// @Override
// public List<String> addAll(List<Embedding> embeddings, List<TextSegment> embedded) {
// return List.of();
// }
//
// @Override
// public void remove(String id) {
// EmbeddingStore.super.remove(id);
// }
//
// @Override
// public void removeAll(Collection<String> ids) {
// EmbeddingStore.super.removeAll(ids);
// }
//
// @Override
// public void removeAll(Filter filter) {
// EmbeddingStore.super.removeAll(filter);
// }
//
// @Override
// public void removeAll() {
// EmbeddingStore.super.removeAll();
// }
//
// @Override
// public EmbeddingSearchResult<TextSegment> search(EmbeddingSearchRequest request) {
// return EmbeddingStore.super.search(request);
// }
//
// @Override
// public List<EmbeddingMatch<TextSegment>> findRelevant(Embedding referenceEmbedding, int maxResults) {
// return findRelevant(referenceEmbedding, maxResults, 0.0);
// }
//
// @Override
// public List<EmbeddingMatch<TextSegment>> findRelevant(Embedding referenceEmbedding, int maxResults, double minScore) {
// try {
//// // 使用 PgVectorEmbeddingStore 进行查询
//// EmbeddingSearchRequest request = EmbeddingSearchRequest.builder()
//// .queryEmbedding(referenceEmbedding)
//// .maxResults(maxResults)
//// .minScore(minScore)
//// .build();
//
// // 构建带内存ID过滤的查询
// String sql = "SELECT id, content, metadata, embedding <=> ? AS distance " +
// "FROM embeddings " +
// "WHERE (1 - (embedding <=> ?)) >= ? " +
// "ORDER BY distance " +
// "LIMIT ?";
//
// List<Map<String, Object>> rows = pgJdbcTemplate.queryForList(
// sql,
// referenceEmbedding.vectorAsList(),
// referenceEmbedding.vectorAsList(),
// minScore,
// maxResults
// );
//
//
//
//// EmbeddingSearchResult<TextSegment> result = pgVectorEmbeddingStore.search(request);
////
////
// return convertToMatches(rows);
// } catch (Exception e) {
// log.error("向量查询失败", e);
// throw new RuntimeException("向量搜索失败: " + e.getMessage(), e);
// }
// }
//
// @Override
// public List<EmbeddingMatch<TextSegment>> findRelevant(Object memoryId, Embedding referenceEmbedding, int maxResults) {
// return findRelevant(memoryId, referenceEmbedding, maxResults, 0.0);
// }
//
// @Override
// public List<EmbeddingMatch<TextSegment>> findRelevant(Object memoryId, Embedding referenceEmbedding,
// int maxResults, double minScore) {
// try {
// // 构建带内存ID过滤的查询
// String sql = "SELECT id, content, metadata, embedding <=> ? AS distance " +
// "FROM embeddings " +
// "WHERE metadata->>'memory_id' = ? " +
// "AND (1 - (embedding <=> ?)) >= ? " +
// "ORDER BY distance " +
// "LIMIT ?";
//
// List<Map<String, Object>> rows = pgJdbcTemplate.queryForList(
// sql,
// referenceEmbedding.vectorAsList(),
// memoryId.toString(),
// referenceEmbedding.vectorAsList(),
// minScore,
// maxResults
// );
//
// return convertToMatches(rows);
// } catch (Exception e) {
// log.error("带内存ID的向量查询失败", e);
// throw new RuntimeException("带内存ID的向量搜索失败: " + e.getMessage(), e);
// }
// }
//
// private List<EmbeddingMatch<TextSegment>> convertToMatches(List<Map<String, Object>> rows) {
// List<EmbeddingMatch<TextSegment>> matches = new ArrayList<>();
// for (Map<String, Object> row : rows) {
// String id = row.get("id").toString();
// String content = (String) row.get("content");
//
// // 处理 Metadata
// Map<String, String> metadataMap = (Map<String, String>) row.get("metadata");
// Metadata metadata = Metadata.from(metadataMap);
//
// // 处理 Embedding 转换
// List<Float> embeddingList = (List<Float>) row.get("embedding");
// float[] embeddingArray = new float[embeddingList.size()];
// for (int i = 0; i < embeddingList.size(); i++) {
// embeddingArray[i] = embeddingList.get(i);
// }
// Embedding embedding = new Embedding(embeddingArray);
//
// double score = 1 - (double) row.get("distance");
// TextSegment textSegment = TextSegment.from(content, metadata);
//
// matches.add(new EmbeddingMatch<>(score, id, embedding, textSegment));
// }
// return matches;
// }
//}
//package org.jeecg.modules.airag.app.config;
//
//import dev.langchain4j.store.embedding.pgvector.PgVectorEmbeddingStore;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//@Configuration
//public class VectorStoreConfig {
// @Value("${jeecg.ai-rag.embed-store.host}")
// private String host;
// @Value("${jeecg.ai-rag.embed-store.port}")
// private Integer port;
// @Value("${jeecg.ai-rag.embed-store.database}")
// private String database;
// @Value("${jeecg.ai-rag.embed-store.user}")
// private String user;
// @Value("${jeecg.ai-rag.embed-store.password}")
// private String password;
//// @Value("${spring.datasource.vector.url}")
//// private String url;
////
//// @Value("${spring.datasource.vector.username}")
//// private String username;
////
//// @Value("${spring.datasource.vector.password}")
//// private String password;
//
// @Bean
// public PgVectorEmbeddingStore pgVectorEmbeddingStore() {
// return PgVectorEmbeddingStore.builder()
// .host(host) // 如果使用独立参数
// .port(port)
// .user(user)
// .password(password)
// .database(database)
// .table("embeddings")
// .dimension(1536) // 根据你的模型维度设置
// .useIndex(true)
// .createTable(true)
// .build();
//
//// return PgVectorEmbeddingStore.builder()
//// .dataSource(dataSource) // 注入配置好的DataSource
//// .table("embeddings")
//// .dimension(1536)
//// .build();
// }
//}
\ No newline at end of file
package org.jeecg.modules.airag.app.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonProcessingException;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
... ... @@ -14,12 +12,10 @@ import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.airag.app.config.DataSourceConfig;
import org.jeecg.modules.airag.app.entity.AiragButton;
import org.jeecg.modules.airag.app.entity.AiragLog;
import org.jeecg.modules.airag.app.entity.Embeddings;
import org.jeecg.modules.airag.app.entity.QuestionEmbedding;
import org.jeecg.modules.airag.app.mapper.AiragButtonMapper;
import org.jeecg.modules.airag.app.service.IAiragButtonService;
import org.jeecg.modules.airag.app.service.IAiragLogService;
import org.jeecg.modules.airag.app.service.IEmbeddingsService;
... ...
package org.jeecg.modules.airag.app.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2025-05-26
* @Version: V1.0
*/
@Data
@TableName("test")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@Schema(description="test")
public class Test implements Serializable {
private static final long serialVersionUID = 1L;
/**id*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "id")
private Integer id;
/**name*/
@Excel(name = "name", width = 15)
@Schema(description = "name")
private String name;
}
package org.jeecg.modules.airag.app.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.airag.app.entity.Embeddings;
import org.jeecg.modules.airag.app.entity.Test;
/**
* @Description: test
* @Author: jeecg-boot
* @Date: 2025-05-26
* @Version: V1.0
*/
public interface EmbeddingsMapper {
}
... ... @@ -25,7 +25,5 @@ public interface PgVectorMapper {
int deleteById(@Param("id") String id);
int deleteByIds(@Param("ids") List<String> ids);
List<Embeddings> similaritySearch(@Param("vector") float[] vector,
@Param("limit") int limit);
}
\ No newline at end of file
... ...
... ... @@ -64,7 +64,5 @@
</foreach>
</delete>
<select id="similaritySearch" resultMap="embeddingsResultMap">
</select>
</mapper>
\ No newline at end of file
... ...
//package org.jeecg.modules.airag.app.utils;
//
//import java.sql.*;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//public class PureJdbcVectorQuery {
//
// // PostgreSQL连接参数
// private static final String URL = "jdbc:postgresql://192.168.100.103:5432/postgres";
// private static final String USER = "postgres";
// private static final String PASSWORD = "postgres";
//
// public static List<Map<String, Object>> queryVectors() {
// List<Map<String, Object>> results = new ArrayList<>();
//
// try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
// PreparedStatement stmt = conn.prepareStatement("SELECT * FROM embeddings");
// ResultSet rs = stmt.executeQuery()) {
//
// ResultSetMetaData metaData = rs.getMetaData();
// int columnCount = metaData.getColumnCount();
//
// while (rs.next()) {
// Map<String, Object> row = new HashMap<>();
// for (int i = 1; i <= columnCount; i++) {
// String columnName = metaData.getColumnName(i);
// Object value = "embedding".equals(columnName)
// ? rs.getBytes(i) // 向量字段特殊处理
// : rs.getObject(i);
// row.put(columnName, value);
// }
// results.add(row);
// }
// } catch (SQLException e) {
// e.printStackTrace();
// }
// return results;
// }
//
//
// public static void main(String[] args) {
// List<Map<String, Object>> maps = queryVectors();
// for (Map<String, Object> map : maps) {
// System.out.println(map);
// }
// }
//}
\ No newline at end of file