@volcengine/ark-cli-darwin-arm64 0.0.0-stage → 1.0.46-prerelease.2e2d76ea86c4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/LICENSE +201 -0
  2. package/bin/arkcli-darwin-arm64 +4 -0
  3. package/manifest.json +37 -0
  4. package/package.json +20 -4
  5. package/skills/arkcli-agent/SKILL.md +197 -0
  6. package/skills/arkcli-agent/references/activation.md +23 -0
  7. package/skills/arkcli-agent/references/agent.md +442 -0
  8. package/skills/arkcli-agent/references/byok.md +74 -0
  9. package/skills/arkcli-agent/references/context-management.md +61 -0
  10. package/skills/arkcli-agent/references/debug-export.md +27 -0
  11. package/skills/arkcli-agent/references/dream.md +91 -0
  12. package/skills/arkcli-agent/references/evals.md +215 -0
  13. package/skills/arkcli-agent/references/events-chat.md +192 -0
  14. package/skills/arkcli-agent/references/interfaces-gaps.md +55 -0
  15. package/skills/arkcli-agent/references/mcp-vault.md +111 -0
  16. package/skills/arkcli-agent/references/model-config.md +46 -0
  17. package/skills/arkcli-agent/references/self-hosted.md +47 -0
  18. package/skills/arkcli-agent/references/session-files.md +157 -0
  19. package/skills/arkcli-agent/references/session-upgrade.md +64 -0
  20. package/skills/arkcli-agent/references/skills.md +94 -0
  21. package/skills/arkcli-agent/references/todo-write.md +37 -0
  22. package/skills/arkcli-agent/references/vision-agent.md +92 -0
  23. package/skills/arkcli-api-explorer/SKILL.md +114 -0
  24. package/skills/arkcli-api-explorer/references/arkcli-api.md +185 -0
  25. package/skills/arkcli-api-explorer/references/evals.md +92 -0
  26. package/skills/arkcli-auth/SKILL.md +127 -0
  27. package/skills/arkcli-auth/references/api-key-query.md +74 -0
  28. package/skills/arkcli-auth/references/arkcli-auth-init-volc.md +58 -0
  29. package/skills/arkcli-auth/references/arkcli-auth-login.md +125 -0
  30. package/skills/arkcli-auth/references/arkcli-auth-status.md +41 -0
  31. package/skills/arkcli-auth/references/arkcli-auth-whoami.md +128 -0
  32. package/skills/arkcli-auth/references/auth-modes.md +101 -0
  33. package/skills/arkcli-auth/references/identity-resolution.md +74 -0
  34. package/skills/arkcli-auth/references/realname-gate.md +23 -0
  35. package/skills/arkcli-auth/scripts/key-metadata.jq +34 -0
  36. package/skills/arkcli-billing/SKILL.md +105 -0
  37. package/skills/arkcli-billing/references/arkcli-billing-list.md +247 -0
  38. package/skills/arkcli-billing/references/evals.md +50 -0
  39. package/skills/arkcli-chat/SKILL.md +229 -0
  40. package/skills/arkcli-chat/references/arkcli-chat.md +300 -0
  41. package/skills/arkcli-chat/references/caching-thinking.md +138 -0
  42. package/skills/arkcli-chat/references/chat-meta.md +77 -0
  43. package/skills/arkcli-chat/references/evals.md +60 -0
  44. package/skills/arkcli-chat/references/stream-events.md +163 -0
  45. package/skills/arkcli-chat/references/text-format.md +160 -0
  46. package/skills/arkcli-chat/references/tools.md +130 -0
  47. package/skills/arkcli-code-example/SKILL.md +73 -0
  48. package/skills/arkcli-code-example/assets/demo-code/examples.json +14 -0
  49. package/skills/arkcli-code-example/assets/demo-code/go/main.go +53 -0
  50. package/skills/arkcli-code-example/assets/demo-code/python.py +26 -0
  51. package/skills/arkcli-code-example/references/arkcli-code-example.md +146 -0
  52. package/skills/arkcli-code-example/references/evals.md +12 -0
  53. package/skills/arkcli-config/SKILL.md +129 -0
  54. package/skills/arkcli-config/references/arkcli-config-init.md +49 -0
  55. package/skills/arkcli-config/references/arkcli-config-profile.md +54 -0
  56. package/skills/arkcli-config/references/evals.md +87 -0
  57. package/skills/arkcli-connect/SKILL.md +62 -0
  58. package/skills/arkcli-connect/references/arkcli-connect.md +129 -0
  59. package/skills/arkcli-connect/references/evals.md +117 -0
  60. package/skills/arkcli-custommodel/SKILL.md +177 -0
  61. package/skills/arkcli-custommodel/references/arkcli-custommodel-available-quantizations.md +28 -0
  62. package/skills/arkcli-custommodel/references/arkcli-custommodel-delete.md +36 -0
  63. package/skills/arkcli-custommodel/references/arkcli-custommodel-get.md +45 -0
  64. package/skills/arkcli-custommodel/references/arkcli-custommodel-list.md +72 -0
  65. package/skills/arkcli-custommodel/references/arkcli-custommodel-quantize.md +58 -0
  66. package/skills/arkcli-custommodel/references/arkcli-custommodel-update.md +47 -0
  67. package/skills/arkcli-custommodel/references/arkcli-custommodel-upload.md +60 -0
  68. package/skills/arkcli-custommodel/references/evals.md +58 -0
  69. package/skills/arkcli-datasets/SKILL.md +41 -0
  70. package/skills/arkcli-datasets/references/commands.md +91 -0
  71. package/skills/arkcli-datasets/references/evals.md +30 -0
  72. package/skills/arkcli-deploy/SKILL.md +128 -0
  73. package/skills/arkcli-deploy/references/arkcli-deploy.md +138 -0
  74. package/skills/arkcli-deploy/references/evals.md +117 -0
  75. package/skills/arkcli-docs/SKILL.md +232 -0
  76. package/skills/arkcli-docs/references/commands.md +225 -0
  77. package/skills/arkcli-docs/references/evals.md +200 -0
  78. package/skills/arkcli-docs/references/failure-modes.md +77 -0
  79. package/skills/arkcli-doctor/CONTRIBUTING.md +202 -0
  80. package/skills/arkcli-doctor/SKILL.md +302 -0
  81. package/skills/arkcli-doctor/references/error-codes.md +504 -0
  82. package/skills/arkcli-doctor/references/evals.md +70 -0
  83. package/skills/arkcli-doctor/references/scope-account.md +205 -0
  84. package/skills/arkcli-doctor/references/scope-cli.md +217 -0
  85. package/skills/arkcli-doctor/references/scope-infer-endpoint.md +214 -0
  86. package/skills/arkcli-doctor/references/scope-metrics.md +197 -0
  87. package/skills/arkcli-doctor/references/scope-model.md +241 -0
  88. package/skills/arkcli-doctor/references/scope-report.md +242 -0
  89. package/skills/arkcli-doctor/references/verify-origin.md +142 -0
  90. package/skills/arkcli-gen/SKILL.md +348 -0
  91. package/skills/arkcli-gen/references/arkcli-gen-audio.md +125 -0
  92. package/skills/arkcli-gen/references/arkcli-gen.md +297 -0
  93. package/skills/arkcli-gen/references/evals.md +93 -0
  94. package/skills/arkcli-gen/references/gen-meta.md +182 -0
  95. package/skills/arkcli-gen/references/image-stream.md +105 -0
  96. package/skills/arkcli-gen/references/intent-and-validation.md +177 -0
  97. package/skills/arkcli-helper/SKILL.md +233 -0
  98. package/skills/arkcli-helper/references/arkcli-helper.md +372 -0
  99. package/skills/arkcli-helper/references/evals.md +110 -0
  100. package/skills/arkcli-infer-endpoint/SKILL.md +141 -0
  101. package/skills/arkcli-infer-endpoint/references/arkcli-infer-endpoint-create.md +142 -0
  102. package/skills/arkcli-infer-endpoint/references/arkcli-infer-endpoint-delete.md +68 -0
  103. package/skills/arkcli-infer-endpoint/references/arkcli-infer-endpoint-get.md +60 -0
  104. package/skills/arkcli-infer-endpoint/references/arkcli-infer-endpoint-list.md +142 -0
  105. package/skills/arkcli-infer-endpoint/references/arkcli-infer-endpoint-start.md +34 -0
  106. package/skills/arkcli-infer-endpoint/references/arkcli-infer-endpoint-stop.md +34 -0
  107. package/skills/arkcli-infer-endpoint/references/arkcli-infer-endpoint-update.md +76 -0
  108. package/skills/arkcli-infer-endpoint/references/evals.md +24 -0
  109. package/skills/arkcli-models/SKILL.md +314 -0
  110. package/skills/arkcli-models/references/arkcli-models-activate.md +110 -0
  111. package/skills/arkcli-models/references/arkcli-models-get.md +100 -0
  112. package/skills/arkcli-models/references/arkcli-models-list.md +73 -0
  113. package/skills/arkcli-models/references/arkcli-models-performance.md +32 -0
  114. package/skills/arkcli-models/references/arkcli-models-scenario-table.md +83 -0
  115. package/skills/arkcli-models/references/arkcli-models-search.md +208 -0
  116. package/skills/arkcli-models/references/evals.md +88 -0
  117. package/skills/arkcli-onboard/SKILL.md +81 -0
  118. package/skills/arkcli-onboard/references/evals.md +107 -0
  119. package/skills/arkcli-plans/SKILL.md +208 -0
  120. package/skills/arkcli-plans/references/arkcli-plans-agreement-signing.md +74 -0
  121. package/skills/arkcli-plans/references/arkcli-plans-buy.md +209 -0
  122. package/skills/arkcli-plans/references/arkcli-plans-get.md +96 -0
  123. package/skills/arkcli-plans/references/arkcli-plans-harness-status.md +149 -0
  124. package/skills/arkcli-plans/references/arkcli-plans-model-apply.md +56 -0
  125. package/skills/arkcli-plans/references/arkcli-plans-model-list.md +119 -0
  126. package/skills/arkcli-plans/references/arkcli-plans-personal-rotate-apikey.md +83 -0
  127. package/skills/arkcli-plans/references/arkcli-plans-renew.md +134 -0
  128. package/skills/arkcli-plans/references/arkcli-plans-team-rotate-apikey.md +108 -0
  129. package/skills/arkcli-plans/references/arkcli-plans-team-seat-assign.md +142 -0
  130. package/skills/arkcli-plans/references/arkcli-plans-team-seat-list.md +115 -0
  131. package/skills/arkcli-plans/references/evals.md +224 -0
  132. package/skills/arkcli-pricing/SKILL.md +125 -0
  133. package/skills/arkcli-pricing/references/arkcli-pricing-models.md +260 -0
  134. package/skills/arkcli-pricing/references/arkcli-pricing-plans.md +147 -0
  135. package/skills/arkcli-profile/SKILL.md +188 -0
  136. package/skills/arkcli-profile/references/arkcli-profile-create.md +101 -0
  137. package/skills/arkcli-profile/references/arkcli-profile-keys.md +100 -0
  138. package/skills/arkcli-profile/references/arkcli-profile-set-default.md +81 -0
  139. package/skills/arkcli-profile/references/evals.md +5 -0
  140. package/skills/arkcli-resources/SKILL.md +122 -0
  141. package/skills/arkcli-resources/references/arkcli-resources-list.md +140 -0
  142. package/skills/arkcli-shared/SKILL.md +236 -0
  143. package/skills/arkcli-shared/references/execution-context.md +108 -0
  144. package/skills/arkcli-shared/references/global-flags.md +45 -0
  145. package/skills/arkcli-shared/references/profile-defaults.md +57 -0
  146. package/skills/arkcli-shared/references/troubleshooting.md +36 -0
  147. package/skills/arkcli-shared/references/update.md +72 -0
  148. package/skills/arkcli-train-finetune/SKILL.md +123 -0
  149. package/skills/arkcli-train-finetune/references/ark-finetune-sdk.md +133 -0
  150. package/skills/arkcli-train-finetune/references/create.md +262 -0
  151. package/skills/arkcli-train-finetune/references/download.md +44 -0
  152. package/skills/arkcli-train-finetune/references/evals.md +14 -0
  153. package/skills/arkcli-train-finetune/references/export-deploy.md +177 -0
  154. package/skills/arkcli-train-finetune/references/job-configuration.md +122 -0
  155. package/skills/arkcli-train-finetune/references/list.md +78 -0
  156. package/skills/arkcli-train-finetune/references/manage.md +128 -0
  157. package/skills/arkcli-train-finetune/references/rl-plugins.md +77 -0
  158. package/skills/arkcli-train-finetune/references/testing-debug-monitoring.md +137 -0
  159. package/skills/arkcli-understand/SKILL.md +131 -0
  160. package/skills/arkcli-understand/references/arkcli-understand-asr.md +53 -0
  161. package/skills/arkcli-understand/references/arkcli-understand.md +268 -0
  162. package/skills/arkcli-understand/references/evals.md +119 -0
  163. package/skills/arkcli-understand/references/sub-skills.md +141 -0
  164. package/skills/arkcli-usage/SKILL.md +166 -0
  165. package/skills/arkcli-usage/references/arkcli-usage-balance.md +217 -0
  166. package/skills/arkcli-usage/references/arkcli-usage-plan-details.md +136 -0
  167. package/skills/arkcli-usage/references/arkcli-usage-plan.md +166 -0
  168. package/skills/arkcli-usage/references/arkcli-usage-seats.md +194 -0
  169. package/skills/arkcli-usage/references/arkcli-usage-stats.md +195 -0
  170. package/skills/arkcli-usage/references/evals.md +30 -0
  171. package/README.md +0 -3
