全部產品
Search
文件中心

Platform For AI:Java SDK使用說明

更新時間:Jul 13, 2024

使用EAS提供的官方SDK進行服務調用,可以有效減少編寫調用邏輯的時間並提高調用穩定性。本文介紹官方Java SDK介面詳情。同時,以字串輸入輸出、TensorFlow輸入輸出、QueueService用戶端和請求資料壓縮為例,提供了使用Java SDK進行服務調用的完整程式樣本。

添加依賴項

使用Java編寫用戶端代碼時,在Maven工程中使用EAS Java SDK,必須在pom.xml檔案<dependencies>中添加eas-sdk的依賴,樣本如下,最新版本以Maven倉庫中顯示的為準。

<dependency>
  <groupId>com.aliyun.openservices.eas</groupId>
  <artifactId>eas-sdk</artifactId>
  <version>2.0.14</version>
</dependency>

EAS2.0.5及以上版本增加了QueueService用戶端功能,支援多優先順序非同步佇列服務。如果需要使用該功能,為避免依賴版本衝突,您還需自行添加如下兩個依賴,並修改這兩個依賴至合適版本:

<dependency>
    <groupId>org.java-websocket</groupId>
    <artifactId>Java-WebSocket</artifactId>
    <version>1.5.1</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.1</version>
</dependency>

介面列表

介面

描述

PredictClient

PredictClient(HttpConfig httpConfig)

  • 功能:PredictClient類構造器。

  • 參數:httpConfig表示HttpConfig類的執行個體對象。

void setToken(String token)

  • 功能:設定HTTP請求的Token參數。

  • 參數:token表示訪問服務時需要使用的鑒權Token。

void setModelName(String modelName)

  • 功能:佈建要求的線上預測服務的模型名稱。

  • 參數:modelName表示所設定的模型名稱。

void setEndpoint(String endpoint)

  • 功能:佈建要求服務的Host和Port,格式為"host:port"

  • 參數:endpoint表示接收訊息的終端地址。

void setDirectEndpoint(String endpoint)

  • 功能:設定VPC高速直連通道訪問服務的Endpoint,例如,pai-eas-vpc.cn-shanghai.aliyuncs.com

  • 參數:endpoint表示設定的訪問服務地址。

void setRetryCount(boolean int retryCount)

  • 功能:設定失敗重試次數。

  • 參數:retryCount表示失敗的重試次數。

void setRetryConditions(EnumSet retryConditions)

  • 功能:設定失敗重試條件,可與setRetryCount方法結合使用。預設所有請求錯誤都會重試,此方法可設定僅對特定的請求錯誤重試。

  • 參數:retryConditions表示EnumSet類型的一個或多個重試條件,目前支援:

    • RetryCondition.CONNECTION_FAILED:請求串連失敗。

    • RetryCondition.CONNECTION_TIMEOUT:請求連線逾時。

    • RetryCondition.READ_TIMEOUT:等待請求返回逾時。

    • RetryCondition.RESPONSE_5XX:返回狀態代碼為5xx。

    • RetryCondition.RESPONSE_4XX:返回狀態代碼為4xx。

  • 調用樣本:

    client.setRetryConditions(
        EnumSet.of(
            RetryCondition.READ_TIMEOUT,    // 在讀取逾時時重試
            RetryCondition.RESPONSE_5XX     // 在接收到5xx系列錯誤碼時重試
        )
    );

    表示僅在請求逾時、請求返回狀態代碼為5xx報錯時進行重試。

void setContentType(String contentType)

  • 功能:設定HTTP Client的Content類型,預設為"application/octet-stream"。

  • 參數:contentType表示發送資料流的類型。

void setUrl(String url)

功能:自訂請求 URL。

void setCompressor(Compressor compressor)

  • 功能:佈建要求資料的壓縮方式。

  • 參數:compressor表示壓縮方式,目前支援Compressor.Gzip和Compressor.Zlib。

  • 樣本:詳情請參見請求資料壓縮樣本

void addExtraHeaders(Map<String, String> extraHeaders)

  • 功能:額外添加自訂的HTTP Header。

  • 參數:Map<String, String>類型的HTTP Header。

void createChildClient(String token, String endpoint, String modelName)

  • 功能:建立子Client對象,共用父Client對象的線程池。該介面用於多線程預測。

  • 參數:

    • token:服務的鑒權Token。

    • endpoint:服務的Endpoint。

    • modelName:服務的名稱。

