本文介绍如何使用Java来访问表格问答服务。
安装
pom依赖如下:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.6.3</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-alinlp</artifactId>
<version>1.8.10</version>
</dependency>
Common Request方式调用
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
public class TableQA {
public static void main(String[] args) {
// 创建DefaultAcsClient实例并初始化
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
// 此处以把AccessKey和AccessKeySecret保存在环境变量为例说明。您也可以根据业务需要,保存到配置文件里。
// 强烈建议不要把AccessKey和AccessKeySecret保存到代码里,会存在密钥泄漏风险
String accessKeyId = System.getenv("NLP_AK_ENV");
String accessKeySecret = System.getenv("NLP_SK_ENV");
DefaultProfile profile = DefaultProfile.getProfile(
"cn-hangzhou",
accessKeyId,
accessKeySecret);
DefaultAcsClient acsClient = new DefaultAcsClient(profile);
// 创建查询服务信息请求并设置相关参数
CommonRequest serviceInfoRequest = new CommonRequest();
// domain和version是固定值
serviceInfoRequest.setSysDomain("alinlp.cn-hangzhou.aliyuncs.com");
serviceInfoRequest.setSysVersion("2020-06-29");
serviceInfoRequest.putQueryParameter("ServiceCode","alinlp");
serviceInfoRequest.putQueryParameter("TokenizerId","MAINSE");
// 查询服务信息action:GetTableQAServiceInfoById
serviceInfoRequest.setSysAction("GetTableQAServiceInfoById");
// 服务id:管控台列表展示的服务id
serviceInfoRequest.putQueryParameter("ServiceId", "95");
String botId = "";
try {
CommonResponse response = acsClient.getCommonResponse(serviceInfoRequest);
JSONObject responseObject = JSON.parseObject(response.getData());
// 从服务信息中获取botId
botId = responseObject.getJSONObject("Data").getJSONObject("data").getString("botId");
System.out.println(botId);
} catch (ClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 创建tableqa请求并设置相关参数
CommonRequest tableqaRequest = new CommonRequest();
// domain和version是固定值
tableqaRequest.setSysDomain("alinlp.cn-hangzhou.aliyuncs.com");
tableqaRequest.setSysVersion("2020-06-29");
tableqaRequest.putQueryParameter("ServiceCode","alinlp");
tableqaRequest.putQueryParameter("TokenizerId","MAINSE");
tableqaRequest.setSysAction("RequestTableQAOnline");
JSONObject params = new JSONObject();
// botId:使用上面查询到的botId
params.put("bot_id",botId);
// question:问题
params.put("question","我想看看昨天的基金额度");
tableqaRequest.putQueryParameter("Params",params.toString());
try {
CommonResponse tableqaResponse = acsClient.getCommonResponse(tableqaRequest);
System.out.println(tableqaResponse.getData());
} catch (ClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注:RequestTableQAOnline的参数bot_id来源于GetTableQAServiceInfoById的查询结果,所以在使用表格问答服务过程中请先使用GetTableQAServiceInfoById查询到服务绑定的最新bot_id。
调用异常自助排查
若调用过程中出现异常可对照调用异常自助排查(错误码汇总),找到表格中对应的描述,描述中包含具体错误原因和解决方案。
文档内容是否对您有帮助?