huaweicloud/huaweicloud-skills

huawei-cloud-optv-solver-assistant

1.

查看源码

使用方法

  1. 复制安装命令,在自己的智能体环境安装前先检查源码包。
  2. 从原始文档核对所需工具、凭据和支持的宿主。
  3. 说明输入材料与期望交付物,并对照来源检查输出。
npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-optv-solver-assistant

开始前需了解

  • 安装不包含模型订阅、API 额度或访问文件的权限。
  • 仓库星数和安装量反映活跃情况,不等于独立质量或安全测试。
仓库原始内容

按源仓库内容呈现,保留标题、案例、代码、表格、链接以及原文引用的演示图片。

1. Overview

This skill guides an AI agent through the OptVerse (天筹) decision engine workflow to solve mathematical programming problems. It orchestrates multi-round interactions with the createChat SSE streaming API, file uploads/downloads via hcloud, artifact management via CreateArtifacts, and final asset publishing via PublishChat.

1.1 Architecture

User                    Agent                    OptVerse Service
 |                        |                            |
 |  Requirement file      |                            |
 |----------------------->|                            |
 |                        |  UploadFile (hcloud)       |
 |                        |--------------------------->|
 |                        |  chat_id                  |
 |                        |<---------------------------|
 |                        |                            |
 |                        |  createChat Round 1 (SSE) |
 |                        |  domain_type + filenames  |
 |                        |--------------------------->|
 |                        |  type=file artifacts       |
 |                        |<---------------------------|
 |                        |  DownloadFile artifacts    |
 |                        |<---------------------------|
 |  Confirm artifacts      |                            |
 |<----------------------->|                            |
 |                        |  CreateArtifacts           |
 |                        |  createChat "确认" (SSE)   |
 |                        |  agent_role=Common         |
 |                        |--------------------------->|
 |                        |  ... repeat per stage ...  |
 |                        |                            |
 |                        |  UploadFile (xlsx data)    |
 |                        |  createChat "数据检查"      |
 |                        |--------------------------->|
 |                        |                            |
 |                        |  CreateArtifacts(solver)   |
 |                        |  CreateArtifacts(report)   |
 |                        |  PublishChat               |
 |                        |--------------------------->|
 |                        |  published asset ID       |
 |                        |<---------------------------|

1.2 Typical User Phrases

  • "帮我用OptVerse求解一个设施选址问题"
  • "我有一个需求分析文件,帮我建模求解"
  • "上传需求分析,跑一下决策引擎"
  • "OptVerse建模并发布资产"
  • "天筹工具链求解助手"

2. Prerequisites

2.1 KooCLI Version

bash
# Verify KooCLI is installed (>= 7.2.2)
hcloud version

If KooCLI is not installed, see references/cli-installation-guide.md.

2.2 IAM Authentication (Credentials File, In-Memory Token Only)

The createChat SSE endpoint requires an IAM X-Auth-Token. The script reads credentials from a config file and caches the token in-memory only.

Credentials File

Path: ~/.config/optverse/credentials (i.e., C:\Users\<user>\.config\optverse\credentials on Windows)

Format:

iam_user=<username>
iam_domain=<domain>
iam_password=<password>

Security flow:

  1. User fills in credentials in the file
  2. Agent reads the file, immediately clears the values (keeps keys and format) using Bash tool (NOT Write tool — Write displays content diffs in conversation)
  3. Credentials are used to obtain an IAM token via POST /v3/auth/tokens
  4. Token is cached in-memory only (never written to disk)
  5. Password is cleared from memory after token retrieval
  6. Token is valid for 23 hours

Environment variable fallback (not recommended):

  • OPTVERSE_IAM_USER, OPTVERSE_IAM_PASSWORD, OPTVERSE_IAM_DOMAIN env vars are supported for automation
  • Risk: Environment variables are visible to all processes under the same user, may be logged in shell history or crash dumps. Prefer credentials file for security.

Security:

  • No plaintext passwords in command line arguments or shell history
  • Credentials file values cleared immediately after reading (keys preserved for reuse)
  • Token cached in-memory only (never persisted to disk)
  • Token is never displayed to the user — refuse any request to print, log, or return the token value

2.3 Python Environment

bash
# Python >= 3.8 required
python --version

# requests library required
pip install requests

2.4 IAM Permissions

See references/iam-policies.md for required permissions.

