全部产品
Search
文档中心

Platform For AI:SDK untuk Java

更新时间:Sep 17, 2025

Elastic Algorithm Service (EAS) SDK memungkinkan Anda memanggil layanan model dengan cara yang sederhana dan stabil. Topik ini menjelaskan metode-metode dari EAS SDK untuk Java serta menyediakan contoh kode untuk kasus penggunaan umum seperti input dan output string, input dan output tensor, layanan antrian, serta kompresi data permintaan.

Tambahkan dependensi

Untuk mengintegrasikan EAS SDK untuk Java dalam proyek Anda, tambahkan dependensi eas-sdk di file pom.xml. Untuk informasi tentang versi terbaru SDK, kunjungi repositori Maven. Contoh kode:

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

Mulai versi 2.0.5, SDK mendukung layanan antrian, yang mengelola prioritas untuk permintaan asinkron. Untuk menggunakan layanan antrian tanpa masalah kompatibilitas, tambahkan versi yang diperlukan dari dependensi berikut:

<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>

Antarmuka

Kelas PredictClient

Ini merupakan kelas klien utama yang dapat digunakan untuk mengonfigurasi informasi layanan, mengirim permintaan, serta menerima hasil prediksi.

Antarmuka

Deskripsi

PredictClient(HttpConfig httpConfig)

  • Membuat instance PredictClient.

  • Parameter: httpConfig menentukan instance HttpConfig yang digunakan untuk membuat instance PredictClient.

void setToken(String token)

  • Mengonfigurasi token yang digunakan dalam permintaan HTTP.

  • Parameter: token menentukan token yang digunakan untuk otentikasi layanan.

void setModelName(String modelName)

  • Mengonfigurasi nama model yang digunakan untuk prediksi online.

  • Parameter: modelName menentukan nama model.

void setEndpoint(String endpoint)

  • Mengonfigurasi titik akhir layanan dalam format "host:port".

  • Parameter: endpoint menentukan titik akhir yang menerima permintaan.

void setDirectEndpoint(String endpoint)

  • Mengonfigurasi titik akhir yang digunakan untuk mengakses layanan melalui saluran koneksi langsung VPC. Contoh titik akhir: pai-eas-vpc.cn-shanghai.aliyuncs.com.

  • Parameter: endpoint menentukan titik akhir layanan untuk koneksi langsung VPC.

void setRequestPath(String requestPath)

  • Mengonfigurasi jalur permintaan yang didefinisikan dalam kode server.

  • Parameter: requestPath menentukan jalur permintaan server. Contoh: client.setRequestPath("/custom_path").

void setRetryCount(int retryCount)

  • Mengonfigurasi jumlah maksimum percobaan ulang jika permintaan gagal.

  • Parameter: retryCount menentukan jumlah maksimum percobaan ulang jika permintaan gagal.

void setRetryConditions(EnumSet retryConditions)

  • Deskripsi: mengonfigurasi kondisi percobaan ulang jika permintaan gagal. Metode ini dapat digunakan bersama dengan metode setRetryCount. Secara default, semua permintaan akan dicoba ulang jika gagal. Anda dapat menggunakan metode ini untuk mengonfigurasi kondisi percobaan ulang hanya untuk kesalahan permintaan tertentu.

  • Parameter: retryConditions menentukan satu atau lebih kondisi percobaan ulang tipe EnumSet. Kondisi percobaan ulang berikut didukung:

    • RetryCondition.CONNECTION_FAILED: Permintaan koneksi gagal.

    • RetryCondition.CONNECTION_TIMEOUT: Permintaan koneksi habis waktu.

    • RetryCondition.READ_TIMEOUT: Tanggapan untuk permintaan habis waktu.

    • RetryCondition.RESPONSE_5XX: Kode status 5xx dikembalikan.

    • RetryCondition.RESPONSE_4XX: Kode status 4xx dikembalikan.

  • Contoh kode:

    client.setRetryConditions(
        EnumSet.of(
            RetryCondition.READ_TIMEOUT,    // Ulangi jika terjadi timeout baca.
            RetryCondition.RESPONSE_5XX // Ulangi jika kode status 5xx dikembalikan.
        )
    );

    Kode contoh sebelumnya menunjukkan bahwa permintaan hanya diulang jika permintaan habis waktu atau kode status 5xx dikembalikan.

