Commit e909e92c by shenjunjie

Merge branch 'feature' into 'release'

AI搜索调整

See merge request !578
parents 983f4b39 00c51c06
...@@ -132,8 +132,8 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -132,8 +132,8 @@ public class MarkDataServiceImpl implements MarkDataService {
"1 按照指定输出格式输出。\n" + "1 按照指定输出格式输出。\n" +
"2 严格按照规则进行提炼。\n" + "2 严格按照规则进行提炼。\n" +
"###"; "###";
private static final String RESULT_PROMPT = "假如你是专业的分析报告人员,你将根据用户提供的内容(无关内容则无需引用),贴合问题给出自己的一点或多点详细分析和见解,每个观点需同时提炼出一个贴合自己的详细分析和见解的小标题(无需注明“小标题”三个字)。并在每点详细分析和见解后用数字表示注明1-{0" + private static final String RESULT_PROMPT = "假如你是专业的分析报告人员,你将根据用户提供的一篇或多篇文章(无关内容则无需引用),贴合问题给出自己的一点或多点详细分析和见解,每个观点需同时提炼出一个贴合自己的详细分析和见解的小标题(无需注明“小标题”三个字)。并在每点详细分析和见解后用数字表示注明1-{0" +
"}的参考文章,分析结果和参考文章之间严格用”|“作为分隔符进行分隔(小标题与分析结果无需分隔),并且多个参考文章之间也严格用”|“作为分隔符进行分隔,若没有对应的参考文章则无需返回,示例:分析结果。|1|2|3" + "}的参考文章,分析结果和参考文章之间严格用”|“作为分隔符进行分隔(小标题与分析结果无需分隔),并且多个参考文章之间也严格用”|“作为分隔符进行分隔,若没有对应的参考文章则无需返回,示例:分析结果。|1|2|3。同时注意:无论什么原因无法回答该问题请只需要返回”无法回答“,示例:无法回答" +
"请回答该问题:"; "请回答该问题:";
private static final String REFERENCE_QUESTION_PROMPT = "假如你是专业的问题提出人员,提出自己{0}个关于的{1}参考问题,每个问题无需给到对应的序号,问题必须包含 针对/相关 字样,每个问题之间严格用”|“作为分隔符进行分隔。" + private static final String REFERENCE_QUESTION_PROMPT = "假如你是专业的问题提出人员,提出自己{0}个关于的{1}参考问题,每个问题无需给到对应的序号,问题必须包含 针对/相关 字样,每个问题之间严格用”|“作为分隔符进行分隔。" +
...@@ -4073,12 +4073,16 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -4073,12 +4073,16 @@ public class MarkDataServiceImpl implements MarkDataService {
int count = 1; int count = 1;
for (BaseMap baseMap : articles) { for (BaseMap baseMap : articles) {
String text = baseMap.getContent(); String text = baseMap.getContent();
sb.append(count++).append("、").append(text).append(";"); sb.append("文章").append(count++).append(":").append(text).append("\n\n");
} }
String sbContent = sb.toString(); String sbContent = sb.toString();
Pair<String, long[]> answerPair = streamStandardRequest(sbContent, modelName, MessageFormat.format(RESULT_PROMPT, list.size()) + question); Pair<String, long[]> answerPair = streamStandardRequest(sbContent, modelName, MessageFormat.format(RESULT_PROMPT, list.size()) + question);
// 临时处理:接口时而返回只有两个字符的回答结果(分析/抱歉/以下/无法)
if (answerPair.getLeft().length() <= 2){
return null;
}
// 结果处理 // 结果处理
JSONObject res = aiResultDataProcess(answerPair, false); JSONObject res = aiResultDataProcess(answerPair, list.size(), false);
res.put("articles", articles); res.put("articles", articles);
res.put("searchCriteria", Objects.isNull(questionPair) ? Tools.concat(keyword, startTime, endTime) : questionPair.getLeft()); res.put("searchCriteria", Objects.isNull(questionPair) ? Tools.concat(keyword, startTime, endTime) : questionPair.getLeft());
// 记录返回成功的提问 // 记录返回成功的提问
...@@ -4095,7 +4099,7 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -4095,7 +4099,7 @@ public class MarkDataServiceImpl implements MarkDataService {
return null; return null;
} }
private JSONObject aiResultDataProcess(Pair<String, long[]> answerPair, boolean isOnline){ private JSONObject aiResultDataProcess(Pair<String, long[]> answerPair, int size, boolean isOnline){
JSONObject res = new JSONObject(); JSONObject res = new JSONObject();
// 结果处理 // 结果处理
String[] splits = answerPair.getLeft().split("\\r?\\n"); String[] splits = answerPair.getLeft().split("\\r?\\n");
...@@ -4115,7 +4119,15 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -4115,7 +4119,15 @@ public class MarkDataServiceImpl implements MarkDataService {
} }
if (StringUtils.isNotBlank(sonSplit[0])) { if (StringUtils.isNotBlank(sonSplit[0])) {
answer.put("answer", sonSplit[0]); answer.put("answer", sonSplit[0]);
List<String> sonSplitList = new ArrayList<>(Arrays.asList(sonSplit)).stream().filter(str -> 1 == str.length() && StringUtils.isNotBlank(str)).collect(Collectors.toList()); List<String> sonSplitList = new ArrayList<>(Arrays.asList(sonSplit)).stream().skip(1)
.filter(str -> {
try {
return StringUtils.isNotBlank(str) && Integer.parseInt(str.trim()) <= size;
}catch (Exception e){
answer.put("answer", answer.getString("answer") + str);
return false;
}
}).collect(Collectors.toList());
answer.put("referenceArticles", sonSplitList); answer.put("referenceArticles", sonSplitList);
answers.add(answer); answers.add(answer);
} }
...@@ -4131,7 +4143,7 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -4131,7 +4143,7 @@ public class MarkDataServiceImpl implements MarkDataService {
// 需记录耗费 // 需记录耗费
userLogRecordDao.insertOne(UserLogRecord.userLogRecordCost("AI搜索-联网搜索-" + question, userLogRecordDao.insertOne(UserLogRecord.userLogRecordCost("AI搜索-联网搜索-" + question,
calculateCost(answerPair.getRight(), AccessModel.Model.DOUBAO_PRO_32K)), userLogRecordDao.generateCollectionName()); calculateCost(answerPair.getRight(), AccessModel.Model.DOUBAO_PRO_32K)), userLogRecordDao.generateCollectionName());
return aiResultDataProcess(answerPair, true); return aiResultDataProcess(answerPair, -1, true);
} }
private double calculateCost(long[] tokens, AccessModel.Model model){ private double calculateCost(long[] tokens, AccessModel.Model model){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment