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

Data Management:データエージェント OpenAPI の統合

最終更新日:Jul 10, 2026

このガイドでは、開発者が OpenAPI を使用してデータエージェントサービスと統合する方法を説明します。また、データエージェントのコアアーキテクチャと API 呼び出しのワークフローを解説し、2 つの主要なユースケースに対応した完全なコード実装を提供します。

アーキテクチャの概要

リソースモデル

Data Agent サービスは、3 つの主要な抽象化レイヤーで構成されています。統合を成功させるには、これらの関係を理解することが不可欠です。

レイヤー

説明

ライフサイクル管理

エージェントリソース

Data Agent の実行コンテキストをカプセル化する論理リソースであり、RAM ユーザーレベルでのテナント分離を提供します。すべての操作で AgentId を指定する必要があります。

自動的に管理されます。ランタイムのライフサイクルに従い、最後のセッションが非アクティブになった後に破棄されます (通常、1 時間のアイドル期間後)。

エージェントランタイム

セッション開始時にエージェントリソースからインスタンス化される実行環境です。推論とツールコールを担当します。OpenAPI の呼び出し元は、このレイヤーと直接やり取りする必要はありません。

自動的に管理されます。最後に関連付けられたセッションが非アクティブになると、リソースを解放するために破棄されます (通常、1 時間のアイドル期間後)。

セッションリソース

カスタム設定を含む、特定の対話のコンテキストです。セッションは、直近でアクティブだったエージェントランタイムに自動的にルーティングされます。

一時的なリソースです。タスクが完了すると、セッションは約 6 時間のアイドル期間に入ります。それ以上のやり取りがない場合、自動的に回収されます。

インタラクションフロー

image

フロー

  1. エージェント分離:エージェントリソースは、RAM ユーザーレベルで厳密なテナント分離を適用します。ターゲットリソースと一致しない AgentId を持つリクエストは拒否されます。

  2. セッションとランタイムの分離:CreateDataAgentSession 操作は論理的なセッションリソースを作成し、エージェントランタイムがまだ実行されていない場合は起動します。実際の計算は SendChatMessage によってトリガーされます。

  3. 非同期処理:SendChatMessage は非同期操作です。API 呼び出しが成功しても、それはメッセージが処理のためにキューに追加されたことを意味するにすぎません。Data Agent はバックグラウンドでメッセージを処理します。


コールフローと状態管理

完全なコールフロー

次のフローは、新しい会話の開始と、既存のセッションでのフォローアップメッセージの送信の両方を対象としています:

  1. 有効な SessionId があるかどうかを確認します。ない場合は、CreateDataAgentSession を呼び出して SessionId と AgentId を取得します。

  2. DescribeDataAgentSession を呼び出して現在のステータスを確認します。

  3. AgentStatus に基づいて分岐します:

    • STARTING:エージェントが起動中です。2 ~ 3 秒待機し、手順 2 を再試行します。

    • RUNNING:エージェントの準備ができています。手順 4 で SessionStatus を確認します。

    • STOPPED:エージェントは回収されました。手順 1 に戻り、新しいセッションを作成します。

  4. SessionStatus に基づいて分岐します:

    • INIT または IDLE:セッションはアイドル状態で、メッセージを受け付ける準備ができています。手順 5 に進みます。

    • RUNNING:前のメッセージはまだ処理中です。待機するか、GetChatContent を呼び出して現在の結果を取得します。

    • UNAVAILABLE:セッションは期限切れです。手順 1 に戻り、新しいセッションを作成します。

  5. SendChatMessage を呼び出してメッセージを送信し、MessageId を取得します。

  6. 完全なレスポンスを受信するまで、GetChatContent をポーリングします。

説明

基本原則:メッセージを送信する前に、必ずステータスを確認してください。ステータスが異常な場合はセッションを再作成します。ステータスが正常な場合は送信します。

既存のセッションでのフォローアップメッセージの送信

既存のセッションでフォローアップメッセージを送信する場合、新しいセッションを作成する必要はありません。ただし、事前にセッションステータスを確認する必要があります:

  1. DescribeDataAgentSession を呼び出し、AgentStatus が RUNNING で、SessionStatus が IDLE であることを確認します。

  2. SendChatMessage を呼び出してメッセージを送信します。

  3. レスポンスを取得するために、GetChatContent をポーリングします。

フォローアップのやり取りは、次の 2 つに分類されます:

  • ユーザー起点のフォローアップ:エージェントが分析を完了した後に、新しい質問をします。

  • エージェントのプロンプトへの応答:Data Agent は、データソースのアップロードや追加情報の提供を求めるなど、先回りして質問する場合があります。SendChatMessage で回答を送信します。