@@ -0,0 +1,214 @@
1
+ # `arkcli doctor infer-endpoint`(单接入点诊断)
2
+
3
+ > 这是 [`arkcli-doctor`](../SKILL.md) 的 **infer-endpoint domain reference**。当用户/Agent 拿到一个 `ep-xxx` 接入点 ID,问『为什么报 429 / 慢 / 不可用 / 状态异常 / ModelAccessDenied / RateLimitExceeded / InvalidParameter / 用量多少 / 配额够不够 / 限流怎么处理』这类**单接入点级**问题时读这里。
4
+ >
5
+ > **CRITICAL — 开始前 MUST 先用 Read 工具读取**:
6
+ > - [`../../arkcli-shared/SKILL.md`](../../arkcli-shared/SKILL.md)(认证闸门、命令选择顺序)
7
+ > - [`../SKILL.md`](../SKILL.md)(doctor 总入口与路径决策表)
8
+
9
+ ## 它解决什么
10
+
11
+ `arkcli doctor infer-endpoint <ep-id>` 是一次性把"这个接入点现在到底什么情况"答出来的命令——状态 + 用量 + 错误率 + 错误码分布 + 配额压力,一屏看清。
12
+
13
+ | 用户场景 | Agent 跑什么 |
14
+ |--------------------------------------------|---------------------------------------------------------------------------------------------------|
15
+ | 「ep-xxx 报 429 怎么办」 | `arkcli doctor infer-endpoint ep-xxx` + 按错误码 reference 路由 |
16
+ | 「ep-xxx 报 ModelAccessDenied」 | 同上 + 加载 [`error-codes.md` §1.2](error-codes.md#12-modelaccessdenied) |
17
+ | 「ep-xxx 慢 / 用着越来越卡」 | `arkcli doctor infer-endpoint ep-xxx --window 1h` |
18
+ | 「ep-xxx 状态异常 / pull 不下来 / 挂了」 | 同上(status 异常时直接出 status_reason,不进 VMP,<2s 返回) |
19
+ | 「ep-xxx 一个请求为什么失败」 | 暂不支持单条请求级诊断——让用户提供错误码 / request_id / 完整错误 JSON,再走总入口 |
20
+
21
+ ## 边界:不做什么
22
+
23
+ - 不查 `sample_request_ids` / 不读 GPU 利用率、HPA 决策链等**平台内部数据**——这些是平台诊断的范畴,用户侧 doctor 拿不到。
24
+ - 不替代单条请求 trace(暂无 request 粒度反查)。
25
+ - 不替代用户 SLO 评价("50ms 算不算慢"由用户自己设 target,doctor 给的是分位数事实)。
26
+
27
+ ## 第一步:跑诊断
28
+
29
+ ```bash
30
+ arkcli doctor infer-endpoint ep-xxx
31
+ # 自定义时间窗(默认 24h):
32
+ arkcli doctor infer-endpoint ep-xxx --window 1h
33
+ # JSON 输出:
34
+ arkcli doctor infer-endpoint ep-xxx --format json
35
+ ```
36
+
37
+ > 调用决策树(doctor 内部,了解即可):
38
+ > ```
39
+ > endpoint exists?
40
+ > ↓ no → fail,让用户检查 ep-id
41
+ > ↓ yes
42
+ > status 异常?
43
+ > ↓ yes → 直接出 status_reason + 错误码 enrich,不进 VMP(<2s)
44
+ > ↓ no
45
+ > VMP preflight 通过?
46
+ > ↓ no → blocking_dependency.vmp.* → 引导 account scope 修 VMP 三段
47
+ > ↓ yes
48
+ > 查 VMP(错误码分布 + qps_peak + tpm_peak)→ 算错误率 + 配额压力 → 错误码 enrich + 输出
49
+ > ```
50
+
51
+ > 如果 VMP preflight 失败(doctor 输出 `error.blocking_dependency.vmp.*`),先去修账号级的 VMP 三段授权——由 `arkcli doctor account` 输出引导,配合 [`../../arkcli-shared/SKILL.md`](../../arkcli-shared/SKILL.md) / [`../../arkcli-auth/SKILL.md`](../../arkcli-auth/SKILL.md) 处理。VMP 没通的时候 endpoint 性能段拿不到数据。
52
+
53
+ ## 第二步:读输出(4 段)
54
+
55
+ ### ① Endpoint 基础信息
56
+
57
+ | Check ID | 看什么 | 失败/异常时 |
58
+ |-----------------------------------|------------------------------------------------|------------------------------------------------------------------------------|
59
+ | `endpoint.exists` | endpoint 是否存在 | 不存在 → 让用户核对 ep-id 或换 profile |
60
+ | `endpoint.status` | 状态 + 异常原因 (`Running` / `Failed` / ...) | `Failed` → 直接看 `status_reason`(如 `ImagePullBackOff`),通常是模型版本/镜像/资源问题 |
61
+ | `endpoint.model_info` | 模型名 / 版本 / 模态 | 模态决定下一步看什么指标(LLM vs 生图 vs 生视频) |
62
+
63
+ > **status fail 时不要继续读后面的指标**——endpoint 都没起来,VMP 上自然没流量数据。直接给用户 status_reason 的解释 + 修复建议(重新 deploy / 换模型版本 / 提工单)。
64
+
65
+ ### ② Performance(VMP 时间窗内)
66
+
67
+ | Check ID | 看什么 | 怎么判断 |
68
+ |---------------------------|------------------------------------------------|-------------------------------------------------------------------------------|
69
+ | `endpoint.usage` | 调用次数 / token 用量(输入 + 输出分开) | 仅展示,不告警 |
70
+ | `endpoint.error_rate` | 错误率(按模态分流,与 `quota_pressure` 同款思路)| 默认阈值 5%,≥5% 标 ⚠。LLM/生图 → `overall.rate_percent`;生视频 → `request.rate_percent`(前端调用错误率)+ `task.rate_percent`(异步执行错误率,doctor 侧从成功率取 `1 - rate`)|
71
+ | `endpoint.errors` | 错误码分布(按模态分流,与 `error_rate` 同款思路) | LLM/生图 → `errors.overall.by_error_code[]`(`code` + `http_status_code` 拆桶;LLM 用 `code` 标签,生图用 `volc_error_code`,统一成 `code` 字段);生视频 → `errors.task.by_error_code[]`(仅任务执行失败,无 `http_status_code` 维度);主导错误码 → 加载对应错误码 reference |
72
+
73
+ **错误码路由**——按 doctor 总入口的 references 表:
74
+
75
+ | 错误码 | 加载 reference |
76
+ |-------------------------------------------|---------------------------------------------------------------------------------------------------------|
77
+ | `ModelAccessDenied` | [`error-codes.md` §1.2](error-codes.md#12-modelaccessdenied) |
78
+ | `RateLimitExceeded` / 429 | [`error-codes.md` §1.3](error-codes.md#13-ratelimitexceeded) |
79
+ | 生视频 `Output*SensitiveContentDetected*` 系列 | [`error-codes.md` §1.1](error-codes.md#11-生视频特有seedance) 5 个完整 subtype |
80
+ | 其它 | `arkcli doctor error <code>` 查表,按返回的 `subtype` 跳节 |
81
+
82
+ ### 按模态看哪些性能指标
83
+
84
+ 读完 § ① 拿到 `endpoint.model_info` 的 modality 后,**只看该模态相关的延迟 / 生成时长指标**——不同模态的 UX 主体验不同,看错的指标会得出错误结论。
85
+
86
+ | Modality | 主指标 | 看什么 | 用于 |
87
+ |------------|------------------------------------------------|------------------------------------------------------------------|---------------------------------------------------------------|
88
+ | **LLM** | `endpoint.ttft.{p50, p99}` | 首 token 延迟分位 | 流式对话 UX 核心("打字开始等多久") |
89
+ | | `endpoint.tpot.{p50, p99}` | 每 token 延迟分位 | 长文输出体验("打字越来越慢") |
90
+ | **生图** | `endpoint.gen_time.{avg, p99}` | 平均生成时间 / p99(无 TTFT/TPOT 概念) | 生图主指标——慢就是这个数大 |
91
+ | **生视频** | `endpoint.queue_time.{avg, p99}` | 平均排队时长 / p99 | **生视频独有**:GPU/TPU 紧张时排队是主延迟来源 |
92
+ | | `endpoint.gen_time.{avg, p99}` | 排队后实际生成耗时 | 与 queue_time 拼起来才是端到端 |
93
+ | | `endpoint.video_duration_distribution` | 生成时长分布(5s / 10s / 30s 等) | 计费 + 业务行为画像 |
94
+
95
+ > doctor 输出里如果某段缺失(比如 `ttft` / `tpot` 当前未提供),如实告诉用户该指标暂不可用,**不要假装能给数字**。看不到延迟分位时,用户问"为啥慢"只能从错误率 + 配额压力两个角度说。
96
+
97
+ > 跨接入点看模型整体("我的 doubao-pro-32k 整体怎么样")→ 跳 [`scope-model.md`](scope-model.md):模型级配额 / top endpoint 分析 / 跨 endpoint 时序模式都在那个 reference。
98
+
99
+ ### ③ 配额压力(接入点级 vs 模型级)
100
+
101
+ | Check ID | 看什么 | 怎么判断 |
102
+ |--------------------------------|------------------------------------------------|---------------------------------------------------------------------------------------|
103
+ | `endpoint.quota_pressure` | 接入点 RPM/TPM 实际峰值 / 上限 | 阈值见 [`../SKILL.md`](../SKILL.md) "配额压力阈值"段 |
104
+
105
+ **判断逻辑**:
106
+ - 接入点级压力高(≥80%)但模型级低 → **业务流量分布不均**,建议加副本或调流量分配,不必提配额
107
+ - 接入点级 + 模型级都高 → **真的需要提配额**,给提配额工单 URL(控制台路径,按 modality 不同)
108
+ - 接入点级低、模型级高 → 多半是其它 endpoint 把模型配额吃了,去 `arkcli doctor model <name>` 看跨接入点情况
109
+
110
+ ### ④ Findings + Recommended fixes
111
+
112
+ doctor 把上面三段聚合成 finding 列表 + 建议修复。给用户时摘**最关键的 1-3 条**,**不要复述完整 JSON**。
113
+
114
+ ## 聚合统计 vs 原始时序:什么时候用哪种
115
+
116
+ doctor 默认输出的是**聚合统计值**(一个数概括一段时间,如 `error_rate.overall.rate_percent=3.3%`、`ttft.p99=850ms`、`tpm_peak=14.2M`)——足够回答"健康吗 / 配额够吗"。
117
+
118
+ 但底层数据来自 VMP 的 Prometheus 时序流,必要时可以拿**原始时序**(按 `step` 取点,通常 1min 粒度)做更深的分析。聚合是平均,**会平均掉突发与抖动**——单凭聚合值无法回答"是不是某一刻爆发的"。
119
+
120
+ > **原始时序边界**:当前 `doctor infer-endpoint` 只返回聚合结果,不提供原始时序切换参数。用户确实需要按时间点分析时,转到 [`scope-metrics.md`](scope-metrics.md) 核对具名查询或 raw 查询能力;不要承诺本命令会返回 `series.<metric>[]`。
121
+
122
+ ### 决策规则
123
+
124
+ | 用户问什么 | 用哪种 | 原因 |
125
+ |--------------------------------------------------|-------------------|----------------------------------------------------------------------------|
126
+ | 「现在/最近怎么样 / 健康吗」 | 聚合(默认) | 一个数足以判断"要不要进一步查" |
127
+ | 「错误是某个时间突然爆发的吗」 | 原始时序 | 聚合把尖峰平均掉了;时序能看到时间分布 |
128
+ | 「流量是匀速还是脉冲」 | 原始时序 | 看曲线形状判断是否要削峰填谷 / 加副本 |
129
+ | 「慢的时候是哪几个时刻 / 持续多久」 | 原始时序(含分位)| p99 时序告诉你是持续慢还是周期性慢 |
130
+ | 「配额压力是稳定高还是偶发顶撞」 | 原始时序 | `tpm_peak` 一个数看不出"长期 70% 还是只有 1 分钟撞 99%" |
131
+ | 「发工单要附数据」 | 聚合 + 原始时序 | 工单要结论也要证据:聚合证明问题,时序证明时间分布 |
132
+ | 「我接入点突然变慢/出错前后做了什么」 | 原始时序 | 与变更/部署时间点对齐,找因果 |
133
+
134
+ > 给用户的输出里**不要直接贴一长串原始时序数据**。多模态 agent 应该消化时序后给一句结论性描述("错误集中在 14:05-14:08 的 3 分钟里,之后归零"),并附前后聚合对比。
135
+
136
+ ### 每类指标,原始时序能告诉你什么
137
+
138
+ | 指标 | 时序模式 → 推断 |
139
+ |-------------------------------------|---------------------------------------------------------------------------------------------------------------------------|
140
+ | `request.qps` / RPM | 平稳 = 业务稳定;尖峰 = 突发流量;阶梯上升 = 业务增长(提前规划提配额);周期性 = cron / 定时任务 |
141
+ | `error_count` by `error_code` | 集中在某 1-5 分钟 = 临时故障(可能是平台侧 incident);均匀分布 = 常态问题,按错误码 enrich 修;与 QPS 同步 = 过载触发 |
142
+ | `error_rate` | 错误率随 QPS 上升而上升 = 过载 / 配额;错误率与 QPS 无关 = 配置/权限类(如 ModelAccessDenied 跟流量没关系) |
143
+ | `ttft.p99` / `tpot.p99` | 与 QPS 同步上升 = 拥塞;与 QPS 无关的尖峰 = 上游/下游某次抖动;持续偏高 = 模型/版本变化(**当前未提供**) |
144
+ | `gen_time.p99` / `queue_time.p99` | `queue_time` 拉高 = GPU 紧张(提配额或换时段);`gen_time` 拉高但 `queue` 不变 = 模型 / 输入复杂度变了 |
145
+ | `tpm_peak` / `qps_peak` | 长期 50-70% 偶尔顶 95% = 业务有脉冲,副本数够但单副本会撞顶;持续 90%+ = 真的需要提配额 |
146
+
147
+ ### 原始时序分析的 anti-pattern
148
+
149
+ - **只看一两个点**:时序至少看一个完整周期(业务上是 1h / 1d,按场景)
150
+ - **用绝对值不看上下文**:「错误数 100」是好是坏取决于总 QPS,错误率才是横向可比的
151
+ - **把瞬时 spike 当趋势**:5 分钟一次的尖峰可能只是定时任务或客户端 cron
152
+ - **不对齐时间窗**:error_rate vs QPS 比对必须用同一时间窗、同一 step
153
+
154
+ ### 当前局限(要诚实告诉用户)
155
+
156
+ - **当前未提供 `latency.ttft.p99` / `tpot.p99`**。用户问"为什么慢"时只能从错误率 + 配额压力两个角度说,**不要假装能给延迟分位**。
157
+ - **暂不支持 `request_id` 反查**。用户拿一条具体请求来问,先追问错误码或完整错误 JSON,再走错误码路由。
158
+ - **原始时序数据是用户 AK/SK 能看到的范围**,不要尝试关联平台内部 trace(k8s pod 状态等)——那是平台诊断的事。
159
+
160
+ ## 常见 Finding → 修复路径
161
+
162
+ | Finding | severity | 修复方向 |
163
+ |------------------------------------------------------|----------|------------------------------------------------------------------------------------|
164
+ | 状态 `Failed: ImagePullBackOff` | fail | 重新 deploy / 换模型版本;持续失败提工单 |
165
+ | `ModelAccessDenied` 占比高 | fail | 加载 [`error-codes.md` §1.2](error-codes.md#12-modelaccessdenied):账号未开通该模型 / 子账号缺权限 |
166
+ | `RateLimitExceeded` 占比高 + 接入点级 TPM ≥95% | fail | 提配额(控制台)+ QoS 调整 |
167
+ | 总错误率 ≥5% 但无主导错误码 | warn | 错误码分布尾部、定位不到单一根因——给用户做问卷或 sample 错误日志 |
168
+ | 接入点级 TPM 80-95% / 模型级 < 50% | warn | 流量分布不均;不必提配额 |
169
+
170
+ ## 给用户看的话术
171
+
172
+ 读完输出后按以下顺序:
173
+
174
+ 1. **状态结论一句话**:endpoint Running / Failed / 受影响范围。
175
+ 2. **关键问题**:摘最关键的 finding(fail 优先;多 fail 按 error_code Top 排),并附**一条**已加载好的 error reference 里的修复方案。
176
+ 3. **配额上下文**:如果配额压力 warn,告诉用户是接入点级还是模型级,建议是"调分布"还是"提配额"。
177
+ 4. **下一步建议命令**:执行类(重新 deploy / `+gen` 重试)的命令**先给用户看、等确认**,不替按。
178
+
179
+ ## 安全与边界
180
+
181
+ - **只读优先**:`arkcli doctor infer-endpoint` 默认只读,不消耗推理 token、不重新发请求。
182
+ - **修复路径由输出与 reference 给出**:例如模型权限开通引导;doctor 进程不直接调 IAM / 改控制面。
183
+ - **越权边界**:只读用户 AK/SK 能拿到的 Ark API + VMP 数据;不读平台内部 trace/调度数据。
184
+
185
+ ## 何时 _不_ 用本 reference
186
+
187
+ - 想**创建** endpoint → 走部署 skill(一键)或 [`../../arkcli-infer-endpoint/SKILL.md`](../../arkcli-infer-endpoint/SKILL.md)(细控)
188
+ - 想**列 / 启 / 停 / 更新** endpoint → [`../../arkcli-infer-endpoint/SKILL.md`](../../arkcli-infer-endpoint/SKILL.md)
189
+ - 跨接入点看模型整体("我的 doubao-pro-32k 整体怎么样")→ [`scope-model.md`](scope-model.md)
190
+ - 账号级问题(实名 / 欠费 / IAM 策略 / VMP 三段)→ `arkcli doctor account` + [`../../arkcli-shared/SKILL.md`](../../arkcli-shared/SKILL.md)
191
+ - 想看用量明细(不带"为什么/异常"判断)→ [`../../arkcli-usage/SKILL.md`](../../arkcli-usage/SKILL.md)
192
+
193
+ ## Seedance 2.x 效果问题上报路由
194
+
195
+ 用户只描述某个 Seedance 2.x 接入点的效果问题,或**同时要求检查 / 诊断 / 排查 / 分析原因和上报**时,必须先完整执行本 `doctor infer-endpoint` 诊断,不能直接转 `doctor report`。诊断意图优先于上报意图;只有不含任何诊断诉求的纯上报请求才可能走 `scope-report.md` 的 Path B。诊断输出里的 `report_suggestion.model_supported=true` 只表明 endpoint 关联的 foundation model 落在客户端已知的 seedance 2.x 家族前缀内(`doubao-seedance-2-*`),是**诊断后的发现提示**;家族内该具体版本是否受理、以及 task 的存在性 / 归属 / 完成状态 / 重复提交都由服务端校验(见 `reason` 字段)。是否询问用户由 agent 二次判定,按下面这张分流表来:
196
+
197
+ | 用户诉求 / 诊断信号 | 是否属于"效果类" | agent 行为 |
198
+ |--------------------------------------------------------------------------------|------------------|------------------------------------------------------------------|
199
+ | 角色 ID 漂移 / 字幕拼写错 / 水印 / 风格漂移 / 闪烁 / 拼接跳变 / 角色重复 / 音频尾部杂音 / 中文发音错 / 音色参考错 | ✅ 效果类 | **完成本次诊断后**一句话意向探询;用户明确同意才参数收集并跑 report |
200
+ | task expired / 429 / ModelAccessDenied / ContentRiskBlocked / endpoint 状态异常 / 错误率高 / 配额压力高 | ❌ 错误码 / 运行类 | **不要**提上报,按错误码分布 / [`error-codes.md`](error-codes.md) 处理 |
201
+ | 用户只说"看看 ep-xxx"没描述具体现象 | 未知 | **不要**主动提上报,先看诊断输出再决定要不要追问 |
202
+
203
+ 判定原则:**上报接口只处理"生成成功但效果差"的 case**——服务端 case-platform 会异步拉视频 / 输入帧做效果分析,对失败或不受支持模型的 task 会拒绝。所以诊断建议依赖**用户原始诉求 + doctor 输出的 error_rate / errors 分布**,而不是 `model_supported` 一个 bool;错误码路径与 badcase 路径互斥。
204
+
205
+ **分工原则**:Agent 层做**一句话意向探询 + 参数收集**(不做仪式感的重复确认),CLI 层弹**结构化 prompt** 做唯一决定性确认。**不要**替用户擅自发起上报,也不要伪造 task_id。上报流程、命令细节、11 个 badcase_type 枚举都在 [`scope-report.md`](scope-report.md)。
206
+
207
+ ## 参考
208
+
209
+ - [`../SKILL.md`](../SKILL.md) — 总入口与路径决策
210
+ - [`error-codes.md`](error-codes.md) — 错误码总册(含 §1.2 ModelAccessDenied / §1.3 RateLimitExceeded / §1.1 生视频)
211
+ - [`scope-model.md`](scope-model.md) — 单模型诊断(联动看跨接入点)
212
+ - [`scope-report.md`](scope-report.md) — seedance 2.x 效果问题上报(badcase report)
213
+ - [`../../arkcli-shared/SKILL.md`](../../arkcli-shared/SKILL.md) — 共享执行协议
214
+ - [`../../arkcli-infer-endpoint/SKILL.md`](../../arkcli-infer-endpoint/SKILL.md) — endpoint CRUD(doctor 不重复实现)
@@ -0,0 +1,197 @@
1
+ # `arkcli doctor metrics`(具名 PromQL 查询)
2
+
3
+ > 这是 [`arkcli-doctor`](../SKILL.md) 的 **metrics domain reference**。当用户/Agent 需要**直接拿一条具体可观测指标的数值**(过去 1h 错误码 429 在 Endpoint X 上的累计次数 / 模型 Y 的 P99 时延 / Prompt Cache 命中率 / 异步任务成功率 / ...)而不是走"endpoint 体检 / model 体检"的整套诊断时,读这里。
4
+ >
5
+ > **CRITICAL — 开始前 MUST 先用 Read 工具读取**:
6
+ > - [`../../arkcli-shared/SKILL.md`](../../arkcli-shared/SKILL.md)(认证闸门、命令选择顺序)
7
+ > - [`../SKILL.md`](../SKILL.md)(doctor 总入口与路径决策表)
8
+
9
+ ## 它解决什么
10
+
11
+ `arkcli doctor metrics` 是一份**编入 binary 的具名 PromQL 查询编目**。每条 entry 是一个可参数化的查询(template + params),覆盖 Ark 全部 21 个语义指标族 / 54 个原子指标 / 5 种计算方式(增量、速率、比值、分位数、瞬时值)——一共 36 条。
12
+
13
+ 跟 `doctor infer-endpoint` / `doctor model` 的关系:
14
+
15
+ | 想要…… | 跑哪条 |
16
+ |--------------------------------------------------|----------------------------------------------------------------|
17
+ | 一屏看清 ep-xxx 整体情况(状态 + 用量 + 错误率 + 配额)| `arkcli doctor infer-endpoint ep-xxx` |
18
+ | 一屏看清 model X 跨 endpoint 整体情况 | `arkcli doctor model X` |
19
+ | **拿一个具体可观测指标的数值** 给 LLM 推理 | `arkcli doctor metrics <id> --param ...` |
20
+ | 临时跑一条编目里没有的 PromQL | `arkcli doctor metrics raw --promql '...'` |
21
+
22
+ 后两条基础设施跟前两条共用同一条 VMP 链路(`vmp:QueryRange`),只是 PromQL 模板从内置 catalog 取而非诊断 scope 内部 hard-code。
23
+
24
+ ## 边界:不做什么
25
+
26
+ - **不做诊断决断**——只返指标数值,不打"红黄绿"健康判定。要红黄绿走 `infer-endpoint` / `model` scope。
27
+ - **不做 PromQL 合成器**——catalog 收的是已经被运维验证过的具名查询。任意 metric × 任意 calc 组合不放开。
28
+ - **不做面板**——输出是 series JSON / scalar 数值 / 表格,不试图复刻 timeseries 图。
29
+ - **不跨工作区**——一次调用 = 一个工作区 = 一条查询。
30
+
31
+ ## 第一步:看清编目
32
+
33
+ ```bash
34
+ # 列出 36 条具名查询(json 一行一 entry)
35
+ arkcli doctor metrics list
36
+
37
+ # 拿单条 entry 的完整元数据(template / params / 默认值 / 单位 / 聚合提示)
38
+ arkcli doctor metrics describe request.error.rate
39
+ ```
40
+
41
+ ## 第二步:执行查询
42
+
43
+ bare form: `arkcli doctor metrics <id> [--param key=val ...] [--filter label=value ...]`
44
+
45
+ ```bash
46
+ # 拿过去 1h Endpoint X 的 RPM, 按 api 拆
47
+ arkcli doctor metrics request.rpm.by_api --param endpoint=ep-202602xxx
48
+
49
+ # 模型 Y 过去 6h 的 P99 时延, 按 api+le 维度
50
+ arkcli doctor metrics request.duration.quantile \
51
+ --param model=doubao-pro-32k \
52
+ --param quantile=0.99 \
53
+ --window 6h
54
+
55
+ # 错误码分布: 把 endpoint 限定在 ep-x, 用 --filter 过出仅 429
56
+ arkcli doctor metrics request.error.distribution \
57
+ --param endpoint=ep-x \
58
+ --filter code=429
59
+
60
+ # scalar 形态 (给 agent 直接拿数值, 单位与聚合策略由 catalog.aggregation_hint 决定)
61
+ arkcli doctor metrics request.error.rate \
62
+ --param endpoint=ep-x \
63
+ --format scalar
64
+ # → {"query_id":"request.error.rate","value":0.0234,"unit":"ratio","aggregation":"mean", ...}
65
+
66
+ # 表格 (面向人, 每条 series 一行: latest / mean / max)
67
+ arkcli doctor metrics request.rpm.by_api --format table
68
+ ```
69
+
70
+ 公共 flag:
71
+
72
+ | flag | 默认 | 说明 |
73
+ |-------------------------|---------|---------------------------------------------------------------------|
74
+ | `--param key=val` | — | 重复绑定 catalog 声明的参数; 缺省走 entry default |
75
+ | `--filter label=value` | — | 重复, 注入额外 `label=~"value"` 过滤; 模板需声明 `${@filters}` 占位符 |
76
+ | `--window <duration>` | `1h` | 查询窗口, Go duration 语法 (不接受 `7d`) |
77
+ | `--step <duration>` | 自动 | step, 默认 window/60 clamp 到 [10s, 60s] |
78
+ | `--workspace-id <uuid>` | 自动 | VMP 工作区 ID, 缺省走 `ListTelemetryConfigs` 反查 |
79
+ | `--format <fmt>` | `json` | `json` / `scalar` / `table` |
80
+
81
+ ## 第三步:逃生口
82
+
83
+ catalog 不够用 → `arkcli doctor metrics raw --promql '<expr>'`(必须引用至少一个 `ark_*` 指标,挡掉 `node_*` / `up{}` 等无关 metric)。
84
+
85
+ ```bash
86
+ arkcli doctor metrics raw \
87
+ --promql 'sum(rate(ark_api_proxy_request_total{ark_endpoint="ep-x"}[5m])) by (api)' \
88
+ --window 30m
89
+ ```
90
+
91
+ ## 输出形态
92
+
93
+ 无论哪种 format,顶层结构都包含:
94
+
95
+ - `query_id` —— catalog entry id (raw 路径不返此字段)
96
+ - `promql` —— **渲染后实际跑的 PromQL**, 必返。出问题时拷出来直接到 VMP 控制台对一遍。
97
+ - `window` —— `{start, end, step}` (RFC3339 + step 字面量)
98
+ - 数据字段 (三选一):
99
+ - `series` —— format=json, 全 series 全 points (Prometheus matrix 形态)
100
+ - `scalar` —— format=scalar, `{value, unit, aggregation}` 单值
101
+ - `table` —— format=table, 每条 series `{tags, latest, mean, max}` 一行
102
+
103
+ 错误形态:
104
+
105
+ - 参数错误 / 未知 entry id / `--filter` 在不支持的 entry 上 → 退出码 2,JSON `{ok:false, error:{type, message, hint}}`。`hint` 会给 "did you mean: <候选 id>" 之类的纠错。
106
+ - 工作区未绑定且未传 `--workspace-id` → 退出码 1,提示绑 VMP 或显式传 ID。
107
+ - 上游 VMP 错误(网络 / 鉴权 / 工作区不存在)→ 透传。
108
+ - 命中数据 0 → 退出码 0,数据字段为空数组 / 零值。Agent 据此分支即可。
109
+
110
+ ## 36 条具名查询编目(按 namespace 分组)
111
+
112
+ > **注**:这份清单是 catalog 当前快照,catalog 可能在仓库 PR 后扩展。**任何时候用 `arkcli doctor metrics list` 或 `describe <id>` 取最新元数据,不要依赖本表手抄的参数列表**。
113
+
114
+ ### A. 用户面 API 代理 (`ark_api_proxy_*`)
115
+
116
+ | ID | calc_kind | 单位 | 含义 |
117
+ |---------------------------------|----------------------|-------------|--------------------------------------------------|
118
+ | `request.rpm.by_api` | increase_sum | req/min | 接口 RPM, 按 api 拆 |
119
+ | `request.tpm.input` | rate | tokens/sec | 输入 Token 速率 |
120
+ | `request.tpm.output` | rate | tokens/sec | 输出 Token 速率 |
121
+ | `request.error.rate` | ratio | ratio | 错误率 (code!~Success 占比) |
122
+ | `request.error.distribution` | increase_sum | count | 错误码累计 (按 code, http_status_code, api 拆) |
123
+ | `request.duration.quantile` | histogram_quantile | seconds | 请求耗时分位数 (默认 P99) |
124
+ | `request.duration.avg` | ratio | seconds | 请求平均耗时 |
125
+ | `request.token.input.avg` | ratio | tokens | 平均输入 Token 数 |
126
+ | `request.token.output.avg` | ratio | tokens | 平均输出 Token 数 |
127
+ | `request.token.detail` | increase_sum | tokens | Token 细分(按 token_type 拆,常配 --filter 过滤) |
128
+ | `request.fallback.count` | increase_sum | count | 兜底模型触发次数 |
129
+
130
+ ### B. Prompt Cache
131
+
132
+ | ID | calc_kind | 单位 | 含义 |
133
+ |-----------------------------|-----------|------------|--------------------------------------|
134
+ | `cache.hit.rate` | ratio | ratio | hit_tokens / (hit_tokens + missed) |
135
+ | `cache.hit.tokens` | rate | tokens/sec | 命中 Token 速率 |
136
+ | `cache.missed.tokens` | rate | tokens/sec | 未命中 Token 速率 |
137
+
138
+ ### C. 流式吐字间隔
139
+
140
+ | ID | calc_kind | 单位 | 含义 |
141
+ |------------------------------------------|--------------------|----------|------------------------------------|
142
+ | `request.stream.per_token.quantile` | histogram_quantile | seconds | 流式吐字间隔分位数 (排除首 token) |
143
+ | `request.stream.per_token.avg` | ratio | seconds | 平均流式吐字间隔 |
144
+
145
+ ### D. Realtime API
146
+
147
+ | ID | calc_kind | 单位 | 含义 |
148
+ |-----------------------------------------|-----------|-------------|------------------------------|
149
+ | `realtime.connections` | gauge | connections | 在线连接数 |
150
+ | `realtime.connection.duration.avg` | ratio | seconds | 平均连接时长 |
151
+ | `realtime.request.error.rate` | ratio | ratio | Realtime 请求错误率 |
152
+
153
+ ### E. Quota
154
+
155
+ | ID | calc_kind | 单位 | 含义 |
156
+ |--------------------------|-----------|------|---------------------|
157
+ | `quota.purchased.tpm` | gauge | tpm | 已购 PTU/TPM 配额 |
158
+
159
+ ### F. 异步网关 (`ark_user_ark_async_gateway_*`)
160
+
161
+ | ID | calc_kind | 单位 | 含义 |
162
+ |---------------------------------------------|----------------------|-----------|----------------------------------|
163
+ | `async.gateway.request.count` | increase_sum | count | 网关请求数 (按 action) — 该 metric 每个 label 组合是单点 series, rate() 全 0, 改用 increase() |
164
+ | `async.gateway.task.duration.quantile` | histogram_quantile | seconds | 任务总耗时分位数 (仅成功任务) |
165
+ | `async.gateway.task.duration.avg` | ratio | seconds | 任务平均耗时 |
166
+ | `async.gateway.task.success_rate` | ratio | ratio | succeed / (succeed+failed+expired)|
167
+ | `async.gateway.task.failure.distribution` | increase_sum | count | 失败原因累计 (按 volc_error_code) |
168
+ | `async.gateway.task.cancelled.count` | increase_sum | count | 取消任务数 |
169
+ | `async.gateway.task.expired.count` | increase_sum | count | 过期任务数 |
170
+ | `async.gateway.task.pending` | gauge | tasks | 当前 pending 任务数 |
171
+ | `async.gateway.task.queued` | increase_sum | tasks | 排队任务累计 (按 api 拆) |
172
+ | `async.gateway.task.queue_wait.quantile` | histogram_quantile | seconds | 排队等待时间分位数 |
173
+ | `async.gateway.concurrent_requests` | gauge | requests | 并发请求数 |
174
+ | `async.gateway.webhook.rate` | rate | calls/sec | webhook 调用速率 (按 callback_url) |
175
+
176
+ ### G. 内容生成 v2 (`ark_user_ark_content_generation_v2_*`)
177
+
178
+ | ID | calc_kind | 单位 | 含义 |
179
+ |------------------------------------------------|----------------------|----------|-------------------------------------|
180
+ | `content.gen.request.count` | increase_sum | count | 请求数 (按 model_service_type) — 该 metric 每个 label 组合是单点 series, rate() 全 0, 改用 increase() |
181
+ | `content.gen.request.error.rate` | ratio | ratio | 错误率 (http_status_code!=200) |
182
+ | `content.gen.request.duration.quantile` | histogram_quantile | seconds | 请求耗时分位数 |
183
+ | `content.gen.image.distribution.by_resolution` | increase_sum | images | 图像生成分辨率累计 |
184
+
185
+ ## Agent 路由提示
186
+
187
+ 用户问什么 → 跑哪条:
188
+
189
+ - **"过去 N 时间错误率多少 / 错了多少次"** → `request.error.rate` (比例) 或 `request.error.distribution` (按错误码计数)
190
+ - **"P99 / P95 时延是多少"** → `request.duration.quantile` (`--param quantile=0.99`)
191
+ - **"流式吐字快不快"** → `request.stream.per_token.quantile` 或 `.avg`
192
+ - **"接入点 / 模型现在并发多少 / RPM 多少"** → `request.rpm.by_api` (近 1m 增量) 或 `async.gateway.concurrent_requests` (异步类)
193
+ - **"Prompt Cache 命中率"** → `cache.hit.rate`
194
+ - **"是不是触发了限流 (429 / RateLimitExceeded)"** → `request.error.distribution --filter code=429`
195
+ - **"异步任务成功率怎么样"** → `async.gateway.task.success_rate`
196
+ - **"图像生成都生成了哪些分辨率"** → `content.gen.image.distribution.by_resolution`
197
+ - **catalog 不覆盖的边角查询** → `arkcli doctor metrics raw --promql '...'`,记得 PromQL 必须引用 `ark_*` metric