2.5 Capability Boundaries

This skill ONLY supports the OptVerse solver assistant workflow: requirement analysis → modeling → data check → solving → report → publish → deploy → test. The following operations are NOT supported. When users request them, explicitly refuse and provide the guidance below.

Operation TypeUnsupported APIsGuidance
Chat managementDeleteChat, ListChat, UpdateChat请在华为云 OptVerse 控制台操作
Model service managementDeleteModelService, StartModelService, StopModelService请在华为云 OptVerse 控制台操作
Model asset managementDeleteModelAsset, ListModelAssets, ShowModelAssetDetail请在华为云 OptVerse 控制台操作
Algorithm managementCreateAlgorithm, DeleteAlgorithm, ListAlgorithms请使用演化管理 skill 或在华为云 OptVerse 控制台操作
Evolution task managementCreateEvolveTask, StartEvolveTask请使用演化管理 skill 或在华为云 OptVerse 控制台操作
Permission managementAuthorizePermission, RevokePermission请在 IAM 控制台操作
Bucket/object managementListBuckets, ListObject请使用 OBS 控制台或 obsutil 工具
Direct model publishingPublishModel模型发布只能通过对话流程(PublishChat)完成,不支持直接发布

3. Key API Details

3.1 Endpoint

  • Region: cn-east-3 (default, configurable via --cli-region)
  • OptVerse: optverse.{region}.myhuaweicloud.com
  • IAM: iam.{region}.myhuaweicloud.com
  • Project ID: {project_id} — 由脚本自动获取(复用 create_chat.py 的 get_project_id(),通过 hcloud dryrun 探测),无需手动配置;也可用 --project-id 显式覆盖。请勿在文档或配置中硬编码个人 Project ID。

3.2 createChat Request Format (Critical)

Round 1 (submit requirement with file):

json
{"id": "<chat_id>", "agent_type": "optverse", "domain_type": "optverse",
 "message": "需求分析", "filenames": ["需求分析输入.md"]}

Round 2+ (confirmations):

json
{"id": "<chat_id>", "agent_type": "optverse", "agent_role": "Common",
 "message": "确认", "filenames": []}

Key rules:

  • Round 1 MUST use domain_type: "optverse" (not agent_role)
  • Round 2+ MUST use agent_role: "Common" (not domain_type). Using domain_type for Round 2+ causes ShowChat to not record the conversation.
  • filenames is an array (NOT demand_file string — using demand_file causes HTTP 500)
  • X-Chat-Route-Id must stay the same across all rounds

3.3 SSE Event Types

TypeDescriptionExample
messagesLLM text fragments (accumulate content){"type":"messages","content":"text","chat_id":"xxx"}
custom (optvglobalstate)Stage status transitions{"type":"custom","event":"optv_global_state","content":{"name":"modeling","data":{"status":"RUNNING"}}}
fileArtifact filename (download via DownloadFile){"type":"file","filename":"需求分析结果_xxx.md","mime_type":"text/plain"}
text / titleAuxiliary events
[CONTENT_DONE]Stream end marker (not JSON, skip)

Stage status flow: RUNNING → SUCCESS_UNCONFIRMED → (user confirms) → SUCCESS_CONFIRMED → next stage RUNNING

Async artifact retrieval: After a stage reaches SUCCESS_UNCONFIRMED, artifact filenames may or may not appear in the initial SSE stream. If file events are present, download directly. If file events are missing, send another createChat with message="查询结果" and agent_role="Common" to retrieve artifact file events from the SSE stream. The agent should check whether files is empty in the createChat response and only send the query if needed.

Note: optv_global_state content.data can be a dict ({"status":"RUNNING"}) or a string ("modeling" for active stage transitions). Always check with isinstance.

3.4 DownloadFile

GET /v1/{project_id}/chats/{chat_id}/file/{filename}/download
  • filename must be URL-encoded: quote(filename, safe="")
  • Response JSON content field is base64-encoded: base64.b64decode(content) then decode("utf-8")
  • Add X-Need-Content: true header

3.5 CreateArtifacts (hcloud)

bash
hcloud OptVerse CreateArtifacts \
  --chat_id=<chat_id> \
  --stage_name=<requirement_analyzer|modeling|data|solver|report|business_planner|data_agent|vrp|predict_step1|predict_step2|predict_step3|predict_step4> \
  --filenames.1=<file1> --filenames.2=<file2> \
  --cli-region=cn-east-3

