Chat API は DAS Agent 用の非同期インターフェイスで、ナレッジベースの Q&A、パフォーマンス診断、複数ターンの会話をサポートします。エージェントの推論プロセスと最終的な回答をサーバー送信イベント (SSE) ストリームとして返します。本トピックでは、Java、Python、Go の SDK を使用して Chat API を統合する方法について、SSE イベントの解析と複数ターンの会話の完全な例を交えて説明します。
前提条件
DAS Agent が有効化され、マネージドインスタンスのリージョンが DAS Agent の国またはリージョンと一致していること。インスタンスが DAS Agent にバインドされていること。
Alibaba Cloud DAS SDK の最新バージョンがインストールされていること。
リージョンが
cn-shanghaiに、エンドポイントがdas.cn-shanghai.aliyuncs.comに設定されていること。ALIBABA_CLOUD_ACCESS_KEY_IDとALIBABA_CLOUD_ACCESS_KEY_SECRET環境変数が設定されているか、Alibaba Cloud のデフォルトの認証情報チェーンが使用されていること。
Chat API は、入出力文字数に基づいて課金される有料インターフェイスです。詳細については、「DAS Agent の課金」をご参照ください。
主要なイベント
SSE ストリームは ag-ui プロトコルに準拠しています。次の表に、主なイベントタイプを示します。
イベントタイプ | 主要なフィールド | 説明 |
|
| タスクが開始されたことを示します。チャットセッションの開始を示します。 |
|
| タスクが終了したことを示します。このイベントの後にイベントは生成されません。 |
|
| テキストメッセージの開始を示します。 |
|
| 増分テキストフラグメントが含まれます。同じ |
|
| テキストメッセージの終了を示します。 |
|
|
|
|
| エージェントが |
|
| ツールパラメーターを JSON テキストフラグメントとしてストリーミングします。同じ |
|
| すべてのツールパラメーターが送信され、ツールが実行されようとしていることを示します。 |
|
| ツール実行結果を返します。 |
典型的なイベントシーケンス
次の例では、「インスタンス rm-uf63bopu77b******* に SQL スロットリングを適用する」というプロンプトを使用して、完全な SSE イベントシーケンスを示します。
1. タスクの開始
サーバーはリクエストを受信すると、セッションの開始を示す RUN_STARTED イベントを送信します。クライアントはこのイベントを使用して、タイマーを開始したり、UI を初期化したりできます。
{"Type":"RUN_STARTED","RunId":"58abc22e-5742-4e9b-802e-5f060a0ca2e3"}2. ユーザー入力のエコー (無視可能)
サーバーは、Role=user を持つテキストメッセージとしてユーザーメッセージをエコーします。通常、クライアントはこのメッセージを表示する必要はありません。 Role でフィルタリングしてスキップできます。
{"Type":"TEXT_MESSAGE_START","Role":"user","MessageId":"20d2bc27-1644-47e5-8816-b0e764e84a6e"}
{"Type":"TEXT_MESSAGE_CONTENT","MessageId":"20d2bc27-1644-47e5-8816-b0e764e84a6e","Delta":"Apply SQL throttling to instance rm-uf63bopu77b*******"}
{"Type":"TEXT_MESSAGE_END","MessageId":"20d2bc27-1644-47e5-8816-b0e764e84a6e"}3. エージェントのハートビート (無視可能)
モデルの推論フェーズ中、ACTIVITY_DELTA イベントはハートビート信号として機能します。クライアントではこれらのイベントをスキップしてください。
{"Type":"ACTIVITY_DELTA","ActivityType":"waiting_for_agent_thinking","Patch":[],"MessageId":""}4. エージェントの分析出力 (Role=assistant)
モデルは TEXT_MESSAGE_CONTENT.Delta イベントを通じてその推論をストリーミングします。同じ MessageId の Delta の値を連結して、完全な応答を組み立てます。
{"Type":"TEXT_MESSAGE_START","Role":"assistant","MessageId":"36aaafdb-ea7f-4475-bad7-136e12117959"}
{"Type":"TEXT_MESSAGE_CONTENT","MessageId":"36aaafdb-ea7f-4475-bad7-136e12117959","Delta":"I need to check the SQL execution status of this instance first to determine which SQL statements require throttling. Let me query the recent SQL audit logs.\n\n"}
{"Type":"TEXT_MESSAGE_END","MessageId":"36aaafdb-ea7f-4475-bad7-136e12117959"}5. エージェントのツール呼び出し
エージェントが das_api などの外部ツールを呼び出すと、イベントは次のシーケンスに従います: TOOL_CALL_START → 複数の TOOL_CALL_ARGS → TOOL_CALL_END → TOOL_CALL_RESULT。
呼び出しの開始
{"Type":"TOOL_CALL_START","ToolCallId":"call_0fd4d07290b54dd7b7064cc2","ToolCallName":"das_api","ParentMessageId":"36aaafdb-ea7f-4475-bad7-136e12117959"}パラメーターのストリーミング
複数の TOOL_CALL_ARGS.Delta イベントは ToolCallId で連結する必要があります。連結後、結果を完全な JSON オブジェクトとして解析します:
{
"command": "execute",
"api_name": "getdassqlloghotdata",
"parameters": {
"instance_id": "rm-uf63bopu77b*******",
"start": "2024-03-05T15:54:16+08:00",
"end": "2024-03-05T16:54:16+08:00",
"max_records_per_page": 10,
"include_fields": ["sql_text", "execution_count", "avg_consume"],
"security_risk": "LOW"
}
}パラメーターの終了と実行結果
{"Type":"TOOL_CALL_END","ToolCallId":"call_0fd4d07290b54dd7b7064cc2"}
{"Type":"TOOL_CALL_RESULT","ToolCallId":"call_0fd4d07290b54dd7b7064cc2","MessageId":"36aaafdb-ea7f-4475-bad7-136e12117959","Content":"API call succeeded. Response: ..."}6. タスクの終了
RUN_FINISHED イベントは、SSE ストリームの終了を示します。クライアントはタイマーを停止し、接続を閉じることができます。
{"Type":"RUN_FINISHED","RunId":"58abc22e-5742-4e9b-802e-5f060a0ca2e3"}SDK の使用例
使用上の注意
複数ターンの会話では、常に同じ
SessionIdを渡してください。そうでない場合、モデルは前のターンのコンテキストを保持できません。SSE ストリームにはハートビートイベント (
ACTIVITY_DELTA) が含まれています。クライアントではこれらのイベントをスキップしてください。Chat API は、入出力文字数に基づいて課金されます。開発中は、予期しない課金を避けるために、まず単純なテストクエリから始めるようにしてください。