代码示例(Java)

本文介绍如何使用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方式调用

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。

调用异常自助排查

若调用过程中出现异常可对照调用异常自助排查(错误码汇总),找到表格中对应的描述,描述中包含具体错误原因和解决方案。