void predict(TFRequest runRequest)

  • 功能:向線上預測服務提交一個TensorFlow請求。

  • 參數:runRequest表示TensorFlow請求的執行個體對象。

void predict(String requestContent)

  • 功能:向線上預測服務提交一個字串請求。

  • 參數:requestContent表示字串格式的請求內容。

void predict(byte[] requestContent)

  • 功能:向線上預測服務提交一個Byte數組請求。

  • 參數:requestContent表示Byte類型的請求內容。

HttpConfig

void setIoThreadNum(int ioThreadNum)

  • 功能:設定HTTP請求的IO線程數,預設值為2。

  • 參數:ioThreadNum表示發送HTTP請求的IO線程數。

void setReadTimeout(int readTimeout)

  • 功能:設定發送請求後等待返回的逾時時間,預設值為5000,表示5s。

  • 參數:readTimeout表示請求的讀取逾時時間。

void setConnectTimeout(int connectTimeout)

  • 功能:設定連線逾時時間,預設值為5000,表示5s。

  • 參數:connectTimeout表示請求的連線逾時時間。

void setMaxConnectionCount(int maxConnectionCount)

  • 功能:設定最大串連數,預設值為1000。

  • 參數:maxConnectionCount表示用戶端串連池的最大串連數。

void setMaxConnectionPerRoute(int maxConnectionPerRoute)

  • 功能:設定每個路由的最大預設串連數,預設值為1000。

  • 參數:maxConnectionPerRoute表示每個路由上的預設最大串連數。

void setKeepAlive(boolean keepAlive)

  • 功能:設定HTTP服務的keep-alive

  • 參數:keepAlive表示是否開啟串連的keep-alive機制,預設為true

int getErrorCode()

返回最近一次調用的狀態代碼。

string getErrorMessage()

返回最近一次調用的狀態資訊。

TFRequest

void setSignatureName(String value)

  • 功能:請求的線上服務的模型為TensorFlow的SavedModel格式時,佈建要求模型的signatureDef的名稱。

  • 參數:請求模型的signatureDef的名稱。

void addFetch(String value)

  • 功能:請求TensorFlow的線上服務模型時,設定模型輸出Tensor的別名。

  • 參數:value表示TensorFlow服務輸出Tensor的別名。

void addFeed(String inputName, TFDataType dataType, long[]shape, ?[]content)

  • 功能:請求TensorFlow的線上預測服務模型時,設定需要輸入的Tensor。

  • 參數:

    • inputName:表示輸入Tensor的別名。

    • dataType:表示輸入Tensor的DataType。

    • shape:表示輸入Tensor的TensorShape。

    • content:表示輸入Tensor的內容,採用一維數組表示。

      如果輸入Tensor的DataType為DT_FLOAT、DT_COMPLEX64、DT_BFLOAT16或DT_HALF,則content中的元素類型為FLOAT。其中DataType為DT_COMPLEX64時,content中相鄰兩個FLOAT元素依次表示複數的實部和虛部。

      如果輸入Tensor的DataType為DT_DOUBLE或DT_COMPLEX128,則content中的元素類型為DOUBLE。其中DataType為DT_COMPLEX128時,content中相鄰兩個DOUBLE元素依次表示複數的實部和虛部。

      如果輸入Tensor的DataType為DT_INT32、DT_UINT8、DT_INT16、DT_INT8、DT_QINT8、DT_QUINT8、DT_QINT32、DT_QINT16、DT_QUINT16或DT_UINT16,content中的元素類型為INT。

      如果輸入Tensor的DataType為DT_INT64,則content中的元素類型為LONG。

      如果輸入Tensor的DataType為DT_STRING,則content中的元素類型為STRING。

      如果輸入Tensor的DataType為DT_BOOL,則content中的元素類型為BOOLEAN。

TFResponse

List<Long> getTensorShape(String outputName)

  • 功能:獲得指定別名的輸出Tensor的TensorShape。

  • 參數:outputName表示待擷取TensorShape的模型輸出的名稱。

  • 傳回值:表示TensorShape的一維數組。