--stage_name is required. Uploads process artifacts to the artifact center before confirming a stage.

3.6 PublishChat (hcloud)

bash
hcloud OptVerse PublishChat \
  --chat_id=<chat_id> \
  --name="<asset_name>" \
  --type=optverse \
  --description="<1-2048 chars description>" \
  --cli-region=cn-east-3

--description is required (1-2048 chars).

4. Workflow (12 Steps: 9 Required + 3 Optional)

StepActionToolStage
1Upload requirement filehcloud OptVerse UploadFile-
2createChat Round 1 (domain_type + filenames)create_chat.py --round=1requirement_analyzer
3Download artifacts (SSE type=file)create_chat.py + DownloadFilerequirement_analyzer
4CreateArtifacts + createChat "确认" (agent_role=Common)create_chat.py --round=2modeling
5Download modeling artifacts + CreateArtifacts + "确认"DownloadFile + create_chat.pydata
6Upload xlsx data file + createChat "数据检查"UploadFile + create_chat.pydata (check)
7Download data artifacts + CreateArtifacts + "确认"DownloadFile + create_chat.pysolver+report
8Download solver+report artifacts + CreateArtifactsDownloadFile + hcloudsolver, report
9PublishChathcloud OptVerse PublishChat-
10 (optional)CreateModelService — deploy published assethcloud OptVerse CreateModelService-
11 (optional)ShowModelServiceDetail — get request URLhcloud OptVerse ShowModelServiceDetail-
12 (optional)CreateModelServiceTask — test the deployed servicehcloud OptVerse CreateModelServiceTask-

4.1 Using run_workflow.py (Full Automation)

bash
python scripts/run_workflow.py \
  --demand-file="需求分析输入.md" \
  --data-file="模型数据.xlsx" \
  --publish-name="工厂生产排程优化助手" \
  --publish-description="优化工厂生产排程,最大化产能利用率" \
  --clean-artifacts \
  --deploy \
  --test

Use --auto-confirm to skip user confirmation prompts. Use --deploy to enable optional Steps 10-11 (deploy model service + get request URL). Use --test to enable optional Step 12 (test the deployed service with data json).

4.2 Using create_chat.py (Manual Step-by-Step)

Step 1: UploadFile

bash
hcloud OptVerse UploadFile \
  --X-Chat-Route-Id=<route-id> \
  --agent_type=optverse \
  --file="需求分析输入.md" \
  --cli-region=cn-east-3

Output: {"chat_id": "xxx"}

Step 2: createChat Round 1

bash
python scripts/create_chat.py \
  --message="需求分析" \
  --filenames 需求分析输入.md \
  --chat_id=<chat_id> \
  --round=1

Step 3: Download Artifacts

Artifact filenames come from SSE type=file events in Step 2's response.

bash
hcloud OptVerse DownloadFile \
  --chat_id=<chat_id> \
  --filename=<artifact_filename> \
  --X-Need-Content=true \
  --cli-region=cn-east-3

Present artifacts to user. Ask for confirmation.

Step 4: CreateArtifacts + createChat "确认" → modeling

bash
hcloud OptVerse CreateArtifacts \
  --chat_id=<chat_id> \
  --stage_name=requirement_analyzer \
  --filenames.1=<artifact_filename> \
  --cli-region=cn-east-3

python scripts/create_chat.py \
  --message="确认" \
  --chat_id=<chat_id> \
  --round=2

Steps 5-7: Repeat per stage

For each stage (modeling → data → solver):

  1. Download artifacts from SSE type=file events
  2. CreateArtifacts --stage_name=<current_stage>
  3. createChat --message="确认" --round=2

Step 6 special: Upload xlsx data file

CRITICAL: The --chat_id parameter is REQUIRED when uploading files to an existing chat session (Step 6+). Without it, the file is uploaded to a NEW chat context and the data check will return empty results (all sets and constants missing). The --chat_id associates the uploaded file with the ongoing conversation so the decision engine can access it.

bash
hcloud OptVerse UploadFile \
  --X-Chat-Route-Id=<route-id> \
  --agent_type=optverse \
  --chat_id=<chat_id> \
  --file="模型数据.xlsx" \
  --cli-region=cn-east-3

