diff --git a/src/main/java/com/supervision/pdfqaserver/cache/PromptCache.java b/src/main/java/com/supervision/pdfqaserver/cache/PromptCache.java
index b3666ca..dc8b96e 100644
--- a/src/main/java/com/supervision/pdfqaserver/cache/PromptCache.java
+++ b/src/main/java/com/supervision/pdfqaserver/cache/PromptCache.java
@@ -220,7 +220,7 @@ public class PromptCache {
}
请处理以下文本:
- {}
+ {}/no_think
""";
private static final String DOERE_TABLE_PROMPT = """
@@ -270,7 +270,7 @@ public class PromptCache {
}
请处理以下表格:
- {}
+ {}/no_think
""";
private static final String TEXT_TO_CYPHER_PROMPT = """
@@ -316,7 +316,7 @@ public class PromptCache {
【用户问题】
{query}
【你的任务】
- 根据以上数据库结构和用户问题,生成正确的Cypher查询语句。
+ 根据以上数据库结构和用户问题,生成正确的Cypher查询语句。/no_think
""";
private static final String GENERATE_ANSWER_PROMPT = """
@@ -358,7 +358,7 @@ public class PromptCache {
5. **输出要求**:
- 不要使用``````等任何Markdown标记包装
- - 只需返回转换后的英文名称,无需解释。
+ - 只需返回转换后的英文名称,无需解释。/no_think
""";
@@ -398,7 +398,7 @@ public class PromptCache {
2. 不要使用中文标签(如`人物`→`Person`);
3. 不要省略MERGE的安全约束。
### 请转换以下三元组:
- {}
+ {}/no_think
""";
private static final String CLASSIFY_TABLE_PROMPT = """
@@ -440,7 +440,7 @@ public class PromptCache {
是
请处理以下表格:
- {}
+ {}/no_think
""";
private static final String EXTRACT_TABLE_TITLE_PROMPT = """
@@ -454,7 +454,7 @@ public class PromptCache {
- 直接给出结果,不要解释
**需要处理的文本**
- {}
+ {}/no_think
""";
@@ -535,10 +535,7 @@ public class PromptCache {
2. 不需要解释,不需要说明。
仅返回以下两种结果之一:
- 匹配成功:`{"ContentType": 0/1/2}`
- - 匹配失败:`{}`
-
- ./no_think
-
+ - 匹配失败:`{}`/no_think
""";
private static final String CLASSIFY_INDUSTRY_PROMPT = """
@@ -548,10 +545,7 @@ public class PromptCache {
请结合文本内容中的专业术语、关键领域、上下文信息,准确判断其所属行业,并返回对应的行业名称。
### 输入:
-
- ```
{text}
- ```
### 行业列表
@@ -566,12 +560,9 @@ public class PromptCache {
### 示例输出:
-
- ```
{
industryCategory:软件与信息技术
- }
- ```
+ }/no_think
""";
private static final String CLASSIFY_INTENT_PROMPT = """
@@ -607,9 +598,10 @@ public class PromptCache {
输出:
{
"IntentTypeList": []
- }
+ }/no_think
""";
+ // 需要大模型进行思考
private static final String CLASSIFY_INTENT_TRAIN_PROMPT = """
# 提取出文本片段的意图
@@ -688,7 +680,7 @@ public class PromptCache {
...
],
"意图2": ...
- }
+ }/no_think
""";
private static final String EXTRACT_ERE_BASE_INTENT_PROMPT = """
@@ -751,7 +743,7 @@ public class PromptCache {
}
}
]
- }
+ }/no_think
""";
@@ -776,7 +768,7 @@ public class PromptCache {
输出:["意图1", "意图2", "意图3", ...]
## 当前用户问题:
- {query}
+ {query}/no_think
""";
@@ -814,6 +806,6 @@ public class PromptCache {
5. 生成最终Cypher脚本:
- 仅返回最终Cypher查询语句——不包含任何评论或额外文本
- 仅当用户显式要求且模式支持时使用OPTIONAL MATCH
- - 确保RETURN子句包含关系数据,可通过显式列出关系变量或使用路径变量实现
+ - 确保RETURN子句包含关系数据,可通过显式列出关系变量或使用路径变量实现/no_think
""";
}
diff --git a/src/main/java/com/supervision/pdfqaserver/config/OllamaChatModelAspect.java b/src/main/java/com/supervision/pdfqaserver/config/OllamaChatModelAspect.java
index c2a7678..271f908 100644
--- a/src/main/java/com/supervision/pdfqaserver/config/OllamaChatModelAspect.java
+++ b/src/main/java/com/supervision/pdfqaserver/config/OllamaChatModelAspect.java
@@ -30,12 +30,12 @@ public class OllamaChatModelAspect {
// 获取原始参数
Object[] args = joinPoint.getArgs();
// 如果是String类型的call方法,修改其参数
- if (StrUtil.equals(signature, callStringMessage) && args.length > 0) {
+ /*if (StrUtil.equals(signature, callStringMessage) && args.length > 0) {
args[0] = args[0] + "\n /no_think";
- }
+ }*/
// 执行原方法
Object result = joinPoint.proceed(args);
- if (StrUtil.equals(model,"qwen3:30b-a3b") ) {
+ if (StrUtil.equals(model,"qwen3:30b-a3b")|| StrUtil.equals(model,"qwen3:32b")) {
if(StrUtil.equals(signature, callStringMessage)){
result = ((String) result).replaceAll("(?is)]*>(.*?)", "").trim();
}
diff --git a/src/main/java/com/supervision/pdfqaserver/dto/DomainMetadataDTO.java b/src/main/java/com/supervision/pdfqaserver/dto/DomainMetadataDTO.java
index a11ec43..02d8ac5 100644
--- a/src/main/java/com/supervision/pdfqaserver/dto/DomainMetadataDTO.java
+++ b/src/main/java/com/supervision/pdfqaserver/dto/DomainMetadataDTO.java
@@ -95,4 +95,42 @@ public class DomainMetadataDTO {
}
}
+ /**
+ * 构造函数 倒反天罡....
+ * @param erAttributes erAttributes
+ * @param domainMetadata domainMetadata
+ */
+ public DomainMetadataDTO(List erAttributes,DomainMetadata domainMetadata) {
+ this.id = domainMetadata.getId();
+ this.domainCategoryId = domainMetadata.getDomainCategoryId();
+ this.sourceType = domainMetadata.getSourceType();
+ this.relation = domainMetadata.getRelation();
+ this.targetType = domainMetadata.getTargetType();
+ this.generationType = domainMetadata.getGenerationType();
+
+ for (ErAttribute erAttribute : erAttributes) {
+ if(StrUtil.equals(erAttribute.getErType(),"1")){
+ // 节点数据
+ if (StrUtil.equals(erAttribute.getErLabel(),this.sourceType)) {
+ boolean none = this.sourceAttributes.stream().noneMatch(item -> StrUtil.equals(item.getAttrName(), erAttribute.getAttrName()));
+ if (none){
+ this.sourceAttributes.add(new ERAttributeDTO(erAttribute));
+ }
+ }
+ if (StrUtil.equals(erAttribute.getErLabel(),this.targetType)) {
+ boolean none = this.targetAttributes.stream().noneMatch(item -> StrUtil.equals(item.getAttrName(), erAttribute.getAttrName()));
+ if (none){
+ this.targetAttributes.add(new ERAttributeDTO(erAttribute));
+ }
+ }
+ }else {
+ if (StrUtil.equals(erAttribute.getErLabel(),this.relation)) {
+ if (this.relationAttributes.stream().noneMatch(item -> StrUtil.equals(item.getAttrName(), erAttribute.getAttrName()))){
+ this.relationAttributes.add(new ERAttributeDTO(erAttribute));
+ }
+ }
+ }
+ }
+ }
+
}
diff --git a/src/main/java/com/supervision/pdfqaserver/mapper/ErAttributeMapper.java b/src/main/java/com/supervision/pdfqaserver/mapper/ErAttributeMapper.java
index c0ab13d..d36f293 100644
--- a/src/main/java/com/supervision/pdfqaserver/mapper/ErAttributeMapper.java
+++ b/src/main/java/com/supervision/pdfqaserver/mapper/ErAttributeMapper.java
@@ -2,6 +2,8 @@ package com.supervision.pdfqaserver.mapper;
import com.supervision.pdfqaserver.domain.ErAttribute;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import java.util.List;
/**
* @author Administrator
@@ -11,6 +13,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface ErAttributeMapper extends BaseMapper {
+ List listByDomainCategoryId(@Param("domainCategoryId") String domainCategoryId);
}
diff --git a/src/main/java/com/supervision/pdfqaserver/service/DomainMetadataService.java b/src/main/java/com/supervision/pdfqaserver/service/DomainMetadataService.java
index 673433f..677cd15 100644
--- a/src/main/java/com/supervision/pdfqaserver/service/DomainMetadataService.java
+++ b/src/main/java/com/supervision/pdfqaserver/service/DomainMetadataService.java
@@ -52,4 +52,12 @@ public interface DomainMetadataService extends IService {
* @return
*/
List listByIntentionIds(List intentionIds);
+
+ /**
+ * 根据意图ID和领域分类ID查询领域元数据
+ * @param intentionIds 意图ID列表
+ * @param domainCategoryId 领域分类ID
+ * @return
+ */
+ List listByIntentionIds(List intentionIds,String domainCategoryId);
}
diff --git a/src/main/java/com/supervision/pdfqaserver/service/ErAttributeService.java b/src/main/java/com/supervision/pdfqaserver/service/ErAttributeService.java
index 4c08384..f321648 100644
--- a/src/main/java/com/supervision/pdfqaserver/service/ErAttributeService.java
+++ b/src/main/java/com/supervision/pdfqaserver/service/ErAttributeService.java
@@ -18,4 +18,6 @@ public interface ErAttributeService extends IService {
List listByDomainMetadataId(String domainMetadataId);
List listByDomainMetadataIds(List domainMetadataIds);
+
+ List listByDomainCategoryId(String domainCategoryId);
}
diff --git a/src/main/java/com/supervision/pdfqaserver/service/impl/DomainMetadataServiceImpl.java b/src/main/java/com/supervision/pdfqaserver/service/impl/DomainMetadataServiceImpl.java
index 4f241c3..905802b 100644
--- a/src/main/java/com/supervision/pdfqaserver/service/impl/DomainMetadataServiceImpl.java
+++ b/src/main/java/com/supervision/pdfqaserver/service/impl/DomainMetadataServiceImpl.java
@@ -147,10 +147,28 @@ public class DomainMetadataServiceImpl extends ServiceImpl erAttributes = erAttributeService.listByDomainMetadataIds(domainMetadataIds);
for (IntentionDomainMetadata intentionDomainMetadata : intentionDomainMetadataList) {
DomainMetadata domainMetadata = this.getById(intentionDomainMetadata.getDomainMetadataId());
+ // 要求合并全局属性
domainMetadataDTOS.add(new DomainMetadataDTO(domainMetadata, erAttributes));
}
return domainMetadataDTOS;
}
+
+ @Override
+ public List listByIntentionIds(List intentionIds, String domainCategoryId) {
+ List domainMetadataDTOS = new ArrayList<>();
+ List intentionDomainMetadataList = intentionDomainMetadataService.listByIntentionIds(intentionIds);
+ if (CollUtil.isEmpty(intentionDomainMetadataList)){
+ return domainMetadataDTOS;
+ }
+ // 查询domainCategoryId下的所有属性
+ List erAttributes = erAttributeService.listByDomainCategoryId(domainCategoryId);
+ for (IntentionDomainMetadata intentionDomainMetadata : intentionDomainMetadataList) {
+ DomainMetadata domainMetadata = this.getById(intentionDomainMetadata.getDomainMetadataId());
+ // 要求合并全局属性
+ domainMetadataDTOS.add(new DomainMetadataDTO(erAttributes,domainMetadata));
+ }
+ return domainMetadataDTOS;
+ }
}
diff --git a/src/main/java/com/supervision/pdfqaserver/service/impl/ErAttributeServiceImpl.java b/src/main/java/com/supervision/pdfqaserver/service/impl/ErAttributeServiceImpl.java
index 21cbfba..5823a5a 100644
--- a/src/main/java/com/supervision/pdfqaserver/service/impl/ErAttributeServiceImpl.java
+++ b/src/main/java/com/supervision/pdfqaserver/service/impl/ErAttributeServiceImpl.java
@@ -9,6 +9,7 @@ import com.supervision.pdfqaserver.service.ErAttributeService;
import com.supervision.pdfqaserver.mapper.ErAttributeMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -47,6 +48,14 @@ public class ErAttributeServiceImpl extends ServiceImpl listByDomainCategoryId(String domainCategoryId) {
+ if (StrUtil.isEmpty(domainCategoryId)){
+ return new ArrayList<>();
+ }
+ return super.getBaseMapper().listByDomainCategoryId(domainCategoryId);
+ }
}
diff --git a/src/main/java/com/supervision/pdfqaserver/service/impl/TripleConversionPipelineImpl.java b/src/main/java/com/supervision/pdfqaserver/service/impl/TripleConversionPipelineImpl.java
index 5e5971a..6320697 100644
--- a/src/main/java/com/supervision/pdfqaserver/service/impl/TripleConversionPipelineImpl.java
+++ b/src/main/java/com/supervision/pdfqaserver/service/impl/TripleConversionPipelineImpl.java
@@ -116,7 +116,7 @@ public class TripleConversionPipelineImpl implements TripleConversionPipeline {
log.info("makeOutDomainMetadata:format:{}", format);
String call = aiCallService.call(format);
log.info("makeOutDomainMetadata:响应结果:{}", call);
- return parseDomainMetadata(call);
+ return parseDomainMetadataObj(call);
}
/**
@@ -186,6 +186,59 @@ public class TripleConversionPipelineImpl implements TripleConversionPipeline {
return domainMetadataDTOS;
}
+ private List parseDomainMetadataObj(String jsonStr) {
+ JSONObject entries = JSONUtil.parseObj(jsonStr);
+ List domainMetadataDTOS = new ArrayList<>();
+ for (Map.Entry entry : entries) {
+ String intent = entry.getKey();// 意图
+ Object value = entry.getValue();
+ JSONArray jsonArray = JSONUtil.parseArray(value);
+ for (int i = 0; i < jsonArray.size(); i++) {
+ JSONObject jsonObject = jsonArray.getJSONObject(i);
+ DomainMetadataDTO domainMetadataDTO = new DomainMetadataDTO();
+ JSONObject source = jsonObject.getJSONObject("source");
+ JSONObject relation = jsonObject.getJSONObject("relation");
+ JSONObject target = jsonObject.getJSONObject("target");
+ domainMetadataDTO.setIntentDigest(intent);
+ if (null != source){
+ String type = source.getStr("type");
+ JSONArray attributes = source.getJSONArray("attributes");
+ if (StrUtil.isNotEmpty(type)){
+ domainMetadataDTO.setSourceType(type);
+ }
+ if (CollUtil.isNotEmpty(attributes)){
+ List erAttributeDTOS = attributes.stream().map(at -> new ERAttributeDTO(at.toString())).collect(Collectors.toList());
+ domainMetadataDTO.setSourceAttributes(erAttributeDTOS);
+ }
+ }
+ if (null != relation){
+ String type = relation.getStr("type");
+ JSONArray attributes = relation.getJSONArray("attributes");
+ if (StrUtil.isNotEmpty(type)){
+ domainMetadataDTO.setRelation(type);
+ }
+ if (CollUtil.isNotEmpty(attributes)){
+ List erAttributeDTOS = attributes.stream().map(at -> new ERAttributeDTO(at.toString())).collect(Collectors.toList());
+ domainMetadataDTO.setRelationAttributes(erAttributeDTOS);
+ }
+ }
+ if (null != target){
+ String type = target.getStr("type");
+ JSONArray attributes = target.getJSONArray("attributes");
+ if (StrUtil.isNotEmpty(type)){
+ domainMetadataDTO.setTargetType(type);
+ }
+ if (CollUtil.isNotEmpty(attributes)){
+ List erAttributeDTOS = attributes.stream().map(at -> new ERAttributeDTO(at.toString())).collect(Collectors.toList());
+ domainMetadataDTO.setTargetAttributes(erAttributeDTOS);
+ }
+ }
+ domainMetadataDTOS.add(domainMetadataDTO);
+ }
+ }
+ return domainMetadataDTOS;
+ }
+
@Override
public EREDTO doEre(TruncateDTO truncateDTO, List intents) {
if (StrUtil.equals(truncateDTO.getLayoutType(),String.valueOf(LayoutTypeEnum.TEXT.getCode()))){
@@ -197,7 +250,7 @@ public class TripleConversionPipelineImpl implements TripleConversionPipeline {
if (CollUtil.isEmpty(intentIds)) {
return null;
}
- List domainMetadataDTOS = domainMetadataService.listByIntentionIds(intentIds);
+ List domainMetadataDTOS = domainMetadataService.listByIntentionIds(intentIds,CollUtil.getFirst(intents).getDomainCategoryId());
log.info("doEre:领域元数据列表个数:{}", domainMetadataDTOS.size());
domainMetadataDTOS = domainMetadataDTOS.stream()
.filter(domainMetadataDTO -> StrUtil.equals(domainMetadataDTO.getGenerationType(), "0"))// 过滤出手动确认的数据
diff --git a/src/main/java/com/supervision/pdfqaserver/service/impl/TripleToCypherExecutorImpl.java b/src/main/java/com/supervision/pdfqaserver/service/impl/TripleToCypherExecutorImpl.java
index 3e960a4..faec4e8 100644
--- a/src/main/java/com/supervision/pdfqaserver/service/impl/TripleToCypherExecutorImpl.java
+++ b/src/main/java/com/supervision/pdfqaserver/service/impl/TripleToCypherExecutorImpl.java
@@ -251,9 +251,9 @@ public class TripleToCypherExecutorImpl implements TripleToCypherExecutor {
List> intentionSplit = CollUtil.split(intentions, 200);
for (List intentionList : intentionSplit) {
log.info("分类意图,query: {}, intentions size: {}", query, intentionList.size());
- String intents = intentionList.stream().map(i -> " - " + i.getDigest() + "\n").collect(Collectors.joining());
+ List intents = intentionList.stream().map(Intention::getDigest).toList();
Map params = Map.of("query", query,
- "intents", intents);
+ "intents", JSONUtil.toJsonStr(intents));
String format = StrUtil.format(prompt, params);
String call = aiCallService.call(format);
diff --git a/src/main/resources/mapper/ErAttributeMapper.xml b/src/main/resources/mapper/ErAttributeMapper.xml
index 13fd2f1..5072d1d 100644
--- a/src/main/resources/mapper/ErAttributeMapper.xml
+++ b/src/main/resources/mapper/ErAttributeMapper.xml
@@ -20,4 +20,12 @@
attr_name,attr_value_type,er_type,
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 93c9fc7..5f034cf 100644
--- a/src/test/java/com/supervision/pdfqaserver/PdfQaServerApplicationTests.java
+++ b/src/test/java/com/supervision/pdfqaserver/PdfQaServerApplicationTests.java
@@ -3,7 +3,6 @@ package com.supervision.pdfqaserver;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
-import cn.hutool.json.JSONUtil;
import com.supervision.pdfqaserver.constant.DocumentContentTypeEnum;
import com.supervision.pdfqaserver.domain.PdfAnalysisOutput;
import com.supervision.pdfqaserver.dto.*;
@@ -289,7 +288,11 @@ class PdfQaServerApplicationTests {
}
return jsa.toString();
+ }
+ @Test
+ public void domainCategoryListTest() {
-
+ List domainMetadataDTOS = domainMetadataService.listByIntentionIds(List.of("1928020787140612097"), "1");
+ System.out.println(domainMetadataDTOS);
}
}