List<Float> getFloatVals(String outputName)

  • 功能:如果輸出Tensor的DataType為DT_FLOAT、DT_COMPLEX64、DT_BFLOAT16或DT_HALF,則可以調用該介面擷取指定輸出Tensor的data

  • 參數:outputName表示待擷取FLOAT類型返回資料的模型輸出的名稱。

  • 傳回值:模型輸出的TensorData展開成的一維數組。

List<Double> getDoubleVals(String outputName)

  • 功能:如果輸出Tensor的DataType為DT_DOUBLE或DT_COMPLEX128,則調用該介面擷取指定輸出Tensor的data

  • 參數:outputname表示待擷取DOUBLE類型返回資料的模型輸出的名稱。

  • 傳回值:模型輸出的TensorData展開成的一維數組。

List<Integer> getIntVals(String outputName)

  • 功能:如果輸出Tensor的DataType為DT_INT32、DT_UINT8、DT_INT16、DT_INT8、DT_QINT8、DT_QUINT8、DT_QINT32、DT_QINT16、DT_QUINT16或DT_UINT16,則調用該介面擷取指定輸出Tensor的data

  • 參數:outputname表示待擷取INT類型返回資料的模型輸出的名稱。

  • 傳回值:模型輸出的TensorData展開成的一維數組。

List<String> getStringVals(String outputName)

  • 功能:如果輸出Tensor的DataType為DT_STRING,則調用該介面擷取指定輸出Tensor的data

  • 參數:outputName表示待擷取STRING類型返回資料的模型輸出的名稱。

  • 傳回值:模型輸出的TensorData展開成的一維數組。

List<Long> getInt64Vals(String outputName)

  • 功能:如果輸出Tensor的DataType為DT_INT64,則調用該介面擷取指定輸出Tensor的data

  • 參數:outputName表示待擷取的INT64類型返回資料的模型輸出的名稱。

  • 傳回值:模型輸出的TensorData展開成的一維數組。

List<Boolean> getBoolVals(String outputName)

  • 功能:如果輸出Tensor的DataType為DT_BOOL,則調用該介面擷取指定輸出Tensor的data

  • 參數:outputName表示待擷取BOOL類型的返回資料的模型輸出的名稱。

  • 傳回值:模型輸出的TensorData展開成的一維數組。

QueueClient

QueueClient(String endpoint, String queueName, String token, HttpConfig httpConfig, QueueUser user)

  • 功能:QueueClient類的建構函式。

  • 參數:

    • endpoint:服務端的Endpoint地址。

    • queueName:服務名稱。

    • token:服務訪問的Token。

    • httpConfig:服務要求的配置。

    • user:配置UserId(預設為隨機數)與 GroupName(預設為eas)。

JSONObject attributes()

  • 功能:擷取佇列服務的詳細資料。

  • 傳回值:JSONObject類型的佇列服務資訊,主要包含如下欄位:

    • meta.maxPayloadBytes:隊列中允許的每個資料項目的Size上限。

    • meta.name:隊列名。

    • stream.approxMaxLength:隊列中能夠儲存的資料項目的數量上限。

    • stream.firstEntry:隊列中第一個資料項目的Index。

    • stream.lastEntry:隊列中最後一個資料項目的Index。

    • stream.length:隊列中當前儲存的資料項目的數量。

Pair<Long, String> put(byte[] data, long priority, Map<String, String> tags)

  • 功能:將資料寫入佇列服務。

  • 參數:

    • data:Byte[]類型資料。

    • priority:表示資料優先順序。預設值為0,表示非優先資料。將該參數配置為1時,表示高優先順序資料。

    • tags:自訂參數。

  • 傳回值:Pair<Long, String> 類型的 <資料index, 請求Id>。表示一個由兩個元素組成的有序對,第一個元素是一個Long類型的資料 Index,第二個元素是一個String類型的請求ID。

DataFrame[] get(long index, long length, long timeout, boolean autoDelete, Map<String, String> tags)

  • 功能:擷取佇列服務中的資料。

  • 參數:

    • index:指定擷取資料的起始Index,如果為-1則讀取最新的資料。

    • length:擷取的資料個數。

    • timeout:逾時時間,以秒為單位。

    • autoDelete:擷取資料後是否自動從隊列中刪除。

    • tags:自訂參數。例如指定RequestID。

  • 傳回值:DataFrame資料類。

void truncate(Long index)

  • 功能:刪除佇列服務中所有Index小於指定Index的資料。

