add ai chat deepseek
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.newyetai.ai.controller;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.sdk.ai.util.AIUtils;
|
||||
import com.newyetai.sdk.xf.dto.RtasrReqDTO;
|
||||
import com.newyetai.sdk.xf.model.ChatReq;
|
||||
import com.newyetai.sdk.xf.model.TranslateReq;
|
||||
@@ -21,7 +22,7 @@ public class AiController {
|
||||
@PostMapping("chat")
|
||||
@ApiOperation("ai对话")
|
||||
public AlitaResult<String> chat(@Validated @RequestBody ChatReq req) {
|
||||
return AlitaResult.success(XfUtils.chat(req));
|
||||
return AlitaResult.success(AIUtils.chat(req));
|
||||
}
|
||||
|
||||
@PostMapping("translate")
|
||||
|
||||
@@ -15,6 +15,5 @@
|
||||
<if test="param.chatId != null">
|
||||
and chat_id = #{param.chatId}
|
||||
</if>
|
||||
order by id desc
|
||||
</select>
|
||||
</mapper>
|
||||
29
src/main/java/com/newyetai/sdk/ai/config/AiProperties.java
Normal file
29
src/main/java/com/newyetai/sdk/ai/config/AiProperties.java
Normal file
@@ -0,0 +1,29 @@
|
||||
package com.newyetai.sdk.ai.config;
|
||||
|
||||
import java.io.Serializable;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ConfigurationProperties(prefix = AiProperties.PREFIX)
|
||||
@Data
|
||||
@Component
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class AiProperties implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 6362606996602121889L;
|
||||
|
||||
public static final String PREFIX = "ai";
|
||||
|
||||
/** 对话提供者 **/
|
||||
private String chatProvider;
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.newyetai.sdk.ai.service.service;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.common.util.JsonUtils;
|
||||
import com.newyetai.sdk.ai.config.AiProperties;
|
||||
import com.newyetai.sdk.common.constant.SdkConstants;
|
||||
import com.newyetai.sdk.common.dto.DefaultSdkInvokeLogDTO;
|
||||
import com.newyetai.sdk.common.util.HttpUtils;
|
||||
import com.newyetai.sdk.deepseek.config.DeepSeekProperties;
|
||||
import com.newyetai.sdk.deepseek.service.DeepSeekProvider;
|
||||
import com.newyetai.sdk.xf.config.XfProperties;
|
||||
import com.newyetai.sdk.xf.model.ChatReq;
|
||||
import com.newyetai.sdk.xf.model.ChatRes;
|
||||
import com.newyetai.sdk.xf.service.XfSparkProvider;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class AiProvider {
|
||||
|
||||
private static AiProperties aiProperties;
|
||||
|
||||
@Autowired
|
||||
private DeepSeekProvider deepSeekProvider;
|
||||
@Autowired
|
||||
private XfSparkProvider xfSparkProvider;
|
||||
|
||||
private AiProvider(AiProperties aiProperties) {
|
||||
AiProvider.aiProperties = aiProperties;
|
||||
}
|
||||
|
||||
public static AlitaResult<String> httpChat(ChatReq req) {
|
||||
if (aiProperties.getChatProvider().equals(XfProperties.PREFIX)) {
|
||||
return XfSparkProvider.httpChat(req);
|
||||
} else {
|
||||
return DeepSeekProvider.httpChat(req);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
24
src/main/java/com/newyetai/sdk/ai/util/AIUtils.java
Normal file
24
src/main/java/com/newyetai/sdk/ai/util/AIUtils.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package com.newyetai.sdk.ai.util;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.sdk.ai.service.service.AiProvider;
|
||||
import com.newyetai.sdk.xf.model.ChatReq;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class AIUtils {
|
||||
|
||||
/**
|
||||
* 对话
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
public static String chat(ChatReq req) {
|
||||
AlitaResult<String> result = AiProvider.httpChat(req);
|
||||
Assert.isTrue(result.getSuccess(), result.getMsg());
|
||||
return result.getData();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.newyetai.sdk.deepseek.config;
|
||||
|
||||
import java.io.Serializable;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ConfigurationProperties(prefix = DeepSeekProperties.PREFIX)
|
||||
@Data
|
||||
@Component
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class DeepSeekProperties implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 6362606996602121889L;
|
||||
|
||||
public static final String PREFIX = "deepseek";
|
||||
|
||||
/** 控制台获取http服务接口认证信息中的APIPassword **/
|
||||
private String httpAPIPassword;
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package com.newyetai.sdk.deepseek.service;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.common.util.JsonUtils;
|
||||
import com.newyetai.sdk.common.constant.SdkConstants;
|
||||
import com.newyetai.sdk.common.dto.DefaultSdkInvokeLogDTO;
|
||||
import com.newyetai.sdk.common.util.HttpUtils;
|
||||
import com.newyetai.sdk.deepseek.config.DeepSeekProperties;
|
||||
import com.newyetai.sdk.xf.model.ChatReq;
|
||||
import com.newyetai.sdk.xf.model.ChatRes;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class DeepSeekProvider {
|
||||
|
||||
private static DeepSeekProperties deepSeekProperties;
|
||||
|
||||
private DeepSeekProvider(DeepSeekProperties deepSeekProperties) {
|
||||
DeepSeekProvider.deepSeekProperties = deepSeekProperties;
|
||||
}
|
||||
|
||||
public static AlitaResult<String> httpChat(ChatReq req) {
|
||||
return httpChat(req, deepSeekProperties.getHttpAPIPassword());
|
||||
}
|
||||
|
||||
|
||||
public static AlitaResult<String> httpChat(ChatReq req, String httpAPIPassword) {
|
||||
ResponseEntity<ChatRes> response = null;
|
||||
try {
|
||||
try {
|
||||
HttpHeaders header = new HttpHeaders();
|
||||
header.add("Authorization", "Bearer " + httpAPIPassword);
|
||||
header.add("Content-Type", "application/json");
|
||||
// 发送请求
|
||||
HttpEntity requestEntity = new HttpEntity(req, header);
|
||||
response =
|
||||
HttpUtils.restTemplate.exchange("https://api.deepseek.com/chat/completions",
|
||||
HttpMethod.POST, requestEntity, ChatRes.class);
|
||||
} catch (Exception e) {
|
||||
log.error("http error:{}", e.getMessage());
|
||||
return AlitaResult.error(SdkConstants.SDK_HTTP_INVOKE_ERROR_CODE, e.getMessage());
|
||||
}
|
||||
try {
|
||||
String content = response.getBody().getChoices().get(0).getMessage().getContent();
|
||||
return AlitaResult.success(content);
|
||||
} catch (Exception e) {
|
||||
return AlitaResult.error(SdkConstants.SDK_RESPONSE_CONVERT_ERROR_CODE, "返回结果获取content失败");
|
||||
}
|
||||
|
||||
} finally {
|
||||
log.info("invoke:{}",
|
||||
JsonUtils
|
||||
.toJsonString(
|
||||
DefaultSdkInvokeLogDTO.builder().requestData(req).responseData(response)
|
||||
.build()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user