本指南旨在協助開發人員通過 OpenAPI 與Data Agent 服務進行整合。文檔將詳細闡述 Data Agent 的核心架構、API 呼叫流程,並提供針對兩大核心情境的完整代碼實現。
架構概覽
資源模型
DataAgent 服務的運行依賴三個核心抽象層,理解其關係是正確整合的前提:
層級 | 說明 | 生命週期管理 |
Agent 資源 | Data Agent 運行所需資源的邏輯記錄,實現子帳號維度租戶隔離。所有操作均需指定 | 自動管理。跟隨運行時周期,最後一個session不活躍之後自動銷毀(通常先靜默1小時) |
Agent 運行時 | Agent 資源在 Session 啟動後執行個體化的執行環境,負責推理和工具調用。OpenAPI 呼叫者無需直接感知此層。 | 自動管理。當最後一個關聯的 Session 不活躍(靜默約1小時)後,運行時會自動銷毀以釋放資源。 |
Session 資源 | 一次具體對話的上下文,包含對話的自訂配置。Session 會自動調度到最近活躍的 Agent 運行時上執行。 | 臨時存在。任務完成後進入靜默期(約6小時),若無追問則自動回收。 |
互動流程

流程說明
Agent 隔離:Agent 資源在子帳號維度進行嚴格的租戶隔離。請求中的
AgentId若與目標資源不匹配,將被直接拒絕。Session 與 Runtime 分離:
CreateDataAgentSession建立對話會話,僅建立邏輯會話資源,並觸發 Agent 運行時的啟動(如果尚未運行)。實際的計算任務由SendChatMessage觸發。非同步處理:
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 提供分析資料。
流程概述
擷取簽名:調用
DescribeFileUploadSignature擷取直傳 OSS 所需的臨時憑證和配置。上傳檔案:使用 HTTP用戶端,構造
multipart/form-dataPOST 請求,將檔案直傳到簽名中指定的 OSS 地址。上傳回調:檔案上傳成功後,必須調用
FileUploadCallback通知 DMS 服務,以擷取FileId。(可選) 刪除檔案:使用
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_statusint
200
必填
policystring
eyJjb25kaXRpb25zIjpbeyJ4***********************
必填,DescribeFileUploadSignature介面出參會返回
x-oss-signaturestring
78dc0f211df15e21e********
必填,DescribeFileUploadSignature介面出參會返回
x-oss-signature-versionstring
OSS4-HMAC-SHA256
必填,DescribeFileUploadSignature介面出參會返回
x-oss-credentialstring
STS.NZdn3cJ1UX************/20260101/cn-hangzhou/oss/aliyun_v4_request
必填,DescribeFileUploadSignature介面出參會返回
x-oss-datestring
20260101T161427Z
必填,DescribeFileUploadSignature介面出參會返回
x-oss-security-tokenstring
CAIS4gJ1q6Ft5B2yfSjIr5nRJYnXp+5075etelGD3HQjYsoUj****************************
必填,DescribeFileUploadSignature介面出參會返回
keystring
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
filestring
@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 名稱 | 功能 |
建立對話會話,觸發 Agent 運行時啟動 | |
查詢工作階段狀態與元資訊 | |
向會話發送使用者訊息 | |
流式拉取 Agent 產生內容 (SSE) | |
擷取 Agent 產物(含報告) | |
擷取上傳檔案的簽名資訊 | |
上傳檔案成功後回調 | |
刪除已上傳的檔案 |
常見問題
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啟動並執行中間檔案產物,以及產出的文字報告。