OpenAPI调用

介绍AI Doc在调用OpenAPI时候,查找相关字段以及调用OpenAPI的步骤。

步骤一:准备

AI DocOpenAPI调用过程中,可能涉及以下字段需要填写。具体查找步骤如下。如果您已知模板ID和文件夹ID可以跳过相应章节。

获取模板ID

登录AI Doc官网,进入模板管理页面,可以看到模板ID字段。

image

获取文档夹ID

登录AI Doc官网,进入文档解析页面,选择需要查看的文件夹,右侧可以看到对应的文件夹ID。

image

步骤二:创建用于OpenAPI访问的AKSK

您可以选择使用主账号或者子账号下的AKSK进行OpenAPI操作,这里以子账号的AK、SK为例。

登录阿里云的控制台,进行创建用户并勾选OpenAPI调用访问。

image

为该用户授予AliyunEnergyFullAccess权限。image

复制AccessKey IDAccessKey Secret,以备后续代码调用时候使用。

重要

开通 OpenAPI 调用访问后,请及时保存 AccessKey 信息,页面关闭后将无法再次获取信息。

image

步骤三:使用SDK调用OpenAPI

您可以点击链接前往阿里云OpenAPI门户,搜索“AI文档处理”或者其他OpenAPI,查看相关OpenAPI的调用要求,进行在线调用调试或者下载SDK示例进行本地调试。您也可以前往OpenAPI文档中AI文档处理寻找对应的接口文档进行调试。

AI Doc文档解析或者信息抽取主要分为两步:

  • 第一步:提交文档解析或者信息抽取作业。

  • 第二步:根据第一步返回的jobId获取文档解析或者信息抽取结果。

本文以Java代码为例,进行实际操作。

引入pom

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>energyexpertexternal20220923</artifactId>
      <version>${请使用最新版本}</version>
    </dependency>

本地调试环境变量设置

在环境变量中配置

AccessKey ID:ALIBABA_CLOUD_ACCESS_KEY_ID

AccessKey Secret:ALIBABA_CLOUD_ACCESS_KEY_SECRET

sdk访问地址:ENDPOINT

文件名称:FILE_NAME

待处理的文档URL:FILE_URL

本地文件路径(上传文件流):FILE_PATH

待处理文档所在目录ID:FOLDER_ID

模板ID(仅信息抽取使用):TEMPLATE_ID

TEMPLATE_ID模板ID参见获取模板ID

FOLDER_ID文件夹ID参见获取文档夹ID

ENDPOINT参见服务接入点

文档解析示例

package com.aliyun.aidoc.sample;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import com.aliyun.energyexpertexternal20220923.Client;
import com.aliyun.energyexpertexternal20220923.models.*;
import com.aliyun.tea.TeaException;
import com.aliyun.teautil.models.RuntimeOptions;

/**
 * @author Energy Expert AI DOC
 *
 */
public class DocParsingSample {
    static String ACCESS_ID = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    static String ACCESS_KEY = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    static String ENDPOINT = System.getenv("ENDPOINT");
    static String FOLDER_ID = System.getenv("FOLDER_ID");
    static String FILE_URL = System.getenv("FILE_URL");
    static String FILE_PATH = System.getenv("FILE_PATH");
    static String FILE_NAME = System.getenv("FILE_NAME");

    public static void main(String[] args) throws Exception {
        //本地上传文件
        //String taskId = submitDocParsingTaskAdvance();

        //使用公网可以访问的url
        String taskId = submitDocParsingTask();
        //异步提交文档解析任务,处理时长与文件大小相关,需要等一段时间后获取结果
        //getDocParsingResult(taskId);

    }


    static public void getDocParsingResult(String taskId)  {

        GetDocParsingResultRequest request = new GetDocParsingResultRequest();
        request.setTaskId(taskId);

        try {
            Client client = createClient();
            // 复制代码运行请自行打印 API 的返回值
            GetDocParsingResultResponse response = client.getDocParsingResult(request);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }

    }


    static public String submitDocParsingTaskAdvance() throws Exception {
        File file = new File(FILE_PATH);
        InputStream inputStream = new FileInputStream(file);


        SubmitDocParsingTaskAdvanceRequest request = new SubmitDocParsingTaskAdvanceRequest();
        request.setFolderId(FOLDER_ID);
        request.setFileName(FILE_NAME);
        request.setNeedAnalyzeImg(true);
        request.setFileUrlObject(inputStream);



        try {
            Client client = createClient();

            // 复制代码运行请自行打印 API 的返回值
            RuntimeOptions runtimeOptions = new RuntimeOptions();
            SubmitDocParsingTaskResponse response = client.submitDocParsingTaskAdvance(request, null, runtimeOptions);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
            return response.getBody().getData().getTaskId();
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }

        return null;
    }