重要

Data Agent のプロンプトに応答する場合は、SendChatMessageMessageType パラメーターを additional に設定し、Question パラメーターにエージェントのプロンプトの原文を設定します。エージェントのプロンプトは SSE ストリームに表示されます。解析の詳細については、「GetChatContent API ドキュメント」をご参照ください。

クイックリファレンス

シナリオ

API

前提条件

新しい会話の開始

CreateDataAgentSession

なし

セッションステータスの確認

DescribeDataAgentSession

なし

メッセージの送信

SendChatMessage

AgentStatus = RUNNING かつ SessionStatus = INIT または IDLE

レスポンスの取得

GetChatContent

SessionStatus が UNAVAILABLE ではない

説明

GetChatContent はレジューム可能な取得をサポートしています。呼び出しが中断された場合は、同じ SessionId と Checkpoint パラメーターを指定して、中断した位置から再開します。

ポーリング戦略

エージェントの準備完了を待機する (DescribeDataAgentSession をポーリングする)

  • ポーリングを開始する前に 1 ~ 2 秒待機します。

  • ポーリング間隔は 2 ~ 3 秒に設定します。

  • エージェントは通常、数秒以内に起動します。

  • 2 分経過してもエージェントの準備が完了しない場合は、アラートをログに記録し、原因を調査します。

レスポンスを取得する (GetChatContent をポーリングする)

  • ユースケースに応じてポーリング間隔を調整します。ほとんどのシナリオでは、1 ~ 2 秒の間隔が適しています。

事前準備

アクセス許可の設定

OpenAPI 呼び出しを成功させるには、RAM ユーザーまたはロールに次の最小アクセス許可セットを付与してください。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dms:CreateDataAgentSession",
        "dms:DescribeDataAgentSession",
        "dms:SendChatMessage",
        "dms:GetChatContent",
        "dms:DescribeFileUploadSignature",
        "dms:FileUploadCallback",
        "dms:DeleteFileUpload",
        "dms:ListFileUpload"
      ],
      "Resource": "*"
    }
  ]
}

DMSUnit パラメーターの取得

CreateDataAgentSession API の DMSUnit パラメーターは、DMS メタデータ管理のためのデータ処理リージョンを指定します。これは、Alibaba Cloud リージョン (RegionCode) とは異なります。各 Alibaba Cloud アカウントは単一の DMSUnit に関連付けられており、DMS は管理対象のデータベースインスタンスのメタデータを、対応するメタデータデータベースに保存します。

データ処理リージョンを取得するには、DMS 5.0 にログオンし、ページの右上隅でデータ処理リージョンを確認します。このフィールドが表示されない場合、デフォルト値は cn-hangzhou です。

重要

DMSUnit の値が正しくないと、データベース分析が失敗する可能性があります。このパラメーターを渡す前に、データ処理リージョンを必ず確認してください。

SDK 依存関係の設定

このガイドでは、Java SDK を使用した例を紹介します。Java SDK には、さまざまなユースケースに対応する非同期バージョンと同期バージョンの両方が用意されています。

  • 非同期 SDK (会話型インタラクションに推奨):ストリーミングデータ処理に適しています。

    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>alibabacloud-dms20250414</artifactId>
        <version>1.0.4</version> <!-- 最新バージョンを使用してください -->
    </dependency>
    
  • 同期 SDK (ファイル管理に推奨):アップロード署名の取得など、標準的なリクエスト/レスポンス操作に適しています。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>alibabacloud-dms20250414</artifactId>
      <version>1.8.2</version> <!-- 最新バージョンを使用してください -->
    <dependency>
    

主要なユースケース

マルチターン対話

