全部產品
Search
文件中心

Data Management:Data Agent OpenAPI 整合指南

更新時間:Mar 12, 2026

本指南旨在協助開發人員通過 OpenAPI 與Data Agent 服務進行整合。文檔將詳細闡述 Data Agent 的核心架構、API 呼叫流程,並提供針對兩大核心情境的完整代碼實現。

架構概覽

資源模型

DataAgent 服務的運行依賴三個核心抽象層,理解其關係是正確整合的前提:

層級

說明

生命週期管理

Agent 資源

Data Agent 運行所需資源的邏輯記錄,實現子帳號維度租戶隔離。所有操作均需指定 AgentId

自動管理。跟隨運行時周期,最後一個session不活躍之後自動銷毀(通常先靜默1小時)

Agent 運行時

Agent 資源在 Session 啟動後執行個體化的執行環境,負責推理和工具調用。OpenAPI 呼叫者無需直接感知此層。

自動管理。當最後一個關聯的 Session 不活躍(靜默約1小時)後,運行時會自動銷毀以釋放資源。

Session 資源

一次具體對話的上下文,包含對話的自訂配置。Session 會自動調度到最近活躍的 Agent 運行時上執行。

臨時存在。任務完成後進入靜默期(約6小時),若無追問則自動回收。

互動流程

image

流程說明

  1. Agent 隔離:Agent 資源在子帳號維度進行嚴格的租戶隔離。請求中的 AgentId 若與目標資源不匹配,將被直接拒絕。

  2. Session 與 Runtime 分離:CreateDataAgentSession 建立對話會話,僅建立邏輯會話資源,並觸發 Agent 運行時的啟動(如果尚未運行)。實際的計算任務由 SendChatMessage 觸發。

  3. 非同步處理:SendChatMessage 是一個非同步作業。API 呼叫成功僅表示訊息已進入處理隊列,Agent 將在後台進行處理。


前置準備

配置許可權

為確保 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": "*"
    }
  ]
}

配置 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>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") // Region 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;
    
    // ... 假設 client 已初始化
    
    // 步驟 1: 建立會話
    CreateDataAgentSessionRequest request = CreateDataAgentSessionRequest.builder()
        .DMSUnit("cn-hangzhou") // DMS 單元標識,通常與 region 一致
        .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: 輪詢等待 Agent 運行時就緒
    // 注意:初次開機可能耗時較長,請設定合理的逾時和輪詢間隔(建議 ≥1s)。
    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 支援 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: 擷取 Agent 運行產物(如報告)
    
    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 Agent 提供分析資料。

流程概述
  1. 擷取簽名:調用 DescribeFileUploadSignature 擷取直傳 OSS 所需的臨時憑證和配置。

  2. 上傳檔案:使用 HTTP用戶端,構造 multipart/form-data POST 請求,將檔案直傳到簽名中指定的 OSS 地址。

  3. 上傳回調:檔案上傳成功後,必須調用 FileUploadCallback 通知 DMS 服務,以擷取 FileId

  4. (可選) 刪除檔案:使用 FileId 調用 DeleteFileUpload 刪除已上傳的檔案。

