すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:SDK for Go

最終更新日:May 31, 2026

このガイドでは、Go 用の公式 SDK の API を解説し、一般的な入出力フォーマットの完全なコード例を提供します。

説明

SDK のユースケースと呼び出しの原則については、「サービス呼び出し SDK」をご参照ください。

前提条件

Go 用 SDK を使用して推論サービスを呼び出す場合、Go パッケージマネージャーは、コンパイル時に GitHub から SDK のソースコードを自動的にダウンロードします。事前に SDK をインストールする必要はありません。呼び出しロジックをカスタマイズする必要がある場合は、Go 用 SDK のソースコードをダウンロードして、ローカルで変更できます。

SDK をインポートするには、次のコードを使用します。

import (
    "github.com/pai-eas/eas-golang-sdk/eas"
)

クイックスタート

モデルの入力データフォーマットに対応する Request クラスを選択します。次の例は、文字列リクエストを使用した最小限のエンドツーエンド呼び出しです。

package main

import (
    "fmt"
    "github.com/pai-eas/eas-golang-sdk/eas"
)

func main() {
    client := eas.NewPredictClient("182848887922****.cn-shanghai.pai-eas.aliyuncs.com", "my_service")
    client.SetToken("YOUR_SERVICE_TOKEN")
    client.Init()

    resp, err := client.StringPredict("[{}]")
    if err != nil {
        fmt.Printf("failed to predict: %v\n", err.Error())
    } else {
        fmt.Printf("%v\n", resp)
    }
}

API リファレンス

SDK for Go は、用途別にグループ化された次のクラスを提供します。

グループ

説明

メインクライアント

PredictClient:エンドポイント、サービス名、トークンなどのサービス情報を設定し、リクエストを送信してレスポンスを受信します。

入力と出力

  • TFRequest / TFResponse:TensorFlow モデルのリクエストとレスポンスをラップします。

  • TorchRequest / TorchResponse:PyTorch モデルのリクエストとレスポンスをラップします。

  • 文字列ベースのシナリオの場合、専用の Request クラスや Response クラスは不要です。文字列を StringPredict() メソッドに直接渡すと、文字列のレスポンスを受信します。

キューサービス

  • QueueClient:データの送信、データプッシュのサブスクリプション、キューステータスのクエリに使用される非同期キュークライアントです。

  • types.Watcher:QueueClient.Watch() によって作成され、プッシュされたデータを受信するウォッチャーです。

PredictClient

サービス情報の設定、リクエストの送信、予測結果の受信に使用されるメインクライアントクラスです。

メソッド

説明

NewPredictClient(endpoint string, serviceName string) *PredictClient

  • PredictClient オブジェクトを作成します。

  • パラメーター:

    • endpoint:必須。サーバーのエンドポイントアドレス。標準サービスの場合、このパラメーターをデフォルトゲートウェイエンドポイントに設定します。

    • serviceName:必須。サービス名。

  • PredictClient オブジェクトを返します。

SetEndpoint(endpointName string)

  • サービスエンドポイントを設定します。

  • endpointName は、サーバーのエンドポイントアドレスを指定します。標準サービスの場合、このパラメーターをデフォルトゲートウェイエンドポイントに設定します。

SetServiceName(serviceName string)

  • 呼び出すサービスの名前を設定します。

  • serviceName は、呼び出すサービスの名前を指定します。

SetEndpointType(endpointType string)

  • サーバーのゲートウェイタイプを設定します。

  • endpointType は、ゲートウェイタイプを指定します。システムは次のゲートウェイタイプをサポートしています。

    • "DEFAULT": デフォルトゲートウェイ。ゲートウェイタイプが指定されていない場合、このタイプが使用されます。

    • "DIRECT": 高速ダイレクト接続チャネルを介してサービスにアクセスします。

SetToken(token string)

  • サービスアクセス用のトークンを設定します。

  • token は、サービスへのアクセスに使用される認証トークンを指定します。

SetHttpTransport(transport *http.Transport)

  • HTTP クライアントの Transport プロパティを設定します。

  • transport は、HTTP リクエストの送信時に使用する Transport オブジェクトを指定します。

