NIMSDK-AOS  10.10.13
V2NIMMessageAIConfigParams.java
浏览该文件的文档.
1 package com.netease.nimlib.sdk.v2.message.params;
2 
3 import android.text.TextUtils;
4 import com.netease.nimlib.log.NimLog;
8 import com.netease.nimlib.util.StringUtil;
9 import java.io.Serializable;
10 import java.util.List;
11 
12 /**
13  * 用于配置 V2NIM 消息 AI 的参数类
14  */
15 public class V2NIMMessageAIConfigParams implements Serializable {
16 
17  private static final String TAG = "V2NIMMessageAIConfigParams";
18  /** 数字人的 accountId,发送/响应 都存在 */
19  private final String accountId;
20 
21  /** 请求大模型的内容,发送入参 */
22  private V2NIMAIModelCallContent content;
23 
24  /** 上下文内容,当前只支持文本消息,发送入参 */
25  private List<V2NIMAIModelCallMessage> messages;
26 
27  /** 提示词变量占位符替换,JSON 格式的字符串,用于填充 prompt 中的变量。如果 V2NIMAIUser 中的 modelConfig.prompt 定义了变量,则必填. 端测不校验,发送入参 */
28  private String promptVariables;
29 
30  /** 请求接口模型相关参数配置,如果参数不为空,则默认覆盖控制相关配置,发送入参 */
31  private V2NIMAIModelConfigParams modelConfigParams;
32  /**
33  * 是否流式响应,默认为 false
34  */
35  private boolean aiStream = false;
36 
37  private V2NIMMessageAIConfigParams() {
38  this(null);
39  }
40 
41  /**
42  * 构造函数
43  * @param accountId 数字人的 accountId
44  */
45  public V2NIMMessageAIConfigParams(String accountId) {
46  this.accountId = accountId;
47  }
48 
49  /**
50  * 获取数字人的 accountId
51  * @return 数字人的 accountId
52  */
53  public String getAccountId() {
54  return accountId;
55  }
56 
57 
58  /**
59  * 获取请求大模型的内容
60  * @return 请求大模型的内容
61  */
63  return content;
64  }
65 
66  /**
67  * 设置请求大模型的内容
68  * @param content 请求大模型的内容
69  */
70  public void setContent(V2NIMAIModelCallContent content) {
71  this.content = content;
72  }
73 
74  /**
75  * 获取上下文内容
76  * @return 上下文内容
77  */
78  public List<V2NIMAIModelCallMessage> getMessages() {
79  return messages;
80  }
81 
82  /**
83  * 获取过滤后的上下文内容(过滤掉 msg 为 null 或 trim 后为空字符串的 message)
84  * @return 过滤后的上下文内容
85  */
86  public List<V2NIMAIModelCallMessage> getFilteredMessages() {
87  if (messages == null || messages.isEmpty()) {
88  return messages;
89  }
90  List<V2NIMAIModelCallMessage> filteredMessages = new java.util.ArrayList<>();
91  for (V2NIMAIModelCallMessage message : messages) {
92  if (message != null && !message.shouldBeFiltered()) {
93  filteredMessages.add(message);
94  }
95  }
96  return filteredMessages;
97  }
98 
99  /**
100  * 设置上下文内容
101  * @param messages 上下文内容
102  */
103  public void setMessages(List<V2NIMAIModelCallMessage> messages) {
104  this.messages = messages;
105  }
106 
107  /**
108  * 获取提示词变量占位符替换
109  * @return 提示词变量占位符替换
110  */
111  public String getPromptVariables() {
112  return promptVariables;
113  }
114 
115  /**
116  * 设置提示词变量占位符替换
117  * @param promptVariables 提示词变量占位符替换
118  */
119  public void setPromptVariables(String promptVariables) {
120  this.promptVariables = promptVariables;
121  }
122 
123  /**
124  * 获取请求接口模型相关参数配置
125  * @return 请求接口模型相关参数配置
126  */
128  return modelConfigParams;
129  }
130 
131  /**
132  * 设置请求接口模型相关参数配置
133  * @param modelConfigParams 请求接口模型相关参数配置
134  */
135  public void setModelConfigParams(V2NIMAIModelConfigParams modelConfigParams) {
136  this.modelConfigParams = modelConfigParams;
137  }
138 
139  /**
140  * 是否流式响应
141  * @return 是否流式响应
142  */
143  public boolean isAIStream() {
144  return aiStream;
145  }
146 
147  /**
148  * 设置是否流式响应
149  * @param aiStream 是否流式响应
150  */
151  public void setAIStream(boolean aiStream) {
152  this.aiStream = aiStream;
153  }
154 
155  public boolean isValid() {
156  if (TextUtils.isEmpty(accountId)) {
157  NimLog.e(TAG, "accountId is empty");
158  return false;
159  }
160 
161  if (content != null && !content.isValid()) {
162  NimLog.e(TAG, "content is invalid");
163  return false;
164  }
165 
166  // 只校验不会被过滤掉的 message(msg 非空且 trim 后非空的 message)
167  if(messages != null && !messages.isEmpty()){
168  for(V2NIMAIModelCallMessage message : messages){
169  // 跳过 null 或会被过滤掉的 message,不进行校验
170  if(message == null || message.shouldBeFiltered()){
171  continue;
172  }
173  if(!message.isValid()){
174  NimLog.e(TAG, "message is invalid");
175  return false;
176  }
177  }
178  }
179 
180  if(promptVariables != null && !StringUtil.isJson(promptVariables)){
181  NimLog.e(TAG, "promptVariables is invalid");
182  return false;
183  }
184 
185  return true;
186  }
187 
188  public String getInvalidMsg() {
189  if (TextUtils.isEmpty(accountId)) {
190  return "accountId is empty";
191  }
192 
193  if (content != null && !content.isValid()) {
194  return "content is invalid";
195  }
196 
197  // 只校验不会被过滤掉的 message(msg 非空且 trim 后非空的 message)
198  if(messages != null && !messages.isEmpty()){
199  for(V2NIMAIModelCallMessage message : messages){
200  // 跳过 null 或会被过滤掉的 message,不进行校验
201  if(message == null || message.shouldBeFiltered()){
202  continue;
203  }
204  String invalidMsg = message.getInvalidMsg();
205  if(invalidMsg != null){
206  return "message."+invalidMsg;
207  }
208  }
209  }
210 
211  if(promptVariables != null && !StringUtil.isJson(promptVariables)){
212  return "promptVariables is not json";
213  }
214 
215  return null;
216  }
217 
218  public static class Builder {
219  private String accountId;
220  private V2NIMAIModelCallContent content;
221  private List<V2NIMAIModelCallMessage> messages;
222  private String promptVariables;
223  private V2NIMAIModelConfigParams modelConfigParams;
224  private boolean aiStream = false;
225 
226  /**
227  * 设置数字人账号ID
228  * @param accountId 数字人的 accountId
229  * @return Builder
230  */
231  public Builder accountId(String accountId) {
232  this.accountId = accountId;
233  return this;
234  }
235 
236  /**
237  * 设置请求大模型的内容
238  * @param content 请求大模型的内容
239  * @return Builder
240  */
241  public Builder content(V2NIMAIModelCallContent content) {
242  this.content = content;
243  return this;
244  }
245 
246  /**
247  * 设置上下文内容
248  * @param messages 上下文内容
249  * @return Builder
250  */
251  public Builder messages(List<V2NIMAIModelCallMessage> messages) {
252  this.messages = messages;
253  return this;
254  }
255  /**
256  * 设置提示词变量占位符替换
257  * @param promptVariables 提示词变量占位符替换
258  * @return Builder
259  */
260  public Builder promptVariables(String promptVariables) {
261  this.promptVariables = promptVariables;
262  return this;
263  }
264  /**
265  * 设置请求接口模型相关参数配置
266  * @param modelConfigParams 请求接口模型相关参数配置
267  * @return Builder
268  */
269  public Builder modelConfigParams(V2NIMAIModelConfigParams modelConfigParams) {
270  this.modelConfigParams = modelConfigParams;
271  return this;
272  }
273  /**
274  * 设置是否流式响应
275  * @param aiStream 是否流式响应
276  * @return Builder
277  */
278  public Builder aiStream(boolean aiStream) {
279  this.aiStream = aiStream;
280  return this;
281  }
282  /**
283  * 构建V2NIMMessageAIConfigParams对象
284  * @return V2NIMMessageAIConfigParams
285  */
286  public V2NIMMessageAIConfigParams build() {
287  V2NIMMessageAIConfigParams params = new V2NIMMessageAIConfigParams(this.accountId);
288  params.setContent(this.content);
289  params.setMessages(this.messages);
290  params.setPromptVariables(this.promptVariables);
291  params.setModelConfigParams(this.modelConfigParams);
292  params.setAIStream(this.aiStream);
293  return params;
294  }
295  }
296 }
List< V2NIMAIModelCallMessage > getFilteredMessages()
获取过滤后的上下文内容(过滤掉 msg 为 null 或 trim 后为空字符串的 message)
V2NIMAIModelCallContent getContent()
获取请求大模型的内容
List< V2NIMAIModelCallMessage > getMessages()
获取上下文内容
V2NIMAIModelConfigParams getModelConfigParams()
获取请求接口模型相关参数配置
void setContent(V2NIMAIModelCallContent content)
设置请求大模型的内容
void setModelConfigParams(V2NIMAIModelConfigParams modelConfigParams)
设置请求接口模型相关参数配置
void setMessages(List< V2NIMAIModelCallMessage > messages)
设置上下文内容
void setPromptVariables(String promptVariables)
设置提示词变量占位符替换