本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文介绍如何使用SDK连接到已经在EAS部署好的引擎服务。
前提准备
已经成功在PAI- EAS上部署完成引擎。
获取服务信息
点击 查看调用信息

查询服务的调用地址以及token
Go连接SDK
SDK地址:GoSDK地址
go get github.com/pai-eas/eas-golang-sdk公网请求
将查询到的引擎服务中的公网的调用地址和token进行替换。
eas.NewPredictClient中第一个参数传入调用地址,第二个参数传入服务名称。
在SetToken中传入获取到的token。
推荐接口请求示例
对于自定义Processor用户而言,通常采用字符串的方式去调用PAI-Rec的引擎服务,具体的demo程序如下:
package main
import (
"fmt"
"github.com/pai-eas/eas-golang-sdk/eas"
)
func main() {
// NewPredictClient(调用地址,服务名称) 两个参数缺一不可
client := eas.NewPredictClient("1730760139076263.cn-shanghai.pai-eas.aliyuncs.com", "lizhuo_prepub")
// SetRequestPath(接口路径) 根据具体的需要填写
client.SetRequestPath("/api/rec/feed")
// SetToken(token) 填写token
client.SetToken("**********************")
err := client.Init()
if err != nil {
fmt.Println(err)
return
}
// 具体的请求参数
req := "{\"scene_id\":\"home_feed\",\"size\":10,\"uid\":\"1234\"}"
for i := 0; i < 10; i++ {
resp, err := client.StringPredict(req)
if err != nil {
fmt.Printf("failed to predict: %v \n", err)
} else {
fmt.Println(resp)
}
}
}通过VPC网络直连的方式调用服务
网络直连方式仅支持部署在EAS公共云控制台中购买专用资源组的服务,且需要在控制台上为该资源组与用户指定的vswitch打通网络后才可使用。调用方法与普通调用方式相比,增加一句 client.SetEndpointType(eas.EndpointTypeDirect) 即可,非常适合大流量高并发的服务。
package main
import (
"fmt"
"github.com/pai-eas/eas-golang-sdk/eas"
)
func main() {
// NewPredictClient(调用地址,服务名称) 两个参数缺一不可
client := eas.NewPredictClient("pai-eas-vpc.cn-shanghai.aliyuncs.com", "lizhuo_prepub")
// SetRequestPath(接口路径) 根据具体的需要填写
client.SetRequestPath("/api/rec/feed")
// SetToken(token) 填写token
client.SetToken("**********************")
// 设置使用直连网络请求
client.SetEndpointType(eas.EndpointTypeDirect)
err := client.Init()
if err != nil {
fmt.Println(err)
return
}
// 具体的请求参数
req := "{\"scene_id\":\"home_feed\",\"size\":10,\"uid\":\"1234\"}"
for i := 0; i < 10; i++ {
resp, err := client.StringPredict(req)
if err != nil {
fmt.Printf("failed to predict: %v \n", err)
} else {
fmt.Println(resp)
}
}
}Java连接SDK
SDK地址:JavaSDK地址
添加依赖包
编写Java客户端代码使用Maven管理项目,用户需在pom.xml文件中添加客户端所需的依赖包,名为eas-sdk,目前最新release版本的具体代码如下:
<dependency>
<groupId>com.aliyun.openservices.eas</groupId>
<artifactId>eas-sdk</artifactId>
<version>2.0.26</version>
</dependency>推荐接口请求示例
对于自定义Processor用户而言,通常采用字符串的方式去调用PAI-Rec的引擎服务,具体的demo程序如下:
package org.example;
import com.aliyun.openservices.eas.predict.http.PredictClient;
import com.aliyun.openservices.eas.predict.http.HttpConfig;
public class Main {
public static void main(String[] args) throws Exception {
// 启动并初始化客户端, client对象需要共享,千万不可每个请求都创建一个client对象。
PredictClient client = new PredictClient(new HttpConfig());
client.setToken("**************************");
// 如果要使用网络直连功能,需使用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("1730760139076263.cn-shanghai.pai-eas.aliyuncs.com");
// 设置服务名
client.setModelName("lizhuo_prepub");
// 设置请求路径
client.setRequestPath("/api/rec/feed");
//输入字符串定义
String request = "{\"scene_id\":\"home_feed\",\"size\":10,\"uid\":\"1214\"}";
System.out.println(request);
//通过eas返回字符串
try {
String response = client.predict(request);
System.out.println(response);
} catch (Exception e) {
e.printStackTrace();
}
//关闭客户端
client.shutdown();
return;
}
}通过PredictClient创建客户端服务对象,如需在程序中使用多个服务,可创建多个client对象;
在建立了PredictClient对象之后,需为其设置Token、Endpoint以及ModelName;
采用String类型的request作为输入,通过client.predict发送http请求,并返回response;
shutdown方法关闭客户端client;
通过VPC网络直连的方式调用服务
package org.example;
import com.aliyun.openservices.eas.predict.http.PredictClient;
import com.aliyun.openservices.eas.predict.http.HttpConfig;
public class Main {
public static void main(String[] args) throws Exception {
// 启动并初始化客户端, client对象需要共享,千万不可每个请求都创建一个client对象。
PredictClient client = new PredictClient(new HttpConfig());
client.setToken("**************************");
// 如果要使用网络直连功能,需使用setDirectEndpoint方法
// 如 client.setDirectEndpoint("pai-eas-vpc.cn-shanghai.aliyuncs.com");
// 网络直连需打通在EAS控制台开通,提供用于访问EAS服务的源vswitch,打通后可绕过网关以软负载的方式直接访问服务的实例,以实现更好的稳定性和性能
// 注:普通网关访问时请使用以用户uid为开头的endpoint,在eas控制台服务的调用信息中可查到。直连访问时请使用如上的pai-eas-vpc.{region_id}.aliyuncs.com的域名进行访问。
// 使用vpc网络直连,需要用setDirectEndpoint()并且使用vpc地址
client.setDirectEndpoint("pai-eas-vpc.cn-shanghai.aliyuncs.com");
// 设置服务名
client.setModelName("lizhuo_prepub");
// 设置请求路径
client.setRequestPath("/api/rec/feed");
//输入字符串定义
String request = "{\"scene_id\":\"home_feed\",\"size\":10,\"uid\":\"1214\"}";
System.out.println(request);
//通过eas返回字符串
try {
String response = client.predict(request);
System.out.println(response);
} catch (Exception e) {
e.printStackTrace();
}
//关闭客户端
client.shutdown();
return;
}
}通过请求压缩调用服务
目前引擎接口支持zstd、lz4、gzip 三种解压方式。
必须使用eas-sdk的2.0.26以上版本。
使用zstd压缩请求示例
除了上述文档的client 设置,需要额外设置如下:
setCompressor eas sdk 采用哪种压缩方式
Content-Encoding 设置请求header头。高速引擎使用对应的值进行压缩。
client.setCompressor(Compressor.Zstd);
Map<String, String> header = new HashMap<String, String>();
header.put("Content-Encoding", "zstd");
client.addExtraHeaders(header);使用lz4压缩请求示例
client.setCompressor(Compressor.LZ4Frame);
Map<String, String> header = new HashMap<String, String>();
header.put("Content-Encoding", "lz4");
client.addExtraHeaders(header);
使用gzip压缩请求示例
client.setCompressor(Compressor.Gzip);
Map<String, String> header = new HashMap<String, String>();
header.put("Content-Encoding", "gzip");
client.addExtraHeaders(header);支持返回数据压缩
如果推荐接口返回的数据比较大,也可以告诉引擎进行返回数据的压缩。目前引擎接口支持zstd、lz4、gzip 三种压缩方式。
必须使用eas-sdk的2.0.26以上版本。
使用zstd解压示例
除了上述文档的client 设置,需要额外设置如下:
setDecompressor eas-sdk 使用哪种方式进行解压返回的数据
Accept-Encoding 请求头设置这个,告诉引擎采用哪种方式进行压缩返回的数据
client.setDecompressor(Compressor.Zstd);
Map<String, String> header = new HashMap<String, String>();
header.put("Accept-Encoding", "zstd");
client.addExtraHeaders(header);使用lz4解压示例
client.setDecompressor(Compressor.LZ4Frame);
Map<String, String> header = new HashMap<String, String>();
header.put("Accept-Encoding", "lz4");
client.addExtraHeaders(header);使用gzip 解压示例
client.setDecompressor(Compressor.Gzip);
Map<String, String> header = new HashMap<String, String>();
header.put("Accept-Encoding", "gzip");
client.addExtraHeaders(header);