    static public String submitDocParsingTask()  {
        SubmitDocParsingTaskRequest request = new SubmitDocParsingTaskRequest();
        request.setFolderId(FOLDER_ID);
        request.setFileName(FILE_NAME);
        request.setFileUrl(FILE_URL);
        request.setNeedAnalyzeImg(true);

        try {
            Client client = createClient();
            // 复制代码运行请自行打印 API 的返回值
            SubmitDocParsingTaskResponse response = client.submitDocParsingTask(request);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
            return response.getBody().getData().getTaskId();
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }

        return null;
    }

    public static Client createClient() throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setReadTimeout(30 * 1000)
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(ACCESS_ID)
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(ACCESS_KEY);

        // Endpoint 请参考 https://api.aliyun.com/product/energyExpertExternal
        config.endpoint = ENDPOINT;
        return new Client(config);
    }
}

RAG、长文本理解信息抽取示例

package com.aliyun.aidoc.sample;

import com.aliyun.energyexpertexternal20220923.Client;
import com.aliyun.energyexpertexternal20220923.models.*;
import com.aliyun.tea.TeaException;
import com.aliyun.teautil.models.RuntimeOptions;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

/**
 * @author Energy Expert AI DOC
 *
 */
public class DocExtractionSample {
    static String ACCESS_ID = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    static String ACCESS_KEY = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    static String ENDPOINT = System.getenv("ENDPOINT");
    static String FOLDER_ID = System.getenv("FOLDER_ID");
    static String TEMPLATE_ID = System.getenv("TEMPLATE_ID");
    static String FILE_URL = System.getenv("FILE_URL");
    static String FILE_PATH = System.getenv("FILE_PATH");
    static String FILE_NAME = System.getenv("FILE_NAME");


    public static void main(String[] args) throws Exception {
        //本地上传文件
        //String taskId = submitDocExtractionTaskAdvance();

        //使用公网可以访问的url
        String taskId = submitDocExtractionTask();
        //异步提交文档解析任务,处理时长与文件大小相关,需要等一段时间后获取结果
        getDocExtractionResult(taskId);

    }

    static public void getDocExtractionResult(String taskId) throws Exception {
        Client client = DocParsingSample.createClient();

        GetDocExtractionResultRequest request = new GetDocExtractionResultRequest();
        request.setTaskId(taskId);

        try {
            // 复制代码运行请自行打印 API 的返回值
            GetDocExtractionResultResponse response = client.getDocExtractionResult(request);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }

    }


    static public String submitDocExtractionTaskAdvance() throws Exception {
        File file = new File(FILE_PATH);
        InputStream inputStream = new FileInputStream(file);


        SubmitDocExtractionTaskAdvanceRequest request = new SubmitDocExtractionTaskAdvanceRequest();
        request.setFolderId(FOLDER_ID);
        request.setTemplateId(TEMPLATE_ID);
        request.setExtractType("rag");
        request.setFileName(FILE_NAME);
        request.setFileUrlObject(inputStream);

        Client client = DocParsingSample.createClient();


        try {
            // 复制代码运行请自行打印 API 的返回值
            RuntimeOptions runtimeOptions = new RuntimeOptions();
            SubmitDocExtractionTaskResponse response = client.submitDocExtractionTaskAdvance(request, null, runtimeOptions);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
            return response.getBody().getData().getTaskId();
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }

        return null;
    }

    static public String submitDocExtractionTask() throws Exception {
        SubmitDocExtractionTaskRequest request = new SubmitDocExtractionTaskRequest();
        request.setFolderId(FOLDER_ID);
        request.setTemplateId(TEMPLATE_ID);
        request.setFileName(FILE_NAME);
        request.setFileUrl(FILE_URL);
        request.setExtractType("rag");

        Client client = DocParsingSample.createClient();
        try {
            // 复制代码运行请自行打印 API 的返回值
            SubmitDocExtractionTaskResponse response = client.submitDocExtractionTask(request);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
            return response.getBody().getData().getTaskId();
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }

        return null;
    }



    public static Client createClient() throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setReadTimeout(30 * 1000)
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(ACCESS_ID)
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(ACCESS_KEY);

        // Endpoint 请参考 https://api.aliyun.com/product/energyExpertExternal
        config.endpoint = ENDPOINT;
        return new Client(config);
    }
}

VL信息抽取示例

package com.aliyun.aidoc.sample;

import com.aliyun.energyexpertexternal20220923.Client;
import com.aliyun.energyexpertexternal20220923.models.*;
import com.aliyun.tea.TeaException;
import com.aliyun.teautil.models.RuntimeOptions;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

/**
 * @author Energy Expert AI DOC
 *
 */