このセクションでは、非同期 SDK を使用して完全な対話型インタラクションを実装する方法について説明します。

  • クライアントの初期化:

    import com.aliyun.auth.credentials.Credential;
    import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
    import com.aliyun.dms20250414.AsyncClient;
    import darabonba.core.client.ClientOverrideConfiguration;
    import darabonba.core.enums.SignatureVersion;
    import darabonba.core.srv.Configuration;
    
    // ...
    
    StaticCredentialProvider provider = StaticCredentialProvider.create(
        Credential.builder()
            .accessKeyId("YOUR_ACCESS_KEY_ID")
            .accessKeySecret("YOUR_ACCESS_KEY_SECRET")
            .build()
    );
    
    AsyncClient client = AsyncClient.builder()
            .region("cn-hangzhou") // リージョン ID
            .credentialsProvider(provider)
            .serviceConfiguration(Configuration.create()
                    .setSignatureVersion(SignatureVersion.V3)
            )
            .overrideConfiguration(
                    ClientOverrideConfiguration.create()
                            .setProtocol("HTTPS")
                            .setEndpointOverride("dms.cn-hangzhou.aliyuncs.com")
            )
            .build();
  • コード例:次のコードは、セッションの作成、ステータスのポーリング、メッセージの送信、ストリーミングレスポンスの受信という完全なワークフローを示しています。

    import com.aliyun.dms20250414.models.*;
    import com.aliyun.common.utils.StringUtils;
    import com.google.gson.Gson;
    import java.util.concurrent.CompletableFuture;
    
    // ... クライアントは初期化済みと仮定
    
    // ステップ 1:セッションの作成
    CreateDataAgentSessionRequest request = CreateDataAgentSessionRequest.builder()
        .DMSUnit("cn-hangzhou") // DMS ユニット識別子、通常はリージョンと同じ
        .title("test-session")  // セッションのタイトル
        .build();
    
    CompletableFuture<CreateDataAgentSessionResponse> future = client.createDataAgentSession(request);
    CreateDataAgentSessionResponseBody.Data data = future.get().getBody().getData();
    
    String agentId = data.getAgentId();
    String sessionId = data.getSessionId();
    String agentStatus = data.getAgentStatus();
    
    System.out.println("Session created. SessionId: " + sessionId + ", AgentId: " + agentId);
    
    // ステップ 2:エージェントランタイムの準備が完了するまでポーリング
    // 注:初回の起動には時間がかかる場合があります。適切なタイムアウトとポーリング間隔 (1 秒以上を推奨) を設定してください。
    while (!StringUtils.equalsIgnoreCase(agentStatus, "running")) {
        DescribeDataAgentSessionRequest req = DescribeDataAgentSessionRequest.builder()
            .DMSUnit("cn-hangzhou")
            .sessionId(sessionId)
            .build();
        
        DescribeDataAgentSessionResponse resp = client.describeDataAgentSession(req).get();
        agentStatus = resp.getBody().getData().getAgentStatus();
        System.out.println("Current status: " + agentStatus);
        Thread.sleep(1000);
    }
    
    System.out.println("Agent is RUNNING. Ready to send message.");
    
    // ステップ 3:ユーザーメッセージの送信
    SendChatMessageRequest msgReq = SendChatMessageRequest.builder()
        .DMSUnit("cn-hangzhou")
        .agentId(agentId)
        .sessionId(sessionId)
        .messageType("primary") // これは固定値です。
        .message("你会跳舞吗?")   // ユーザー入力
        .build();
    
    client.sendChatMessage(msgReq).get(); // メッセージが正常に送信されたことのみを確認する必要があります。
    
    System.out.println("Message sent. Waiting for response stream...");
    
    // ステップ 4:ストリーミングレスポンス (SSE) の受信
    GetChatContentRequest contentReq = GetChatContentRequest.builder()
        .DMSUnit("cn-hangzhou")
        .agentId(agentId)
        .sessionId(sessionId)
        .build();
    
    // ResponseIterable を使用して、Server-Sent Events (SSE) 経由のストリーミング読み取りをサポートします。
    ResponseIterable<GetChatContentResponseBody> stream = 
        client.getChatContentWithResponseIterable(contentReq);
    
    for (GetChatContentResponseBody event : stream) {
        System.out.println("Received chunk: " + new Gson().toJson(event));
        // event.getData().getContent() などのフィールドを処理します。
    }
    
    System.out.println("\n--- End of Stream ---");
    System.out.println("Full response: " + fullResponse.toString());
    
    // (オプション) ステップ 5:エージェントが生成したアーティファクト (レポートなど) の取得
    
    ListFileUploadRequest listFileUploadRequest = ListFileUploadRequest.builder()
            .sessionId(sessionId)
            .fileCategory("WebReport")
            .build();
    
    CompletableFuture<ListFileUploadResponse> response = client.listFileUpload(listFileUploadRequest);
    ListFileUploadResponse listFileUploadResponse = response.get();
    System.out.println((listFileUploadResponse.getBody().getData().get(0).getDownloadLink()));
    
    client.close();
    

ファイルのアップロードと管理

このセクションでは、同期 SDK を使用してファイルをアップロード、確認、削除し、Data エージェントが分析するためのデータを提供する方法について説明します。

