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; //用于关联用户会话 private String chatId; private List 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(); } }