|
|
package cn.teammodel.ai.domain;
|
|
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import lombok.Builder;
|
|
|
import lombok.Builder.Default;
|
|
|
import lombok.Data;
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* 调用星火大模型需要向其 endpoint 传递的参数
|
|
|
* @author winter
|
|
|
* @create 2023-12-15 16:04
|
|
|
*/
|
|
|
@Data
|
|
|
@Builder
|
|
|
// 注意这两个注解一起使用会让无参构造丢失
|
|
|
public class SparkChatRequestParam {
|
|
|
//应用appid,从开放平台控制台创建的应用中获取
|
|
|
private String appId;
|
|
|
//每个用户的id,用于区分不同用户
|
|
|
private String uid;
|
|
|
//指定访问的领域,general指向V1.5版本 generalv2指向V2版本。注意:不同的取值对应的url也不一样!
|
|
|
@Default
|
|
|
private String domain = "generalv3";
|
|
|
//核采样阈值。用于决定结果随机性,取值越高随机性越强即相同的问题得到的不同答案的可能性越高
|
|
|
@Default
|
|
|
private Float temperature = 0.5F;
|
|
|
//模型回答的tokens的最大长度
|
|
|
@Default
|
|
|
private Integer maxTokens = 2048;
|
|
|
//从k个候选中随机选择⼀个(⾮等概率)
|
|
|
@Default
|
|
|
private Integer top_k = 4;
|
|
|
/**
|
|
|
* 用于关联用户会话 (sessionId)
|
|
|
*/
|
|
|
private String chatId;
|
|
|
private List<Message> messageList;
|
|
|
|
|
|
|
|
|
@Data
|
|
|
@AllArgsConstructor
|
|
|
public static class Message {
|
|
|
private String role;
|
|
|
private String content;
|
|
|
|
|
|
/**
|
|
|
* 一个类下面有两种类型的对象,使用静态的对象产生方法,好思路
|
|
|
*/
|
|
|
public static Message ofUser(String content){
|
|
|
return new Message("user",content);
|
|
|
}
|
|
|
|
|
|
public static Message ofAssistant(String content){
|
|
|
return new Message("assistant",content);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public String toJsonParams(){
|
|
|
ObjectMapper om = new ObjectMapper();
|
|
|
ObjectNode root = om.createObjectNode();
|
|
|
ObjectNode header = om.createObjectNode();
|
|
|
header.put("app_id",appId);
|
|
|
header.put("uid",uid);
|
|
|
ObjectNode parameter = om.createObjectNode();
|
|
|
ObjectNode chat = om.createObjectNode();
|
|
|
chat.put("domain", domain);
|
|
|
chat.put("temperature", temperature);
|
|
|
chat.put("max_tokens", maxTokens);
|
|
|
chat.put("top_k", top_k);
|
|
|
chat.put("chat_id", chatId);
|
|
|
parameter.set("chat", chat);
|
|
|
|
|
|
ObjectNode payload = om.createObjectNode();
|
|
|
payload.set("message", om.createObjectNode().putPOJO("text", messageList));
|
|
|
|
|
|
root.set("header", header);
|
|
|
root.set("parameter", parameter);
|
|
|
root.set("payload", payload);
|
|
|
return root.toString();
|
|
|
}
|
|
|
|
|
|
}
|