流程詳解
  • 調用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);
    
    // 第一步:擷取檔案上傳簽名資訊
    // 通過調用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介面出參返回
              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介面出參會返回

      x-oss-signature

      string

      78dc0f211df15e21e********

      必填,DescribeFileUploadSignature介面出參會返回

      x-oss-signature-version

      string

      OSS4-HMAC-SHA256

      必填,DescribeFileUploadSignature介面出參會返回

      x-oss-credential

      string

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

      必填,DescribeFileUploadSignature介面出參會返回

      x-oss-date

      string

      20260101T161427Z

      必填,DescribeFileUploadSignature介面出參會返回

      x-oss-security-token

      string

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

      必填,DescribeFileUploadSignature介面出參會返回

      key

      string

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

      必填,檔案上傳的完整路徑,DescribeFileUploadSignature介面出參UploadDir拼接上檔案名稱:${UploadDir}/${檔案名稱}

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

      • 檔案名稱=date.csv

      file

      string

      @date.csv;type=text/csv

      必填,檔案名稱、位元據、檔案MediaType,當前僅支援csv、xlsx、xls檔案格式

      • file必須作為最後一個參數

      • 檔案大小上限為200MB

      • 僅支援csv、xlsx、xls檔案格式,MediaType如下

        • csv:text/csv

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

        • xls:application/vnd.ms-excel

    • 實現樣本:

      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 = "data.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("上傳成功,檔案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);
    
            // 第一步:擷取檔案上傳簽名資訊
            // 通過調用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中的上傳路徑
    
            // 第二步:執行檔案上傳到OSS
            // 使用擷取到的簽名資訊,將檔案上傳到OSS
            int code = doUploadFile(data, filename, localFilePath, uploadLocation);
            
            // 上傳成功後,發送回調確認
            if (code == 200) {
                // 第三步:上傳成功後發送回調確認
                // 通知DMS服務檔案已成功上傳,擷取檔案ID
                FileUploadCallbackRequest callbackRequest = new FileUploadCallbackRequest();
                callbackRequest.setFilename(filename);              // 設定檔案名稱
                callbackRequest.setUploadLocation(uploadLocation);  // 設定上傳路徑
    
                // 發送回調請求,擷取檔案ID
                FileUploadCallbackResponse callbackResponse = client.fileUploadCallback(callbackRequest);
                
                // 列印上傳成功後的檔案ID
                System.out.println("上傳成功,檔案ID: " + callbackResponse.getBody().getData().getFileId());
            } else {
                System.out.println("檔案上傳失敗,狀態代碼: " + code);
            }
        }
    
        /**
         * 執行檔案上傳到OSS
         * 
         * 該方法使用OkHttp用戶端將檔案上傳到OSS,需要提供OSS簽名資訊、檔案資訊等參數
         * 
         * @param data 從describeFileUploadSignature介面擷取的簽名資料
         * @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("上傳響應碼: " + response.code());
                System.out.println("上傳響應體: " + response.body().string());
                return response.code();
            }
        }
    }
    重要

    在構造上傳請求時,請確保所有從 DescribeFileUploadSignature 擷取的表單欄位都已包含,且 file 欄位必須是 multipart/form-data 請求的最後一個部分。

    • 檔案大小上限:200MB。

    • 支援格式:CSV, XLSX, XLS。請根據檔案類型設定正確的 MediaType

API 參考

API 名稱

功能

CreateDataAgentSession

建立對話會話,觸發 Agent 運行時啟動

DescribeDataAgentSession

查詢工作階段狀態與元資訊

SendChatMessage

向會話發送使用者訊息

GetChatContent

流式拉取 Agent 產生內容 (SSE)

ListFileUpload

擷取 Agent 產物(含報告)

DescribeFileUploadSignature

擷取上傳檔案的簽名資訊

FileUploadCallback

上傳檔案成功後回調

DeleteFileUpload

刪除已上傳的檔案

常見問題

  • Q:如何為對話指定資料來源?
    A:在調用 SendChatMessage 時,通過其參數傳入資料來源資訊。同一 Session 內可多次傳入,以實現資料追加分析。

  • Q:如何使用自訂 Agent?
    A:在調用 CreateDataAgentSession 時,傳入您的自訂 AgentId。該 AgentId 在會話生命週期內不可更改。自訂 Agent 同樣需要通過控制台建立和擷取。

  • Q:agentStatus 狀態長時間處於 STARTING 怎麼辦?
    A:Agent 運行時初次開機可能需要數秒到數分鐘。如果長時間未變為 RUNNING,請聯絡阿里雲支援人員。

  • Q:如何?多輪對話?
    A: 複用同一個 sessionId。每次使用者提問都調用一次 SendChatMessage,然後通過 GetChatContent 擷取該輪對話的響應。

  • Q:流式響應中斷/追加提問怎麼繼續擷取流式響應?

    A:可記錄最後收到的 checkpoint,下次請求時作為參數傳入,具體參數參考 SendChatMessageOpenAPI 文檔。

  • Q:如何擷取文字報告?

    A:通過ListFileUpload介面可以擷取所有相關的產物,包括Agent啟動並執行中間檔案產物,以及產出的文字報告。