プロセスの概要
  1. 署名の取得:DescribeFileUploadSignature API を呼び出して、OSS への直接アップロードに必要な一時的な認証情報と設定を取得します。

  2. ファイルのアップロード:HTTP クライアントを使用して multipart/form-data POST リクエストを構築し、署名で指定された OSS アドレスにファイルを直接アップロードします。

  3. アップロードの確認:ファイルが正常にアップロードされた後、FileUploadCallback API を呼び出して DMS サービスに通知し、FileId を取得します。

  4. (オプション) ファイルの削除:FileId を指定して DeleteFileUpload API を呼び出し、アップロードされたファイルを削除します。

詳細なプロセス
  • DescribeFileUploadSignature を呼び出して署名を取得

    Config config = new Config()
      .setAccessKeyId("**********")
      .setAccessKeySecret("**********")
      .setEndpoint("dms.cn-hangzhou.aliyuncs.com")
      .setRegionId("cn-hangzhou");
    
    // DMS クライアントインスタンスを作成します。
    com.aliyun.dms20250414.Client client = new com.aliyun.dms20250414.Client(config);
    
    // ステップ 1:ファイルのアップロード署名情報を取得します。
    // describeFileUploadSignature メソッドを呼び出して、OSS アップロードに必要な署名と設定情報を取得します。
    DescribeFileUploadSignatureRequest request = new DescribeFileUploadSignatureRequest();
    DescribeFileUploadSignatureResponse response = client.describeFileUploadSignature(request);
    
    // response.getBody().getData() は、後続のファイルアップロードに必要な次の情報を返します。
    // ossCredential
    // ossDate
    // ossSecurityToken
    // ossSignature
    // ossSignatureVersion
    // policy
    // uploadDir
    // uploadHost
  • 署名情報を使用してファイルをアップロード

    • コード例:

      import okhttp3.*;
      import java.io.File;
      import java.io.IOException;
      
      /**
        * <dependency>
        *     <groupId>com.squareup.okhttp3</groupId>
        *     <artifactId>okhttp</artifactId>
        *     <version>4.12.0</version>
        * </dependency>
        */
      public class Main {
      
          public static void main(String[] args) throws IOException {
              OkHttpClient client = new OkHttpClient();
      
              // 次の変数は、DescribeFileUploadSignature API から返される値のプレースホルダーです。
              String policy = "eyJjb25kaXRpb25zIjpbeyJ4LW9zcy1jcmVkZW50aWFsIjoiU1RTLk5aZXdMdlN5SFRzdURFRGprSlh4VFF3YjgvMjAyNjAxMDMvY24taGFuZ3pob3Uvb3NzL2FsaXl1bl92NF9yZXF1ZXN0In0seyJ4LW9zcy1kYXRlIjoiMjAyNjAxMDNUMDYzN**********************************";
              String signature = "623e53b1d07431d17cd60389329de2906882d8c4eb****************";
              String signatureVersion = "OSS4-HMAC-SHA256";
              String credential = "STS.NZewLvSy**********/20260103/cn-hangzhou/oss/aliyun_v4_request";
              String date = "20260103T063703Z";
              String securityToken = "CAIS4gJ1q6Ft5B2yfSjIr5nQPPbCvqZp47GeRmP1jmsfVPd4vrLJ2jz2IHhMdXlrCOgYt/8xnG1V6f8flrJ/ToQAX0HfatZq5ZkS9AqnaoXM/te496IFg5D9r6Jc9c6gjqHoeOzcYI73WJXEMiLp9EJaxb/9ak/RPTiMOoGIjphKd8keWhLCAxNNGNZRIHkJyqZYTwyzU8ygKRn3mGHdIVN1sw5n8wNF5L+439eX52i17jS46JdM/9ysesH5NpQxbMwkDYnk5oEsKPqdihw3wgNR6aJ7gJZD/Tr6pdyHCzFTmU7ea7uEqYw3clYiOPBnRvEd8eKPnPl5q/HVm4Hs0wxKNuxOSCXZS4yp3MLeH+ekJgOGwWFHz9qnOLmtQXqV22tMCRpzXIiaZEa91greI6iNW+Ory74mxSFbrz3ZP4yv+o+Yv3QbMVumcySkKVbBbVvnv0R8GNsIC2lMUbp+hsgbbvFuG2QagAFh1H7d9Oe4VqNEu9A77lsl40KWoyVULPdbT+3fFlpd4s/gDL2lRdm1pTK60pwHPCp8LEI9sYOuUupKxVeNuCb0xRNOK**************************************************************";
              String key = "data_agent/file_upload/16738266********/20260103T063703Z/b8zokydg5bxg1d*********/date.csv";
              String uploadHost = "https://******.oss-cn-hangzhou.aliyuncs.com";
      
              RequestBody requestBody = new MultipartBody.Builder()
                      .setType(MultipartBody.FORM)
                      .addFormDataPart("success_action_status", "200")
                      .addFormDataPart("policy", policy)
                      .addFormDataPart("x-oss-signature", signature)
                      .addFormDataPart("x-oss-signature-version", signatureVersion)
                      .addFormDataPart("x-oss-credential", credential)
                      .addFormDataPart("x-oss-date", date)
                      .addFormDataPart("key", key)
                      .addFormDataPart("x-oss-security-token", securityToken)
                      .addFormDataPart("file", "date.csv",
                              RequestBody.create(new File("/Downloads/date.csv"), MediaType.parse("text/csv")))
                      .build();
      
              Request request = new Request.Builder()
                      .url(uploadHost)
                      .post(requestBody)
                      .build();
      
              try (Response response = client.newCall(request).execute()) {
                  System.out.println("Response Code: " + response.code());
                  System.out.println("Response Body: " + response.body().string());
              }
          }
      }
      
    • パラメーターの説明:

      パラメーター

      説明

      success_action_status

      int

      200

      必須。

      policy

      string

      eyJjb25kaXRpb25zIjpbeyJ4***********************

      必須。DescribeFileUploadSignature API が返します。

      x-oss-signature

      string

      78dc0f211df15e21e********

      必須。DescribeFileUploadSignature API が返します。

      x-oss-signature-version

      string

      OSS4-HMAC-SHA256

      必須。DescribeFileUploadSignature API が返します。

      x-oss-credential

      string

      STS.NZdn3cJ1UX************/20260101/cn-hangzhou/oss/aliyun_v4_request

      必須。DescribeFileUploadSignature API が返します。

      x-oss-date

      string

      20260101T161427Z

      必須。DescribeFileUploadSignature API が返します。

      x-oss-security-token

      string

      CAIS4gJ1q6Ft5B2yfSjIr5nRJYnXp+5075etelGD3HQjYsoUj****************************

      必須。DescribeFileUploadSignature API が返します。

      key

      string

      data_agent/file_upload/16738266************/20260101T161427Z/80z0lplhacu4***************/date.csv

      必須。ファイルの完全なアップロードパス。このパスは、DescribeFileUploadSignature 応答の UploadDir とファイル名を組み合わせたものです:${UploadDir}/${filename}

      • UploadDir=data_agent/file_upload/16738266************/20260101T161427Z/80z0lplhacu4***************/

      • filename=date.csv

      file

      バイナリ

      @date.csv;type=text/csv

      必須。ファイルのファイル名、バイナリデータ、および MediaType

      • file フィールドは、multipart/form-data リクエストの最後のパートに配置する必要があります。

      • 最大ファイルサイズは 200 MB です。

      • サポートされている形式とその MediaType 値:

        • csv:text/csv

        • xlsx:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

        • xls:application/vnd.ms-excel

    • 実装例 (cURL):

      curl -v \
        -F "success_action_status=200" \
        -F "policy=eyJjb25kaXRpb25zIjpbeyJ4LW9zcy1jcmVkZW50aWFsIjoiU1RTLk5aZG4zY0oxVVhVRnh3Mjh0dm5FOGJ3V3ovMjAyNjAxMDEvY24taGFuZ3pob3Uvb3NzL2FsaXl1bl92NF9yZXF1ZXN0In0seyJ4LW9zcy1kYXRlIjoiMjAyNjAxMDFUMTYxNDI3WiJ9LHsieC1vc3Mtc2VjdXJpdHktdG9rZW4iOiJDQUlTNGdKMXE2RnQ1QjJ5ZlNqSXI1blJKWW5YcCs1MDc1ZXRlbEdEM0hRallzb1VqYkw4bUR6MklIaE1kWGxyQ09nWXQvOHhuRzFWNmY4ZmxySi9Ub1FBWDBIZmF0WnE1WmtTOUFxbmFvWE0vdGU0OTZJRmc1RDlvL2xOdDhHZ2pxSG9lT3pjWUk3M1dKWEVNaUxwOUVKYXhiLzlhay9SUFRpTU9vR****************************************************************************" \
        -F "x-oss-signature=78dc0f211df15e21e675ad3835a0f18f*******************" \
        -F "x-oss-signature-version=OSS4-HMAC-SHA256" \
        -F "x-oss-credential=STS.NZdn3cJ1UXU**************************************/20260101/cn-hangzhou/oss/aliyun_v4_request" \
        -F "x-oss-date=20260101T161427Z" \
        -F "key=data_agent/file_upload/16738266********/20260101T161427Z/80z0lplhacu40***********/date.csv" \
        -F "x-oss-security-token=CAIS4gJ1q6Ft5B2yfSjIr5nRJYnXp+5075etelGD3HQjYsoUjbL8mDz2IHhMdXlrCOgYt/8xnG1V6f8flrJ/ToQAX0HfatZq5ZkS9AqnaoXM/te496IFg5D9o/lNt8GgjqHoeOzcYI73WJXEMiLp9EJaxb/9ak/RPTiMOoGIjphKd8keWhLCAxNNGNZRIHkJyqZYTwyzU8ygKRn3mGHdIVN1sw5n8wNF5L+439eX52i17jS46JdM/9ysesH5NpQxbMwkDYnk5oEsKPqdihw3wgNR6aJ7gJZD/Tr6pdyHCzFTmU7ea7uEqYw3clYiOPBnRvEd8eKPnPl5q/HVm4Hs0wxKNuxOSCXZS4yp3MLeH+ekJgOGwWFHz9qnOLmtQXqV22tMCRpzXIiaJ1W/5/reI6iNW+Ory74mxSFbrz3ZP4yv+o+Yv3QbMVumcySkKVbBbVvnv0R8GNsIC2lMUbp+oQx4pPFuG2QagAFUp8U5qf8WDmpuc7ztSzLSLizgMnGPNbJGjU1dYCd2P0omHZaZyeuTj7QGpX0IW6DuKpvvHS9i/8R8M0dL2ssMsWTeK4wYE6sWXp7SbqM0mZY**************************************" \
        -F "file=@date.csv;type=text/csv" \
        "https://*******.oss-cn-hangzhou.aliyuncs.com"
  • アップロード成功後の確認

    DescribeFileUploadSignatureResponseBody.DescribeFileUploadSignatureResponseBodyData data = response.getBody().getData();
    String filename = "date.csv";
    String uploadLocation = data.getUploadDir() + "/" +  filename;
    
    // ファイルが正常にアップロードされたことを DMS サービスに通知し、ファイル ID を取得します。
    FileUploadCallbackRequest callbackRequest = new FileUploadCallbackRequest();
    callbackRequest.setFilename(filename);              // ファイル名を設定します。
    callbackRequest.setUploadLocation(uploadLocation);  // アップロード場所を設定します。
    
    // コールバックリクエストを送信してファイル ID を取得します。
    FileUploadCallbackResponse callbackResponse = client.fileUploadCallback(callbackRequest);
    System.out.println("Upload successful. File ID: " + callbackResponse.getBody().getData().getFileId());
  • アップロードされたファイルの削除

    // ファイル ID を使用してアップロードされたファイルを削除します。
    DeleteFileUploadRequest request = new DeleteFileUploadRequest();
    request.setFileId(callbackResponse.getBody().getData().getFileId());
    
    DeleteFileUploadResponse response = client.deleteFileUpload(request);
  • 以下は、前述のすべての手順を統合した完全な Java の例です。

    import com.aliyun.dms20250414.models.*;
    import com.aliyun.teaopenapi.models.Config;
    import okhttp3.*;
    
    import java.io.File;
    import java.io.IOException;
    
    /**
     * DMS サービスを使用して OSS にファイルをアップロードする完全なプロセスを示します。
     * プロセスには以下が含まれます:
     * 1. アップロード署名情報の取得。
     * 2. OSS へのファイルのアップロード。
     * 3. 確認のためのアップロードコールバックの送信。
     */
    public class FileUploadExample {
    
        // ローカルファイルパスとアップロード設定を定義します。
        private static final String localFilePath = "/Users/******/Downloads/date.csv";  // ローカルファイルパス
        private static final String filename = "date.csv";                               // ファイル名
    
        public static void main(String[] args) throws Exception {
            // DMS クライアントのパラメーターを設定します。
            Config config = new Config()
                    .setAccessKeyId("********")
                    .setAccessKeySecret("********")
                    .setEndpoint("dms.cn-hangzhou.aliyuncs.com")
                    .setRegionId("cn-hangzhou");
    
            // DMS クライアントインスタンスを作成します。
            com.aliyun.dms20250414.Client client = new com.aliyun.dms20250414.Client(config);
    
            // ステップ 1:ファイルのアップロード署名情報を取得します。
            // describeFileUploadSignature メソッドを呼び出して、OSS アップロードに必要な署名と設定情報を取得します。
            DescribeFileUploadSignatureRequest request = new DescribeFileUploadSignatureRequest();
            DescribeFileUploadSignatureResponse response = client.describeFileUploadSignature(request);
            System.out.println(response.getBody().getData());
    
            // 応答データを解析して、必要なアップロード設定情報を取得します。
            DescribeFileUploadSignatureResponseBody.DescribeFileUploadSignatureResponseBodyData data = response.getBody().getData();
            String uploadLocation = data.getUploadDir() + "/" +  filename;                   // OSS のアップロードパス
    
            // ステップ 2:ファイルを OSS にアップロードします。
            // 取得した署名情報を使用してファイルを OSS にアップロードします。
            int code = doUploadFile(data, filename, localFilePath, uploadLocation);
            
            // アップロードが成功したら、確認のためにコールバックを送信します。
            if (code == 200) {
                // ステップ 3:アップロード成功後、確認のためにコールバックを送信します。
                // ファイルが正常にアップロードされたことを DMS サービスに通知し、ファイル ID を取得します。
                FileUploadCallbackRequest callbackRequest = new FileUploadCallbackRequest();
                callbackRequest.setFilename(filename);              // ファイル名を設定します。
                callbackRequest.setUploadLocation(uploadLocation);  // アップロードパスを設定します。
    
                // コールバックリクエストを送信してファイル ID を取得します。
                FileUploadCallbackResponse callbackResponse = client.fileUploadCallback(callbackRequest);
                
                // アップロード成功後、ファイル ID を出力します。
                System.out.println("Upload successful. File ID: " + callbackResponse.getBody().getData().getFileId());
            } else {
                System.out.println("File upload failed. Status code: " + code);
            }
        }
    
        /**
         * ファイルを OSS にアップロードします。
         * 
         * このメソッドは OkHttp クライアントを使用してファイルを OSS にアップロードします。OSS 署名情報やファイルの詳細などのパラメーターが必要です。
         * 
         * @param data describeFileUploadSignature API から取得した署名データ。
         * @param filename ファイル名。
         * @param fileLocalPath ファイルのローカルパス。
         * @param uploadLocation OSS のアップロードパス。
         * @return アップロードの HTTP ステータスコード。200 は成功を示します。
         * @throws IOException ネットワークまたはファイル操作エラーが発生した場合。
         */
        private static int doUploadFile(DescribeFileUploadSignatureResponseBody.DescribeFileUploadSignatureResponseBodyData data, String filename, String fileLocalPath, String uploadLocation) throws IOException {
            OkHttpClient client = new OkHttpClient();
    
            // OSS アップロードに必要なすべてのパラメーターを含む、マルチパートフォームリクエストボディを構築します。
            RequestBody requestBody = new MultipartBody.Builder()
                    .setType(MultipartBody.FORM)
                    .addFormDataPart("success_action_status", "200")                      // success_action_status を 200 に設定する必要があります。
                    .addFormDataPart("policy", data.getPolicy())                          // 署名ポリシー
                    .addFormDataPart("x-oss-signature", data.getOssSignature())           // OSS 署名
                    .addFormDataPart("x-oss-signature-version", data.getOssSignatureVersion()) // 署名バージョン
                    .addFormDataPart("x-oss-credential", data.getOssCredential())         // 認証情報
                    .addFormDataPart("x-oss-date", data.getOssDate())                     // 日付
                    .addFormDataPart("key", uploadLocation)                               // アップロードパス
                    .addFormDataPart("x-oss-security-token", data.getOssSecurityToken())  // セキュリティトークン
                    .addFormDataPart("file", filename,                                    // ファイルパート
                            RequestBody.create(new File(fileLocalPath), MediaType.parse("text/csv"))) // ファイルリクエストボディを作成します。ファイルの種類に応じてメディアタイプを設定します。
                    .build();
    
            // POST リクエストを構築します。
            Request request = new Request.Builder()
                    .url(data.getUploadHost())  // 返されたアップロードホストアドレスを使用します。
                    .post(requestBody)          // リクエストボディを設定します。
                    .build();
    
            // リクエストを実行し、応答を処理します。
            try (Response response = client.newCall(request).execute()) {
                System.out.println("Upload response code: " + response.code());
                System.out.println("Upload response body: " + response.body().string());
                return response.code();
            }
        }
    }
    重要

    アップロードリクエストを構築する際は、DescribeFileUploadSignature から取得したすべてのフォームフィールドを含めるようにしてください。file フィールドは、multipart/form-data リクエストの最後のパートに配置する必要があります。

    • 最大ファイルサイズ:200 MB。

    • サポートされている形式:CSV、XLSX、XLS。ファイルの種類に基づいて正しい MediaType を設定してください。