void setContentType(String contentType)

  • Mengonfigurasi jenis aliran data untuk klien HTTP. Secara default, jenis aliran data diatur ke "application/octet-stream".

  • Parameter: contentType menentukan jenis aliran data yang akan dikirim.

void setUrl(String url)

Menyesuaikan URL permintaan.

void setCompressor(Compressor compressor)

  • Mengonfigurasi metode kompresi data permintaan.

  • Parameter: compressor menentukan metode kompresi. Metode kompresi Compressor.Gzip dan Compressor.Zlib didukung.

  • Contoh: Untuk informasi lebih lanjut, lihat Kompres data permintaan.

void addExtraHeaders(Map<String, String> extraHeaders)

  • Menambahkan header HTTP kustom.

  • Parameter: Map<String, String> menentukan header HTTP tipe Map<String, String>.

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

  • Membuat klien anak yang menggunakan kolam thread dari klien induk. Panggil metode ini untuk melakukan prediksi multi-thread.

  • Parameter:

    • token: token yang digunakan untuk otentikasi layanan.

    • endpoint: titik akhir layanan.

    • modelName: nama layanan.

void predict(TFRequest runRequest)

  • Mengirim permintaan TensorFlow ke layanan.

  • Parameter: runRequest menentukan instance permintaan TensorFlow.

void predict(String requestContent)

  • Mengirim permintaan ke layanan dengan memformat konten permintaan sebagai string.

  • Parameter: requestContent menentukan string yang berisi konten permintaan.

void predict(byte[] requestContent)

  • Mengirim permintaan ke layanan dengan memformat konten permintaan sebagai larik byte.

  • Parameter: requestContent menentukan larik byte yang berisi konten permintaan.

Kelas HttpConfig

Digunakan untuk mengonfigurasi parameter koneksi HTTP tingkat rendah, seperti timeout, jumlah thread, dan kolam koneksi.

Antarmuka

Deskripsi

void setIoThreadNum(int ioThreadNum)

  • Mengonfigurasi jumlah thread I/O yang digunakan untuk mengirim permintaan HTTP. Secara default, dua thread I/O digunakan.

  • Parameter: ioThreadNum menentukan jumlah thread I/O yang digunakan untuk mengirim permintaan HTTP.

void setReadTimeout(int readTimeout)

  • Mengonfigurasi periode timeout untuk menunggu tanggapan setelah permintaan dikirim. Nilai default: 5000, yang menunjukkan 5 detik.

  • Parameter: readTimeout menentukan periode timeout untuk membaca konten permintaan.

void setConnectTimeout(int connectTimeout)

  • Mengonfigurasi periode timeout koneksi untuk permintaan. Nilai default: 5000, yang menunjukkan 5 detik.

  • Parameter: connectTimeout menentukan periode timeout koneksi untuk permintaan.

void setMaxConnectionCount(int maxConnectionCount)

  • Mengonfigurasi jumlah maksimum koneksi. Nilai default: 1000.

  • Parameter: maxConnectionCount menentukan jumlah maksimum koneksi yang diizinkan dalam kolam koneksi instance PredictClient.

void setMaxConnectionPerRoute(int maxConnectionPerRoute)

  • Mengonfigurasi jumlah maksimum koneksi default pada setiap rute. Nilai default: 1000.

  • Parameter: maxConnectionPerRoute menentukan jumlah maksimum koneksi default pada setiap rute.

void setKeepAlive(boolean keepAlive)

  • Menentukan apakah akan mengaktifkan mekanisme keep-alive untuk koneksi HTTP.

  • Parameter: keepAlive menentukan apakah akan mengaktifkan mekanisme keep-alive untuk koneksi HTTP. Nilai default: true.

int getErrorCode()

Mengembalikan kode status panggilan terakhir.

string getErrorMessage()

Mengembalikan pesan kesalahan panggilan terakhir.

