From d8ba6f210f5062a241576fb6a668d7b4b73ac20d Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sat, 12 Sep 2026 13:03:30 +0800 Subject: [PATCH] =?UTF-8?q?docs(skill):=20model-auto-config=E7=AB=AF?= =?UTF-8?q?=E7=82=B9/=E8=B7=AF=E5=BE=84=E8=81=8C=E8=B4=A3=E7=BA=A6?= =?UTF-8?q?=E5=AE=9A=E9=87=8D=E5=86=99=E2=80=94=E2=80=94=E7=AB=AF=E7=82=B9?= =?UTF-8?q?=E5=8F=AF=E4=BA=92=E6=8D=A2(=E4=B8=BB=E6=9C=BA=E6=A0=B9+region+?= =?UTF-8?q?timeout,protocol=E6=A0=87=E7=AD=BE=E5=BA=9F=E6=AD=A2),profile.p?= =?UTF-8?q?ath=3D=E5=AE=8C=E6=95=B4=E7=9B=B8=E5=AF=B9=E8=B7=AF=E5=BE=84(?= =?UTF-8?q?=E5=90=AB=E7=89=88=E6=9C=AC=E6=AE=B5),endpoint=5Fids=E7=A9=BA?= =?UTF-8?q?=3D=E5=85=A8=E9=83=A8=E7=AB=AF=E7=82=B9;=E8=AE=B0=E5=BD=952026-?= =?UTF-8?q?09-12=E6=B5=8B=E8=AF=95=E6=9C=BA=E6=95=B0=E6=8D=AE=E8=BF=81?= =?UTF-8?q?=E7=A7=BB(=E8=87=AA=E6=A0=A1=E9=AA=8C14/14)=E4=B8=8E=E5=B7=B2?= =?UTF-8?q?=E5=BA=9F=E6=AD=A2=E6=97=A7=E6=9C=BA=E5=88=B6=E6=B8=85=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/model-auto-config/SKILL.md | 61 ++++++++++++------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/skills_library/pipelines/platform_general/common/model-auto-config/SKILL.md b/skills_library/pipelines/platform_general/common/model-auto-config/SKILL.md index ccb1e0a..7cd6bcf 100644 --- a/skills_library/pipelines/platform_general/common/model-auto-config/SKILL.md +++ b/skills_library/pipelines/platform_general/common/model-auto-config/SKILL.md @@ -15,8 +15,9 @@ tools: [fetch_model_doc, extract_llm_api_spec, apply_llm_config, apply_model_pri 1. **抓取**:`fetch_model_doc(url)` → 纯文本(末尾自动带 [出处URL] 行)。失败/内容不足如实说明,不凭记忆编。 2. **提取**:`extract_llm_api_spec(doc_text)` → 结构化规格。**成功后规格自动锚定到本会话缓存** (会话级隔离,返回里有 `__anchored__` 提示)。重点核对: - - `endpoints[].base_url / region`(domestic 国内 / international 国际) - - `protocol`:能走 `/chat/completions` 的一律 `openai_compat`;提交+轮询的填 `dashscope_async` + - `endpoints[].base_url / region`(domestic 国内 / international 国际)—— + base_url 只填**主机根**(scheme+域名),路径段归 chat_path/步骤 path(见「端点/路径职责约定」) + - `protocol`:能走 chat/completions 语义的一律 `openai_compat`;提交+轮询的填 `dashscope_async`(协议只决定模板形态,不再参与端点选择) - `models[].capability`:必须在能力字典内(见硬规则) - `models[].sync_mode`:提交后需轮询的填 async - `pricing.items[]`:每条带 factor/unit_price/unit/dimensions/doc_quote(文档原文定价句) @@ -119,32 +120,46 @@ schema 是 Bricks 动态表单的渲染契约,违规字段会被前端**静默 - 模板渲染失败**不要**手工拼模板内容找用户确认方案——修正规格(补 request_example)重新 extract→apply 即可,全链幂等;旧坏模板会被自动弃用重建 -## 端点协议感知(2026-09-05 404 实测教训) +## 端点/路径职责约定(2026-09-12 重构:端点可互换,废止协议感知) -**症状**:dashscope_async 原生模型 test_model_call 报「异步任务提交失败 HTTP 404」, -但模板渲染正常。 +**核心原则(用户定夺)**: +1. **模型和端点不能强绑定**:供应商有多个端点时,每个端点都必须支持所有模型。 + 端点是纯连接点 = 主机根(scheme+域名)+ region + timeout,多端点只为冗余/区域/多 key。 +2. **模型中不能把端点写进 path**:profile.path 是从主机根起的**完整相对路径** + (含版本段),运行时 url = 端点主机根 + path。禁止 path 写全 URL、禁止端点 + base_url 带路径段。 -**根因链**(三个环,缺一环都不 404): -1. 供应商同时挂两类端点:`compatible-mode/v1`(openai_compat 对话用)与 - `api/v1`(原生异步生成用),路径前缀不同、**不可互换** -2. 账号「选用端点」只绑了 compatible-mode → 原生模型运行时被拼到 - `compatible-mode/v1/services/aigc/...` → 404 -3. 查询模板 path 带了 `/api/v1` 前缀,与端点 base_url 重复拼接 → 双前缀 404 +**新约定下的正确形态**(以阿里云百炼为例): +- 端点:`https://dashscope.aliyuncs.com`(单主机根,timeout 取该主机全部接口 + 形态的最大值,异步视频需 ≥120) +- t2t/m2t profile.path:`/compatible-mode/v1/chat/completions` +- 异步生成提交 path:`/api/v1/services/aigc/video-generation/video-synthesis` +- 异步查询 path:`/api/v1/tasks/{task_id}`(单花括号占位符) +- 账号 endpoint_ids:**空 = 选用全部端点**(语义即"任意端点皆可") -**机制修复**(已内置,无需人工): -- 端点落库带 `protocol` 标签;裸域 base_url(无路径段)自动拦截不入目录 -- `_pick_candidate` 协议感知:模型模板 protocol 与端点标签匹配才可用; - 有匹配端点时**只选匹配项**(不匹配/未标注的都排除) -- apply 自检:活跃账号未绑本协议端点 → 自动补绑并报 `account_notes` -- 运行时 `_join_url` 拼接去重:path 带 base_url 已有前缀时不重复拼 -- 提交模板按精确命名(`{protocol}-{cap}-自动配置-{指纹}`)查找,查询/下载步骤模板 - 命名形态不同,天然不会误选为提交模板(历史版本靠 LIKE 排除,已升级为指纹命名) +**已废止的旧机制**(2026-09-05 协议感知,勿再照做): +- ~~端点带 protocol 标签 + `_pick_candidate` 协议过滤~~ → 已删(它正是 t2t 间歇 + 404 根因:模型无 profile → 过滤跳过 → 被轮询到 api/v1 原生端点拼 + /chat/completions 404) +- ~~裸域 base_url 拦截~~ → 反转:主机根才是合法形态,apply/normalize_endpoints + 会把带路径段的输入确定性剥成主机根(同主机去重、timeout 取 max) +- ~~账号"协议补绑"自检~~ → 已删(端点等价后无补绑场景) +- ~~path 剥 base_url 前缀归一~~ → 反转:保留完整相对路径(`_norm_relative_path` + 只剥 scheme+host) **给内部 agent 的规则**: -- base_url 必须取文档示例 URL 除接口路径外的**完整前缀**(含 /api/v1 等路径段), - 裸域必 404;提取提示词已强调,若仍提成裸域用 overrides.base_url 纠正 -- 报 404 先看 apply 返回的 `account_notes`(账号绑定问题)与端点标签 - (供应商端点问题),不要重跑模板——模板渲染崩与端点 404 是两类病 +- 提取规格的 base_url 只填主机根;chat_path/各步骤 path 填完整相对路径(含版本段)。 + 提取提示词已按新约定改写;apply 有确定性归一兜底,但规格本身要按新约定给。 +- 报 404 先核对 profile.path 是否完整(缺版本段)与端点是否主机根,不要重跑模板。 +- 同主机不同协议形态(compatible-mode 与 api/v1)**不再拆成多个端点**——同一主机根 + 端点 + 不同 profile.path 即可。 + +**数据迁移记录(2026-09-12 测试机)**:7 供应商端点收敛主机根(智谱全角逗号 +脏数据一并修复);16 个 active profile path 补全前缀/全 URL 改相对;跨供应商共用 +profile 冲突(cHoLup m2t 被阿里+MiniMax 共用但版本段不同)按"克隆源模板只改 +path"拆分为独立 profile;空 profile 的 t2t/m2t 模型新建标准 openai_compat +profile;账号 endpoint_ids 清空。迁移脚本带自校验(host+新path==旧数据下能跑通的 +目标 URL,14/14 active 模型 OK 才写库),备份在测试机 backups/。 ## 定价(2026-09-05 新模式:一模型一方案,无 model 维度,无 filters)