From f5f891b41afcb480b5b6284f942918b4a7b80e50 Mon Sep 17 00:00:00 2001 From: quyixiao <2621048238@qq.com> Date: Wed, 10 Sep 2025 23:57:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/heyu/api/alibaba/LLMUtils.java | 88 +++++++++++++++++++ .../common/text/TranslationRequest.java | 23 +++++ .../request/common/text/TranslationResp.java | 27 ++++++ .../heyu/api/alibaba/resp/ModelResult.java | 27 ++++++ .../translation/TranslationController.java | 40 +++++++++ .../src/test/java/com/api/test/Main.java | 44 ++++++++++ pom.xml | 14 ++- 7 files changed, 261 insertions(+), 2 deletions(-) create mode 100644 api-third/src/main/java/com/heyu/api/alibaba/LLMUtils.java create mode 100644 api-third/src/main/java/com/heyu/api/alibaba/request/common/text/TranslationRequest.java create mode 100644 api-third/src/main/java/com/heyu/api/alibaba/request/common/text/TranslationResp.java create mode 100644 api-third/src/main/java/com/heyu/api/alibaba/resp/ModelResult.java create mode 100644 api-web/api-interface/src/main/java/com/heyu/api/controller/translation/TranslationController.java create mode 100644 api-web/api-interface/src/test/java/com/api/test/Main.java diff --git a/api-third/src/main/java/com/heyu/api/alibaba/LLMUtils.java b/api-third/src/main/java/com/heyu/api/alibaba/LLMUtils.java new file mode 100644 index 0000000..e5ead88 --- /dev/null +++ b/api-third/src/main/java/com/heyu/api/alibaba/LLMUtils.java @@ -0,0 +1,88 @@ +package com.heyu.api.alibaba; + +import com.alibaba.dashscope.aigc.generation.Generation; +import com.alibaba.dashscope.aigc.generation.GenerationParam; +import com.alibaba.dashscope.aigc.generation.GenerationResult; +import com.alibaba.dashscope.aigc.generation.GenerationUsage; +import com.alibaba.dashscope.common.Message; +import com.alibaba.dashscope.common.Role; +import com.alibaba.fastjson.JSON; +import com.heyu.api.alibaba.resp.ModelResult; +import lombok.extern.slf4j.Slf4j; + +import java.util.Arrays; +import java.util.Date; + + +@Slf4j +public class LLMUtils { + + public final static String apiKey = "sk-ef6213245c3648ea81f2e4a8ccd34d75"; + + public final static String + prompt = "# 角色\n" + +"你是一个语言翻译专家,能将用户输入的内容进行翻译\n" + + "# 任务说明\n" + + "翻译成 " ; + ; + + + + public static void main(String[] args) { + + ModelResult modelResult = callBaiLian("开通阿里云百炼:使用阿里云主账号前往阿里云百炼控制台,如果页面顶部显示以下消息,您需要开通阿里云百炼的模型服务,以获得免费额度。如果未显示该消息,则表示您已经开通。",prompt); + + System.out.println(JSON.toJSON(modelResult)); + + } + + public static ModelResult callBaiLian(String content, String prompt ){ + ModelResult modelResult = new ModelResult(); + try { + Date startDate = new Date(); + Generation gen = new Generation(); + Message systemMsg = Message.builder() + .role(Role.SYSTEM.getValue()) + .content(prompt) + .build(); + Message userMsg = Message.builder() + .role(Role.USER.getValue()) + .content(content) + .build(); + GenerationParam param = GenerationParam.builder() + // 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:.apiKey("sk-xxx") + .apiKey("sk-ef6213245c3648ea81f2e4a8ccd34d75") + // 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models + .model("qwen-plus") + .messages(Arrays.asList(systemMsg, userMsg)) + .resultFormat(GenerationParam.ResultFormat.MESSAGE) + .build(); + + GenerationResult generationResult = gen.call(param); + String resp= generationResult.getOutput() + .getChoices().get(0). + getMessage().getContent() ; + + + modelResult.setResult(resp); + + Date endDate = new Date(); + + GenerationUsage generationUsage = generationResult.getUsage(); + + modelResult.setTokens(generationUsage.getTotalTokens()); + modelResult.setStartTime(startDate); + modelResult.setEndTime( endDate); + + modelResult.setExet(endDate .getTime()- startDate.getTime()); + return modelResult; + }catch (Exception e ){ + e.printStackTrace(); + }finally { + log.info("callBaiLian content :{}, callBaiLian modelResult:{},prompt:{}",content, JSON.toJSONString(modelResult),prompt); + } + + return null; + } + +} diff --git a/api-third/src/main/java/com/heyu/api/alibaba/request/common/text/TranslationRequest.java b/api-third/src/main/java/com/heyu/api/alibaba/request/common/text/TranslationRequest.java new file mode 100644 index 0000000..5a7b3dd --- /dev/null +++ b/api-third/src/main/java/com/heyu/api/alibaba/request/common/text/TranslationRequest.java @@ -0,0 +1,23 @@ +package com.heyu.api.alibaba.request.common.text; + + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class TranslationRequest implements Serializable { + + + /*** + * 用户输入的内容 + */ + private String content; + + + /*** + * 要翻译成的目标语言 + */ + private String language; + +} diff --git a/api-third/src/main/java/com/heyu/api/alibaba/request/common/text/TranslationResp.java b/api-third/src/main/java/com/heyu/api/alibaba/request/common/text/TranslationResp.java new file mode 100644 index 0000000..1e21684 --- /dev/null +++ b/api-third/src/main/java/com/heyu/api/alibaba/request/common/text/TranslationResp.java @@ -0,0 +1,27 @@ +package com.heyu.api.alibaba.request.common.text; + + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class TranslationResp implements Serializable { + + + /*** + * 用户输入的内容 + */ + private String content; + + /*** + * 要翻译成的目标语言 + */ + private String language; + + /*** + * 目标内容 + */ + private String translationContent; + +} diff --git a/api-third/src/main/java/com/heyu/api/alibaba/resp/ModelResult.java b/api-third/src/main/java/com/heyu/api/alibaba/resp/ModelResult.java new file mode 100644 index 0000000..9096bd4 --- /dev/null +++ b/api-third/src/main/java/com/heyu/api/alibaba/resp/ModelResult.java @@ -0,0 +1,27 @@ +package com.heyu.api.alibaba.resp; + + +import lombok.Data; + +import java.util.Date; + +@Data +public class ModelResult { + + + private String result ; + + private Integer tokens ; + + + + + private Date startTime ; + + + + private Date endTime ; + + + private long exet; +} diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/translation/TranslationController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/translation/TranslationController.java new file mode 100644 index 0000000..bb56f69 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/translation/TranslationController.java @@ -0,0 +1,40 @@ +package com.heyu.api.controller.translation; + +import com.heyu.api.alibaba.LLMUtils; +import com.heyu.api.alibaba.request.common.text.TranslationRequest; +import com.heyu.api.alibaba.request.common.text.TranslationResp; +import com.heyu.api.alibaba.resp.ModelResult; +import com.heyu.api.data.annotation.EbAuthentication; +import com.heyu.api.data.constants.ApiConstants; +import com.heyu.api.data.utils.R; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +@Slf4j +@RestController +@RequestMapping("/general/translation") +public class TranslationController { + + // http://localhost:8888/general/translation/language?content=我是一只小猫&language=英语 + @EbAuthentication(tencent = ApiConstants.TENCENT_AUTH) + @RequestMapping("/language") + public R language(@RequestBody TranslationRequest translationRequest) throws Exception { + String prompt = LLMUtils.prompt + translationRequest.getLanguage(); + + ModelResult modelResult = LLMUtils.callBaiLian(translationRequest.getContent(), prompt); + + TranslationResp resp = new TranslationResp(); + + resp.setLanguage(translationRequest.getLanguage()); + resp.setContent(modelResult.getResult()); + + if(modelResult!=null){ + resp.setTranslationContent(modelResult.getResult()); + } + return R.ok().setData(resp); + } + +} \ No newline at end of file diff --git a/api-web/api-interface/src/test/java/com/api/test/Main.java b/api-web/api-interface/src/test/java/com/api/test/Main.java new file mode 100644 index 0000000..5246826 --- /dev/null +++ b/api-web/api-interface/src/test/java/com/api/test/Main.java @@ -0,0 +1,44 @@ +package com.api.test; + +import com.alibaba.dashscope.aigc.generation.Generation; +import com.alibaba.dashscope.aigc.generation.GenerationParam; +import com.alibaba.dashscope.aigc.generation.GenerationResult; +import com.alibaba.dashscope.common.Message; +import com.alibaba.dashscope.common.Role; +import com.alibaba.dashscope.exception.ApiException; +import com.alibaba.dashscope.exception.InputRequiredException; +import com.alibaba.dashscope.exception.NoApiKeyException; + +import java.util.Arrays; +public class Main { + public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException { + Generation gen = new Generation(); + Message systemMsg = Message.builder() + .role(Role.SYSTEM.getValue()) + .content("You are a helpful assistant.") + .build(); + Message userMsg = Message.builder() + .role(Role.USER.getValue()) + .content("你是谁?") + .build(); + GenerationParam param = GenerationParam.builder() + // 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:.apiKey("sk-xxx") + .apiKey("sk-ef6213245c3648ea81f2e4a8ccd34d75") + // 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models + .model("qwen-plus") + .messages(Arrays.asList(systemMsg, userMsg)) + .resultFormat(GenerationParam.ResultFormat.MESSAGE) + .build(); + return gen.call(param); + } + public static void main(String[] args) { + try { + GenerationResult result = callWithMessage(); + System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent()); + } catch (ApiException | NoApiKeyException | InputRequiredException e) { + System.err.println("错误信息:"+e.getMessage()); + System.out.println("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code"); + } + System.exit(0); + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 74b964e..78f75fe 100644 --- a/pom.xml +++ b/pom.xml @@ -343,6 +343,16 @@ + + + com.alibaba + dashscope-sdk-java + 2.20.5 + + + + + com.aliyun credentials-java @@ -393,8 +403,8 @@ maven-compiler-plugin 3.5.1 - 1.8 - 1.8 + 11 + 11 true lines,vars,source