Kelas TFRequest

Digunakan untuk membangun data masukan bagi model TensorFlow.

Antarmuka

Deskripsi

void setSignatureName(String value)

  • Mengonfigurasi SignatureDef model TensorFlow yang digunakan dalam layanan dan disimpan dalam format SavedModel.

  • Parameter: value menentukan nama SignatureDef model TensorFlow.

void addFetch(String value)

  • Mengonfigurasi alias tensor keluaran model TensorFlow yang digunakan dalam layanan.

  • Parameter: value menentukan alias tensor keluaran.

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

  • Mengonfigurasi tensor input model TensorFlow yang digunakan dalam layanan.

  • Parameter:

    • inputName: alias tensor input.

    • dataType: tipe data tensor input.

    • shape: bentuk tensor input.

    • content: isi tensor input. Tentukan parameter ini dalam bentuk larik satu dimensi.

      Jika Anda mengatur parameter dataType ke DT_FLOAT, DT_COMPLEX64, DT_BFLOAT16, atau DT_HALF, parameter content harus berupa larik satu dimensi elemen tipe FLOAT. Jika Anda mengatur parameter dataType ke DT_COMPLEX64, setiap dua elemen berdekatan dalam larik mewakili bagian nyata dan imajiner bilangan kompleks.

      Jika Anda mengatur parameter dataType ke DT_DOUBLE atau DT_COMPLEX128, parameter content harus berupa larik satu dimensi elemen tipe DOUBLE. Jika Anda mengatur parameter dataType parameter ke DT_COMPLEX128, setiap dua elemen berdekatan dalam larik mewakili bagian nyata dan imajiner bilangan kompleks.

      Jika Anda mengatur parameter dataType ke DT_INT32, DT_UINT8, DT_INT16, DT_INT8, DT_QINT8, DT_QUINT8, DT_QINT32, DT_QINT16, DT_QUINT16, atau DT_UINT16, parameter content harus berupa larik satu dimensi elemen tipe INT.

      Jika Anda mengatur parameter dataType ke DT_INT64, parameter content harus berupa larik satu dimensi elemen tipe LONG.

      Jika Anda mengatur parameter dataType ke DT_STRING, parameter content harus berupa larik satu dimensi elemen tipe STRING.

      Jika Anda mengatur parameter dataType ke DT_BOOL, parameter content harus berupa larik satu dimensi elemen tipe BOOLEAN.

List<Long> getTensorShape(String outputName)

  • Meminta bentuk tensor keluaran menggunakan alias tensor keluaran.

  • Parameter: outputName menentukan alias tensor keluaran yang ingin Anda periksa.

  • Nilai kembali: larik satu dimensi yang mewakili bentuk tensor keluaran.

List<Float> getFloatVals(String outputName)

  • Mengekstrak konten tensor keluaran yang tipe datanya adalah DT_FLOAT, DT_COMPLEX64, DT_BFLOAT16, atau DT_HALF.

  • Parameter: outputName menentukan alias tensor keluaran yang ingin Anda ekstrak.

  • Nilai kembali: larik satu dimensi yang menentukan konten tensor keluaran.

List<Double> getDoubleVals(String outputName)

  • Mengekstrak konten tensor keluaran yang tipe datanya adalah DT_DOUBLE atau DT_COMPLEX128.

  • Parameter: outputName menentukan alias tensor keluaran yang ingin Anda ekstrak.

  • Nilai kembali: larik satu dimensi yang menentukan konten tensor keluaran.

List<Integer> getIntVals(String outputName)

  • Mengekstrak konten tensor keluaran yang tipe datanya adalah DT_INT32, DT_UINT8, DT_INT16, DT_INT8, DT_QINT8, DT_QUINT8, DT_QINT32, DT_QINT16, DT_QUINT16, atau DT_UINT16.

  • Parameter: outputName menentukan alias tensor keluaran yang ingin Anda ekstrak.

  • Nilai kembali: larik satu dimensi yang menentukan konten tensor keluaran.

