From a7e8a29353bf490e903b3dd415fb1c7c39fc5dc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Fri, 14 Feb 2025 21:50:31 +0800 Subject: [PATCH] 'commit' --- Doc/下载IDEA的AI插件.txt | 4 + pom.xml | 12 ++ .../Tools/TestUnit/FileTransJavaDemo.java | 177 ++++++++++++++++++ .../java/Tools/TestUnit/TestDeepSeek.java | 23 ++- 4 files changed, 212 insertions(+), 4 deletions(-) create mode 100644 Doc/下载IDEA的AI插件.txt create mode 100644 src/main/java/Tools/TestUnit/FileTransJavaDemo.java diff --git a/Doc/下载IDEA的AI插件.txt b/Doc/下载IDEA的AI插件.txt new file mode 100644 index 00000000..9ac56640 --- /dev/null +++ b/Doc/下载IDEA的AI插件.txt @@ -0,0 +1,4 @@ +https://plugins.jetbrains.com/plugin/21056-proxy-ai/versions + +Proxy AI +https://blog.csdn.net/weixin_43701894/article/details/143585469 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0afe3e74..0451c20e 100644 --- a/pom.xml +++ b/pom.xml @@ -407,6 +407,18 @@ hanlp portable-1.8.4 + + + + + + + + + com.aliyun + aliyun-java-sdk-core + 4.7.3 + diff --git a/src/main/java/Tools/TestUnit/FileTransJavaDemo.java b/src/main/java/Tools/TestUnit/FileTransJavaDemo.java new file mode 100644 index 00000000..ac30be0a --- /dev/null +++ b/src/main/java/Tools/TestUnit/FileTransJavaDemo.java @@ -0,0 +1,177 @@ +package Tools.TestUnit; + +import com.alibaba.fastjson.JSONObject; +import com.aliyuncs.CommonRequest; +import com.aliyuncs.CommonResponse; +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.IAcsClient; +import com.aliyuncs.exceptions.ClientException; +import com.aliyuncs.http.FormatType; +import com.aliyuncs.http.MethodType; +import com.aliyuncs.profile.DefaultProfile; + +import java.io.IOException; + +public class FileTransJavaDemo { + public static String ALY_ACCESS_KEY_ID = "LTAI5tE4tgpGcKWhbZg6C4bh"; + public static String ALY_ACCESS_KEY_SECRET = "oizcTOZ8izbGUouboC00RcmGE8vBQ1"; + public static String APP_KEY = "OIpiw501l4o6MYEe"; + + // 地域ID,常量,固定值。 + public static final String REGIONID = "cn-shanghai"; + public static final String ENDPOINTNAME = "cn-shanghai"; + public static final String PRODUCT = "nls-filetrans"; + public static final String DOMAIN = "filetrans.cn-shanghai.aliyuncs.com"; + public static final String API_VERSION = "2018-08-17"; // 中国站版本 + // public static final String API_VERSION = "2019-08-23"; // 国际站版本 + public static final String POST_REQUEST_ACTION = "SubmitTask"; + public static final String GET_REQUEST_ACTION = "GetTaskResult"; + // 请求参数 + public static final String KEY_APP_KEY = "appkey"; + public static final String KEY_FILE_LINK = "file_link"; + public static final String KEY_VERSION = "version"; + public static final String KEY_ENABLE_WORDS = "enable_words"; + // 响应参数 + public static final String KEY_TASK = "Task"; + public static final String KEY_TASK_ID = "TaskId"; + public static final String KEY_STATUS_TEXT = "StatusText"; + public static final String KEY_RESULT = "Result"; + // 状态值 + public static final String STATUS_SUCCESS = "SUCCESS"; + private static final String STATUS_RUNNING = "RUNNING"; + private static final String STATUS_QUEUEING = "QUEUEING"; + // 阿里云鉴权client + IAcsClient client; + + public FileTransJavaDemo(String accessKeyId, String accessKeySecret) { + // 设置endpoint + DefaultProfile.addEndpoint(ENDPOINTNAME, REGIONID, PRODUCT, DOMAIN); + // 创建DefaultAcsClient实例并初始化 + DefaultProfile profile = DefaultProfile.getProfile(REGIONID, accessKeyId, accessKeySecret); + this.client = new DefaultAcsClient(profile); + } + + public String submitFileTransRequest(String appKey, String fileLink) { + /** + * 1. 创建CommonRequest,设置请求参数。 + */ + CommonRequest postRequest = new CommonRequest(); + // 设置域名 + postRequest.setDomain(DOMAIN); + // 设置API的版本号,格式为YYYY-MM-DD。 + postRequest.setVersion(API_VERSION); + // 设置action + postRequest.setAction(POST_REQUEST_ACTION); + // 设置产品名称 + postRequest.setProduct(PRODUCT); + /** + * 2. 设置录音文件识别请求参数,以JSON字符串的格式设置到请求Body中。 + */ + JSONObject taskObject = new JSONObject(); + // 设置appkey + taskObject.put(KEY_APP_KEY, appKey); + // 设置音频文件访问链接 + taskObject.put(KEY_FILE_LINK, fileLink); + // 新接入请使用4.0版本,已接入(默认2.0)如需维持现状,请注释掉该参数设置。 + taskObject.put(KEY_VERSION, "4.0"); + // 设置是否输出词信息,默认为false,开启时需要设置version为4.0及以上。 + taskObject.put(KEY_ENABLE_WORDS, true); + String task = taskObject.toJSONString(); + System.out.println(task); + // 设置以上JSON字符串为Body参数。 + postRequest.putBodyParameter(KEY_TASK, task); + // 设置为POST方式的请求。 + postRequest.setMethod(MethodType.POST); + postRequest.setHttpContentType(FormatType.JSON); + /** + * 3. 提交录音文件识别请求,获取录音文件识别请求任务的ID,以供识别结果查询使用。 + */ + String taskId = null; + try { + CommonResponse postResponse = client.getCommonResponse(postRequest); + System.err.println("提交录音文件识别请求的响应:" + postResponse.getData()); + if (postResponse.getHttpStatus() == 200) { + JSONObject result = JSONObject.parseObject(postResponse.getData()); + String statusText = result.getString(KEY_STATUS_TEXT); + if (STATUS_SUCCESS.equals(statusText)) { + taskId = result.getString(KEY_TASK_ID); + } + } + } catch (ClientException e) { + e.printStackTrace(); + } + return taskId; + } + + public String getFileTransResult(String taskId) { + /** + * 1. 创建CommonRequest,设置任务ID。 + */ + CommonRequest getRequest = new CommonRequest(); + // 设置域名 + getRequest.setDomain(DOMAIN); + // 设置API版本 + getRequest.setVersion(API_VERSION); + // 设置action + getRequest.setAction(GET_REQUEST_ACTION); + // 设置产品名称 + getRequest.setProduct(PRODUCT); + // 设置任务ID为查询参数 + getRequest.putQueryParameter(KEY_TASK_ID, taskId); + // 设置为GET方式的请求 + getRequest.setMethod(MethodType.GET); + /** + * 2. 提交录音文件识别结果查询请求 + * 以轮询的方式进行识别结果的查询,直到服务端返回的状态描述为“SUCCESS”或错误描述,则结束轮询。 + */ + String result = null; + while (true) { + try { + CommonResponse getResponse = client.getCommonResponse(getRequest); + System.err.println("识别查询结果:" + getResponse.getData()); + if (getResponse.getHttpStatus() != 200) { + break; + } + JSONObject rootObj = JSONObject.parseObject(getResponse.getData()); + String statusText = rootObj.getString(KEY_STATUS_TEXT); + if (STATUS_RUNNING.equals(statusText) || STATUS_QUEUEING.equals(statusText)) { + // 继续轮询,注意设置轮询时间间隔。 + Thread.sleep(10000); + } else { + // 状态信息为成功,返回识别结果;状态信息为异常,返回空。 + if (STATUS_SUCCESS.equals(statusText)) { + result = rootObj.getString(KEY_RESULT); + // 状态信息为成功,但没有识别结果,则可能是由于文件里全是静音、噪音等导致识别为空。 + if (result == null) { + result = ""; + } + } + break; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return result; + } + + public static void main(String[] args) throws IOException { + String fileLink = "https://gw.alipayobjects.com/os/bmw-prod/0574ee2e-f494-45a5-820f-63aee583045a.wav"; + FileTransJavaDemo demo = new FileTransJavaDemo(ALY_ACCESS_KEY_ID, ALY_ACCESS_KEY_SECRET); + // 第一步:提交录音文件识别请求,获取任务ID用于后续的识别结果轮询。 + String taskId = demo.submitFileTransRequest(APP_KEY, fileLink); + if (taskId != null) { + System.out.println("录音文件识别请求成功,task_id: " + taskId); + } else { + System.out.println("录音文件识别请求失败!"); + return; + } + // 第二步:根据任务ID轮询识别结果。 + String result = demo.getFileTransResult(taskId); + if (result != null) { + System.out.println("录音文件识别结果查询成功:" + result); + } else { + System.out.println("录音文件识别结果查询失败!"); + } + } +} diff --git a/src/main/java/Tools/TestUnit/TestDeepSeek.java b/src/main/java/Tools/TestUnit/TestDeepSeek.java index b104fcd9..72cb5783 100644 --- a/src/main/java/Tools/TestUnit/TestDeepSeek.java +++ b/src/main/java/Tools/TestUnit/TestDeepSeek.java @@ -3,6 +3,7 @@ package Tools.TestUnit; import java.util.Arrays; import java.lang.System; +import cn.hutool.core.io.FileUtil; import com.alibaba.dashscope.aigc.generation.Generation; import com.alibaba.dashscope.aigc.generation.GenerationParam; import com.alibaba.dashscope.aigc.generation.GenerationResult; @@ -19,21 +20,33 @@ public class TestDeepSeek { //接入的API KEY public static final String APIKEY = "sk-01d13a39e09844038322108ecdbd1bbc"; + /** + * 获取系统提示语 + * + * @return + */ + public static String getSystemPrompt() { + String md = "D:\\dsWork\\ppt-generator-master\\md-file\\readme\\default.md"; + return FileUtil.readUtf8String(md); + } + public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException { Generation gen = new Generation(); + String systemPrompt ="返回的教案内容请严格按照指定的markdown语法格式返回,用来生成ppt。需要注意:1、最开头的Title:..,Author: ... Date:... 不能省略掉,有用处。2、第一级用#,第二级用##,第二级是独立的PPT一个页,每页中的数据必须有> 开头,如果是页面中的条目,必须用 - 开头,结果不要返回图片!请仔细阅读参考格式:"+getSystemPrompt(); Message systemMsg = Message.builder() .role(Role.SYSTEM.getValue()) - .content("You are a helpful assistant.") + //.content("You are a helpful assistant.") + .content(systemPrompt) .build(); Message userMsg = Message.builder() .role(Role.USER.getValue()) - .content("你是谁?") + .content("请帮我生成一个小学数学内角和的教案,按标准格式输出。") .build(); GenerationParam param = GenerationParam.builder() // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx") .apiKey(APIKEY) // 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models - .model(V3) + .model(R1) .messages(Arrays.asList(systemMsg, userMsg)) .resultFormat(GenerationParam.ResultFormat.MESSAGE) .build(); @@ -43,7 +56,9 @@ public class TestDeepSeek { public static void main(String[] args) { try { GenerationResult result = callWithMessage(); - System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent()); + String mdContent=result.getOutput().getChoices().getFirst().getMessage().getContent(); + System.out.println(mdContent); + FileUtil.writeUtf8String(mdContent,"D:\\dsWork\\ppt-generator-master\\md-file\\readme\\4.md"); } catch (ApiException | NoApiKeyException | InputRequiredException e) { System.err.println("错误信息:" + e.getMessage()); System.out.println("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code");