重新修改提示词和返回值

This commit is contained in:
2025-08-02 15:13:09 +08:00
parent 43546d56a9
commit dd6c84e67f
4 changed files with 122 additions and 15 deletions

View File

@@ -114,7 +114,7 @@ public class ImageRecognitionServiceImpl implements IImageRecognitionService {
result.setRecognitionType("bom");
result.setRecognizedText(aiResponse);
// 解析BOM信息
// 解析识别结果
try {
Map<String, Object> structuredResult = parseBomResponse(aiResponse);
result.setStructuredResult(structuredResult);
@@ -123,8 +123,12 @@ public class ImageRecognitionServiceImpl implements IImageRecognitionService {
List<ImageRecognitionVo.BomItemVo> bomItems = extractBomItems(structuredResult);
result.setBomItems(bomItems);
// 提取属性列表
List<ImageRecognitionVo.AttributeVo> attributes = extractAttributes(structuredResult);
result.setAttributes(attributes);
} catch (Exception e) {
log.warn("解析BOM响应失败: {}", e.getMessage());
log.warn("解析识别响应失败: {}", e.getMessage());
result.setRecognizedText(aiResponse);
}
@@ -341,13 +345,13 @@ public class ImageRecognitionServiceImpl implements IImageRecognitionService {
*/
private String buildBomPrompt(ImageRecognitionBo bo) {
StringBuilder prompt = new StringBuilder();
prompt.append("请仔细分析这张图片中的BOM物料清单信息并提取以下内容:\n\n");
prompt.append("请仔细分析这张图片中的内容,并提取所有相关信息\n\n");
prompt.append("【识别要求】\n");
prompt.append("1. 识别图片中的所有物料信息,包括原材料ID、名称、数量、单位等\n");
prompt.append("2. 如果图片包含表格,请按表格结构提取信息\n");
prompt.append("3. 如果图片中包含列表,请按列表格式提取信息\n");
prompt.append("4. 确保数量信息的准确性,包括数字和单位\n");
prompt.append("5. 识别规格、备注等附加信息\n\n");
prompt.append("1. 如果图片包含BOM物料清单信息请提取原材料ID、名称、数量、单位等\n");
prompt.append("2. 如果图片包含其他类型的信息(如检验报告、产品信息等),请提取所有相关属性\n");
prompt.append("3. 识别图片中的所有文字信息,包括标题、内容、表格数据等\n");
prompt.append("4. 提取关键信息点,如产品名称、规格参数、检验结果等\n");
prompt.append("5. 确保信息的准确性和完整性\n\n");
if (bo.getProductId() != null) {
prompt.append("【产品信息】\n");
@@ -372,10 +376,16 @@ public class ImageRecognitionServiceImpl implements IImageRecognitionService {
prompt.append(" \"remark\": \"备注\"\n");
prompt.append(" }\n");
prompt.append(" ],\n");
prompt.append(" \"summary\": \"BOM清单总结\",\n");
prompt.append(" \"attributes\": [\n");
prompt.append(" {\n");
prompt.append(" \"attrKey\": \"属性名称\",\n");
prompt.append(" \"attrValue\": \"属性值\"\n");
prompt.append(" }\n");
prompt.append(" ],\n");
prompt.append(" \"summary\": \"内容总结\",\n");
prompt.append(" \"totalItems\": 总项目数\n");
prompt.append("}\n\n");
prompt.append("如果图片中没有BOM信息请返回空数组");
prompt.append("请将识别到的所有信息整理成属性数组每个属性包含attrKey属性名称和attrValue属性值");
return prompt.toString();
}
@@ -487,4 +497,73 @@ public class ImageRecognitionServiceImpl implements IImageRecognitionService {
return bomItems;
}
/**
* 提取属性列表
*/
private List<ImageRecognitionVo.AttributeVo> extractAttributes(Map<String, Object> structuredResult) {
List<ImageRecognitionVo.AttributeVo> attributes = new ArrayList<>();
try {
List<Map<String, Object>> attrList = (List<Map<String, Object>>) structuredResult.get("attributes");
if (attrList != null) {
for (Map<String, Object> attr : attrList) {
ImageRecognitionVo.AttributeVo attribute = new ImageRecognitionVo.AttributeVo();
attribute.setAttrKey((String) attr.get("attrKey"));
attribute.setAttrValue((String) attr.get("attrValue"));
attributes.add(attribute);
}
}
// 如果没有attributes字段尝试从其他字段生成属性
if (attributes.isEmpty()) {
attributes = generateAttributesFromResult(structuredResult);
}
} catch (Exception e) {
log.warn("提取属性失败: {}", e.getMessage());
}
return attributes;
}
/**
* 从识别结果生成属性列表
*/
private List<ImageRecognitionVo.AttributeVo> generateAttributesFromResult(Map<String, Object> structuredResult) {
List<ImageRecognitionVo.AttributeVo> attributes = new ArrayList<>();
try {
// 提取summary作为内容总结
String summary = (String) structuredResult.get("summary");
if (summary != null && !summary.isEmpty()) {
ImageRecognitionVo.AttributeVo summaryAttr = new ImageRecognitionVo.AttributeVo();
summaryAttr.setAttrKey("内容总结");
summaryAttr.setAttrValue(summary);
attributes.add(summaryAttr);
}
// 提取totalItems
Object totalItems = structuredResult.get("totalItems");
if (totalItems != null) {
ImageRecognitionVo.AttributeVo totalAttr = new ImageRecognitionVo.AttributeVo();
totalAttr.setAttrKey("总项目数");
totalAttr.setAttrValue(String.valueOf(totalItems));
attributes.add(totalAttr);
}
// 提取bomItems数量
List<Map<String, Object>> bomItems = (List<Map<String, Object>>) structuredResult.get("bomItems");
if (bomItems != null && !bomItems.isEmpty()) {
ImageRecognitionVo.AttributeVo bomCountAttr = new ImageRecognitionVo.AttributeVo();
bomCountAttr.setAttrKey("BOM项目数");
bomCountAttr.setAttrValue(String.valueOf(bomItems.size()));
attributes.add(bomCountAttr);
}
} catch (Exception e) {
log.warn("生成属性失败: {}", e.getMessage());
}
return attributes;
}
}