SetRetryCount(max_retry_count int)

  • 失敗したリクエストのリトライ回数を設定します。

  • max_retry_count は、失敗したリクエストをリトライする回数を指定します。デフォルト値は 5 です。

    重要

    サーバープロセスエラー、サーバーエラー、または永続的なゲートウェイ接続の切断により失敗した場合、リクエストは自動的にリトライされます。したがって、このパラメーターを 0 に設定しないでください。

SetTimeout(timeout int)

  • リクエストタイムアウトを設定します。

  • timeout は、リクエストタイムアウト時間をミリ秒 (ms) 単位で指定します。デフォルト値は 5000 です。

Init()

PredictClient オブジェクトを初期化します。前述のメソッドでパラメーターを設定した後、Init() を呼び出して変更を適用する必要があります。

Predict(request Request) Response

  • 推論サービスに予測リクエストを送信します。

  • パラメーター:Request インターフェイスを実装するオブジェクト (StringRequestTFRequestTorchRequest など)。

  • 戻り値:Response インターフェイスを実装するオブジェクト (StringResponseTFResponseTorchResponse など)。

StringPredict(request string) string

  • 推論サービスに文字列予測リクエストを送信します。

  • request は、送信するリクエスト文字列を指定します。

  • サービスレスポンスを含む文字列を返します。

TorchPredict(request TorchRequest) TorchResponse

  • 推論サービスに PyTorch 予測リクエストを送信します。

  • request は、TorchRequest クラスのオブジェクトを指定します。

  • 対応する TorchResponse オブジェクトを返します。

TFPredict(request TFRequest) TFResponse

  • 推論サービスに TensorFlow 予測リクエストを送信します。

  • request は、TFRequest クラスのオブジェクトを指定します。

  • 対応する TFResponse オブジェクトを返します。

TFRequest

TensorFlow モデルの入力データを構築します。

メソッド

説明

TFRequest(signatureName string)

  • TFRequest オブジェクトを作成します。

  • signatureName は、リクエストされるモデルのシグネチャ名を指定します。

AddFeed(?)(inputName string, shape []int64{}, content []?)

  • TensorFlow サービスリクエストの入力テンソルを指定します。

  • パラメーター:

    • inputName:入力テンソルのエイリアス。

    • shape:入力テンソルの形状。

    • content:入力テンソルの内容。1次元配列にフラット化されます。サポートされている型には、INT32、INT64、FLOAT32、FLOAT64、STRING、BOOL があります。メソッド名はデータ型を示します (例: AddFeedInt32())。その他のデータ型については、ソースコードを参照して PB フォーマットでリクエストを構築する必要があります。

AddFetch(outputName string)

  • 取得する出力テンソルのエイリアスを指定します。

  • outputName は、取得する出力テンソルのエイリアスを指定します。

    SavedModel モデルの場合、このパラメーターはオプションです。このパラメーターが設定されていない場合、すべての出力が返されます。

    フリーズされたモデルの場合、このパラメーターは必須です。

TFResponse

TensorFlow モデルからの出力データを解析します。

メソッド

説明

GetTensorShape(outputName string) []int64

  • 指定されたエイリアスの出力テンソルの形状を取得します。

  • outputName は、出力形状を取得するテンソルのエイリアスを指定します。

  • 戻り値:テンソルの形状。各次元が配列で表現されます。

Get(?)Val(outputName string) [](?)

  • 出力テンソルのデータベクトルを取得します。出力は 1次元配列です。このメソッドを GetTensorShape() メソッドと組み合わせて使用して、多次元テンソルを再構築します。サポートされている型には、FLOAT、DOUBLE、INT、INT64、STRING、BOOL があります。メソッド名はデータ型を示します (例: GetFloatVal())。

  • outputName は、出力データを取得するテンソルのエイリアスを指定します。

  • 戻り値:出力テンソルのフラット化されたデータを含む 1次元配列。

TorchRequest

PyTorch モデルの入力データを構築します。

メソッド

説明

TorchRequest()

TorchRequest オブジェクトを作成します。

