Commit 0d50d0f7 by 陈健智

ai搜索调整

parent 511201a3
......@@ -16,19 +16,6 @@ import java.util.List;
*/
public class DoubaoAIAccountFactor {
// public static Account getPersonalAccount() {
// String apiKey = "1ff5c1f2-4fa0-4e40-8ea8-3c9674e05a33";
// List<AccessModel> modelList = new ArrayList<>();
// modelList.add(new AccessModel("ep-20240722180424-45xkt", AccessModel.Model.DOUBAO_PRO_4K));
// modelList.add(new AccessModel("ep-20240723162722-7p4xw", AccessModel.Model.DOUBAO_PRO_32K));
// modelList.add(new AccessModel("ep-20240723153621-6hd22", AccessModel.Model.DOUBAO_PRO_128K));
// modelList.add(new AccessModel("ep-20240723164110-qhtxm", AccessModel.Model.DOUBAO_LITE_4K));
// modelList.add(new AccessModel("ep-20240723164127-44ksx", AccessModel.Model.DOUBAO_LITE_32K));
// modelList.add(new AccessModel("ep-20240723164141-xxmhs", AccessModel.Model.DOUBAO_LITE_128K));
// return new Account(apiKey, modelList);
// }
public static Account getCompanyAccount() {
String apiKey = "607764fc-c9d9-47e4-a673-a310852917a0";
List<AccessModel> modelList = new ArrayList<>();
......
......@@ -353,11 +353,18 @@ public class AppSearchController extends BaseController {
}
@ApiOperation("搜索-AI搜索")
@GetMapping("/ai")
@GetMapping("/ai/answer")
public ResponseResult getAISearchResult(@RequestParam(value = "question") String question) {
return ResponseResult.success(markDataService.getAISearchResult(question));
}
@ApiOperation("搜索-AI参考提问")
@GetMapping("/ai/question")
public ResponseResult getAIReferenceQuestion(@RequestParam(value = "question") String question,
@RequestParam(value = "size") int size) {
return ResponseResult.success(markDataService.getAIReferenceQuestion(question, size));
}
@ApiOperation("搜索-搜索关键词历史记录")
@GetMapping("/keyword/cache")
public ResponseResult getSearchKeywordCache(@ApiParam(name = "searchType",
......
......@@ -837,5 +837,17 @@ public interface MarkDataService {
*/
List<String> expandOriginRange(MarkSearchDTO dto);
/**
* ai搜索-ai参考提问
* @param question
* @return
*/
List<String> getAIReferenceQuestion(String question, int size);
/**
* ai搜索-搜索结果
* @param question
* @return
*/
JSONObject getAISearchResult(String question);
}
......@@ -119,7 +119,7 @@ public class MarkDataServiceImpl implements MarkDataService {
"3.提及到 XX 渠道的定义为渠道要素,条件给到该渠道名。\n" +
"4.提及到正面、中性、负面的定义为标签要素,条件给到该标签名。\n" +
"5.提及到针对 XX ,针对 XX 相关或 XX 相关的定义为搜索条件要素(必须包含 针对/相关 字样),条件给到具体值\n" +
"5.时间和项目要素为必需要素,若不满足则返回“无法回答”。\n" +
"6.时间和项目要素为必需要素,若不满足则返回“无法回答”。\n" +
"\n" +
"参考例子:\n" +
"示例 1:\n" +
......@@ -136,9 +136,12 @@ public class MarkDataServiceImpl implements MarkDataService {
"1 按照指定输出格式输出。\n" +
"2 严格按照规则进行提炼。\n" +
"###";
private static final String RESULT_PROMPT = "假如你是专业的分析报告人员,你将根据用户提供的内容,给出自己的详细分析和见解。并注明理由(提供对应的数据文本1-{0})" +
private static final String RESULT_PROMPT = "假如你是专业的分析报告人员,你将根据用户提供的内容,给出自己提炼的5个的详细分析和见解。并在每点分析后用数字表示注明1-{0}的参考文章,分析结果和参考文章之间严格用”|“作为分隔符进行分隔,并且多个参考文章之间也严格用”|“作为分隔符进行分隔,若没有对应的参考文章则无需返回,示例:分析结果。|1|2|3" +
"请分析:";
private static final String REFERENCE_QUESTION_PROMPT = "假如你是专业的问题提出人员,提出自己{0}个关于的{1}参考问题,每个问题给到准确的序号,问题必须包含 针对/相关 字样,每个问题之间严格用”|“作为分隔符进行分隔。" +
"请提出:";
@Value("${istarshine.addIStarShineKSData.url}")
private String addIStarShineKSDataUrl;
......@@ -3951,6 +3954,22 @@ public class MarkDataServiceImpl implements MarkDataService {
}
@Override
public List<String> getAIReferenceQuestion(String question, int size) {
try {
// 选用的模型名称
String modelName = AccessModel.Model.DOUBAO_PRO_32K.getModelName();
String projectName = GlobalPojo.PROJECT_MAP.get(UserThreadLocal.getProjectId()).getProjectName();
ChatCompletionResult result = standardRequest(question, modelName, MessageFormat.format(REFERENCE_QUESTION_PROMPT, size, projectName));
Object resultContent = result.getChoices().get(0).getMessage().getContent();
String[] splits = String.valueOf(resultContent).split("\\|");
return new ArrayList<>(Arrays.asList(splits)).stream().filter(StringUtils::isNoneBlank).map(String::trim).collect(Collectors.toList());
}catch (Exception e){
ExceptionCast.cast(CommonCodeEnum.FAIL, "获取ai参考提问异常-", e);
}
return null;
}
@Override
public JSONObject getAISearchResult(String question) {
JSONObject res = new JSONObject();
try {
......@@ -3973,7 +3992,25 @@ public class MarkDataServiceImpl implements MarkDataService {
String sbContent = sb.toString();
result = standardRequest(sbContent, modelName, MessageFormat.format(RESULT_PROMPT, list.size()) + question);
Object resultContent = result.getChoices().get(0).getMessage().getContent();
res.put("result", resultContent);
String[] splits = String.valueOf(resultContent).split("\\r?\\n");
List<JSONObject> answers = new ArrayList<>();
for (int i = 0; i < splits.length; i++) {
JSONObject answer = new JSONObject();
String[] sonSplit = splits[i].split("\\|");
if (0 == sonSplit.length){
continue;
}
if (i == 0){
answer.put("answer", splits[i].trim());
answers.add(answer);
continue;
}
answer.put("answer", sonSplit[0]);
List<String> sonSplitList = new ArrayList<>(Arrays.asList(sonSplit)).stream().filter(StringUtils::isNoneBlank).skip(1).collect(Collectors.toList());
answer.put("referenceArticles", sonSplitList);
answers.add(answer);
}
res.put("answers", answers);
res.put("articles", articles);
}catch (Exception e){
ExceptionCast.cast(CommonCodeEnum.FAIL, "ai搜索异常-", e);
......@@ -3986,9 +4023,7 @@ public class MarkDataServiceImpl implements MarkDataService {
}
private ChatCompletionResult standardRequest(String content, String modelName, String prompt) {
// DoubaoAIAccountFactor.Account account = DoubaoAIAccountFactor.getCompanyAccount();
AccessModel model = DoubaoAIAccountFactor.getCompanyAccount().getModelList().stream().collect(Collectors.toMap(AccessModel::getModelName, m -> m)).get(modelName);
// ArkService service = new ArkService(account.getApiKey());
ChatCompletionResult chatCompletion = null;
try {
final List<ChatMessage> messages = new ArrayList<>();
......@@ -3998,7 +4033,6 @@ public class MarkDataServiceImpl implements MarkDataService {
messages.add(userMessage);
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder().model(model.getModelId()).messages(messages).build();
chatCompletion = DoubaoAIAccountFactor.arkService.createChatCompletion(chatCompletionRequest);
log.info("chatCompletion-content:{}", JSONObject.toJSONString(chatCompletion.getChoices().get(0).getMessage().getContent()));
if (chatCompletion.getChoices().size() > 1) {
log.error("异常chatCompletion:{}", JSON.toJSONString(chatCompletion));
return null;
......
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