[BUG] ark-plan-api 不能正确添加提供商,也无法通过base url获取模型列表
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 35/100
- Issue-Typ
- Bug
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- javascript, node.js
- Bereich
- backend
Rechercherichtung
Start with the dsh-plugins/ark-plan-api package, especially its cordis.patch.yml and README, then inspect how the plugin’s provider configuration interacts with user patches and how model discovery builds /models requests. Reproduce both reports: a user llm-pi-ai provider patch hides the plugin routes, and the Agent Plan URLs return 404 for model listing while inference works. Done means the provider routes remain available with user configuration and the README explains that these endpoints do not support listing models.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
- 仓库:volcengine/ark-cli
- 组件:
dsh-plugins/ark-plan-api(npm:@volcengine/[email protected],当前 registry latest) - 建议标签:
bug
TL;DR
- 插件通过给
llm-pi-ai写一条 行补丁 来注入 5 条 Ark 路由。但 DSH 的行补丁语义是config整体替换、不做深合并,而用户自己的cordis.patch.yml永远最后应用。只要 profile 里已经有一条- id: llm-pi-ai(任何自定义过 provider 的用户都会有),插件的providers就会被整段覆盖 —— 安装成功、bundle 显示ok,但模型页里一条 Ark 路由都不出现,也没有任何警告。 - 即使按 README 手动添加,两个 base URL 也 无法“获取模型列表”:Agent Plan 的推理路由根本没有
/models端点(实测 404),而 DSH 的模型发现固定请求{baseURL}/models或{root}/v1/models。模型清单在方舟侧只能通过管理面(arkcli plans model-list)拿到。
环境
| 项 | 值 |
|---|---|
| DSH | 0.2.1-rc.3(桌面版,desktop profile) |
| dshmarket | 1.70.1 |
| OS | Windows 11 x64 |
| Node | v24.21.0 |
@volcengine/ark-plan-api |
0.1.0 |
问题一:安装后「设置 → 模型」里没有任何 Ark 提供商
期望
README 写的是:安装后 Ark Agent Plan / Coding Plan / 后付费模型 直接出现在 DSH 的模型选择器里,用户只需要贴 API Key。
实际
package.json的dsh.profile.bundles里确实有@volcengine/ark-plan-api,市场也显示 bundleok;- 但「设置 → 模型」里没有
ark-agent-plan-cn/ark-coding-plan-cn/ark-coding-plan-byteplus/ark-cn/ark-byteplus这 5 条路由中的任何一条; - 重启无效,日志里也没有任何相关警告。
根因:DSH 的 patch 是「整体替换 config」,用户层最后应用
DSH 的补丁合成语义(dsh-app-boot):
for (const [key, value] of Object.entries(overrides)) {
if (key === "id") continue;
target[key] = value; // config 整体替换,不是深合并
}
官方文档字符串也明确写了:
Other patches replace supplied fields; config is replaced wholesale, not deep-merged.
A patch config replaces the whole config.
应用顺序是:bundle 层(按 dsh.profile.bundles 顺序)→ 用户 cordis.patch.yml → launcher 层。
插件的 cordis.patch.yml 里这样写:
- id: llm-pi-ai
config:
providers:
ark-agent-plan-cn: ...
ark-coding-plan-cn: ...
# …共 5 条
而它的注释把安全性建立在这个假设上:
A row patch replaces the wholeconfigof the targeted row; dsh-base mountsllm-pi-aiwith no config, so restating onlyprovidershere is safe.
这个假设只在 profile 里没有别的层配置过 llm-pi-ai 时成立。 而用户层永远排在 bundle 层之后,所以只要用户已经写过:
- id: llm-pi-ai
name: "@deepseek-ai/dsh-llm-pi-ai"
config:
providers:
<自己的 provider>: ...
那么最终合成结果里的 llm-pi-ai.config.providers 就是用户那一段,插件的 5 条路由被整段丢弃 —— 静默失败。
这不是个别场景:llm-pi-ai 默认是空配置挂载,用户只要想用任何自定义 provider(自建网关、第三方协议、公司内网模型),就必然要在用户补丁层写这一行。也就是说,对最需要这个插件的用户群,插件默认完全无效。
复现步骤
- 任意 profile,在
~/.dsh/profiles/<name>/cordis.patch.yml里保留一条带providers的- id: llm-pi-ai(哪怕只有一个 provider)。 - 安装插件:
npx -y @deepseek-ai/dsh plugin --profile desktop add @volcengine/ark-plan-api - 重启 DSH,打开「设置 → 模型」。
- 结果:只有用户自己声明的 provider,插件的 5 条
ark-*路由全部缺失;无报错、无警告。
(把用户补丁层里的 llm-pi-ai 行整段删掉后,5 条路由才会出现。这也解释了为什么有人能正常看到、有人完全看不到。)
问题二:按 README 手动添加时,两个协议的 base URL 都「获取模型列表」失败
复现时使用的是文档给出的两个 base URL:
- Anthropic 兼容:
https://ark.cn-beijing.volces.com/api/plan - OpenAI 兼容:
https://ark.cn-beijing.volces.com/api/plan/v3
DSH 侧「获取模型列表」的请求 URL 构造规则(dsh-llm-pi-ai):
function listingUrl(baseURL, api) {
const base = baseURL.replace(/\/+$/, "");
if (api !== "anthropic-messages") return `${base}/models`;
return `${base.endsWith("/v1") ? base.slice(0, -3) : base}/v1/models?limit=${String(ANTHROPIC_MODEL_LIMIT)}`;
}
即:
- OpenAI 协议 →
GET https://ark.cn-beijing.volces.com/api/plan/v3/models - Anthropic 协议 →
GET https://ark.cn-beijing.volces.com/api/plan/v1/models?limit=1000
实测(有效 Agent Plan Key):
| 请求 | 结果 |
|---|---|
GET /api/plan/v3/models(Authorization: Bearer) |
404(空响应体) |
GET /api/plan/v1/models?limit=1000(Authorization: Bearer) |
404(空响应体) |
POST /api/plan/v1/messages(x-api-key 或 Authorization: Bearer) |
200(正常返回 type=message) |
POST /api/plan/v3/responses(Authorization: Bearer) |
200(正常返回 object=response) |
后两行是对照组:同一把 Key、同一批路由,推理接口完全正常,说明 Key 与鉴权都没问题;只有 /models 列表端点在 Agent Plan 路由上不存在。
所以:
- 「获取模型列表」失败不是用户的 Key 或网络问题,也不是前缀拼错;
- Agent Plan 的推理 base URL 不提供模型清单能力;方舟侧查询 Plan 可用模型的入口是管理命令
arkcli plans model-list --plan agent-plan,与推理 base URL 不是同一个面; - 插件 README 却只写「贴 Key 即可,无需额外配置」,没有提示「这两个 base URL 不支持拉取列表,必须手填模型或从
plans model-list导入」。
补充:用 Anthropic 协议、x-api-key 去请求 /api/plan/v1/models 会得到 401 AuthenticationError,而同一个 Key 请求 /api/plan/v1/messages 是 200 —— 这个 401 具有误导性,会让人以为 Key 无效或协议选错,实际原因是该路径不存在。建议至少在文档里点明。
- Vorherrschende Sprache
- jq
- Sterne
- 147
- Forks
- 18
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus volcengine/ark-cli
-
不支持查询模型单元的数量?Offen
Schwierigkeit 3/5 Ein halber Tag Anfängerfreundlichkeit 22/100
volcengine/ark-cli#33 ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
volcengine/ark-cli#30 · 1 Kommentar ·
-
dsh-plugins/ark-managed-agents: client face crashes DSH Desktop boot on 0.2.0-rc.2 (MCP row is fine)Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
volcengine/ark-cli#29 · 1 Kommentar ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 25/100
volcengine/ark-cli#28 · 2 Kommentare ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
volcengine/ark-cli#27 · 1 Reaktion ·
Alle Issues in volcengine/ark-cli
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 64/100
FinanceFlash/unvibecode#577 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
umbraco/Umbraco-CMS-MCP-Editor#274 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
ProdigyV21/ARVIO#873 ·
Maintainer antworten meist innerhalb von 1 Tag
-
[FEATURE]: Set fieldPath and reason on the CEL validation rulesEvtl. vergeben @bjosv hat das heute übernommen. Offenenhancement needs-triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
valkey-io/valkey-operator#618 ·
Maintainer antworten meist innerhalb von 3 Tagen