Call the Alibaba Cloud STAROps Agent through STAROps OpenAPI and receive a streaming diagnostic answer.
Use this skill when the user wants to:
The script reads STAROps connection values from environment variables and optional JSON config files. Environment variables and command-line flags override config file values.
Config files are loaded in this order:
~/.starops/config.json./.starops/config.json (overrides user config)--config or STAROPS_AGENT_CONFIG (overrides user/project config)The three required values (employeeId, workspace, uid) may come from either environment variables or config files.
| Variable | Required | Description |
|---|---|---|
| ---------- | ---------- | ------------- |
STAROPS_AGENT_EMPLOYEE | Yes, unless config provides employeeId | Digital Employee ID in STAROps (from console → Digital Employee list → ID column) |
STAROPS_AGENT_WORKSPACE | Yes, unless config provides workspace | Workspace identifier |
STAROPS_AGENT_UID | Yes, unless config provides uid | Alibaba Cloud account UID that owns the workspace |
STAROPS_AGENT_ENDPOINT | No | API endpoint (default: starops.cn-beijing.aliyuncs.com) |
STAROPS_AGENT_PROJECT | No | Optional STAROps project variable forwarded with each request. Overridden by --project |
STAROPS_AGENT_TIMEOUT | No | Default value for --timeout (CreateChat stream total timeout in seconds; default 1800) |
STAROPS_AGENT_IDLE_TIMEOUT | No | Default value for --idle-timeout (max seconds to wait for the next SSE event; default 60) |
STAROPS_AGENT_CONFIG | No | Path to an explicit JSON config file loaded after user/project config |
Minimal config file example:
{
"employeeId": "<your-digital-employee-id>",
"workspace": "<your-workspace-name>",
"uid": "<your-alibaba-cloud-account-uid>"
}
Optional fields:
{
"endpoint": "starops.cn-beijing.aliyuncs.com",
"project": "optional-project",
"timeout": 1800,
"idleTimeout": 60
}
Config files use the exact key names shown above. Do not use alternate aliases such as employee, digitalEmployeeId, workspaceName, or accountUid.
Pre-flight check — run this before invoking the script to confirm environment or config values are available:
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"
If any required value is still unavailable, ask the user to provide it. Never substitute placeholder strings like example-employee.
The STAROps console link uses the same digital employee ID as assistantId.
Credentials use the Alibaba Cloud Credentials default chain. Do not define skill-specific AccessKey variables; use standard Alibaba Cloud credential sources such as environment credentials (ALIBABA_CLOUD_ACCESS_KEY_ID / ALIBABA_CLOUD_ACCESS_KEY_SECRET), profiles, STS, RAM role, or instance metadata.
IMPORTANT: The --pipe flag is MANDATORY for all invocations. It ensures structured output with THREAD ID, STAROPS_URL, and delimited answer blocks that downstream agents can reliably parse. Never omit --pipe.
Install dependencies and run from this skill's root directory:
pip3 install -r scripts/requirements.txt
# First call - creates a new thread automatically
python3 scripts/call_starops_agent.py --question "<complete user context>" --pipe
# First call with an explicit config file
python3 scripts/call_starops_agent.py --config ".starops/config.json" --question "<complete user context>" --pipe
# Follow-up calls - MUST reuse the thread ID from previous response
python3 scripts/call_starops_agent.py --thread "<thread_id>" --question "<follow-up question>" --pipe
Thread Management:
STAROPS_URL when the user needs to inspect the same thread in the STAROps console--thread "" for related follow-up questions to preserve contextExample workflow:
# Query 1: Creates new 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 ===
...
# Query 2: MUST reuse thread for context
$ python3 scripts/call_starops_agent.py --thread "thread-abc123-xyz" --question "Deep dive into notification app errors" --pipe
| Flag | Description |
|---|---|
| ------ | ------------- |
--question | Required. Natural-language question to send to STAROps Agent. |
--thread | Existing STAROps thread ID. Required for follow-up questions to preserve investigation context. |
--pipe | Mandatory for agent invocations. Emit structured output with THREAD, STAROPS_URL, and === STAROPS ANSWER BEGIN/END === delimiters for reliable parsing. |
--json | Emit machine-readable JSONL events. Mutually exclusive with --pipe. Do not use for agent invocations — --pipe is the supported agent format. |
--config | Optional JSON config file. Loaded after ~/.starops/config.json and ./.starops/config.json. |
--project | Optional STAROps project variable. Overrides STAROPS_AGENT_PROJECT. |
--timeout | Total CreateChat stream timeout in seconds. Overrides STAROPS_AGENT_TIMEOUT (default 1800). |
--idle-timeout | Maximum seconds to wait for the next SSE event before failing. Overrides STAROPS_AGENT_IDLE_TIMEOUT (default 60). |
CreateChat stream may start multiple internal diagnostic steps and take minutes; the default timeout is 30 minutes.--thread for follow-ups in the same investigation. Starting a new thread discards all prior context and findings.--pipe. Tool-call status and streaming diagnosis-report chunks are written to stderr, while stdout keeps the reusable thread ID and final answer easy to parse. Omitting --pipe will produce unstructured output that cannot be reliably evaluated.--idle-timeout only when the investigation is expected to be quiet for long periods.=== STAROPS ANSWER BEGIN === and === STAROPS ANSWER END ===. Specifically:(No assistant answer was returned.)), incomplete, or only contains generic text, retry once using the same --thread. If the retry still yields no actionable data, report honestly: "STAROps did not return actionable diagnostic data. Confirm that the workspace contains relevant services and data for the requested time range."All STAROps OpenAPI HTTP requests must use this User-Agent template declaration:
--user-agent AlibabaCloud-Agent-Skills/{SKILL_NAME}/{session-id}
For this skill, the concrete template is:
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-starops-chat/{session-id}
Generate exactly one session-id per skill invocation as a 32-char hex value. If SKILL_SESSION_ID is already set, reuse that value after validating it is 32 hex characters; otherwise generate uuid4().hex, set SKILL_SESSION_ID, and reuse it for all outbound calls. The same session-id must be consistent across CLI/SDK/Terraform and direct HTTP requests made during the invocation, including both CreateThread and CreateChat; do not generate a new session-id per request. The Python script sets the HTTP User-Agent header to AlibabaCloud-Agent-Skills/alibabacloud-starops-chat/{session-id}.
When the script exits with an error, check the following in order:
ALIBABA_CLOUD_ACCESS_KEY_ID / ALIBABA_CLOUD_ACCESS_KEY_SECRET (or STS / RAM role) are set and that the identity has starops:CreateThread and starops:CreateChat permissions. See references/ram-policies.md.STAROPS_AGENT_EMPLOYEE) or workspace (STAROPS_AGENT_WORKSPACE) does not exist, or the UID (STAROPS_AGENT_UID) does not match the owning account. Double-check all three environment variables.employeeId, workspace, or uid is missing from both environment variables and config files.~/.aliyun/config.json, STS, RAM role, or instance metadata).--idle-timeout seconds (default 60). The STAROps Agent may be stalled. Retry with the same --thread if a THREAD line was printed, or increase --idle-timeout for investigations expected to be quiet.--thread to resume context.pip3 install -r scripts/requirements.txt before invoking the script.This skill directly calls STAROps OpenAPI:
CreateThread: POST /digitalEmployee/{employeeId}/threadCreateChat: POST /chatSee references/api-reference.md and references/ram-policies.md.
共 2 个版本