String delete(Long index)

  • 功能:刪除佇列服務中指定Index的資料。

  • 參數:index表示待刪除資料的index。

  • 傳回值:刪除成功則返回OK。

JSONObject search(long index)

  • 功能:查詢資料的排隊資訊。

  • 參數:[index]表示查詢資料的index。

  • 傳回值:為JSONObject類型的資料排隊資訊,包含如下欄位:

    • ConsumerId:表示處理該資料的執行個體ID。

    • IsPending:表示資料是否正在被處理。

      • True表示正在被處理。

      • False表示正在排隊。

    • WaitCount:表示前面還需排隊等待的資料個數,僅當IsPending為False時該值才有效,IsPending為True時該值為0。

    返回內容樣本如下:

    • 返回{'ConsumerId': 'eas.****', 'IsPending': False, 'WaitCount':2},表示請求正在排隊。

    • 回顯日誌no data in stream,返回{}。表示未在隊列中找到該資料,該情況可能是因為資料已被服務端成功處理並返回結果,或是index參數配置有誤,請檢查確認。

WebSocketWatcher watch(long index, long window, boolean indexOnly, boolean autoCommit, Map<String, String> tags)

  • 功能:訂閱佇列服務。

  • 參數:

    • index:指定擷取資料的起始Index。如果為-1,則忽略所有Pending的資料而讀取最新資料。

    • window:指定發送視窗的大小,即最大的未commit資料長度。當QS發出了window個DataFrame資料但是用戶端並沒有commit時,發送會停止。

    • indexOnly:返回的DataFrame中只包含Index和tags,而不返回具體資料,從而節約頻寬。

    • autoCommit:指定發出資料後,直接進行Commit,從而避免Commit調用。當autoCommit設定為truewindow指定的參數將被忽略。

    • tags:自訂訂閱請求參數。

  • 傳回值:WebSocketWatcher類型,用於擷取訂閱資料。使用方法可參考QueueService用戶端樣本

String commit(Long index) String commit(Long[] index)

  • 功能:確認資料已被消費並在佇列服務中刪除該資料。

  • 傳回值:Commit成功則返回OK。

void end(boolean force)

功能:關閉佇列服務。

DataFrame

byte[] getData()

  • 功能:擷取資料值。

  • 傳回值:Byte[]類型的資料值。

long getIndex()

  • 功能:擷取資料Index。

  • 傳回值:Long類型的資料Index。

Map<String, String> getTags()

  • 功能:擷取資料tags。

  • 傳回值:Map<String,String>類型的資料Tags,可用於擷取RequestID。例如df.getTags().get("requestId")

程式樣本

字串輸入輸出樣本

對於使用自訂Processor部署服務的使用者而言,通常採用字串進行服務調用(例如,PMML模型服務的調用),具體的Demo程式如下。

import com.aliyun.openservices.eas.predict.http.PredictClient;
import com.aliyun.openservices.eas.predict.http.HttpConfig;

public class TestString {
    public static void main(String[] args) throws Exception {
        // 啟動並初始化用戶端, client對象需要共用,千萬不可每個請求都建立一個client對象。
        PredictClient client = new PredictClient(new HttpConfig());
        client.setToken("YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****");
        // 如果要使用網路直連功能,需使用setDirectEndpoint方法
        // 如 client.setDirectEndpoint("pai-eas-vpc.cn-shanghai.aliyuncs.com");
        // 網路直連需打通在EAS控制台開通,提供用於訪問EAS服務的源vswitch,打通後可繞過網關以軟負載的方式直接存取服務的執行個體,以實現更好的穩定性和效能。
        // 註:普通網關訪問時請使用以使用者uid為開頭的endpoint,在eas控制台服務的調用資訊中可查到。直連訪問時請使用如上的pai-eas-vpc.{region_id}.aliyuncs.com的網域名稱進行訪問。
        client.setEndpoint("182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com");
        client.setModelName("scorecard_pmml_example");

        // 輸入字串定義
        String request = "[{\"money_credit\": 3000000}, {\"money_credit\": 10000}]";
        System.out.println(request);

        // 通過eas返回字串
        try {
            String response = client.predict(request);
            System.out.println(response);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 關閉用戶端
        client.shutdown();
        return;
    }
}

如上述程式所示,使用Java SDK調用服務的流程如下:

