|
|
|
package org.jeecg.modules.airag.app.mapper;
|
|
|
|
|
|
|
|
import ch.qos.logback.core.net.SyslogOutputStream;
|
|
|
|
import cn.hutool.core.lang.generator.SnowflakeGenerator;
|
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
...
|
...
|
@@ -32,26 +33,36 @@ public class PgVectorMapper { |
|
|
|
// 查询所有向量记录
|
|
|
|
public List<Embeddings> findAll(Embeddings embeddings) {
|
|
|
|
List<Embeddings> results = new ArrayList<>();
|
|
|
|
String sql = "SELECT * FROM embeddings WHERE 1 =1 ";
|
|
|
|
if (StringUtils.isNotBlank(embeddings.getId())){
|
|
|
|
sql += " and embedding_id = '" + embeddings.getId() + "'";
|
|
|
|
}
|
|
|
|
StringBuilder sql = new StringBuilder("SELECT * FROM embeddings WHERE 1=1");
|
|
|
|
List<Object> params = new ArrayList<>(); // 存储参数值
|
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(embeddings.getKnowledgeId())){
|
|
|
|
sql += " and metadata ->> 'knowledgeId' = '" + embeddings.getKnowledgeId() + "'";
|
|
|
|
// 动态构建查询条件
|
|
|
|
if (StringUtils.isNotBlank(embeddings.getKnowledgeId())) {
|
|
|
|
sql.append(" AND metadata ->> 'knowledgeId' = ?");
|
|
|
|
params.add(embeddings.getKnowledgeId());
|
|
|
|
}
|
|
|
|
|
|
|
|
if(StringUtils.isNotBlank(embeddings.getText())){
|
|
|
|
sql += " and text = '" + embeddings.getText() + "'";
|
|
|
|
if (StringUtils.isNotBlank(embeddings.getText())) {
|
|
|
|
sql.append(" AND text ILIKE ?"); // 使用 ILIKE 进行不区分大小写的模糊匹配
|
|
|
|
params.add("%" + embeddings.getText() + "%");
|
|
|
|
}
|
|
|
|
System.out.println("sql = " + sql);
|
|
|
|
|
|
|
|
|
|
|
|
System.out.println("SQL: " + sql.toString());
|
|
|
|
|
|
|
|
try (Connection conn = getConnection();
|
|
|
|
PreparedStatement stmt = conn.prepareStatement(sql);
|
|
|
|
ResultSet rs = stmt.executeQuery()) {
|
|
|
|
PreparedStatement stmt = conn.prepareStatement(sql.toString())) {
|
|
|
|
|
|
|
|
// 设置参数值
|
|
|
|
for (int i = 0; i < params.size(); i++) {
|
|
|
|
stmt.setObject(i + 1, params.get(i));
|
|
|
|
}
|
|
|
|
|
|
|
|
try (ResultSet rs = stmt.executeQuery()) {
|
|
|
|
while (rs.next()) {
|
|
|
|
results.add(mapRowToEmbeddings(rs));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (SQLException e) {
|
|
|
|
log.error("查询所有向量记录失败", e);
|
|
|
|
throw new RuntimeException("查询向量数据时发生数据库错误", e);
|
|
...
|
...
|
@@ -81,7 +92,7 @@ public class PgVectorMapper { |
|
|
|
|
|
|
|
// 插入新向量记录
|
|
|
|
public int insert(Embeddings record) {
|
|
|
|
/* Map<String, Object> metadata = new LinkedHashMap<>();
|
|
|
|
/*Map<String, Object> metadata = new LinkedHashMap<>();
|
|
|
|
|
|
|
|
// 按固定顺序添加字段
|
|
|
|
metadata.put("docId", UUID.randomUUID().toString());
|
|
...
|
...
|
@@ -89,10 +100,10 @@ public class PgVectorMapper { |
|
|
|
metadata.put("docName", record.getDocName());
|
|
|
|
metadata.put("index", 0); // 确保是整数
|
|
|
|
record.setMetadata(metadata);
|
|
|
|
|
|
|
|
*/
|
|
|
|
// 自动生成向量(这里需要调用嵌入模型)
|
|
|
|
float[] embedding = generateEmbedding(record.getText());
|
|
|
|
record.setEmbedding(embedding);*/
|
|
|
|
record.setEmbedding(embedding);
|
|
|
|
|
|
|
|
|
|
|
|
String sql = "INSERT INTO embeddings (embedding_id, embedding, text, metadata) VALUES (?, ?, ?, ?::jsonb)";
|
|
...
|
...
|
@@ -123,10 +134,21 @@ public class PgVectorMapper { |
|
|
|
JSONObject mataData = new JSONObject();
|
|
|
|
mataData.put("knowledgeId", record.getKnowledgeId()); // 使用前端传入的知识库ID
|
|
|
|
mataData.put("docName", record.getDocName());
|
|
|
|
|
|
|
|
//获取record数据中的docId
|
|
|
|
Map<String, Object> map = record.getMetadata();
|
|
|
|
System.out.println("map = " + map);
|
|
|
|
mataData.put("docId", record.getDocId()); // 自动生成唯一文档ID
|
|
|
|
mataData.put("index", "0");
|
|
|
|
System.out.println("原始数据: " + mataData);
|
|
|
|
|
|
|
|
PGobject jsonObject = new PGobject();
|
|
|
|
|
|
|
|
PGobject jsonObject = new PGobject();/*
|
|
|
|
System.out.println("原始数据: " + mataData); // 检查原始对象
|
|
|
|
String jsonStr = mataData.toJSONString();
|
|
|
|
System.out.println("JSON字符串: " + jsonStr); // 检查序列化后的JSON
|
|
|
|
jsonObject.setValue(jsonStr);
|
|
|
|
System.out.println("存入后的值: " + jsonObject.getValue());*/ // 检查存入后的值
|
|
|
|
jsonObject.setType("json");
|
|
|
|
jsonObject.setValue(mataData.toJSONString());
|
|
|
|
stmt.setObject(1, new PGvector(record.getEmbedding()));
|
|
...
|
...
|
@@ -213,7 +235,7 @@ public class PgVectorMapper { |
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*// 自动生成嵌入向量的方法(需根据您的嵌入模型实现)
|
|
|
|
// 自动生成嵌入向量的方法(需根据您的嵌入模型实现)
|
|
|
|
private float[] generateEmbedding(String text) {
|
|
|
|
// 改为生成 768 维向量
|
|
|
|
float[] embedding = new float[768]; // OpenAI 标准维度是 1536,这里改为 768
|
|
...
|
...
|
@@ -230,13 +252,4 @@ public class PgVectorMapper { |
|
|
|
return embedding;
|
|
|
|
}
|
|
|
|
|
|
|
|
private String getKnowledgeId(Embeddings record) {
|
|
|
|
// 1. 优先使用前端传入的knowledgeId(如果存在)
|
|
|
|
if (record.getMetadata() != null && record.getMetadata().containsKey("knowledgeId")) {
|
|
|
|
return String.valueOf(record.getMetadata().get("knowledgeId"));
|
|
|
|
}
|
|
|
|
|
|
|
|
// 2. 使用配置的默认值
|
|
|
|
return "default_knowledge"; // 实际应从配置读取
|
|
|
|
}*/
|
|
|
|
} |
|
|
\ No newline at end of file |
...
|
...
|
|