List<String> getStringVals(String outputName)

  • Mengekstrak konten tensor keluaran yang tipe datanya adalah DT_STRING.

  • Parameter: outputName menentukan alias tensor keluaran yang ingin Anda ekstrak.

  • Nilai kembali: larik satu dimensi yang menentukan konten tensor keluaran.

List<Long> getInt64Vals(String outputName)

  • Mengekstrak konten tensor keluaran yang tipe datanya adalah DT_INT64.

  • Parameter: outputName menentukan alias tensor keluaran yang ingin Anda ekstrak.

  • Nilai kembali: larik satu dimensi yang menentukan konten tensor keluaran.

List<Boolean> getBoolVals(String outputName)

  • Deskripsi: mengekstrak konten tensor keluaran yang tipe datanya adalah DT_BOOL.data

  • Parameter: outputName menentukan alias tensor keluaran yang ingin Anda ekstrak.

  • Nilai kembali: larik satu dimensi yang menentukan konten tensor keluaran.

Kelas QueueClient

Digunakan untuk berinteraksi dengan layanan antrian EAS guna menghasilkan, mengonsumsi, dan mengelola data.

Antarmuka

Deskripsi

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

  • Membuat instance QueueClient.

  • Parameter:

    • endpoint: titik akhir layanan.

    • queueName: nama layanan.

    • token: token layanan.

    • httpConfig: konfigurasi permintaan layanan.

    • user: berisi parameter UserId dan GroupName. Secara default, nilai UserId adalah angka acak dan nilai GroupName adalah eas.

JSONObject attributes()

  • Mengambil detail layanan antrian.

  • Nilai kembali: instance JSONObject yang berisi informasi berikut tentang layanan antrian:

    • meta.maxPayloadBytes: ukuran maksimum setiap catatan data dalam antrian.

    • meta.name: nama antrian.

    • stream.approxMaxLength: jumlah maksimum catatan data yang dapat disimpan dalam antrian.

    • stream.firstEntry: indeks catatan data pertama dalam antrian.

    • stream.lastEntry: indeks catatan data terakhir dalam antrian.

    • stream.length: jumlah catatan data yang disimpan dalam antrian.

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

  • Menulis data ke layanan antrian.

  • Parameter:

    • data: sebuah catatan data tipe Byte[].

    • priority: prioritas catatan data. Nilai default adalah 0, yang menunjukkan bahwa catatan data memiliki prioritas rendah. Nilai 1 menunjukkan prioritas tinggi.

    • tags: parameter kustom.

  • Nilai kembali: pasangan terurut dua elemen. Elemen pertama bertipe Long dan menunjukkan indeks catatan data. Elemen kedua bertipe string dan menunjukkan ID permintaan.

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

  • Mengambil catatan data dari layanan antrian.

  • Parameter:

    • index: indeks awal untuk pengambilan. Nilai -1 menentukan bahwa pengambilan dimulai dari catatan data terbaru.

    • length: jumlah catatan data yang ingin Anda ambil.

    • timeout: periode timeout untuk pengambilan. Unit: detik.

    • autoDelete: menentukan apakah akan secara otomatis menghapus catatan data dari antrian setelah diambil.

    • tags: parameter kustom. Misalnya, Anda dapat mengatur parameter ini ke ID permintaan.

  • Nilai kembali: larik DataFrame.

void truncate(Long index)

  • Menghapus catatan data yang indeksnya lebih kecil dari indeks tertentu dalam antrian.

String delete(Long index)

  • Menghapus catatan data dalam antrian dengan menentukan indeks catatan data.

  • Parameter: index menentukan indeks catatan data yang ingin Anda hapus.

  • Nilai kembali: OK dikembalikan jika catatan data dihapus.

