本文介紹如何使用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。
調用異常自助排查
若調用過程中出現異常可對照調用異常自助排查(錯誤碼匯總),找到表格中對應的描述,描述中包含具體錯誤原因和解決方案。
文檔內容是否對您有幫助?