public class VLExtractionSample {
    static String ACCESS_ID = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    static String ACCESS_KEY = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    static String ENDPOINT = System.getenv("ENDPOINT");
    static String FOLDER_ID = System.getenv("FOLDER_ID");
    static String TEMPLATE_ID = System.getenv("TEMPLATE_ID");
    static String FILE_URL = System.getenv("FILE_URL");
    static String FILE_PATH = System.getenv("FILE_PATH");
    static String FILE_NAME = System.getenv("FILE_NAME");


    public static void main(String[] args) throws Exception {
        //本地上传文件
        //String taskId = submitVLExtractionTaskAdvance();

        //使用公网可以访问的url
        String taskId = submitVLExtractionTask();
        //异步提交文档解析任务,处理时长与文件大小相关,需要等一段时间后获取结果
        getVLExtractionResult(taskId);

    }

    static public void getVLExtractionResult(String taskId)  {

        GetVLExtractionResultRequest request = new GetVLExtractionResultRequest();
        request.setTaskId(taskId);

        try {
            Client client = createClient();
            // 复制代码运行请自行打印 API 的返回值
            GetVLExtractionResultResponse response = client.getVLExtractionResult(request);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }

    }


    static public String submitVLExtractionTaskAdvance() throws Exception {
        File file = new File(FILE_PATH);
        InputStream inputStream = new FileInputStream(file);


        SubmitVLExtractionTaskAdvanceRequest request = new SubmitVLExtractionTaskAdvanceRequest();
        request.setFolderId(FOLDER_ID);
        request.setTemplateId(TEMPLATE_ID);
        request.setFileName(FILE_NAME);
        request.setFileUrlObject(inputStream);



        try {
            Client client = createClient();
            // 复制代码运行请自行打印 API 的返回值
            RuntimeOptions runtimeOptions = new RuntimeOptions();
            SubmitVLExtractionTaskResponse response = client.submitVLExtractionTaskAdvance(request, null, runtimeOptions);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
            return response.getBody().getData().getTaskId();
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }

        return null;
    }

    static public String submitVLExtractionTask() {
        SubmitVLExtractionTaskRequest request = new SubmitVLExtractionTaskRequest();
        request.setFolderId(FOLDER_ID);
        request.setTemplateId(TEMPLATE_ID);
        request.setFileName(FILE_NAME);
        request.setFileUrl(FILE_URL);

        try {
            Client client = createClient();
            // 复制代码运行请自行打印 API 的返回值
            SubmitVLExtractionTaskResponse response = client.submitVLExtractionTask(request);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
            return response.getBody().getData().getTaskId();
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }

        return null;
    }



    public static Client createClient() throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setReadTimeout(30 * 1000)
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(ACCESS_ID)
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(ACCESS_KEY);

        // Endpoint 请参考 https://api.aliyun.com/product/energyExpertExternal
        config.endpoint = ENDPOINT;
        return new Client(config);
    }
}

知识库问答

在环境变量中配置ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET作为鉴权依据,SDK调用步骤如下:

  1. 调用接口GetChatFolderList获取folderId,如果目录不存在需要登录平台创建目录,提交文档解析抽取任务后进行问答;

  2. 调用接口CreateChatSession创建session, 参数userId需要调用者自行维护用户唯一性,如果不传默认使用调用者的Id作为userId;

  3. 如果需要对历史session进行问答,可以调用接口GetChatSessionList获取sessionId;

  4. 调用接口Chat进行问答,问答接口耗时较长,建议超时设置20秒以上;

  5. 如果需要获取问答历史列表需要调用GetChatList接口获取。

java代码调用参考:

package com.aliyun.aidoc.sample;


import com.aliyun.energyexpertexternal20220923.*;
import com.aliyun.energyexpertexternal20220923.models.*;
import com.aliyun.tea.*;

import java.util.List;

public class ChatSample {
    static String ACCESS_ID = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    static String ACCESS_KEY = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    static String ENDPOINT = System.getenv("ENDPOINT");
    static String User_ID = System.getenv("User_ID");
    static String SESSION_NAME = System.getenv("SESSION_NAME");
    static String QUESTION = System.getenv("QUESTION");

    public static void main(String[] args_) throws Exception {
        String folderId = null;
        //确定平台上已经创建目录,可以通过接口getChatFolderList获取目录列表
        List<ChatFolderItem> folderItems = getChatFolderList();
        if (null != folderItems && folderItems.size() > 0) {
            folderId = folderItems.get(0).getFolderId();
        }
        CreateChatSessionResponseBody.CreateChatSessionResponseBodyData session = creatChatSession(folderId, User_ID, SESSION_NAME);
        String sessionId = session.getSessionId();
        //如果继续使用历史问答,需要调用session列表接口获取sessionId
        //getChatSessionList(userId);

        chat(sessionId, QUESTION);
        //可以调用getChatList获取问答历史记录
        //getChatList(sessionId);

    }


