このガイドでは、開発者が OpenAPI を使用してデータエージェントサービスと統合する方法を説明します。また、データエージェントのコアアーキテクチャと API 呼び出しのワークフローを解説し、2 つの主要なユースケースに対応した完全なコード実装を提供します。
アーキテクチャの概要
リソースモデル
Data Agent サービスは、3 つの主要な抽象化レイヤーで構成されています。統合を成功させるには、これらの関係を理解することが不可欠です。
レイヤー | 説明 | ライフサイクル管理 |
エージェントリソース | Data Agent の実行コンテキストをカプセル化する論理リソースであり、RAM ユーザーレベルでのテナント分離を提供します。すべての操作で | 自動的に管理されます。ランタイムのライフサイクルに従い、最後のセッションが非アクティブになった後に破棄されます (通常、1 時間のアイドル期間後)。 |
エージェントランタイム | セッション開始時にエージェントリソースからインスタンス化される実行環境です。推論とツールコールを担当します。OpenAPI の呼び出し元は、このレイヤーと直接やり取りする必要はありません。 | 自動的に管理されます。最後に関連付けられたセッションが非アクティブになると、リソースを解放するために破棄されます (通常、1 時間のアイドル期間後)。 |
セッションリソース | カスタム設定を含む、特定の対話のコンテキストです。セッションは、直近でアクティブだったエージェントランタイムに自動的にルーティングされます。 | 一時的なリソースです。タスクが完了すると、セッションは約 6 時間のアイドル期間に入ります。それ以上のやり取りがない場合、自動的に回収されます。 |
インタラクションフロー

