getAIMessages method

List<NIMAIModelCallMessage?>? getAIMessages()

获取AI消息的上下文 仅对数字人单聊

Implementation

List<NIMAIModelCallMessage?>? getAIMessages() {
  int size = min(_messageList.length, aiMessageSize);
  List<NIMAIModelCallMessage?>? aiMessages;
  if (isAIUser() && _messageList.isNotEmpty) {
    aiMessages = <NIMAIModelCallMessage?>[];
    //第一条消息不能是数字人消息
    // 标记是否已经设置过第一条消息
    bool firstSet = false;
    for (int index = 0; index < size; index++) {
      final message = _messageList[index];
      bool isFromAI = AIUserManager.instance.isAIUser(
        message.nimMessage.senderId,
      );
      //1 如果第一条是数字人消息,则不再添加
      //2 如果消息已经撤回,则不再添加
      //3 如果消息没有服务器ID,说明不是发出去的消息,则不再添加
      //4 如果没有消息内容,则不再添加
      if ((!firstSet && !isFromAI) ||
          message.isRevoke ||
          message.nimMessage.messageServerId?.isNotEmpty != true ||
          ChatMessageHelper.getAIContentMsg(message.nimMessage)?.isNotEmpty !=
              true) {
        continue;
      }
      firstSet = true;
      aiMessages.add(
        NIMAIModelCallMessage(
          type: 0,
          msg: ChatMessageHelper.getAIContentMsg(message.nimMessage),
          role: isFromAI
              ? NIMAIModelRoleType.assistant
              : NIMAIModelRoleType.user,
        ),
      );
    }
  }
  return aiMessages;
}