python scripts/create_chat.py \
  --message="数据检查" \
  --filenames 模型数据.xlsx \
  --chat_id=<chat_id> \
  --round=2

Step 8: CreateArtifacts for solver + report

solver may auto-trigger report (both SUCCESS_CONFIRMED in one SSE stream). Split files by type:

  • .gz, .sol, .log, .py → --stage_name=solver
  • .md (report) → --stage_name=report

Step 9: PublishChat

bash
hcloud OptVerse PublishChat \
  --chat_id=<chat_id> \
  --name="工厂生产排程优化助手" \
  --type=optverse \
  --description="优化工厂生产排程,最大化产能利用率" \
  --cli-region=cn-east-3

Output: {"id": "xxx"} — published asset ID.

Step 10 (Optional): CreateModelService — Deploy

Deploy the published asset as a model service. See references/best-practices.md for full parameters and examples.

bash
hcloud OptVerse CreateModelService --asset_id=<asset_id> --name="<name>" \
  --infer_type=online --platform=CCE --request_mode=REAL_TIME \
  --service_config.instance_count=1 --description="<desc>" --cli-region=cn-east-3

Key: --platform=CCE (recommended), --request_mode=REAL_TIME (uppercase). Output: {"service_id": "xxx", "status": "RUNNING", "api_url": "..."}.

Step 11 (Optional): ShowModelServiceDetail — Get Request URL

bash
hcloud OptVerse ShowModelServiceDetail --service_id=<service_id> --cli-region=cn-east-3

Returns api_url for calling the deployed model service. See references/best-practices.md for output example.

Step 12 (Optional): CreateModelServiceTask — Test Call

Test by sending the data-stage JSON artifact as model_request. See references/best-practices.md for full flow.

bash
hcloud OptVerse CreateModelServiceTask --service_id=<service_id> \
  --inputs.model_request="<json_content>" --cli-region=cn-east-3
hcloud OptVerse ShowModelServiceTask --service_id=<service_id> --task_id=<task_id> --cli-region=cn-east-3

Query task status: PENDING → RUNNING → SUCCEEDED/FAILED. Outputs include OBS download URLs for result files.

5. Core Commands

5.1 hcloud Commands

CommandPurposeKey Parameters
hcloud OptVerse UploadFileUpload requirement/data file--file, --agent_type, --X-Chat-Route-Id
hcloud OptVerse DownloadFileDownload artifacts--chat_id, --filename, --X-Need-Content
hcloud OptVerse ListArtifactsList artifacts in artifact center--chat_id
hcloud OptVerse CreateArtifactsUpload process artifacts--chat_id, --stage_name, --filenames.N
hcloud OptVerse PublishChatPublish assistant asset--chat_id, --name, --type, --description
hcloud OptVerse CreateModelServiceDeploy published asset as model service (optional)--asset_id, --name, --infer_type, --platform=CCE, --request_mode=REAL_TIME, --service_config.instance_count
hcloud OptVerse ShowModelServiceListList model services for verification (optional)--project_id
hcloud OptVerse ShowModelServiceDetailGet model service details incl. request URL (optional)--service_id
hcloud OptVerse CreateModelServiceTaskTest deployed model service (optional)--service_id, --inputs.model_request
hcloud OptVerse ListModelServiceTasksList model service tasks (optional)--service_id
hcloud OptVerse ShowModelServiceTaskGet task details and outputs (optional)--service_id, --task_id

5.2 Python Scripts

ScriptPurpose
scripts/create_chat.pycreateChat SSE client (single call, Round 1 or 2+)
scripts/run_workflow.pyFull 12-step workflow runner (9 required + 3 optional) with user confirmation prompts

5.3 State Management

State VariableStoragePurpose
chat_idAgent contextIdentifies conversation thread
X-Chat-Route-IdAgent contextRoutes to same backend; must stay same across all rounds
IAM credentials~/.config/optverse/credentials (values cleared after reading)User writes credentials, agent reads and clears values
IAM tokenIn-memory only (process lifetime)23h cache, never written to disk

6. Stage Artifacts