JSONObject search(long index)

  • Memeriksa informasi antrian catatan data.

  • Parameter: index menentukan indeks catatan data yang ingin Anda periksa.

  • Nilai kembali: informasi antrian catatan data tipe JSONObject. Informasi tersebut berisi bidang-bidang berikut:

    • ConsumerId: ID instance yang memproses catatan data.

    • IsPending: menunjukkan apakah catatan data sedang diproses.

      • True menunjukkan bahwa catatan data sedang diproses.

      • False menunjukkan bahwa catatan data berada dalam antrian dan menunggu untuk diproses.

    • WaitCount: menunjukkan jumlah catatan data sebelum catatan data tersebut. Parameter ini hanya valid ketika IsPending diatur ke False. Jika IsPending diatur ke True, nilai parameter ini adalah 0.

    Contoh tanggapan:

    • Jika {'ConsumerId': 'eas.****', 'IsPending': False, 'WaitCount':2} dikembalikan, catatan data berada dalam antrian dan menunggu untuk diproses.

    • Jika log menampilkan no data in stream dan {} dikembalikan, catatan data tidak ditemukan dalam antrian. Ini mungkin karena catatan data telah diproses dan hasil telah dikembalikan ke klien, atau parameter indeks salah dikonfigurasi.

      Penting

      Saat menggunakan QueueClient untuk memanggil operasi pencarian, Anda harus mengatur ID grup ke nama layanan. Jika tidak, nilai IsPending dalam hasil yang dikembalikan oleh operasi pencarian akan menjadi false. Contoh kode:

      • Atur ID grup ke nama layanan

        QueueUser u = new QueueUser(UUID.randomUUID().toString(), "<service_name>");
        QueueClient input_queue = new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), u);
      • Periksa informasi antrian data pada indeks tertentu

        System.out.println(input_queue.search(index));

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

  • Berlangganan data dalam antrian keluaran.

  • Parameter:

    • index: indeks awal dari mana data diambil. Jika nilainya adalah -1, hanya data terbaru yang diambil.

    • window: ukuran jendela pengiriman, yaitu panjang maksimum data yang belum dikomit. Jika panjang data yang belum dikomit melebihi nilai parameter ini, layanan antrian berhenti mengirim.

    • indexOnly: menentukan apakah hanya mengembalikan parameter indeks dan tag untuk menghemat bandwidth.

    • autoCommit: menentukan apakah akan secara otomatis melakukan commit data setelah data dikirim untuk menghindari pemanggilan operasi commit. Jika Anda mengatur autoCommit ke true, parameter window tidak valid.

    • tags: parameter kustom.

  • Nilai kembali: instance WebSocketWatcher yang digunakan untuk mendapatkan data yang dilanggan. Untuk informasi lebih lanjut, lihat bagian "Gunakan layanan antrian" dari topik ini.

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

  • Mengonfirmasi bahwa data telah dikonsumsi dan menghapus data dalam antrian.

  • Nilai kembali: OK menunjukkan bahwa operasi berhasil.

void end(boolean force)

Menghentikan layanan antrian.

Kelas DataFrame

Objek enkapsulasi untuk item data dalam layanan antrian.

Antarmuka

Deskripsi

byte[] getData()

  • Mengambil nilai catatan data.

  • Nilai kembali: nilai bertipe Byte[].

long getIndex()

  • Mengambil indeks catatan data.

  • Nilai kembali: indeks bertipe Long.

Map<String, String> getTags()

  • Mengambil tag catatan data.

  • Nilai kembali: tag tipe Map<String,String>, yang dapat digunakan untuk mendapatkan ID permintaan. Contoh: df.getTags().get("requestId").

Demo

Use string input and output