API リファレンス

API 名

説明

CreateDataAgentSession

対話セッションを作成し、エージェントランタイムを起動します。

DescribeDataAgentSession

セッションのステータスとメタデータを照会します。

SendChatMessage

セッションにユーザーメッセージを送信します。

GetChatContent

エージェントが生成したコンテンツをストリーミングします (SSE)。

ListFileUpload

ファイルアップロードに関連してエージェントが生成したアーティファクト (レポートを含む) を一覧表示します。

DescribeFileUploadSignature

ファイルアップロード用の署名情報を取得します。

FileUploadCallback

成功したファイルアップロードを確認します。

DeleteFileUpload

アップロードされたファイルを削除します。

CreateDataAgentKnowledgeBase

Data Agent ナレッジベースを作成します。

DeleteDataAgentKnowledgeBase

Data Agent ナレッジベースを削除します。

DescribeKnowledgeBaseStats

ナレッジベースの統計情報を取得します。

ListKnowledgeBases

ナレッジベースを一覧表示します。

DescribeKnowledgeBaseUploadSignature

ナレッジベースにドキュメントをアップロードするための署名を取得します。

UpdateKnowledgeBase

ナレッジベースを更新します。

DeleteDocument

ナレッジベースからドキュメントを削除します。

DescribeDocument