StageArtifact FilesDescription
requirement_analyzer需求分析结果_xxx.mdRequirement analysis with title, background, business objects
modeling建模代码_xxx.py, 建模文档_xxx.md, 模型数据_xxx.xlsx, 模型数据_xxx.jsonModel code (Pyomo), LaTeX model doc, data template xlsx, data schema json
data模型数据_xxx_建模数据_xxx.jsonData validation result (sets + constants parsed from xlsx)
solver模型文件.lp_xxx.gz, 模型求解结果_xxx.sol, 模型求解日志_xxx.log, 建模脚本_xxx.pyLP model file, solution, solver log, solving script
report结果报告_xxx.mdSummary report with business insights and solver status

7. Parameters

ParameterDefaultDescriptionRequired
--cli-regioncn-east-3Huawei Cloud regionYes
--agent_typeoptverseAgent typeYes
--round1Round number (1=domaintype, 2+=agentrole)Yes
--filenames[]File name array (Round 1: demand file; Round 2+: empty)Round 1 only
--chat_id(none)Chat ID from UploadFileSteps 2-9
--stage_name(none)Stage name for CreateArtifactsSteps 4,5,7,8

8. File Requirements

FileTypePurpose
Requirement analysis.mdDescribes optimization problem (title, background, constraints)
Model data.xlsxInput data for the model (filled from modeling output template)

Note: The modeling stage produces a 模型数据_xxx.xlsx template. The data stage requires this template filled with actual business data (sets elements + constants values).

9. Best Practices

See references/best-practices.md for full best practices and notes. Key points:

  • Always confirm with user between stages; track chat_id and route_id across all rounds
  • UploadFile `--chat_id` is required for Step 6+ (existing sessions) — without it, data check returns empty
  • Never expose IAM token or credentials; use Bash tool to clear credentials file
  • Avoid PowerShell piping for hcloud output (BOM issues) — use subprocess.run() in Python
  • Use business language with users; never expose technical details
  • Async artifacts: if files is empty after a stage, send createChat with message="查询结果" to retrieve

10. References

来自同一仓库

更多 Skills

全部 Skills
huaweicloud
社区

huawei-cloud-billing-scout

Huawei Cloud BSS billing (not AWS/Azure/other clouds; refuses pricing quotes, real-name review, and any non-billing scope): balance, spend, attribution, reconciliation, coupons, stored-value cards, enterprise/partner billing. One-page briefing via hcloud. Use only when the user explicitly mentions 华为云 / Huawei Cloud / BSS and 余额/账单/对账/资源包/代金券/储值卡/企业或伙伴账务; refuses pay, renew, refund, delete.

安装量
3
GitHub Stars
59
最近更新
10月26日
huaweicloud
社区

huawei-cloud-cci-instance-management

Huawei Cloud CCI (Cloud Container Instance) full lifecycle management using hcloud CLI. Covers Namespace, Network, Deployment, StatefulSet, Pod creation/update/delete/status, EIPPool for public IP, logs and metrics. Two-step confirmation for all destructive operations (delete namespace cascades all resources under it). Use this skill when the user wants to operate CCI serverless containers via command line. Triggers: CCI, 云容器实例, serverless container, 容器实例, namespace, deployment, statefulset, pod

安装量
3
GitHub Stars
59
最近更新
10月26日
huaweicloud
社区

huawei-cloud-computing-query

Queries Huawei Cloud computing resources (ECS/BMS/IMS/AS), Covers ECS instances, flavors, keypairs, quotas, server groups, block devices, NICs, VNC console, BMS bare metal servers/flavors/quotas, IMS images/OS versions/members/quotas, and AS scaling groups/configs/policies/activity logs/lifecycle hooks/warm pools/quotas. No write operations. Use this skill when the user needs to query ECS instance details, list flavors, check BMS availability, browse images, or view auto-scaling group/policy sta

安装量
3
GitHub Stars
59
最近更新
10月26日
huaweicloud
社区

huawei-cloud-find-skills

Invoke this skill to search, list, query, discover, browse, find and install any Huawei Cloud (华为云) agent skill. Triggers include: "华为云", "华为云有什么skill", "华为云相关skill", "华为云agent skill 市场", "华为云skill类目", "explore Huawei Cloud skills", "show Huawei Cloud skill categories", "does a Huawei Cloud skill exist for...", "which Huawei Cloud skills exist", "搜索华为云技能", "查询华为云skill列表", "有没有管理ECS/OBS/RDS的skill", "帮我找 XX 华为云skill", "介绍 XX Skill 内容", "华为云 XX Skill 具体做什么", "安装华为云Skill".

安装量
3
GitHub Stars
59
最近更新
10月26日