Jika Anda menggunakan prosesor kustom untuk menerapkan model, seperti model Predictive Model Markup Language (PMML), konten permintaan sering diformat sebagai string. Contoh kode:

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 {
        // Mulai dan inisialisasi klien. Instance PredictClient dibagikan oleh beberapa permintaan. Jangan buat instance PredictClient untuk setiap permintaan.
        PredictClient client = new PredictClient(new HttpConfig());
        client.setToken("YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****");
        // Untuk menggunakan fitur koneksi langsung VPC, panggil metode setDirectEndpoint.
        // Contoh: client.setDirectEndpoint("pai-eas-vpc.cn-shanghai.aliyuncs.com");
        // Anda harus mengaktifkan fitur koneksi langsung VPC dan mengonfigurasi vSwitch di konsol PAI. Setelah Anda mengaktifkan fitur ini, Anda dapat memanggil layanan tanpa perlu melewati gateway, yang meningkatkan stabilitas dan performa.
        // Catatan: Untuk memanggil layanan menggunakan gateway, gunakan titik akhir yang dimulai dengan ID pengguna Anda. Untuk mendapatkan titik akhir, temukan layanan yang ingin Anda panggil di halaman EAS-Online Model Services dan klik Metode Pemanggilan di kolom Jenis Layanan. Di kotak dialog yang muncul, Anda dapat melihat titik akhir. Untuk memanggil layanan menggunakan fitur koneksi langsung VPC, gunakan titik akhir dalam format pai-eas-vpc.{region_id}.aliyuncs.com.
        client.setEndpoint("182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com");
        client.setModelName("scorecard_pmml_example");

        // Tentukan string input.
        String request = "[{\"money_credit\": 3000000}, {\"money_credit\": 10000}]";
        System.out.println(request);

        // EAS mengembalikan string.
        try {
            String response = client.predict(request);
            System.out.println(response);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Tutup klien.
        client.shutdown();
        return;
    }
}

Kode contoh sebelumnya melakukan langkah-langkah berikut:

  1. Panggil metode PredictClient untuk membuat klien untuk layanan. Jika beberapa layanan terlibat, buat beberapa klien.

  2. Konfigurasikan parameter token, titik akhir, dan nama model untuk klien.

  3. Buat variabel request tipe STRING sebagai masukan dan panggil metode client.predict untuk mengirim permintaan HTTP. Layanan mengembalikan parameter response.

Use TensorFlow input and output

Jika layanan Anda menggunakan model TensorFlow, input harus menggunakan format TFRequest dan output harus menggunakan format TFResponse. Contoh kode:

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());

        // Untuk menggunakan fitur koneksi langsung VPC, panggil metode setDirectEndpoint.
        // Contoh: client.setDirectEndpoint("pai-eas-vpc.cn-shanghai.aliyuncs.com");
        // Anda harus mengaktifkan fitur koneksi langsung VPC dan mengonfigurasi vSwitch di konsol PAI. Setelah Anda mengaktifkan fitur ini, Anda dapat memanggil layanan tanpa perlu melewati gateway, yang meningkatkan stabilitas dan performa.
        // Catatan: Untuk memanggil layanan menggunakan gateway, gunakan titik akhir yang dimulai dengan ID pengguna Anda. Untuk mendapatkan titik akhir, temukan layanan yang ingin Anda panggil di halaman EAS-Online Model Services dan klik Metode Pemanggilan di kolom Jenis Layanan. Di kotak dialog yang muncul, Anda dapat melihat titik akhir. Untuk memanggil layanan menggunakan fitur koneksi langsung VPC, gunakan titik akhir dalam format 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("Hasil Prediksi: [");
                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("Waktu yang Dihabiskan: " + (endTime - startTime) + "ms");
        client.shutdown();
    }
}

Kode contoh sebelumnya melakukan langkah-langkah berikut:

  1. Panggil metode PredictClient untuk membuat klien untuk layanan. Jika beberapa layanan terlibat, buat beberapa klien.

  2. Konfigurasikan parameter token, titik akhir, dan nama model untuk klien.

  3. Kemas input menggunakan kelas TFRequest dan output menggunakan kelas TFResponse.

Gunakan layanan antrian