    static public List<ChatFolderItem> getChatFolderList() throws Exception {
        Client client = ChatSample.createClient();

        try {
            // 复制代码运行请自行打印 API 的返回值
            GetChatFolderListResponse response = client.getChatFolderList();
            return response.getBody().getData();
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }

        return null;

    }

    static public List<GetChatSessionListResponseBody.GetChatSessionListResponseBodyDataSessionList> getChatSessionList(String userId) throws Exception {
        Client client = ChatSample.createClient();

        GetChatSessionListRequest request = new GetChatSessionListRequest();
        request.setCurrentPage(1);
        request.setPageSize(10);

        try {
            // 复制代码运行请自行打印 API 的返回值
            GetChatSessionListResponse response = client.getChatSessionList(request);
            return response.getBody().getData().getSessionList();
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }

        return null;

    }

    static public CreateChatSessionResponseBody.CreateChatSessionResponseBodyData creatChatSession(String folderId, String userId, String name) throws Exception {
        Client client = ChatSample.createClient();

        CreateChatSessionRequest request = new CreateChatSessionRequest();
        request.setFolderId(folderId);
        request.setUserId(userId);
        request.setName(name);

        try {
            // 复制代码运行请自行打印 API 的返回值
            CreateChatSessionResponse response = client.createChatSession(request);
            return response.getBody().getData();
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }

        return null;

    }

    static public void chat(String sessionId, String question) throws Exception {
        Client client = ChatSample.createClient();

        ChatRequest request = new ChatRequest();
        request.setSessionId(sessionId);
        request.setQuestion(question);

        try {
            // 复制代码运行请自行打印 API 的返回值
            ChatResponse response = client.chat(request);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }

    }

    static public void getChatList(String sessionId) throws Exception {
        Client client = ChatSample.createClient();

        GetChatListRequest request = new GetChatListRequest();
        request.setCurrentPage("1");
        request.setPageSize("10");
        request.setSessionId(sessionId);

        try {
            // 复制代码运行请自行打印 API 的返回值
            GetChatListResponse response = client.getChatList(request);

            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }

    }

    public static Client createClient() throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setReadTimeout(30 * 1000)
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(ACCESS_ID)
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(ACCESS_KEY);

        // Endpoint 请参考 https://api.aliyun.com/product/energyExpertExternal
        config.endpoint = ENDPOINT;
        return new Client(config);
    }
}

流式问答

请使用异步java SDK

package com.aliyun.sdk.service.energyexpertexternal20220923;

import com.alibaba.fastjson.JSON;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.gateway.pop.Configuration;
import com.aliyun.sdk.gateway.pop.auth.SignatureVersion;
import com.aliyun.sdk.service.energyexpertexternal20220923.models.ChatStreamRequest;
import com.aliyun.sdk.service.energyexpertexternal20220923.models.ChatStreamResponseBody;
import darabonba.core.ResponseIterable;
import darabonba.core.ResponseIterator;
import darabonba.core.client.ClientOverrideConfiguration;

/**
 * @author daifeng.yxy 2025/6/30 10:15
 *
 */
public class ChatSample {
    static String ACCESS_ID = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    static String ACCESS_KEY = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    static String ENDPOINT = System.getenv("ENDPOINT");
    static String SESSION_ID = System.getenv("SESSION_ID");
    static String QUESTION = System.getenv("QUESTION");

    public static void main(String[] args) throws Exception {
        AsyncClient client = ChatSample.createClient();
        ChatStreamRequest request = ChatStreamRequest.builder()
                .sessionId(SESSION_ID)
                .question(QUESTION)
                .build();

        ResponseIterable<ChatStreamResponseBody> respStream = client.chatStreamWithResponseIterable(request);

        ResponseIterator<ChatStreamResponseBody> iterator = respStream.iterator();
        while (iterator.hasNext()) {
            System.out.println("----event----");
            ChatStreamResponseBody event = iterator.next();
            System.out.println(JSON.toJSONString(event.getData()));
        }

    }

    public static AsyncClient createClient() throws Exception {
        StaticCredentialProvider provider = StaticCredentialProvider.create(
                Credential.builder()
                        .accessKeyId(ACCESS_ID)
                        .accessKeySecret(ACCESS_KEY)
                        .build()
        );

        AsyncClient client = AsyncClient.builder()
                .credentialsProvider(provider)
                // Service-level configuration
                .serviceConfiguration(Configuration.create()
                        .setSignatureVersion(SignatureVersion.V3)
                )
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setProtocol("HTTPS")
                                .setEndpointOverride(ENDPOINT)
                )
                .build();

        return client;
    }
}