ナレッジベース内のドキュメントの詳細を表示します。

ListDocuments

ナレッジベース内のドキュメントを一覧表示します。

UpdateDocument

ナレッジベース内のドキュメントを更新します。

UploadDocument

ナレッジベースにドキュメントをアップロードします。

DeleteDocumentChunks

ドキュメントチャンクを削除します。

ListDocumentChunks

ドキュメントチャンクを一覧表示します。

UpsertDocumentChunks

ドキュメントチャンクを更新または挿入します。

ListCustomAgent

カスタムエージェントを一覧表示します。

DescribeCustomAgent

カスタムエージェントの詳細を照会します。

CreateCustomAgent

カスタムエージェントを作成します。

DeleteCustomAgent

カスタムエージェントを削除します。

ModifyCustomAgent

カスタムエージェントの設定を変更します。

OperateCustomAgent

カスタムエージェントを有効化または無効化します。

よくある質問

  • Q: 対話のデータソースはどのように指定しますか?
    A: SendChatMessage API の呼び出し時に、データソース情報をパラメーターとして渡します。同じセッション内でデータソースを複数回渡すことで、増分分析を実行できます。



  • Q: カスタムエージェントはどのように使用しますか?
    A: CreateDataAgentSession API の呼び出し時に、カスタム AgentId を渡します。この AgentId は、セッションのライフサイクル中に変更できません。カスタムエージェントは、[コンソール] から作成して取得する必要があります。



  • Q: agentStatus が長時間 STARTING のままの場合はどうすればよいですか?
    A: エージェントランタイムの初回起動には、数秒から数分かかる場合があります。長時間経過してもステータスが RUNNING に変わらない場合は、Alibaba Cloud テクニカルサポートにお問い合わせください。



  • Q: マルチターン対話はどのように実装しますか?
    A: 同じ sessionId を再利用します。ユーザークエリごとに SendChatMessage API を呼び出し、そのターンのレスポンスは GetChatContent API を使用して取得します。



  • Q: ストリーミングレスポンスが中断された場合、または追加の質問をした場合、ストリームをどのように再開できますか?

    A: 最後に受信した checkpoint を記録し、次のリクエストでパラメーターとして渡します。具体的なパラメーターについては、「SendChatMessage OpenAPI ドキュメント」をご参照ください。

  • Q: テキストレポートはどのように取得しますか?

    A: ListFileUpload API を使用して、関連するすべてのアーティファクトを取得します。これには、エージェントランタイムが生成した中間ファイルと、最終的なテキストレポートが含まれます。

  • Q: DMSUnit パラメーターにはどの値を渡せばよいですか?

    A: DMSUnit は DMS のデータ処理リージョンであり、Alibaba Cloud リージョン (RegionCode) ではありません。[コンソール] のページ右上でデータ処理リージョンを確認してください。表示されない場合、デフォルト値は cn-hangzhou です。DMSUnit の値が正しくない場合、データベース分析が失敗する可能性があります。

  • Q: 1 つのセッションに対して、複数のメッセージを同時に送信できますか?

    A: できません。各セッションは一度に 1 つのメッセージのみを処理します。複数のタスクを並列で処理するには、別々のセッションを作成してください。

  • Q: データエージェントのプロンプトにはどのように応答しますか?

    A: SendChatMessage API を使用してレスポンスを送信します。MessageTypeadditional に設定し、Question にはエージェントのプロンプトの原文を設定します。