DAS Agent 对话

向阿里云 DAS(数据库自治服务)Agent 发送自然语言问题并接收诊断结果。

定价与免费额度

这是带免费试用额度的付费服务。

  • 免费额度:未设置 ALIBABA_CLOUD_DAS_AGENT_ID 时,脚本省略 AgentId 参数,API 将使用默认 Agent ID,附带有限的免费试用配额。
  • 付费使用:对于生产工作负载或更高使用量,购买 DAS Agent 订阅并设置你自己的 ALIBABA_CLOUD_DAS_AGENT_ID 以绑定专属 agent 和配额。
建议:从免费额度(默认 Agent ID)开始评估服务。一旦决定在生产采用,购买订阅并配置你自己的 Agent ID。

环境变量

脚本需要可通过默认凭证链解析的阿里云凭证。DAS Agent ID 是可选的——若未提供,AgentId 参数将被省略,API 将使用带有限免费配额的默认 Agent ID。

可选:购买 DAS Agent 服务后设置你自己的 Agent ID

export ALIBABA_CLOUD_DAS_AGENT_ID="<agent_id>" # 从 DAS 控制台获取(可选)


阿里云凭证 SDK 会从多个来源自动解析凭证(环境变量、配置文件、ECS RAM 角色等)。设置说明请参阅[官方凭证配置文档](https://www.alibabacloud.com/help/en/sdk/developer-reference/v2-manage-python-access-credentials)。

如果你已购买 DAS Agent 订阅,在此处创建和管理你的 Agent ID:https://das.console.aliyun.com/

故障排查

凭证解析失败

如果脚本以凭证相关错误退出,意味着阿里云凭证 SDK 无法从其默认提供者链解析出可用凭证。

支持的凭证来源:

  • 环境变量(见官方文档
  • 本地 profile 文件:~/.aliyun/config.json~/.alibabacloud/credentials.ini
  • 在阿里云 ECS 实例上运行时的 ECS RAM 角色元数据

常见情况:

  • 凭证环境变量为空或缺失——按官方文档配置。
  • 错误提及 ~/.aliyun/config.json~/.alibabacloud/credentials.ini

SDK 尝试了基于本地 profile 的凭证,但文件缺失或无效。如果想用本地 profile,创建 / 修复默认 profile。

  • 错误提及 100.100.100.200

SDK 尝试了 ECS 元数据。这在 ECS 上是预期的,但在其他机器上通常是本地配置错误。

本地开发时,如果你不使用 ECS RAM 角色凭证,可以显式禁用 ECS 元数据查找:

export ALIBABA_CLOUD_ECS_METADATA_DISABLED=true

这避免了非 ECS 机器上令人困惑的 100.100.100.200 元数据连接错误,并使缺失凭证的失败更易读。

调用

从本 Skill 的 scripts/ 目录运行:

cd scripts

管道模式(Agent 推荐)——干净输出:进度到 stderr,答案清晰界定在 stdout

uv run call_das_agent.py --question "<用户问题>" --pipe

默认模式(CLI 聊天 UI)——带工具详情的实时流式

uv run call_das_agent.py --question "<用户问题>"

JSON 模式——机器可读 JSONL,stdout 每行一个 JSON 对象

uv run call_das_agent.py --question "<用户问题>" --json

多轮对话——复用服务端分配的 session ID 以保持上下文

uv run call_das_agent.py --question "列出我的实例" --pipe # 第一行返回 session_id

提取 session_id(以 "SESSION:" 开头的行),然后复用它:

uv run call_das_agent.py --question "检查第一个" --session "<上面的 session_id>" --pipe


**作为 agent 调用时始终使用 `--pipe`。** 它将所有进度 / 工具调用噪音路由到 stderr,只将 DAS 答案写入 stdout,并包在清晰分隔符中——使真实响应不可能被漏掉。

需要程序化解析响应时优先用 `--json`。JSON 事件类型和输出模式细节,见 [references/api-reference.md](references/api-reference.md)。

行为说明

DAS Agent 内部编排多个 API 调用和工具调用来回答单个问题。这有几个重要含义:

  1. 长时间运行任务:复杂诊断(多实例巡检、全面健康检查、批量 SQL 分析)可能耗时数分钟至 30 分钟,因为 DAS Agent 依次调用监控 API、运行诊断并综合结果。开始前告知用户并提供定期进度更新。
  1. 实例注册:目标数据库实例必须在 DAS Agent 下注册。如果看到错误码 -1810006,意味着 agent 未关联任何实例——引导用户到 DAS 控制台设置关联实例。
  1. 在问题中包含实例 ID:DAS Agent 按 ID 解析实例(例如 rm-bp1xxxpc-2zeyyy)。始终在问题中包含具体实例 ID 以获得准确结果。如果用户未提供,询问他们或先查询实例列表。
  1. 并行执行:诊断多个实例时,并行启动多个脚本进程——每次调用独立且无状态(除非共享 session ID)。
  1. 多轮对话——问题相关时始终复用 session ID:如果用户的问题是连续的或上下文相连的(后续诊断、下钻分析、引用前一个结果、对比发现),你必须在每次后续调用上传递 --session &lt;session_id&gt;。在对话中途开始新会话会迫使 DAS Agent 从头重跑所有先前上下文,浪费时间并产生更低质量的答案。

决策规则:默认复用 session ID。仅当用户明确切换到完全不相关的话题或要求"重新开始"时才开新会话。

session ID 是服务端分配的,作为每次 --pipe 调用的第一行返回:

   SESSION: <uuid>

每次调用后立即提取并向前传递。在 --json 模式下它出现在第一行 {"type": "session", "session_id": "..."}

必须复用 session ID 的示例:

  • "列出我的实例" → "检查第一个的 CPU" → "为什么高?"
  • "对 rm-bp1xxx 运行健康检查" → "显示最慢的查询"
  • "持有哪些锁?" → "杀掉那个会话"

DAS Agent 在服务端保留完整对话历史,因此后续问题可以简短自然——无需重复实例 ID 或先前上下文。

输出

输出模式对比和格式细节,见 references/api-reference.md

运行脚本后,逐字将完整 stdout 转达给用户。 不要总结、转述或省略脚本 stdout 的任何部分。DAS Agent 的实际诊断答案嵌入在输出中——用户必须完整看到它。

详细 API 签名和 SSE 事件文档,见 references/api-reference.md