AddFeed(?)(index int, shape []int64{}, content []?)

  • PyTorch サービスリクエストの入力テンソルを指定します。

  • パラメーター:

    • index:入力テンソルのインデックス。

    • shape:入力テンソルの形状。

    • content:入力テンソルの内容。1次元配列にフラット化されます。サポートされている型には、INT32、INT64、FLOAT32、FLOAT64 があります。メソッド名はデータ型を示します (例: AddFeedInt32())。その他のデータ型については、ソースコードを参照して PB フォーマットでリクエストを構築する必要があります。

AddFetch(outputIndex int)

  • 取得する出力テンソルをインデックスで指定します。このメソッドはオプションです。このメソッドを呼び出さない場合、すべての出力が返されます。

  • outputIndex は、出力テンソルのインデックスを指定します。

TorchResponse

PyTorch モデルからの出力データを解析します。

メソッド

説明

GetTensorShape(outputIndex int) []int64

  • 指定されたインデックスの出力テンソルの形状を取得します。

  • outputIndex は、出力テンソルのインデックスを指定します。

  • 戻り値:テンソルの形状。各次元が配列で表現されます。

Get(?)Val(outputIndex int) [](?)

  • 出力テンソルのデータベクトルを取得します。出力は 1次元配列です。このメソッドを GetTensorShape() メソッドと組み合わせて使用して、多次元テンソルを再構築します。サポートされている型には、FLOAT、DOUBLE、INT、INT64 があります。メソッド名はデータ型を示します (例: GetFloatVal())。

  • outputIndex は、出力データを取得するテンソルのインデックスを指定します。

  • 戻り値:出力テンソルのフラット化されたデータを含む 1次元配列。

QueueClient

EAS キューサービスと対話して、データの生成、消費、管理を行います。

メソッド

説明

NewQueueClient(endpoint, queueName, token string) (*QueueClient, error)

  • QueueClient オブジェクトを作成します。

  • パラメーター:

    • endpoint:サーバーのエンドポイントアドレス。

    • queueName:キューサービスの名前。

    • token:キューサービスのトークン。

  • QueueClient オブジェクトとエラー (存在する場合) を返します。

Truncate(ctx context.Context, index uint64) error

  • 指定されたインデックスより前のキュー内のデータをトランケートし、指定されたインデックス以降のデータのみを保持します。

  • パラメーター:

    • ctx:現在の操作のコンテキスト。

    • index:トランケートするキュー内のデータのインデックス。

Put(ctx context.Context, data []byte, tags types.Tags) (index uint64, requestId string, err error)

  • キューにレコードを書き込みます。

  • パラメーター:

    • ctx:現在の操作のコンテキスト。

    • data:キューに書き込むデータの内容。

  • 戻り値:

    • index:キュー内の現在のデータレコードのインデックス。このインデックスを使用して、キューからデータをクエリできます。

    • requestId:データレコード用に自動生成されたリクエスト ID。この ID は、レコードのクエリにも使用できる特別なタグです。

GetByIndex(ctx context.Context, index uint64) (dfs []types.DataFrame, err error)

  • インデックスでキューからレコードを取得します。レコードは取得時にキューから自動的に削除されます。

  • パラメーター:

    • ctx:現在の操作のコンテキスト。

    • index:キューからクエリするデータのインデックス。

  • dfs:DataFrame オブジェクトとしてカプセル化されたクエリ結果。

GetByRequestId(ctx context.Context, requestId string) (dfs []types.DataFrame, err error)

  • リクエスト ID でキューからレコードを取得します。レコードは取得時にキューから自動的に削除されます。

  • パラメーター:

    • ctx:現在の操作のコンテキスト。

    • requestId:キューからクエリするデータのリクエスト ID。

  • dfs:DataFrame オブジェクトとしてカプセル化されたクエリ結果。