  1. 通過PredictClient介面建立用戶端服務物件。如果在程式中需要使用多個服務,則建立多個Client對象。

  2. 為PredictClient對象配置Token、Endpoint及ModelName。

  3. 構造STRING類型的request作為輸入,通過client.predict發送HTTP請求,系統返回response

TensorFlow輸入輸出樣本

使用TensorFlow的使用者,需要將TFRequest和TFResponse分別作為輸入和輸出資料格式,具體Demo樣本如下。

import java.util.List;

import com.aliyun.openservices.eas.predict.http.PredictClient;
import com.aliyun.openservices.eas.predict.http.HttpConfig;
import com.aliyun.openservices.eas.predict.request.TFDataType;
import com.aliyun.openservices.eas.predict.request.TFRequest;
import com.aliyun.openservices.eas.predict.response.TFResponse;

public class TestTF {
    public static TFRequest buildPredictRequest() {
        TFRequest request = new TFRequest();
        request.setSignatureName("predict_images");
        float[] content = new float[784];
        for (int i = 0; i < content.length; i++) {
            content[i] = (float) 0.0;
        }
        request.addFeed("images", TFDataType.DT_FLOAT, new long[]{1, 784}, content);
        request.addFetch("scores");
        return request;
    }

    public static void main(String[] args) throws Exception {
        PredictClient client = new PredictClient(new HttpConfig());

        // 如果要使用網路直連功能,需使用setDirectEndpoint方法。
        // 如 client.setDirectEndpoint("pai-eas-vpc.cn-shanghai.aliyuncs.com");
        // 網路直連需打通在EAS控制台開通,提供用於訪問EAS服務的源vswitch,打通後可繞過網關以軟負載的方式直接存取服務的執行個體,以實現更好的穩定性和效能。
        // 註:普通網關訪問時請使用以使用者uid為開頭的endpoint,在eas控制台服務的調用資訊中可查到。直連訪問時請使用如上的pai-eas-vpc.{region_id}.aliyuncs.com的網域名稱進行訪問。
        client.setEndpoint("182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com");
        client.setModelName("mnist_saved_model_example");
        client.setToken("YTg2ZjE0ZjM4ZmE3OTc0NzYxZDMyNmYzMTJjZTQ1YmU0N2FjMTAy****");
        long startTime = System.currentTimeMillis();
        int count = 1000;
        for (int i = 0; i < count; i++) {
            try {
                TFResponse response = client.predict(buildPredictRequest());
                List<Float> result = response.getFloatVals("scores");
                System.out.print("Predict Result: [");
                for (int j = 0; j < result.size(); j++) {
                    System.out.print(result.get(j).floatValue());
                    if (j != result.size() - 1) {
                        System.out.print(", ");
                    }
                }
                System.out.print("]\n");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        long endTime = System.currentTimeMillis();
        System.out.println("Spend Time: " + (endTime - startTime) + "ms");
        client.shutdown();
    }
}

如上述程式所示,使用Java SDK調用TensorFlow服務的流程如下:

  1. 通過PredictClient介面建立用戶端服務物件。如果在程式中需要使用多個服務,則建立多個Client對象。

  2. 為PredictClient對象配置Token、Endpoint及ModelName。

  3. 使用TFRequest類封裝輸入資料,使用TFResponse類封裝輸出資料。

QueueService用戶端樣本

支援通過QueueClient介面使用佇列服務功能,具體demo樣本如下:

import com.alibaba.fastjson.JSONObject;
import com.aliyun.openservices.eas.predict.http.HttpConfig;
import com.aliyun.openservices.eas.predict.http.QueueClient;
import com.aliyun.openservices.eas.predict.queue_client.QueueUser;
import com.aliyun.openservices.eas.predict.queue_client.WebSocketWatcher;

public class DemoWatch {
    public static void main(String[] args) throws Exception {
        /** 建立佇列服務用戶端 */
        String queueEndpoint = "18*******.cn-hangzhou.pai-eas.aliyuncs.com";
        String inputQueueName = "test_queue_service";
        String sinkQueueName = "test_queue_service/sink";
        String queueToken = "test-token";

        /** 輸入隊列,往輸入隊列添加資料,推理服務會自動從輸入隊列中讀取請求資料 */
        QueueClient inputQueue =
            new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), new QueueUser());
        /** 輸出隊列,推理服務處理輸入資料後會將結果寫入輸出隊列 */
        QueueClient sinkQueue =
            new QueueClient(queueEndpoint, sinkQueueName, queueToken, new HttpConfig(), new QueueUser());
        /** 清除隊列資料!!!請謹慎使用 */
        inputQueue.clear();
        sinkQueue.clear();

        /** 往輸入隊列添加資料 */
        int count = 10;
        for (int i = 0; i < count; ++i) {
            String data = Integer.toString(i);
            inputQueue.put(data.getBytes(), null);
            /** 佇列服務支援多優先順序隊列,可通過put函數設定資料優先順序,預設優先順序為0 */
            //  inputQueue.put(data.getBytes(), 0L, null);
        }

        /** 通過watch函數訂閱輸出隊列的資料,視窗大小為5 */
        WebSocketWatcher watcher = inputQueue.watch(0L, 5L, false, true, null);
        /** WatchConfig參數可自訂重試次數、稍候再試(單位為秒)、是否無限重試;未配置WatchConfig則預設重試次數:3,稍候再試:5 */
        //  WebSocketWatcher watcher = sink_queue.watch(0L, 5L, false, true, null, new WatchConfig(3, 1));
        //  WebSocketWatcher watcher = sink_queue.watch(0L, 5L, false, true, null, new WatchConfig(true, 10));

        /** 擷取輸出資料 */
        for (int i = 0; i < count; ++i) {
            try {
                /** getDataFrame 函數用於擷取DataFrame資料類,沒有資料時會被阻塞 */
                byte[] data = watcher.getDataFrame().getData();
                System.out.println("[watch] data = " + new String(data));
            } catch (RuntimeException ex) {
                System.out.println("[watch] error = " + ex.getMessage());
                break;
            }
        }
        /** 關閉已經開啟的watcher對象,每個用戶端執行個體只允許存在一個watcher對象,若watcher對象不關閉,再運行時會報錯 */
        watcher.close();

        Thread.sleep(2000);
        JSONObject attrs = sinkQueue.attributes();
        System.out.println(attrs.toString());

        /** 關閉用戶端 */
        inputQueue.shutdown();
        sinkQueue.shutdown();
    }
}

如上述程式所示,使用Java SDK調用服務的流程如下:

