java接入科大讯飞的星火模型(ChatSparkDesk)
  KafrixQnKYT7 2023年11月01日 87 0

目前智能AI比较火热,国外的chatgpt,国内的文言一心,科飞的ChatSparkDesk,之前博客已经写了openai的chatgpt由网友需求,现在分享科大讯飞的星火模型,复制可以修改key可以直接使用

不熟悉或者不理解可以加入微信  nlks2023交流,文字聊天简单版,具体可以根据业务修改

public class ChatSparkDesk  extends WebSocketListener {
private final Logger logger =Logger.getLogger(ChatSparkDesk.class);
public final static String authorizationHostUrl = "https://spark-api.xf-yun.com/v1.1/chat";
public final static String APPID = "xxxxxxxxxxxxx";
public final static String APIKEY = "xxxxxxxxxxxxxxxxxxxxxxx";
public final static String APISECRET = "xxxxxxxxxxxxxxxxxxxxxxxxx";
public final static Gson json = new Gson();
public static String answer = "";
public static String question = "中国面积有多大";
public static String questionAnswer = "";

public static void main(String[] args) throws Exception {
ChatSparkDesk.chatSparkDesk(question,getAuthorizationUrl());
String answer = ChatSparkDesk.answer;
long start = System.currentTimeMillis();
while (StringUtils.isBlank(answer)) {
answer = ChatSparkDesk.answer;
if ((System.currentTimeMillis() - start) > 5000) {
break;
}
}
System.out.println(answer);
}

public static void chatSparkDesk(String question, String url) {
ChatSparkDesk.question = question;
ChatSparkDesk.answer = "";
ChatSparkDesk.questionAnswer = "";
OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
Request request = new Request.Builder().url(url).build();
okHttpClient.newWebSocket(request, new ChatSparkDesk());
}

@Override
public void onOpen(WebSocket webSocket, @NotNull Response response) {
JsonObject frame = new JsonObject();
JsonObject header = new JsonObject();
JsonObject chat = new JsonObject();
JsonObject parameter = new JsonObject();
JsonObject payload = new JsonObject();
JsonObject message = new JsonObject();
JsonObject text = new JsonObject();
JsonArray ja = new JsonArray();
header.addProperty("app_id", APPID);
chat.addProperty("domain", "general");
chat.addProperty("max_tokens", 1024);
parameter.add("chat", chat);
text.addProperty("role", "user");
text.addProperty("content", question);
ja.add(text);
message.add("text", ja);
payload.add("message", message);
frame.add("header", header);
frame.add("parameter", parameter);
frame.add("payload", payload);
webSocket.send(frame.toString());
}


@Override
public void onMessage(WebSocket webSocket, String text) {
super.onMessage(webSocket, text);
ResponseData responseData = json.fromJson(text,ResponseData.class);
if(0 == responseData.getHeader().get("code").getAsInt()){
if(2 != responseData.getHeader().get("status").getAsInt()){
Payload pl = json.fromJson(responseData.getPayload(),Payload.class);
JsonArray temp = (JsonArray) pl.getChoices().get("text");
JsonObject jo = (JsonObject) temp.get(0);
questionAnswer += jo.get("content").getAsString();
}else {
Payload pl1 = json.fromJson(responseData.getPayload(),Payload.class);
JsonArray temp1 = (JsonArray) pl1.getChoices().get("text");
JsonObject jo = (JsonObject) temp1.get(0);
questionAnswer += jo.get("content").getAsString();
ChatSparkDesk.answer=questionAnswer;
webSocket.close(3,"客户端主动断开链接");
}
}else{
logger.error("返回结果错误:=======code:" + responseData.getHeader().get("code") + responseData.getHeader().get("message"));
webSocket.close(3, "客户端主动断开链接");
}
}

//鉴权url
public static String getAuthorizationUrl() throws Exception {
URL url = new URL(authorizationHostUrl);
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("GMT"));
String date = format.format(new Date());
Charset charset = StandardCharsets.UTF_8;
Mac mac = Mac.getInstance("hmacsha256");
SecretKeySpec sp = new SecretKeySpec(APISECRET.getBytes(charset), "hmacsha256");
mac.init(sp);
String builder = "host: " + url.getHost() + "\n" +
"date: " + date + "\n" +
"GET " + url.getPath() + " HTTP/1.1";
byte[] basebefore = mac.doFinal(builder.getBytes(charset));
String signature = Base64.getEncoder().encodeToString(basebefore);
String authorization_origin = String.format("api_key=\"%s\",algorithm=\"%s\",headers=\"%s\",signature=\"%s\"", APIKEY, "hmac-sha256", "host date request-line", signature);
String authorization = Base64.getEncoder().encodeToString(authorization_origin.getBytes(charset));
HttpUrl httpUrl = Objects.requireNonNull(HttpUrl.parse("https://" + url.getHost() + url.getPath())).newBuilder().//
addQueryParameter("authorization", authorization).//
addQueryParameter("date", date).//
addQueryParameter("host", url.getHost()).//
build();
return httpUrl.toString().replace("https://", "wss://").replace("http://", "ws://");
}

@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
if(response!=null&&response.code()==403){
answer="403";
}
if(response!=null&&response.code()==11200){
MailInfo mailInfo= SpringMailUtil.sendPrepare("xxxxxxx","xxxxxx","科飞tokens可能不够");
SpringMailUtil.sendTxtMail(mailInfo);
answer="11200";
}
}
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   114   0   0 Java
  8s1LUHPryisj   2024年05月17日   49   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
KafrixQnKYT7