Get(ctx context.Context, index uint64, length int, timeout time.Duration, autoDelete bool, tags types.Tags) (dfs []types.DataFrame, err error)

  • 指定された条件に基づいてキューからデータをクエリします。GetByIndex() メソッドと GetByRequestId() メソッドは、Get() メソッドのシンプルなラッパーです。

  • パラメーター:

    • ctx:現在の操作のコンテキスト。

    • index:クエリするデータの開始インデックス。

    • length:クエリするデータレコードの数。index (含む) から始まる最大 length 件のレコードが返されます。

    • timeout:クエリの待機時間。この期間内に length 件のレコードが利用可能になると、呼び出しは即座に返されます。それ以外の場合、タイムアウト後に呼び出しが返されます。

    • autoDelete:クエリされたデータをキューから自動的に削除するかどうかを指定するブール値。false の場合、データは繰り返しクエリできます。Del() メソッドを呼び出すことで、手動でデータを削除できます。

    • tags:指定されたタグを含むデータをクエリします。このパラメーターは map[string]string 型です。システムは、指定された index から始まる length 件のレコードを反復処理して、指定されたタグを含むデータを返します。

  • dfs:DataFrame オブジェクトとしてカプセル化されたクエリ結果。

Del(ctx context.Context, indexes ...uint64)

  • 指定されたインデックスのデータをキューから削除します。

  • パラメーター:

    • ctx:現在の操作のコンテキスト。

    • indexes:キューから削除するデータのインデックスのリスト。

Attributes() (attrs types.Attributes, err error)

  • キューの属性情報 (合計長と現在のデータ長を含む) を取得します。

  • attrs:キューの属性情報。map[string]string 型です。

Watch(ctx context.Context, index, window uint64, indexOnly bool, autocommit bool) (watcher types.Watcher, err error)

  • キュー内のデータをサブスクライブします。キューサービスは、指定された条件に基づいてクライアントにデータをプッシュします。

  • パラメーター:

    • ctx:現在の操作のコンテキスト。

    • index:サブスクリプションの開始インデックス。

    • window:サブスクリプションウィンドウサイズ。これは、キューサービスが一度に単一のクライアントインスタンスにプッシュできるレコードの最大数です。

      説明

      サーバーは、前のレコードがコミットされるまで新しいレコードをプッシュしません。N 件のレコードをコミットすると、キューサービスはさらに N 件のレコードをプッシュします。これにより、クライアントが任意の時点でウィンドウサイズを超えるレコードを処理しないようにして、同時実行を制限するのに役立ちます。

    • indexOnly:インデックス値のみをプッシュするかどうかを指定するブール値。

    • autocommit:プッシュ後にレコードをオートコミットするかどうかを指定するブール値。これを false に設定することを推奨します。レコードを受信して処理した後、手動でコミットしてください。インスタンスがコミット前に失敗した場合、キューサービスは未コミットのデータを他のインスタンスに再配布して処理します。

  • 戻り値:プッシュされたデータの読み取りに使用できるウォッチャーオブジェクト。

Commit(ctx context.Context, indexes ...uint64) error

  • 指定されたインデックスのレコードをコミットします。

    説明

    コミットは、キューサービスによってプッシュされたデータが処理されたことを示します。その後、サービスはキューからデータを削除でき、他のインスタンスにプッシュしません。

  • パラメーター:

    • ctx:現在の操作のコンテキスト。

    • indexes:キュー内でコミットするデータのインデックスのリスト。

types.Watcher

キューサービスのサブスクリプションチャネルからプッシュされたデータを読み取ります。

メソッド

説明

FrameChan() <-chan types.DataFrame

  • チャネルオブジェクトを返します。サーバーからプッシュされたデータはこのチャネルに書き込まれ、このチャネルからループでデータを読み取ることができます。

  • 戻り値:プッシュされたデータを読み取るためのチャネルオブジェクト。

Close()

ウォッチャーオブジェクトとそのバックエンドデータ接続を閉じます。

説明

クライアントは、一度に 1 つのアクティブなウォッチャーオブジェクトのみを持つことができます。新しいウォッチャーオブジェクトを作成する前に、現在のウォッチャーオブジェクトを閉じる必要があります。

フォーマット別の同期推論

サービスの入力および出力タイプに基づいて、コードサンプルを選択します。

文字列

カスタムプロセッサを使用してサービスをデプロイする場合、通常、文字列を使用して呼び出します。例えば、PMML モデルサービスを呼び出す場合などです。以下に完全なコード例を示します。

package main

import (
        "fmt"
        "github.com/pai-eas/eas-golang-sdk/eas"
)