  1. 通過QueueClient介面建立佇列服務用戶端對象。如果建立了推理服務,需同時建立輸入隊列和輸出隊列對象。

  2. 使用put()函數向輸入隊列中發送資料;使用watch()函數從輸出隊列中訂閱資料。

    說明

    現實情境中,發送資料和訂閱資料可以由不同的線程處理,本樣本中為了示範方便,在同一線程中完成,先Put資料,後Watch結果。

請求資料壓縮樣本

對於請求資料量較大的情況,EAS支援將資料壓縮之後再發送至服務端,目前支援Zlib和Gzip兩種壓縮格式。該功能需要在服務配置中指定相應的rpc.decompressor才會生效。

服務配置如下所示:

"metadata": {
  "rpc": {
    "decompressor": "zlib"
  }
}

SDK代碼調用樣本如下:

package com.aliyun.openservices.eas.predict;
import com.aliyun.openservices.eas.predict.http.Compressor;
import com.aliyun.openservices.eas.predict.http.PredictClient;
import com.aliyun.openservices.eas.predict.http.HttpConfig;
public class TestString {
    public static void main(String[] args) throws Exception{
    	  // 啟動並初始化用戶端。
        PredictClient client = new PredictClient(new HttpConfig());
        client.setEndpoint("18*******.cn-hangzhou.pai-eas.aliyuncs.com");
        client.setModelName("echo_compress");
        client.setToken("YzZjZjQwN2E4NGRkMDMxNDk5NzhhZDcwZDBjOTZjOGYwZDYxZGM2****");
        // 或者使用Compressor.Gzip。
        client.setCompressor(Compressor.Zlib);  
        // 輸入字串定義。
        String request = "[{\"money_credit\": 3000000}, {\"money_credit\": 10000}]";
        System.out.println(request);
        // 通過eas返回字串。
        String response = client.predict(request);
        System.out.println(response);
        // 關閉用戶端。
        client.shutdown();
        return;
    }
}

相關文檔