Chat接口是DAS大模型能力的异步逻辑接口,支持知识问答、性能诊断、上下文对话等能力,以SSE(Server-Sent Events)数据流形式返回Agent的思考过程与最终回答。本文介绍如何通过Java、Python、Go SDK集成Chat API,包括SSE事件解析和多轮对话的完整示例。
前提条件
已开通DAS Agent,并确认运维实例所在地域与DAS Agent所在国家或地区一致且已完成绑定。
使用阿里云DAS SDK时,建议使用最新版本。
调用DAS服务时,地域需指定为
cn-shanghai,Endpoint为das.cn-shanghai.aliyuncs.com。已配置
ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET环境变量,或使用阿里云默认凭据链。
Chat接口为付费接口,按输入/输出字符计费。详情请参见DAS Agent计量规则。
核心事件描述
SSE数据流中的事件遵循ag-ui协议,主要类型如下:
事件类型(Type) | 关键字段 | 说明 |
|
| 任务启动,标记本次Chat开始。 |
|
| 任务结束,后续不再产出事件。 |
|
| 文本消息开始。 |
|
| 消息正文增量片段,相同 |
|
| 该条文本消息结束。 |
|
| Agent心跳或状态事件,如 |
|
| Agent开始发起一次工具调用(如 |
|
| 工具参数按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-..."}
{"Type":"TEXT_MESSAGE_CONTENT","MessageId":"20d2bc27-...","Delta":"为实例 rm-uf63bopu77b*******执行SQL限流"}
{"Type":"TEXT_MESSAGE_END","MessageId":"20d2bc27-..."}3. Agent心跳(可忽略)
模型思考阶段会穿插ACTIVITY_DELTA作为心跳事件,可直接跳过。
{"Type":"ACTIVITY_DELTA","ActivityType":"waiting_for_agent_thinking","Patch":[],"MessageId":""}4. Agent分析输出(Role=assistant)
模型思考结果通过流式TEXT_MESSAGE_CONTENT.Delta下发,相同MessageId的Delta顺序拼接即为完整文本。
{"Type":"TEXT_MESSAGE_START","Role":"assistant","MessageId":"36aaafdb-..."}
{"Type":"TEXT_MESSAGE_CONTENT","MessageId":"36aaafdb-...","Delta":"我需要先查看该实例的SQL执行情况..."}
{"Type":"TEXT_MESSAGE_END","MessageId":"36aaafdb-..."}5. Agent工具调用
Agent决定调用外部工具(如das_api)时,按TOOL_CALL_START → 多条TOOL_CALL_ARGS → TOOL_CALL_END → TOOL_CALL_RESULT的顺序下发事件。
调用开始
{"Type":"TOOL_CALL_START","ToolCallId":"call_0fd4d0...","ToolCallName":"das_api","ParentMessageId":"36aaafdb-..."}参数流式下发
多条TOOL_CALL_ARGS.Delta需按同一ToolCallId顺序拼接,聚合后解析为完整JSON参数:
{
"command": "execute",
"api_name": "getdassqlloghotdata",
"parameters": {
"instance_id": "rm-uf63bopu77b*******",
"start": "2026-03-05T15:54:16+08:00",
"end": "2026-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_0fd4d0..."}
{"Type":"TOOL_CALL_RESULT","ToolCallId":"call_0fd4d0...","Content":"API执行成功。响应:..."}6. 任务结束
收到RUN_FINISHED表示本轮SSE流结束,客户端可停止计时、关闭连接。
{"Type":"RUN_FINISHED","RunId":"58abc22e-5742-4e9b-802e-5f060a0ca2e3"}SDK示例
注意事项
多轮对话务必传入同一个
SessionId,否则模型无法记忆上下文。SSE事件流中会穿插心跳事件(
ACTIVITY_DELTA),客户端处理时可直接跳过此类事件。Chat接口按输入/输出字符计费,调试阶段建议先发起简单测试以避免误计费。