func main() {
    client := eas.NewPredictClient("182848887922****.cn-shanghai.pai-eas.aliyuncs.com", "scorecard_pmml_example")
    client.SetToken("YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****")
    client.Init()
    req := "[{\"fea1\": 1, \"fea2\": 2}]"
    for i := 0; i < 100; i++ {
        resp, err := client.StringPredict(req)
        if err != nil {
            fmt.Printf("failed to predict: %v\n", err.Error())
        } else {
            fmt.Printf("%v\n", resp)
        }
    }
}

TensorFlow

TensorFlow モデルの場合、入出力データフォーマットとして、それぞれ TFRequest と TFResponse を使用します。以下に完全なコード例を示します。

package main

import (
        "fmt"
        "github.com/pai-eas/eas-golang-sdk/eas"
)

func main() {
    client := eas.NewPredictClient("182848887922****.cn-shanghai.pai-eas.aliyuncs.com", "mnist_saved_model_example")
    client.SetToken("YTg2ZjE0ZjM4ZmE3OTc0NzYxZDMyNmYzMTJjZTQ1YmU0N2FjMTAy****")
    client.Init()

    tfreq := eas.TFRequest{}
    tfreq.SetSignatureName("predict_images")
    tfreq.AddFeedFloat32("images", []int64{1, 784}, make([]float32, 784))

    for i := 0; i < 100; i++ {
        resp, err := client.TFPredict(tfreq)
        if err != nil {
            fmt.Printf("failed to predict: %v", err)
        } else {
            fmt.Printf("%v\n", resp)
        }
    }
}

PyTorch

PyTorch モデルの場合、入出力データフォーマットとして、それぞれ TorchRequest と TorchResponse を使用します。以下に完全なコード例を示します。

package main

import (
        "fmt"
        "github.com/pai-eas/eas-golang-sdk/eas"
)

func main() {
    client := eas.NewPredictClient("182848887922****.cn-shanghai.pai-eas.aliyuncs.com", "pytorch_resnet_example")
    client.SetTimeout(500)
    client.SetToken("ZjdjZDg1NWVlMWI2NTU5YzJiMmY5ZmE5OTBmYzZkMjI0YjlmYWVl****")
    client.Init()
    req := eas.TorchRequest{}
    req.AddFeedFloat32(0, []int64{1, 3, 224, 224}, make([]float32, 150528))
    req.AddFetch(0)
    for i := 0; i < 10; i++ {
        resp, err := client.TorchPredict(req)
        if err != nil {
            fmt.Printf("failed to predict: %v", err)
        } else {
            fmt.Println(resp.GetTensorShape(0), resp.GetFloatVal(0))
        }
    }
}

VPC 専用接続

VPC 専用接続を使用すると、Elastic Algorithm Service (EAS) の専用リソースグループにデプロイされたサービスにアクセスできます。このモードを使用するには、事前にリソースグループを指定の vSwitch に接続しておく必要があります。EAS 専用リソースグループの購入とネットワーク接続設定の詳細については、「EAS リソースグループの使用」および「パブリックリソースまたは内部リソースにアクセスするための EAS の設定」をご参照ください。この方法は標準的な呼び出しとは異なり、client.SetEndpointType(eas.EndpointTypeDirect) というコードを 1 行追加するだけです。このモードは、高トラフィック、高同時実行のサービスに最適です。以下にコードサンプルを示します。

package main

import (
        "fmt"
        "github.com/pai-eas/eas-golang-sdk/eas"
)

func main() {
    // VPC 専用接続エンドポイントのフォーマット:{uid}.vpc.{region-id}.pai-eas.aliyuncs.com。エンドポイントは、EAS コンソールのサービス詳細ページにある [Invocation Information] タブで確認できます。
    client := eas.NewPredictClient("182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com", "scorecard_pmml_example")
    client.SetToken("YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****")
    client.SetEndpointType(eas.EndpointTypeDirect)
    client.Init()
    req := "[{\"fea1\": 1, \"fea2\": 2}]"
    for i := 0; i < 100; i++ {
        resp, err := client.StringPredict(req)
        if err != nil {
            fmt.Printf("failed to predict: %v\n", err.Error())
        } else {
            fmt.Printf("%v\n", resp)
        }
    }
}

クライアント接続パラメーター

