Files
senmesh-zc/src/test/java/com/newyetai/SparkTest.java

243 lines
12 KiB
Java
Raw Normal View History

2025-06-11 09:42:13 +08:00
package com.newyetai;
2025-06-25 18:11:39 +08:00
import com.newyetai.sdk.xf.config.XfProperties.XfAppProperties;
import com.newyetai.sdk.xf.model.TranslateReq;
import com.newyetai.sdk.xf.service.RtasrClientApp;
2025-06-11 09:42:13 +08:00
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.UnsupportedAudioFileException;
import org.apache.tomcat.util.http.fileupload.ByteArrayOutputStream;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import com.google.common.collect.Lists;
import com.newyetai.common.AlitaResult;
import com.newyetai.common.exception.BusinessException;
import com.newyetai.common.exception.util.Assert;
import com.newyetai.common.util.JsonUtils;
import com.newyetai.component.file.entity.FileRecord;
import com.newyetai.component.file.util.FileUtils;
import com.newyetai.sdk.common.util.HttpUtils;
import com.newyetai.sdk.xf.config.XfProperties;
import com.newyetai.sdk.xf.model.ChatReq;
import com.newyetai.sdk.xf.model.MessageDTO;
import com.newyetai.sdk.xf.service.XfSparkProvider;
import com.newyetai.sdk.xf.util.WebIATWS;
import com.newyetai.sdk.xf.util.WebTtsWS;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class SparkTest {
static String httpAPIPassword = "";
static XfProperties xfProperties = XfProperties.builder()
.iatHostUrl("https://iat-api.xfyun.cn/v2/iat")
.ttsHostUrl("https://tts-api.xfyun.cn/v2/tts")
2025-06-25 18:11:39 +08:00
.otsHostUrl("https://ntrans.xfyun.cn/v2/ots")
.appId("83b8ddca")
.apiSecret("ZWE2MjkzY2VmZDkwM2EwZGJhNGRhOWJm")
.apiKey("e092f93e28ebe6d27f756bb2d884dcff")
.rtasr(XfAppProperties.builder().apiKey("2e33d9128a73be21b294594e5377ca53").build())
2025-06-11 09:42:13 +08:00
.build();
@Test
public void test() {
HttpHeaders header = new HttpHeaders();
header.add("Authorization", "Bearer " + httpAPIPassword);
header.add("Content-Type", "application/json");
// 发送请求
Map<String, Object> data = new HashMap<String, Object>();
data.put("model","4.0Ultra");
Map<String, Object> r1 = new HashMap<String, Object>();
r1.put("role","system");
r1.put("content","你是一位专业的HR。目标任务:请根据我给出的position_name生成5个相关的面试中可能会问到的问题,并为每个问题都生成一个参考答案,并从1开始生成问题序号");
Map<String, Object> r2 = new HashMap<String, Object>();
r2.put("role","system");
r2.put("content","全部数据以JSON模版的形式返回,格式为:{position_name:岗位信息, [{qno:问题序号,q:问题,a:参考答案}]}");
Map<String, Object> r3 = new HashMap<String, Object>();
r3.put("role","user");
r3.put("content","{\"positionName\":\"java开发\"}");
data.put("messages",Lists.newArrayList(r1, r2, r3));
HttpEntity requestEntity = new HttpEntity(data, header);
ResponseEntity<String> response = HttpUtils.restTemplate.exchange("https://spark-api-open.xf-yun.com/v1/chat/completions", HttpMethod.POST, requestEntity, String.class);
System.out.println(JsonUtils.toDefaultJsonString(response));
}
@Test
public void testAlita() {
ChatReq req = ChatReq.builder()
.message(MessageDTO.builder().role("system")
.content("你是一位专业的HR。目标任务:请根据我给出的信息生成5个相关的面试中可能会问到的问题,并为每个问题都生成一个参考答案,并从1开始生成问题序号")
.build())
.message(MessageDTO.builder().role("system")
.content("全部数据以JSON模版的形式返回,格式为:[{qno:问题序号,q:问题,a:参考答案}]").build())
.message(MessageDTO.builder().role("user").content("jobName").build()).build();
AlitaResult<?> res = XfSparkProvider.httpChat(req, httpAPIPassword);
log.info("{}", res);
}
@Test
public void testEvaluate() {
ChatReq req = ChatReq.builder()
.message(MessageDTO.builder().role("system")
.content("你是一位专业的简历撰写专家。目标任务:请根据我给出的信息,生成指定的内容。需求说明:要求在与原文语意一致的基础上扩写内容,风格设定,简明扼要。")
.build())
.message(MessageDTO.builder().role("system")
.content("根据我输入的信息,输出1段自我评价,包含学习能力、工作态度、团队协作等方面,字数在300字左右")
.build())
.message(MessageDTO.builder().role("system")
.content("全部数据以JSON模版的形式返回, 格式为:{'selfEva':xxx}")
.build())
.message(MessageDTO.builder().role("user").content("环卫工").build()).build();
AlitaResult<?> res = XfSparkProvider.httpChat(req, httpAPIPassword);
log.info("{}", res);
}
@Test
public void testWorkExperience() {
ChatReq req = ChatReq.builder()
.message(MessageDTO.builder().role("system")
.content("你是一位专业的简历撰写专家。目标任务:请根据我给出的信息,生成一份履历丰富的简历。")
.build())
.message(MessageDTO.builder().role("system")
.content("简历内容包含个人信息简介、工作经历、教育背景、掌握技能、自我评价。以JSON格式返回,每个点作为一个对象。")
.build())
.message(MessageDTO.builder().role("system")
.content("个人信息输出格式为:{姓名:xxx, 年龄:xxx,联系电话:xxx,联系邮箱:xxx}")
.build())
.message(MessageDTO.builder().role("system")
.content("工作经历以数组的形式返回。输出格式为:[{企业名称:xxx, 岗位:xxx,工作职责:[xxx,xxx,xxx],工作时间:xxx-xxx}]")
.build())
.message(MessageDTO.builder().role("system")
.content("掌握技能必须作为数组输出")
.build())
.message(MessageDTO.builder().role("system")
.content("自我评价必须作为数组输出")
.build())
.message(MessageDTO.builder().role("user")
// .content("{\"name\":\"小明\",\"gender\":1,\"contactWay\":\"0717-123123\",\"birthDay\":\"1980-07\",\"work\":\"在一家科技公司干了4年\"}")
.content("我是小明,在一家科技公司干了4年")
.build()).build();
AlitaResult<String> result = XfSparkProvider.httpChat(req, httpAPIPassword);
log.info("{}", result);
}
@Test
public void testAnalyseResume() {
ChatReq req = ChatReq.builder()
.message(MessageDTO.builder().role("system")
.content("你是一位专业的简历分析专家。目标任务:请根据我给出的信息,分析得出简历信息。不要自己填充json信息")
.build())
.message(MessageDTO.builder().role("system")
.content("请生成一个包含以下信息的 JSON 数据,根据用户给出的实际信息解析,值都可为空:\n"
+ "- name(字符串类型):表示用户的姓名。\n"
+ "- sex(字符串类型):表示用户的性别,值为 \"1\"(男)或 \"2\"(女),身份证号倒数第二位,奇数是男,偶数是女。\n"
+ "- phone(字符串类型):表示用户的联系电话,可为空,不为空的格式为 以 1 开头,共 11 位数字。\n"
+ "- email(字符串类型):表示用户的联系电子邮箱地址,可为空,不为空的格式为 包含 @ 符号,且 @ 前后至少有一个字符 及 域名部分至少包含一个 . 符号。\n"
+ "- intentionPosition(字符串类型):表示用户的意向职位。\n"
+ "- major(字符串类型):表示用户的专业。\n"
+ "- birthday(日期类型):表示用户的出生日期,格式为 YYYY-MM。\n"
+ "- jobTime(日期类型):表示用户的参加工作时间,格式为 YYYY-MM。\n"
+ "- school(字符串类型):表示用户的毕业院校。\n"
+ "- education(字符串类型):表示用户的学历,值为:\n"
+ " - \"1\":\"博士\"\n"
+ " - \"2\":\"硕士\"\n"
+ " - \"3\":\"本科\"\n"
+ " - \"4\":\"大专\"\n"
+ " - \"5\":\"中专\"\n"
+ " - \"6\":\"技校\"\n"
+ " - \"7\":\"职高\"\n"
+ " - \"9\":\"高中\"\n"
+ " - \"10\":\"初中\"\n"
+ " - \"11\":\"小学\"\n"
+ "- workExperience(字符串类型):表示用户的工作经历,格式为多行文本,包含以下信息:\n"
+ " - 企业名称\n"
+ " - 岗位\n"
+ " - 工作时间\n"
+ " - 工作职责\n"
+ "- selfEvaluation(字符串类型):表示用户的自我评价,格式为多行文本。")
.build())
.message(MessageDTO.builder().role("user").content("我是小明,身份证号是110105199003071234,小学毕业,前年在一家科技公司干了1年,现在想找个环卫工的活,请用abc@33.com联系我").build()).build();
AlitaResult<String> result = XfSparkProvider.httpChat(req, httpAPIPassword);
log.info("{}", result);
}
@Test
public void iat() throws IOException {
String file = "src/main/resources/iat/file.mp3";
try(InputStream is = new FileInputStream(file)){
AlitaResult<String> result = WebIATWS.execute(is, xfProperties);
log.info("{}", result);
}
// // 示例的WebM文件路径(请替换为实际的有效路径)
String webmFilePath = "src/main/resources/iat/audio.webm";
// // 示例的输出MP3文件路径(请替换为实际的有效路径)
// String mp3FilePath = "src/main/resources/iat/file.mp3";
// try(InputStream is = FileUtils.convertWebmToMp3(new File(webmFilePath))){
// AlitaResult<String> result = WebIATWS.execute(is, xfProperties);
// log.info("{}", result);
// }
}
@Test
public void tts() throws Exception {
// try(OutputStream outputStream = new FileOutputStream("src/main/resources/iat/223.mp3");){
// WebTtsWS.execute("欢迎来到讯飞开放平台", xfProperties, outputStream);
// }
// try(ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// OutputStream fs = new FileOutputStream("src/main/resources/iat/323.mp3");){
// WebTtsWS.execute("欢迎来到讯飞开放平台", xfProperties, outputStream);
// fs.write(outputStream.toByteArray());
// }
2025-06-25 18:11:39 +08:00
2025-06-11 09:42:13 +08:00
try(ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
OutputStream fs = new FileOutputStream("src/main/resources/iat/323.mp3");){
AlitaResult<Void> result = WebTtsWS.execute("欢迎来到讯飞开放平台", xfProperties, outputStream);
Assert.isTrue(result.getSuccess(), result.getMsg());
fs.write(outputStream.toByteArray());
} catch (IOException e) {
throw new BusinessException("语音合成异常:" + e.getMessage());
}
}
2025-06-25 18:11:39 +08:00
@Test
public void ots(){
// AlitaResult<?> result = XfSparkProvider.translate(TranslateReq.builder().text("欢迎#你啊,.;@#$你好").build(), xfProperties);
AlitaResult<?> result = XfSparkProvider.translate(TranslateReq.builder().text("تىيانەي ئەقىللىق خىزمەت مۇلازىمىتى بىرلەشمە سۇپىسىغا خوش ھەمرىيىڭىز.").from("uy").to("cn").build(), xfProperties);
log.info("{}", result);
}
@Test
public void rtasr() throws IOException {
String file = "src/main/resources/iat/ug.pcm";
try (InputStream is = new FileInputStream(file)) {
AlitaResult<String> result = RtasrClientApp.execute(is, "cn_uyghur", xfProperties);
log.info("{}", result);
}
}
2025-06-11 09:42:13 +08:00
}