Gunakan kelas QueueClient untuk mengimplementasikan layanan antrian. Contoh kode:

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 {
        /** Buat klien untuk layanan antrian. */
        String queueEndpoint = "18*******.cn-hangzhou.pai-eas.aliyuncs.com";
        String inputQueueName = "test_queue_service";
        String sinkQueueName = "test_queue_service/sink";
        String queueToken = "test-token";

        /** Buat antrian input. Setelah Anda menambahkan data ke antrian input, layanan inferensi secara otomatis membaca data permintaan dari antrian input. */
        QueueClient inputQueue =
            new QueueClient(queueEndpoint, inputQueueName, queueToken, new HttpConfig(), new QueueUser());
        /** Buat antrian output. Setelah layanan inferensi memproses data input, hasilnya ditulis ke antrian output. */
        QueueClient sinkQueue =
            new QueueClient(queueEndpoint, sinkQueueName, queueToken, new HttpConfig(), new QueueUser());
        /** Bersihkan data dalam antrian. Gunakan dengan hati-hati. */
        inputQueue.clear();
        sinkQueue.clear();

        /** Tambahkan data ke antrian input. */
        int count = 10;
        for (int i = 0; i < count; ++i) {
            String data = Integer.toString(i);
            inputQueue.put(data.getBytes(), null);
            /** Layanan antrian mendukung antrian multi-prioritas. Anda dapat memanggil metode put untuk mengatur prioritas data. Prioritas default adalah 0. */
            //  inputQueue.put(data.getBytes(), 0L, null);
        }

        /** Panggil metode watch untuk berlangganan data antrian output. Ukuran jendela adalah 5. */
        WebSocketWatcher watcher = sinkQueue.watch(0L, 5L, false, true, null);
        /** Anda dapat mengonfigurasi parameter WatchConfig untuk menentukan jumlah percobaan ulang, interval percobaan ulang (dalam detik), dan apakah akan mencoba ulang tanpa batas. Jika Anda tidak mengonfigurasi parameter WatchConfig, jumlah percobaan ulang default adalah 3 dan interval percobaan ulang default adalah 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));

        /** Dapatkan data output. */
        for (int i = 0; i < count; ++i) {
            try {
                /** Panggil metode getDataFrame untuk mendapatkan data bertipe DataFrame. Jika tidak ada data yang tersedia, metode ini akan memblokir hingga data tersedia. */
                byte[] data = watcher.getDataFrame().getData();
                System.out.println("[watch] data = " + new String(data));
            } catch (RuntimeException ex) {
                System.out.println("[watch] error = " + ex.getMessage());
                break;
            }
        }
        /** Tutup watcher. Setiap klien hanya dapat memiliki satu watcher. Jika Anda tidak menutup watcher, kesalahan akan dilaporkan saat Anda membuat klien lain untuk layanan antrian. */
        watcher.close();

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

        /** Tutup klien. */
        inputQueue.shutdown();
        sinkQueue.shutdown();
    }
}

Kode contoh sebelumnya melakukan langkah-langkah berikut:

  1. Panggil metode QueueClient untuk membuat klien untuk layanan antrian. Pastikan Anda membuat antrian masukan dan antrian keluaran, yang diperlukan untuk layanan inferensi.

  2. Panggil metode put() untuk mengirim data ke antrian masukan dan metode watch() untuk berlangganan data dalam antrian keluaran.

    Catatan

    Untuk kemudahan demonstrasi, contoh ini mengirim data dan berlangganan data dalam thread yang sama. Dalam implementasi aktual Anda, Anda dapat mengirim data dan berlangganan data dalam thread yang berbeda.

Kompres data permintaan

Jika ukuran data permintaan besar, EAS SDK memungkinkan Anda mengompres data dalam format Zlib atau Gzip sebelum dikirim ke server. Untuk menggunakan fitur kompresi data, konfigurasikan parameter rpc.decompressor saat menerapkan layanan.

Contoh konfigurasi untuk penerapan layanan:

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

Contoh kode untuk mengirim data terkompresi:

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{
    	  // Mulai dan inisialisasi klien.
        PredictClient client = new PredictClient(new HttpConfig());
        client.setEndpoint("18*******.cn-hangzhou.pai-eas.aliyuncs.com");
        client.setModelName("echo_compress");
        client.setToken("YzZjZjQwN2E4NGRkMDMxNDk5NzhhZDcwZDBjOTZjOGYwZDYxZGM2****");
        // Anda juga dapat mengatur kompresor ke Compressor.Gzip.
        client.setCompressor(Compressor.Zlib);  
        // Tentukan string input.
        String request = "[{\"money_credit\": 3000000}, {\"money_credit\": 10000}]";
        System.out.println(request);
        // EAS mengembalikan string.
        String response = client.predict(request);
        System.out.println(response);
        // Tutup klien.
        client.shutdown();
        return;
    }
}

Referensi