http.Transport プロパティを使用して、クライアントの接続パラメーターを設定できます。以下の例では、これらの設定を構成する方法を示します。

package main

import (
        "fmt"
        "github.com/pai-eas/eas-golang-sdk/eas"
        "net/http"
        "time"
)

func main() {
    // VPC 専用接続エンドポイントのフォーマット:{uid}.vpc.{region-id}.pai-eas.aliyuncs.com。エンドポイントは、EAS コンソールのサービス詳細ページにある [Invocation Information] タブで確認できます。
    client := eas.NewPredictClient("182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com", "network_test")
    client.SetToken("MDAwZDQ3NjE3OThhOTI4ODFmMjJiYzE0MDk1NWRkOGI1MmVhMGI0****")
    client.SetEndpointType(eas.EndpointTypeDirect)
    client.SetHttpTransport(&http.Transport{
        MaxConnsPerHost:       300,
        TLSHandshakeTimeout:   100 * time.Millisecond,
        ResponseHeaderTimeout: 200 * time.Millisecond,
        ExpectContinueTimeout: 200 * time.Millisecond,
    })
}

キューサービス

QueueClient を使用すると、キューサービスへのデータ送信、データのクエリ、キューサービスのステータス確認、およびキューサービスからのデータプッシュをサブスクライブできます。この例では、一方のゴルーチンがキューサービスにデータを送信し、もう一方のゴルーチンがウォッチャーを使用してそのデータをサブスクライブし、受信します。

説明

EAS で非同期推論サービスをデプロイすると、入力キューと出力キューが自動的に生成されます。アドレスは通常、次のフォーマットになります:

入力キュー: <domain>/api/predict/<service_name>

出力キュー: <domain>/api/predict/<service_name>/sink

要件に応じて、<service_name> または <service_name>/sink を使用して QueueClient を作成します。

    const (
        QueueEndpoint = "182848887922****.cn-shanghai.pai-eas.aliyuncs.com"
        // 例えば、EAS サービス名が test_qservice の場合、入力キュー名は test_qservice、出力キュー名は test_qservice/sink となります。
        QueueName     = "test_qservice"
        QueueToken    = "YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA3OTZmNzc1MTUx****"
    )
    queue, err := NewQueueClient(QueueEndpoint, QueueName, QueueToken)

    // キュー内のすべてのメッセージをトランケートします
    attrs, err := queue.Attributes()
    if index, ok := attrs["stream.lastEntry"]; ok {
        idx, _ := strconv.ParseUint(index, 10, 64)
        queue.Truncate(context.Background(), idx+1)
    }

    ctx, cancel := context.WithCancel(context.Background())

    // キューにメッセージを送信するためのゴルーチンを作成します
    go func() {
        i := 0
        for {
            select {
            case <-time.NewTicker(time.Microsecond * 1).C:
                _, _, err := queue.Put(context.Background(), []byte(strconv.Itoa(i)), types.Tags{})
                if err != nil {
                    fmt.Printf("Error occured, retry to handle it: %v\n", err)
                }
                i += 1
            case <-ctx.Done():
                return
            }
        }
    }()

    // キューからのメッセージを監視するためのウォッチャーを作成します
    watcher, err := queue.Watch(context.Background(), 0, 5, false, false)
    if err != nil {
        fmt.Printf("Failed to create a watcher to watch the queue: %v\n", err)
        return
    }

    // キューからメッセージを読み取り、手動でコミットします
    for i := 0; i < 100; i++ {
        df := <-watcher.FrameChan()
        err := queue.Commit(context.Background(), df.Index.Uint64())
        if err != nil {
            fmt.Printf("Failed to commit index: %v(%v)\n", df.Index, err)
        }
    }

    // すべて完了したら、ウォッチャーを閉じます
    watcher.Close()
    cancel()

トラブルシューティング

SDK for Go を使用してサービスを呼び出す際に発生する一般的な問題のトラブルシューティング (原因とソリューションを含む) については、Service invocation SDKs の「Troubleshoot invocation exceptions」セクションをご参照ください。

サービスステータスコード、エラーメッセージ、および推奨される対応の一覧については、「Appendix: Service status codes and common errors」をご参照ください。