フロー
エージェント分離:エージェントリソースは、RAM ユーザーレベルで厳密なテナント分離を適用します。ターゲットリソースと一致しない
AgentIdを持つリクエストは拒否されます。セッションとランタイムの分離:
CreateDataAgentSession操作は論理的なセッションリソースを作成し、エージェントランタイムがまだ実行されていない場合は起動します。実際の計算はSendChatMessageによってトリガーされます。非同期処理:
SendChatMessageは非同期操作です。API 呼び出しが成功しても、それはメッセージが処理のためにキューに追加されたことを意味するにすぎません。Data Agent はバックグラウンドでメッセージを処理します。
コールフローと状態管理
完全なコールフロー
次のフローは、新しい会話の開始と、既存のセッションでのフォローアップメッセージの送信の両方を対象としています:
有効な SessionId があるかどうかを確認します。ない場合は、
CreateDataAgentSessionを呼び出して SessionId と AgentId を取得します。DescribeDataAgentSessionを呼び出して現在のステータスを確認します。AgentStatus に基づいて分岐します:
STARTING:エージェントが起動中です。2 ~ 3 秒待機し、手順 2 を再試行します。RUNNING:エージェントの準備ができています。手順 4 で SessionStatus を確認します。STOPPED:エージェントは回収されました。手順 1 に戻り、新しいセッションを作成します。
SessionStatus に基づいて分岐します:
INITまたはIDLE:セッションはアイドル状態で、メッセージを受け付ける準備ができています。手順 5 に進みます。RUNNING:前のメッセージはまだ処理中です。待機するか、GetChatContentを呼び出して現在の結果を取得します。
SendChatMessageを呼び出してメッセージを送信し、MessageId を取得します。完全なレスポンスを受信するまで、
GetChatContentをポーリングします。
基本原則:メッセージを送信する前に、必ずステータスを確認してください。ステータスが異常な場合はセッションを再作成します。ステータスが正常な場合は送信します。
既存のセッションでのフォローアップメッセージの送信
既存のセッションでフォローアップメッセージを送信する場合、新しいセッションを作成する必要はありません。ただし、事前にセッションステータスを確認する必要があります:
DescribeDataAgentSessionを呼び出し、AgentStatus がRUNNINGで、SessionStatus がIDLEであることを確認します。SendChatMessageを呼び出してメッセージを送信します。レスポンスを取得するために、
GetChatContentをポーリングします。
フォローアップのやり取りは、次の 2 つに分類されます:
ユーザー起点のフォローアップ:エージェントが分析を完了した後に、新しい質問をします。
エージェントのプロンプトへの応答:Data Agent は、データソースのアップロードや追加情報の提供を求めるなど、先回りして質問する場合があります。
SendChatMessageで回答を送信します。
Data Agent のプロンプトに応答する場合は、SendChatMessage の MessageType パラメーターを additional に設定し、Question パラメーターにエージェントのプロンプトの原文を設定します。エージェントのプロンプトは SSE ストリームに表示されます。解析の詳細については、「GetChatContent API ドキュメント」をご参照ください。
クイックリファレンス
シナリオ | API | 前提条件 |
新しい会話の開始 |
| なし |
セッションステータスの確認 |
| なし |
メッセージの送信 |
| AgentStatus = RUNNING かつ SessionStatus = INIT または IDLE |
レスポンスの取得 |
| 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 エージェントが分析するためのデータを提供する方法について説明します。
プロセスの概要
署名の取得:
DescribeFileUploadSignatureAPI を呼び出して、OSS への直接アップロードに必要な一時的な認証情報と設定を取得します。ファイルのアップロード:HTTP クライアントを使用して
multipart/form-dataPOST リクエストを構築し、署名で指定された OSS アドレスにファイルを直接アップロードします。アップロードの確認:ファイルが正常にアップロードされた後、
FileUploadCallbackAPI を呼び出して DMS サービスに通知し、FileIdを取得します。(オプション) ファイルの削除:
FileIdを指定してDeleteFileUploadAPI を呼び出し、アップロードされたファイルを削除します。
詳細なプロセス
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_statusint
200
必須。
policystring
eyJjb25kaXRpb25zIjpbeyJ4***********************
必須。DescribeFileUploadSignature API が返します。
x-oss-signaturestring
78dc0f211df15e21e********
必須。DescribeFileUploadSignature API が返します。
x-oss-signature-versionstring
OSS4-HMAC-SHA256
必須。DescribeFileUploadSignature API が返します。
x-oss-credentialstring
STS.NZdn3cJ1UX************/20260101/cn-hangzhou/oss/aliyun_v4_request
必須。DescribeFileUploadSignature API が返します。
x-oss-datestring
20260101T161427Z
必須。DescribeFileUploadSignature API が返します。
x-oss-security-tokenstring
CAIS4gJ1q6Ft5B2yfSjIr5nRJYnXp+5075etelGD3HQjYsoUj****************************
必須。DescribeFileUploadSignature API が返します。
keystring
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 名 | 説明 |
対話セッションを作成し、エージェントランタイムを起動します。 | |
セッションのステータスとメタデータを照会します。 | |
セッションにユーザーメッセージを送信します。 | |
エージェントが生成したコンテンツをストリーミングします (SSE)。 | |
ファイルアップロードに関連してエージェントが生成したアーティファクト (レポートを含む) を一覧表示します。 | |
ファイルアップロード用の署名情報を取得します。 | |
成功したファイルアップロードを確認します。 | |
アップロードされたファイルを削除します。 | |
Data Agent ナレッジベースを作成します。 | |
Data Agent ナレッジベースを削除します。 | |
ナレッジベースの統計情報を取得します。 | |
ナレッジベースを一覧表示します。 | |
ナレッジベースにドキュメントをアップロードするための署名を取得します。 | |
ナレッジベースを更新します。 | |
ナレッジベースからドキュメントを削除します。 | |
ナレッジベース内のドキュメントの詳細を表示します。 | |
ナレッジベース内のドキュメントを一覧表示します。 | |
ナレッジベース内のドキュメントを更新します。 | |
ナレッジベースにドキュメントをアップロードします。 | |
ドキュメントチャンクを削除します。 | |
ドキュメントチャンクを一覧表示します。 | |
ドキュメントチャンクを更新または挿入します。 | |
カスタムエージェントを一覧表示します。 | |
カスタムエージェントの詳細を照会します。 | |
カスタムエージェントを作成します。 | |
カスタムエージェントを削除します。 | |
カスタムエージェントの設定を変更します。 | |
カスタムエージェントを有効化または無効化します。 |
よくある質問
Q: 対話のデータソースはどのように指定しますか?
A:SendChatMessageAPI の呼び出し時に、データソース情報をパラメーターとして渡します。同じセッション内でデータソースを複数回渡すことで、増分分析を実行できます。Q: カスタムエージェントはどのように使用しますか?
A:CreateDataAgentSessionAPI の呼び出し時に、カスタムAgentIdを渡します。このAgentIdは、セッションのライフサイクル中に変更できません。カスタムエージェントは、[コンソール] から作成して取得する必要があります。Q:
agentStatusが長時間STARTINGのままの場合はどうすればよいですか?
A: エージェントランタイムの初回起動には、数秒から数分かかる場合があります。長時間経過してもステータスがRUNNINGに変わらない場合は、Alibaba Cloud テクニカルサポートにお問い合わせください。Q: マルチターン対話はどのように実装しますか?
A: 同じsessionIdを再利用します。ユーザークエリごとにSendChatMessageAPI を呼び出し、そのターンのレスポンスはGetChatContentAPI を使用して取得します。Q: ストリーミングレスポンスが中断された場合、または追加の質問をした場合、ストリームをどのように再開できますか?
A: 最後に受信した
checkpointを記録し、次のリクエストでパラメーターとして渡します。具体的なパラメーターについては、「SendChatMessageOpenAPI ドキュメント」をご参照ください。Q: テキストレポートはどのように取得しますか?
A:
ListFileUploadAPI を使用して、関連するすべてのアーティファクトを取得します。これには、エージェントランタイムが生成した中間ファイルと、最終的なテキストレポートが含まれます。Q: DMSUnit パラメーターにはどの値を渡せばよいですか?
A: DMSUnit は DMS のデータ処理リージョンであり、Alibaba Cloud リージョン (RegionCode) ではありません。[コンソール] のページ右上でデータ処理リージョンを確認してください。表示されない場合、デフォルト値は
cn-hangzhouです。DMSUnit の値が正しくない場合、データベース分析が失敗する可能性があります。Q: 1 つのセッションに対して、複数のメッセージを同時に送信できますか?
A: できません。各セッションは一度に 1 つのメッセージのみを処理します。複数のタスクを並列で処理するには、別々のセッションを作成してください。
Q: データエージェントのプロンプトにはどのように応答しますか?
A:
SendChatMessageAPI を使用してレスポンスを送信します。MessageTypeをadditionalに設定し、Questionにはエージェントのプロンプトの原文を設定します。