すべてのプロダクト
Search
ドキュメントセンター

Energy Expert:API 呼び出し

最終更新日:Nov 09, 2025

このトピックでは、AI Doc を使用する場合に関連フィールドを見つけて OpenAPI 操作を呼び出す方法について説明します。

ステップ 1: 準備

AI Doc OpenAPI 操作を呼び出す場合は、いくつかのフィールドに入力する必要があります。これらのフィールドを見つける具体的な手順は次のとおりです。テンプレート ID とフォルダ ID をすでに知っている場合は、対応するセクションをスキップできます。

テンプレート ID を取得する

AI Doc ウェブサイト にログインし、テンプレート管理ページに移動すると、テンプレート ID フィールドが表示されます。

image

フォルダ ID を取得する

AI Doc ウェブサイト にログインし、ドキュメント解析ページに移動して、表示するフォルダを選択すると、対応するフォルダ ID が右側に表示されます。

image

ステップ 2: OpenAPI アクセス用の AccessKey ペアを作成する

OpenAPI 操作には、Alibaba Cloud アカウントの AccessKey ペアまたは RAM ユーザーのいずれかを使用できます。この例では、RAM ユーザーの AccessKey ペアを使用します。

Alibaba Cloud コンソール にログインし、ユーザーを作成して、OpenAPI 呼び出しアクセスを選択します。

image

このユーザーに AliyunEnergyFullAccess 権限を付与します。image

後でコード呼び出しで使用する AccessKey ID と AccessKey Secret をコピーします。

重要

OpenAPI 呼び出しアクセスを有効にした後、AccessKey 情報をすぐに保存してください。ページを閉じると、この情報を取得できなくなります。

image

ステップ 3: SDK を使用して OpenAPI 操作を呼び出す

リンクをクリックして [Alibaba Cloud OpenAPI ポータル] にアクセスし、「AI document processing」またはその他の OpenAPI 操作を検索し、関連する OpenAPI 操作の呼び出し要件を表示し、オンラインでテストするか、[SDK の例をダウンロード] してローカルでテストできます。また、OpenAPI ドキュメント AI ドキュメント処理 にアクセスして、テスト用の対応する API ドキュメントを見つけることもできます。

AI Doc ドキュメント解析または情報抽出は、主に次の 2 つのステップで構成されます。

  • ステップ 1: ドキュメント解析または情報抽出ジョブを送信します。

  • ステップ 2: ステップ 1 で返された 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 を取得する をご参照ください。

FOLDER_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();
            // 必要に応じて、操作のレスポンスを表示するコードを記述します。
            GetDocParsingResultResponse response = client.getDocParsingResult(request);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
        } catch (TeaException error) {
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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();

            // 必要に応じて、操作のレスポンスを表示するコードを記述します。
            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) {
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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();
            // 必要に応じて、操作のレスポンスを表示するコードを記述します。
            SubmitDocParsingTaskResponse response = client.submitDocParsingTask(request);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
            return response.getBody().getData().getTaskId();
        } catch (TeaException error) {
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);

        // エンドポイント。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 {
            // 必要に応じて、操作のレスポンスを表示するコードを記述します。
            GetDocExtractionResultResponse response = client.getDocExtractionResult(request);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
        } catch (TeaException error) {
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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 {
            // 必要に応じて、操作のレスポンスを表示するコードを記述します。
            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) {
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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 {
            // 必要に応じて、操作のレスポンスを表示するコードを記述します。
            SubmitDocExtractionTaskResponse response = client.submitDocExtractionTask(request);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
            return response.getBody().getData().getTaskId();
        } catch (TeaException error) {
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);

        // エンドポイント。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
 *
 */
// VL 抽出サンプル
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();
            // 必要に応じて、操作のレスポンスを表示するコードを記述します。
            GetVLExtractionResultResponse response = client.getVLExtractionResult(request);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
        } catch (TeaException error) {
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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();
            // 必要に応じて、操作のレスポンスを表示するコードを記述します。
            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) {
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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();
            // 必要に応じて、操作のレスポンスを表示するコードを記述します。
            SubmitVLExtractionTaskResponse response = client.submitVLExtractionTask(request);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
            return response.getBody().getData().getTaskId();
        } catch (TeaException error) {
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);

        // エンドポイント。https://api.aliyun.com/product/energyExpertExternal を参照してください。
        config.endpoint = ENDPOINT;
        return new Client(config);
    }
}

ナレッジベース Q&A

認証クレデンシャルとして、環境変数に ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET を設定します。SDK 呼び出し手順は次のとおりです。

  1. GetChatFolderList インターフェースを呼び出して、folderId を取得します。ディレクトリが存在しない場合は、プラットフォームにログインしてディレクトリを作成し、ドキュメント解析および抽出タスクを送信してから、Q&A を実行する必要があります。

  2. CreateChatSession インターフェースを呼び出して、セッションを作成します。userId パラメータは、ユーザーの一意性を確保するために呼び出し元が維持する必要があります。指定しない場合、呼び出し元の ID がデフォルトで userId として使用されます。

  3. 履歴セッションで Q&A を実行する必要がある場合は、GetChatSessionList インターフェースを呼び出して sessionId を取得できます。

  4. Chat インターフェースを呼び出して、Q&A を実行します。Q&A インターフェースは比較的時間がかかるため、タイムアウトを 20 秒以上に設定することをお勧めします。

  5. Q&A 履歴リストを取得する必要がある場合は、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();
        // 履歴 Q&A を引き続き使用する場合は、セッションリストインターフェースを呼び出して sessionId を取得する必要があります。
        //getChatSessionList(userId);

        chat(sessionId, QUESTION);
        // getChatList を呼び出して Q&A 履歴レコードを取得できます。
        //getChatList(sessionId);

    }


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

        try {
            // 必要に応じて、操作のレスポンスを表示するコードを記述します。
            GetChatFolderListResponse response = client.getChatFolderList();
            return response.getBody().getData();
        } catch (TeaException error) {
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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 {
            // 必要に応じて、操作のレスポンスを表示するコードを記述します。
            GetChatSessionListResponse response = client.getChatSessionList(request);
            return response.getBody().getData().getSessionList();
        } catch (TeaException error) {
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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 {
            // 必要に応じて、操作のレスポンスを表示するコードを記述します。
            CreateChatSessionResponse response = client.createChatSession(request);
            return response.getBody().getData();
        } catch (TeaException error) {
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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 {
            // 必要に応じて、操作のレスポンスを表示するコードを記述します。
            ChatResponse response = client.chat(request);
            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
        } catch (TeaException error) {
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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 {
            // 必要に応じて、操作のレスポンスを表示するコードを記述します。
            GetChatListResponse response = client.getChatList(request);

            System.out.println(com.aliyun.teautil.Common.toJSONString(response));
        } catch (TeaException error) {
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);
            // 実際のビジネスシナリオでは、例外を慎重に処理し、プロジェクトの例外を無視しないでください。この例では、例外は参照用にのみ提供されています。
            // エラーメッセージ
            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);

        // エンドポイント。https://api.aliyun.com/product/energyExpertExternal を参照してください。
        config.endpoint = ENDPOINT;
        return new Client(config);
    }
}

ストリーミング Q&A

非同期 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)
                // サービスレベルの設定
                .serviceConfiguration(Configuration.create()
                        .setSignatureVersion(SignatureVersion.V3)
                )
                // クライアントレベルの設定の再書き込み、エンドポイント、HTTP リクエストパラメーターなどを設定できます。
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setProtocol("HTTPS")
                                .setEndpointOverride(ENDPOINT)
                )
                .build();

        return client;
    }
}