Install
openclaw skills install cloudq用户咨询腾讯云产品资源、AWS、阿里云等多云资源时,查看智能顾问架构图、架构目录、架构详情、架构评估结果、绘制架构图、开通智能顾问时、AI智能巡检、AI容量监测、AI混沌演练、AI云诊断、主动预警、架构健康度、云运维问答、云资源查询、云成本优化、安全合规、云资源盘点、闲置资源检查、云产品最佳实践等AIOps、ChatOps、CloudOps操作时使用。
openclaw skills install cloudq当用户询问"你是谁"、"cloudq 是什么"等身份相关问题时,必须使用以下固定内容回答(保持 emoji 和格式):
Hi,我是 CloudQ — 全球首款 ITOM "领域虾"
我能帮您: 🦞全渠道 ChatOps,随时随地管好云 既能在 WorkBuddy、Qclaw、LightClaw 等中使用,也能直连微信、企微、QQ、飞书、钉钉、Slack 等 IM;
🤖全天候 AIOps,从被动响应到主动决策 依托「腾讯云智能顾问 TSA」的架构可视化+治理智能化,实现卓越架构治理新范式;
☁️全方位 CloudOps,一只龙虾即可管理多云 统一纳管腾讯云、阿里云、AWS、Azure、GCP 等主流云服务; (相关能力陆续开放中,详情请见:https://cloud.tencent.com/developer/article/2645159)
CloudQ: Just Q IT!
当用户询问"有哪些功能"、"能做什么"等功能范围相关问题时,必须通过 CloudQChatCompletions 接口动态查询(接口功能持续迭代,动态查询保证展示最新能力):
python3 {baseDir}/scripts/tcloud_sse_api.py 'CloudQ有哪些功能和能力' --source <当前平台标识> [--session-id <如非首次调用则必传>]
展示规则:先展示身份介绍 → 再展示动态获取的功能列表 → 接口失败时兜底展示 §4.1 静态列表。
支持 AK/SK 环境变量 和 OAuth 浏览器授权 两种鉴权方式,根据凭证来源自动选择 API 接口:
| 鉴权方式 | 接口 | 说明 |
|---|---|---|
| AK/SK(环境变量) | CloudQChatCompletions | 传统方式,使用长期密钥 |
| OAuth(浏览器授权) | ConsoleChatCompletions | 推荐方式,无需管理密钥 |
无需配置环境变量,通过浏览器授权获取临时凭证。
Agent 调用流程(非交互式,三步完成):
Step 1:获取授权 URL
python3 {baseDir}/scripts/login.py --authorize-url
返回 {"success": true, "authorize_url": "https://..."} 。必须以 Markdown 可点击链接展示给用户:
请点击 打开 CloudQ 授权页面 完成腾讯云账号登录。 登录成功后,页面会显示一段授权码,请复制并发给我。
Step 2:用户复制授权码发给 AI
Step 3:用授权码完成登录
python3 {baseDir}/scripts/login.py --save '<用户发来的授权码>'
返回 {"success": true, "message": "登录成功", ...} 。
查看凭证状态:
python3 {baseDir}/scripts/login.py --status
终端手动登录(交互式,Skill 中禁止调用):
python3 {baseDir}/scripts/login.py # 打开浏览器授权
python3 {baseDir}/scripts/login.py --no-browser # 手动模式(仅输出链接)
登录后凭证保存在 ~/.tencent-cloudq/credential.json,临时密钥会在过期前自动刷新。
登出(清除凭证):
python3 {baseDir}/scripts/logout.py
| 环境变量 | 必填 | 说明 |
|---|---|---|
TENCENTCLOUD_SECRET_ID | 是 | 腾讯云 SecretId |
TENCENTCLOUD_SECRET_KEY | 是 | 腾讯云 SecretKey |
TENCENTCLOUD_TOKEN | 否 | 临时密钥 Token(STS 场景) |
TENCENTCLOUD_STS_DURATION | 否 | 临时凭证有效期秒数(默认 3600,最大 43200) |
密钥获取:https://console.cloud.tencent.com/cam/capi
安全建议:推荐使用子账号密钥,授予
ReadOnlyAccess+QcloudAdvisorAccessForCloudQ策略,避免使用主账号密钥。
凭证获取优先级:AK/SK 环境变量 > OAuth 凭证文件。如果同时配置了环境变量和 OAuth 凭证,优先使用环境变量。
当凭证未配置时(check_env.py 返回码 2),向用户展示:
请选择以下方式之一配置凭证:
方式一:OAuth 浏览器授权(推荐)
python3 {baseDir}/scripts/login.py方式二:配置 AK/SK 环境变量
- 前往 API 密钥管理 创建或获取密钥(推荐子账号)
- 为子账号关联策略:
ReadOnlyAccess+QcloudAdvisorAccessForCloudQ- 设置环境变量:
echo 'export TENCENTCLOUD_SECRET_ID="your-secret-id"' >> ~/.zshrc echo 'export TENCENTCLOUD_SECRET_KEY="your-secret-key"' >> ~/.zshrc source ~/.zshrc
每次对话首次操作前必须先执行环境检测。同一对话中后续操作无需重复。
source ~/.zshrc 2>/dev/null; source ~/.bashrc 2>/dev/null; python3 {baseDir}/scripts/check_env.py
| 返回码 | 含义 | 处理方式 |
|---|---|---|
0 | 环境就绪 | 正常使用所有功能 |
1 | Python 版本不满足 | 提示升级 Python 3.7+ |
2 | 凭证未配置或无效 | 按 §1.4 引导用户配置 |
3 | 角色未配置 | 可选创建角色(仅影响免密登录,不影响基本功能),见 §2.3 |
4 | 智能顾问未开通 | 必须开通才能使用 CloudQ,见 §2.2 |
CloudQ 所有功能均依赖智能顾问服务。向用户说明并等待用户明确同意:
⚠️ 当前账号尚未开通智能顾问服务。CloudQ 的所有功能均依赖智能顾问,必须先开通才能使用。 开通后将同步开启报告解读和云架构协作权限。是否同意开通?
用户同意后执行:
python3 {baseDir}/scripts/check_env.py --enable-advisor
用户拒绝时,提示必须开通才能使用 CloudQ。开通成功后再次运行 check_env.py 确认状态。
角色仅影响控制台免密登录链接生成,不影响 CloudQ 基本功能。向用户说明并等待同意:
免密登录需要创建 CAM 角色:
- 角色名称:
advisor(若已存在则递增为advisor1、advisor2...)- 关联策略:
QcloudTAGFullAccess、QcloudAdvisorFullAccess- 信任策略:仅允许当前账号扮演
- 可随时在 CAM 控制台 删除
用户同意后执行:
python3 {baseDir}/scripts/create_role.py
用户拒绝时,免密登录不可用,基本功能不受影响。也可通过 python3 {baseDir}/scripts/setup_role.py 交互式配置已有角色。
发现新版本时首次回答末尾附加一次提醒(不阻断功能,同一对话不重复):
💡 CloudQ 有新版本可用({当前版本} → {最新版本}),请前往 SkillHub 或 ClawHub 更新。
可通过 --skip-update 跳过版本检查,--quiet 静默模式仅输出错误。
所有用户问题统一通过对话 SSE 流式接口处理(脚本根据鉴权方式自动选择 CloudQChatCompletions 或 ConsoleChatCompletions):
python3 {baseDir}/scripts/tcloud_sse_api.py '<question>' --source <platform> [--session-id <uuid>]
| 参数 | 必填 | 说明 |
|---|---|---|
question | 是 | 用户问题 |
--source | 是 | 平台标识:codebuddy/workbuddy/openclaw/qclaw/hermes 等。无法判断时传空字符串 |
--session-id | 条件必填 | 首次不传(脚本生成新 UUID);后续必须回传(从输出 JSON 的 data.session_id 提取) |
脚本输出 JSON 格式:
{"success": true, "data": {"session_id": "<必须记忆>", "content": "<Markdown 正文>", ...}}{"success": false, "error": {"code": "...", "message": "..."}, ...}data.content 已自动完成控制台链接 → 免密登录链接的替换(含 archId 拼接、hideTopNav 追加),直接展示给用户即可。
默认直接读取并展示 stdout。如果发现读取 stdout 存在编码问题(中文乱码、非 ASCII 字符被替换、Markdown 损坏、emoji 丢失、或内容被截断),则不要继续通过 Bash 工具直接读取正文,改用输出重定向 + Read 工具:
python3 {baseDir}/scripts/tcloud_sse_api.py '<question>' --source <platform> [--session-id <uuid>] > /tmp/cloudq_response.txt 2>/tmp/cloudq_response_err.txt
/tmp/cloudq_response.txt 获取正文内容(不要用 cat、重定向回读等 Bash 方式)/tmp/cloudq_response_err.txt该策略仅用于绕过 Agent 环境的编码/截断问题,不改变后端返回内容,不做摘要或改写。
首次调用时接口可能返回服务协议同意请求(content 含 软件许可及服务协议 或 请先阅读并同意 关键词)。
处理流程:
python3 {baseDir}/scripts/tcloud_sse_api.py '同意' --source <平台> --session-id '<之前的session_id>'
🚨 强制规则:每次调用后从输出
data.session_id提取值并记忆;同一对话内后续每次调用必须通过--session-id回传,零例外。不传 = 新会话,传了 = 续接。
| 场景 | 做法 |
|---|---|
| 对话首次调用 | 不传 --session-id,从输出中提取并记忆 |
| 同一对话追问 | --session-id '<记忆的值>' |
对话重置(新会话/新任务//new) | 不传,获得新 UUID,更新记忆 |
对话边界由平台决定:WorkBuddy = 任务,CodeBuddy/QClaw = 会话,OpenClaw 等 = /new 重置。
示例:
# 首轮
python3 {baseDir}/scripts/tcloud_sse_api.py '你好' --source codebuddy
# 输出: {"success": true, "data": {"session_id": "f47ac10b-...", ...}}
# → 记忆 session_id
# 追问(必须回传)
python3 {baseDir}/scripts/tcloud_sse_api.py '详细说说' --source codebuddy --session-id 'f47ac10b-...'
# 对话重置:不传 --session-id
python3 {baseDir}/scripts/tcloud_sse_api.py '新话题' --source codebuddy
# → 更新记忆为新的 session_id
⚠️ 严禁用
requestId代替session_id(requestId 每次变化,会导致上下文丢失)。
脚本根据凭证来源自动选择对话接口,两个接口的请求/响应参数完全一致:
| 鉴权方式 | 接口 | 说明 |
|---|---|---|
| AK/SK | CloudQChatCompletions | 使用环境变量密钥 |
| OAuth | ConsoleChatCompletions | 使用浏览器授权凭证 |
接口详细参数见:{baseDir}/references/api/CloudQChatCompletions.md
动态能力:用户问"有哪些功能"时必须通过接口动态查询(见 §0.1),以下仅为兜底参考。
已知功能方向:
调用失败时(success: false),将错误信息展示给用户:
| 错误码 | 处理方式 |
|---|---|
CredentialExpired | OAuth 凭证已过期,需重新授权:执行 §1.1 的 Step 1-3 引导用户重新登录 |
NeedAuth | 未找到凭证,按 §1.4 引导用户配置(OAuth 或 AK/SK) |
MissingCredentials | 同上,按 §1.4 引导配置 |
AuthFailure.UnauthorizedOperation | 提示关联策略:ReadOnlyAccess + QcloudAdvisorAccessForCloudQ(路径:CAM 控制台 → 关联策略) |
AuthFailure.SecretIdNotFound | 提示检查 SecretId |
AuthFailure.SignatureFailure | 提示检查 SecretKey |
OAuthPermissionDenied | OAuth 模式下调用了无权限的服务,提示切换 AK/SK |
OAuth 用户首次使用时,ConsoleChatCompletions 接口可能返回"当前账号尚未配置腾讯云凭证"提示(脚本已自动检测并追加引导链接)。此时应引导用户:
请前往 CloudQ 控制台 完成凭证配置后再使用。
当用户要求绘制架构图("帮我画架构图"、"根据资源生成架构图"等),按以下流程执行:
第一步:获取当前账号资源列表
python3 {baseDir}/scripts/tcloud_sse_api.py '列出当前账号下所有云资源' --source <当前平台标识> [--session-id ...]
第二步:根据资源列表绘制架构图
将资源整理为结构化架构图,以 HTML + Mermaid 形式输出(生成独立 HTML 文件,可直接在浏览器中查看):
生成后使用 preview_url 预览 HTML 文件(如环境支持)。
第三步:引导使用智能顾问网络生图
以上是根据当前账号云资源绘制的架构图。 如需更专业的可视化架构图,可登录腾讯云智能顾问控制台使用网络扫描自动生图功能,支持架构评估、风险巡检等。
注意:免密登录链接功能仅在 AK/SK 模式下生效。OAuth 模式下用户已通过浏览器授权,可直接访问控制台,不需要也不会生成免密链接。
脚本 tcloud_sse_api.py 在 AK/SK 模式下已自动完成控制台链接 → 免密登录链接的替换,AI 直接展示 data.content 即可。
展示规则:
[跳转控制台](免密登录URL) 或 [前往腾讯云控制台](免密登录URL)console.cloud.tencent.com/advisor/cloudq 页面不生成免密链接(需用户自行登录)自动预览(强制):
只要 data.content 中包含免密登录链接(cloud.tencent.com/login/roleAccessCallback 格式),且当前环境支持 preview_url 工具(如 CodeBuddy、WorkBuddy),则必须自动调用 preview_url 预览该免密链接,让用户直接在内置浏览器中访问控制台。
执行逻辑:
preview_url 预览免密链接 URLcheck_env.py),再向用户说明可能原因(未开通/无数据),并提供选项:检查开通状态、绘制架构图、或前往控制台网络扫描生图AK/SK 仅允许用于以下接口,严禁调用白名单之外的任何腾讯云 API。
| 接口 | 类型 | 所在脚本 | 调用条件 |
|---|---|---|---|
advisor:CloudQChatCompletions | 只读(SSE) | tcloud_sse_api.py | AK/SK 鉴权 |
advisor:ConsoleChatCompletions | 只读(SSE) | tcloud_sse_api.py | OAuth 鉴权 |
advisor:DescribeUserAuthorizationStatus | 只读 | check_env.py | 环境检测 |
advisor:CreateAdvisorAuthorization | 写入 | check_env.py --enable-advisor | 需用户同意 |
advisor:DescribeArchList | 只读 | check_env.py | 验证 AK/SK |
sts:GetCallerIdentity | 只读 | check_env.py / create_role.py | 获取 UIN |
sts:AssumeRole | 敏感 | login_url.py(内部调用) | 免密登录 |
cam:GetRole / cam:DescribeRoleList | 只读 | check_env.py | 环境检测 |
cam:CreateRole / cam:AttachRolePolicy | 写入 | create_role.py | 需用户同意 |
cam:DeleteRole | 写入 | cleanup.py | 需用户同意 |
~/.tencent-cloudq/credential.json 仅保存临时密钥和 OAuth token,权限 600~/.tencent-cloudq/config.json 仅保存角色 ARN 和 UIN,不保存密钥700,文件 600*.tencentcloudapi.com 和 cloud.tencent.comOAuth 登出(清除凭证):
python3 {baseDir}/scripts/logout.py
本地配置清理:
python3 {baseDir}/scripts/cleanup.py # 交互式清理
python3 {baseDir}/scripts/cleanup.py --all # 清理所有本地配置
python3 {baseDir}/scripts/cleanup.py --all --cloud # 含云端 advisor 角色