阿里云 STAROps Agent

通过 STAROps OpenAPI 调用阿里云 STAROps Agent,并接收流式诊断回答。

场景描述

当用户想要以下操作时使用本 Skill:

  • 诊断服务错误或异常(根因分析)
  • 查询 workspace 拓扑、服务列表或服务指标
  • 分析 APM 链路、错误率、延迟或请求量
  • 分诊告警或排查事件
  • 询问其 STAROps workspace 或服务相关问题

配置

脚本从环境变量和可选 JSON 配置文件读取 STAROps 连接值。环境变量和命令行 flag 覆盖配置文件值。

配置文件按以下顺序加载:

  1. 用户配置:~/.starops/config.json
  2. 项目配置:./.starops/config.json(覆盖用户配置)
  3. 显式配置:--config <path>STAROPS_AGENT_CONFIG(覆盖用户/项目配置)

三个必需值(employeeIdworkspaceuid)可来自环境变量或配置文件。

变量必填说明
STAROPS_AGENT_EMPLOYEE是,除非配置提供 employeeIdSTAROps 中的数字员工 ID(来自控制台 → 数字员工列表 → ID 列)
STAROPS_AGENT_WORKSPACE是,除非配置提供 workspaceWorkspace 标识符
STAROPS_AGENT_UID是,除非配置提供 uid拥有该 workspace 的阿里云账号 UID
STAROPS_AGENT_ENDPOINTAPI endpoint(默认:starops.cn-beijing.aliyuncs.com
STAROPS_AGENT_PROJECT随每个请求转发的可选 STAROps 项目变量。被 --project 覆盖
STAROPS_AGENT_TIMEOUT--timeout 的默认值(CreateChat 流总超时秒数;默认 1800
STAROPS_AGENT_IDLE_TIMEOUT--idle-timeout 的默认值(等待下一个 SSE 事件的最大秒数;默认 60
STAROPS_AGENT_CONFIG在用户/项目配置之后加载的显式 JSON 配置文件路径

最小配置文件示例:

{
  "employeeId": "<your-digital-employee-id>",
  "workspace": "<your-workspace-name>",
  "uid": "<your-alibaba-cloud-account-uid>"
}

可选字段:

{
  "endpoint": "starops.cn-beijing.aliyuncs.com",
  "project": "optional-project",
  "timeout": 1800,
  "idleTimeout": 60
}

配置文件使用上面显示的精确键名。不要使用 employeedigitalEmployeeIdworkspaceNameaccountUid 等替代别名。

预检——调用脚本前运行此命令确认环境或配置值可用:

missing=""
[ -z "$STAROPS_AGENT_EMPLOYEE" ] && missing="$missing STAROPS_AGENT_EMPLOYEE"
[ -z "$STAROPS_AGENT_WORKSPACE" ] && missing="$missing STAROPS_AGENT_WORKSPACE"
[ -z "$STAROPS_AGENT_UID" ] && missing="$missing STAROPS_AGENT_UID"
config_file_found=""
[ -f ".starops/config.json" ] && config_file_found=1
[ -f "$HOME/.starops/config.json" ] && config_file_found=1
[ -n "$STAROPS_AGENT_CONFIG" ] && [ -f "$STAROPS_AGENT_CONFIG" ] && config_file_found=1
if [ -n "$missing" ] && [ -z "$config_file_found" ]; then
  echo "ERROR: Missing required environment variables:$missing and no STAROps config file was found" >&2
  exit 1
fi
echo "OK: STAROps configuration is available from environment variables or config file"

如果任何必需值仍不可用,请用户提供。绝不要用 example-employee 之类的占位字符串替代。

STAROps 控制台链接使用与 assistantId 相同的数字员工 ID。

凭证使用阿里云凭证默认链。不要定义 Skill 专用的 AccessKey 变量;使用标准阿里云凭证来源,例如环境凭证(ALIBABA_CLOUD_ACCESS_KEY_ID / ALIBABA_CLOUD_ACCESS_KEY_SECRET)、profile、STS、RAM 角色或实例元数据。

调用

重要:所有调用都必须带 --pipe flag。 它确保结构化输出,包含 THREAD ID、STAROPS_URL 和分隔的回答块,下游 agent 可可靠解析。绝不省略 --pipe

安装依赖并从本 Skill 根目录运行:

pip3 install -r scripts/requirements.txt

首次调用——自动创建新 thread

python3 scripts/call_starops_agent.py --question "<complete user context>" --pipe

首次调用并指定显式配置文件

python3 scripts/call_starops_agent.py --config ".starops/config.json" --question "<complete user context>" --pipe

后续调用——必须复用之前响应中的 thread ID

python3 scripts/call_starops_agent.py --thread "<thread_id>" --question "<follow-up question>" --pipe


**Thread 管理:**
- 从输出中提取 thread ID
- 当用户需要在 STAROps 控制台检查同一 thread 时,使用打印的 `STAROPS_URL`
- 相关后续问题始终传 `--thread "<id>"` 以保留上下文

示例工作流:

查询 1:创建新 thread

$ python3 scripts/call_starops_agent.py --question "Query TOP 5 error applications" --pipe

THREAD: thread-abc123-xyz

STAROPS_URL: https://starops.console.aliyun.com/chat?threadId=thread-abc123-xyz&assistantId=apsara-ops

=== STAROPS ANSWER BEGIN ===

...

查询 2:必须复用 thread 以保留上下文

$ python3 scripts/call_starops_agent.py --thread "thread-abc123-xyz" --question "Deep dive into notification app errors" --pipe

命令行选项

Flag说明
--question &lt;text&gt;必填。 发送给 STAROps Agent 的自然语言问题。
--thread &lt;id&gt;现有 STAROps thread ID。后续问题必填,以保留排查上下文。
--pipeAgent 调用必填。 输出结构化内容,含 THREADSTAROPS_URL=== STAROPS ANSWER BEGIN/END === 分隔符,便于可靠解析。
--json输出机器可读 JSONL 事件。与 --pipe 互斥。不要用于 Agent 调用——--pipe 是受支持的 Agent 格式。
--config &lt;path&gt;可选 JSON 配置文件。在 ~/.starops/config.json./.starops/config.json 之后加载。
--project &lt;name&gt;可选 STAROps 项目变量。覆盖 STAROPS_AGENT_PROJECT
--timeout &lt;seconds&gt;CreateChat 流总超时秒数。覆盖 STAROPS_AGENT_TIMEOUT(默认 1800)。
--idle-timeout &lt;seconds&gt;等待下一个 SSE 事件失败前的最大秒数。覆盖 STAROPS_AGENT_IDLE_TIMEOUT(默认 60)。

行为说明

  1. STAROps Agent 调用按设计是长时间运行的。单个 CreateChat 流可能启动多个内部诊断步骤并耗时数分钟;默认超时 30 分钟。
  2. 在一个问题中提供完整上下文:云账号或 workspace 上下文、时间范围、服务或应用名称、告警文本、SLS project/logstore、UModel 对象、地域,以及用户需要什么决策。
  3. 关键:同一排查中的后续问题始终复用 --thread。启动新 thread 会丢弃所有先前上下文和发现。
  4. 本 Skill 用于 Agent 推理和诊断,而非直接资源管理。对于直接 ECS、OSS、RDS、SLS 或 RAM 变更,使用相应官方 CLI、SDK 或专用 skill。
  5. 强制:始终传 --pipe 工具调用状态和流式诊断报告块写入 stderr,而 stdout 保留可复用的 thread ID 和最终回答,便于解析。省略 --pipe 会产生无法可靠评测的非结构化输出。
  6. 如果一段时间内没有 SSE 事件到达,脚本会以清晰的 idle-timeout 错误失败,而非静默等待完整任务超时。仅在排查预期长时间安静时增加 --idle-timeout
  7. 输出完整性规则:你的最终报告必须基于 === STAROPS ANSWER BEGIN ====== STAROPS ANSWER END === 之间返回的实际内容。具体而言:
  • 引用或转述 STAROps 响应中的具体数据点(HTTP 状态码、服务名、错误路径、指标)。
  • 不要推断或捏造 STAROps 输出不支持的诊断结论。
  • 如果 STAROps 回答为空((No assistant answer was returned.))、不完整或仅含通用文本,用同一 --thread 重试一次。如果重试仍无可用数据,如实报告:“STAROps 未返回可操作的诊断数据。请确认 workspace 包含所请求时间范围的相关服务和数据。”
  • 绝不要用你自己的先验知识替代缺失的 STAROps 证据。例如,如果 STAROps 未提及,不要声称“数据库连接池耗尽”。

可观测性

所有 STAROps OpenAPI HTTP 请求必须使用此 User-Agent 模板声明:

--user-agent AlibabaCloud-Agent-Skills/{SKILL_NAME}/{session-id}

对于本 Skill,具体模板为:

--user-agent AlibabaCloud-Agent-Skills/alibabacloud-starops-chat/{session-id}

每次 Skill 调用恰好生成一个 session-id,为 32 位十六进制值。如果 SKILL_SESSION_ID 已设置,验证其为 32 位十六进制字符后复用;否则生成 uuid4().hex,设置 SKILL_SESSION_ID,并在所有出站调用中复用它。同一 session-id 必须在调用期间的所有 CLI/SDK/Terraform 和直接 HTTP 请求中保持一致,包括 CreateThreadCreateChat;不要为每个请求生成新 session-id。Python 脚本将 HTTP User-Agent header 设置为 AlibabaCloud-Agent-Skills/alibabacloud-starops-chat/{session-id}

故障排查

脚本以错误退出时,按顺序检查以下内容:

  1. HTTP 401 Unauthorized —— 凭证链未解析为具有 STAROps 权限的有效身份。验证 ALIBABA_CLOUD_ACCESS_KEY_ID / ALIBABA_CLOUD_ACCESS_KEY_SECRET(或 STS / RAM 角色)已设置,且身份具有 starops:CreateThreadstarops:CreateChat 权限。见 references/ram-policies.md
  2. HTTP 404 Not Found —— 数字员工 ID(STAROPS_AGENT_EMPLOYEE)或 workspace(STAROPS_AGENT_WORKSPACE)不存在,或 UID(STAROPS_AGENT_UID)与拥有账号不匹配。仔细检查三个环境变量。
  3. ConfigError: Missing required STAROps configuration values —— employeeIdworkspaceuid 中一个或多个在环境变量和配置文件中都缺失。
  4. CredentialError —— 阿里云凭证 SDK 找不到任何有效凭证来源。确保至少配置了一个凭证提供者(环境变量、~/.aliyun/config.json、STS、RAM 角色或实例元数据)。
  5. Idle timeout —— 在 --idle-timeout 秒(默认 60)内未收到 SSE 事件。STAROps Agent 可能已停滞。如果已打印 THREAD 行,用同一 --thread 重试,或为预期安静的排查增加 --idle-timeout
  6. 流中断 / 网络错误 —— HTTPS 连接被重置或超时。用 --thread 重试同一请求以恢复上下文。
  7. ModuleNotFoundError —— Python 依赖未安装。调用脚本前运行 pip3 install -r scripts/requirements.txt

API 接口

本 Skill 直接调用 STAROps OpenAPI:

  • CreateThreadPOST /digitalEmployee/{employeeId}/thread
  • CreateChatPOST /chat

references/api-reference.mdreferences/ram-policies.md

文档 4 / 6:alibabacloud-pai-eas-service-diagnose