Commit 96ad2bbe authored by alex yao's avatar alex yao

feat:智写判断写作和生成标题接口

parent a0728e8d
...@@ -2,6 +2,7 @@ package cn.com.poc.writing.aggregate; ...@@ -2,6 +2,7 @@ package cn.com.poc.writing.aggregate;
import cn.com.poc.writing.dto.AiWritingExampleDto; import cn.com.poc.writing.dto.AiWritingExampleDto;
import cn.com.poc.writing.dto.AiWritingExampleTypeDto; import cn.com.poc.writing.dto.AiWritingExampleTypeDto;
import cn.com.poc.writing.dto.AiWritingTitleGenerationDto;
import java.util.List; import java.util.List;
...@@ -39,5 +40,12 @@ public interface AiWritingService { ...@@ -39,5 +40,12 @@ public interface AiWritingService {
*/ */
List<AiWritingExampleTypeDto> exampleType() throws Exception; List<AiWritingExampleTypeDto> exampleType() throws Exception;
/**
* 标题生成
*
* @param input 输入内容g
*/
AiWritingTitleGenerationDto titleGeneration(String input);
} }
package cn.com.poc.writing.aggregate.impl; package cn.com.poc.writing.aggregate.impl;
import cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Tool;
import com.google.common.collect.Maps;
import cn.com.poc.agent_application.entity.BizAgentApplicationDialoguesRecordEntity; import cn.com.poc.agent_application.entity.BizAgentApplicationDialoguesRecordEntity;
import cn.com.poc.agent_application.entity.BizAgentApplicationGcConfigEntity; import cn.com.poc.agent_application.entity.BizAgentApplicationGcConfigEntity;
import cn.com.poc.agent_application.entity.KnowledgeContentResult; import cn.com.poc.agent_application.entity.KnowledgeContentResult;
...@@ -31,6 +34,7 @@ import cn.com.poc.thirdparty.service.LLMService; ...@@ -31,6 +34,7 @@ import cn.com.poc.thirdparty.service.LLMService;
import cn.com.poc.writing.aggregate.AiWritingService; import cn.com.poc.writing.aggregate.AiWritingService;
import cn.com.poc.writing.dto.AiWritingExampleDto; import cn.com.poc.writing.dto.AiWritingExampleDto;
import cn.com.poc.writing.dto.AiWritingExampleTypeDto; import cn.com.poc.writing.dto.AiWritingExampleTypeDto;
import cn.com.poc.writing.dto.AiWritingTitleGenerationDto;
import cn.com.poc.writing.entity.BizAiWritingExampleEntity; import cn.com.poc.writing.entity.BizAiWritingExampleEntity;
import cn.com.poc.writing.entity.BizAiWritingExampleTypeEntity; import cn.com.poc.writing.entity.BizAiWritingExampleTypeEntity;
import cn.com.poc.writing.service.BizAiWritingExampleService; import cn.com.poc.writing.service.BizAiWritingExampleService;
...@@ -236,6 +240,57 @@ public class AiWritingServiceImpl implements AiWritingService { ...@@ -236,6 +240,57 @@ public class AiWritingServiceImpl implements AiWritingService {
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
@Override
public AiWritingTitleGenerationDto titleGeneration(String input) {
String system = "## 角色\n" +
"你的任务需要帮我判断用户是否需要进行【写作】\n" +
"\n" +
"## 输出\n" +
"1.包含字段有 needWriting:bool 判断是否需要写作 true-需要 false-不需要 。 title-写作标题,如果需要则生成文章的标题\n" +
"2.仅使用文本方式输出内容。\n" +
"\n" +
"## 输出案例\n" +
"{”needWriting“:true,\"title\":\"论人工智能发展对生产力的影响\"}";
// 配置message
List<Message> messages = new ArrayList<>();
Message systemMessage = new Message();
systemMessage.setContent(system);
systemMessage.setRole(LLMRoleEnum.SYSTEM.getRole());
messages.add(systemMessage);
Message userMessage = new Message();
userMessage.setContent(input);
userMessage.setRole(LLMRoleEnum.USER.getRole());
messages.add(userMessage);
LargeModelResponse largeModelResponse = new LargeModelResponse();
largeModelResponse.setModel("deepseek-v3");
largeModelResponse.setMessages(messages.toArray(new Message[0]));
largeModelResponse.setTopP(0.7F);
largeModelResponse.setTemperature(0.5F);
largeModelResponse.setStream(false);
LargeModelDemandResult largeModelDemandResult = llmService.chat(largeModelResponse);
if (largeModelDemandResult == null || StringUtils.isBlank(largeModelDemandResult.getMessage())) {
throw new BusinessException("调用大模型失败");
}
String message = largeModelDemandResult.getMessage();
int startEnd = message.indexOf("{");
int endIndex = message.lastIndexOf("}");
if (startEnd == -1 || endIndex == -1) {
logger.error("解析内容失败, message:{}", message);
throw new BusinessException("解析内容失败");
}
String substring = message.substring(startEnd, endIndex + 1);
AiWritingTitleGenerationDto aiWritingTitleGenerationDto = JsonUtils.deSerialize(substring, AiWritingTitleGenerationDto.class);
if (aiWritingTitleGenerationDto == null){
aiWritingTitleGenerationDto.setNeedWriting(false);
aiWritingTitleGenerationDto.setTitle(StringUtils.EMPTY);
}
return aiWritingTitleGenerationDto;
}
private List<Message> buildMessages(String dialogsId, Long userId, String input, String fileUrl, List<KnowledgeContentResult> knowledgeContentResults) throws Exception { private List<Message> buildMessages(String dialogsId, Long userId, String input, String fileUrl, List<KnowledgeContentResult> knowledgeContentResults) throws Exception {
// 获取对话提示词 // 获取对话提示词
String promptCode = "AiWritingPrompt"; String promptCode = "AiWritingPrompt";
......
package cn.com.poc.writing.dto;
/**
* @author alex.yao
* @date 2025/6/24
*/
public class AiWritingTitleGenerationDto {
private String title;
private Boolean needWriting;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Boolean getNeedWriting() {
return needWriting;
}
public void setNeedWriting(Boolean needWriting) {
this.needWriting = needWriting;
}
}
package cn.com.poc.writing.dto;
/**
* @author alex.yao
* @date 2025/6/24
*/
public class TitleGenerationDto {
private String input;
public String getInput() {
return input;
}
public void setInput(String input) {
this.input = input;
}
}
package cn.com.poc.writing.rest; package cn.com.poc.writing.rest;
import cn.com.poc.writing.dto.AiWritingDto; import cn.com.poc.writing.dto.*;
import cn.com.poc.writing.dto.AiWritingExampleDto;
import cn.com.poc.writing.dto.AiWritingExampleTypeDto;
import cn.com.yict.framemax.core.rest.BaseRest; import cn.com.yict.framemax.core.rest.BaseRest;
import cn.com.yict.framemax.web.permission.Access; import cn.com.yict.framemax.web.permission.Access;
import cn.com.yict.framemax.web.permission.Permission; import cn.com.yict.framemax.web.permission.Permission;
...@@ -25,4 +23,6 @@ public interface AiWritingRest extends BaseRest { ...@@ -25,4 +23,6 @@ public interface AiWritingRest extends BaseRest {
List<AiWritingExampleTypeDto> exampleType() throws Exception; List<AiWritingExampleTypeDto> exampleType() throws Exception;
AiWritingTitleGenerationDto titleGeneration(@RequestBody TitleGenerationDto titleGenerationDto);
} }
...@@ -4,9 +4,7 @@ import cn.com.poc.common.utils.Assert; ...@@ -4,9 +4,7 @@ import cn.com.poc.common.utils.Assert;
import cn.com.poc.common.utils.BlContext; import cn.com.poc.common.utils.BlContext;
import cn.com.poc.support.security.oauth.entity.UserBaseEntity; import cn.com.poc.support.security.oauth.entity.UserBaseEntity;
import cn.com.poc.writing.aggregate.AiWritingService; import cn.com.poc.writing.aggregate.AiWritingService;
import cn.com.poc.writing.dto.AiWritingDto; import cn.com.poc.writing.dto.*;
import cn.com.poc.writing.dto.AiWritingExampleDto;
import cn.com.poc.writing.dto.AiWritingExampleTypeDto;
import cn.com.poc.writing.rest.AiWritingRest; import cn.com.poc.writing.rest.AiWritingRest;
import cn.com.yict.framemax.core.exception.BusinessException; import cn.com.yict.framemax.core.exception.BusinessException;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -50,4 +48,11 @@ public class AiWritingRestImpl implements AiWritingRest { ...@@ -50,4 +48,11 @@ public class AiWritingRestImpl implements AiWritingRest {
public List<AiWritingExampleTypeDto> exampleType() throws Exception { public List<AiWritingExampleTypeDto> exampleType() throws Exception {
return aiWritingService.exampleType(); return aiWritingService.exampleType();
} }
@Override
public AiWritingTitleGenerationDto titleGeneration(TitleGenerationDto titleGenerationDto) {
Assert.notNull(titleGenerationDto, "titleGenerationDto is null");
Assert.notBlank(titleGenerationDto.getInput(), "input is null");
return aiWritingService.titleGeneration(titleGenerationDto.getInput());
}
} }
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