docs(skill): 媒体契约升级三数组image_files/audio_files/video_files(r2v变长数组Jinja for动态组装,禁固定槽位);干跑双形态;坏模板apply自愈禁转嫁人工手改

This commit is contained in:
yumoqing 2026-09-06 10:26:47 +08:00
parent 0d1a9dd188
commit e62fe66af3

View File

@ -32,7 +32,7 @@ tools: [fetch_model_doc, extract_llm_api_spec, apply_llm_config, apply_model_pri
建定价方案+时序YAML并挂 ppid出处URL+文档原文写入描述。
6. **测试**`test_model_call(model_name, prompt, params)` 真实调用走完整治理链。
前置:供应商账号已配 api_key没配如实告知用户去补禁止伪造结果
生成类模型 params 传 image_file/resolution/duration 等;返回 task_ref/usage/media生成物本地URL
生成类模型 params 传 image_files/audio_files/video_files字符串或数组均可+ resolution/duration 等;返回 task_ref/usage/media生成物本地URL
7. **记账检查**`check_model_accounting(task_ref)` 查三态 + 独立复算金额:
- accounted 且 amount_match=true → 全链通过,汇报金额
- created → 等 60~120 秒再查(出账循环 60 秒一轮)
@ -67,20 +67,26 @@ tools: [fetch_model_doc, extract_llm_api_spec, apply_llm_config, apply_model_pri
`{{ b64media2url(request, params.xxx_file) }}` 骨架——纯文生视频(t2v)没有图片输入,
运行时渲染即崩(`'dict object' has no attribute 'xxx_file'`。i2v 那份能跑全靠手工修。
**现行机制**apply_llm_config 落库时自动执行):
**现行机制**apply_llm_config 落库时自动执行2026-09-06 三数组契约版
- 提取层的 `request_example`(文档 cURL/代码示例的完整请求体,逐字照抄)驱动模板生成:
- `model` 键 → `{{ model|tojson }}``prompt/text` 键 → `{{ prompt|tojson }}`
- 示例里是 URL 叶子且结构/键名带媒体线索first_frame/img_url 等)或能力属输入媒体类
(i2v/i2i/v2v) → `{{ b64media2url(request, params.image_file|video_file|audio_file)|tojson }}`
- **媒体数组**(如 r2v `input.media: [{type, url}...]` 变长,最多 9 张)→
按元素 type 归组到统一参数 `image_files/audio_files/video_files`
生成 Jinja `{% for _f in ... %}` 动态组装(`is string` 判断兼容字符串/数组两形态;
元素结构逐字保留仅 URL 叶子换 b64media2url混合类型多循环 namespace 计数合并逗号)。
**禁止按示例元素个数展开固定槽位**——r2v 曾因按示例 3 元素展开成
image_file 单值契约渲染崩2026-09-06 实测)。
- 单值上传媒体URL 叶子且带媒体线索)→ `{{ b64media2url(request, <scalar_expr>)|tojson }}`
- 其他标量 → `{{ params.<键名>|default(<文档示例值>)|tojson }}`(业务参数带文档默认值)
- **示例里没有上传媒体就不生成媒体参数**——t2v 模板自然纯文本i2v 才带 image_file
- **示例里没有上传媒体就不生成媒体参数**——t2v 模板自然纯文本
- 响应模板:产物字段路径递归取 `response_example` 里的 URL 字段(如 output.video_url
`downloadfile2url` 落地;文档没给响应示例用供应商惯例兜底并在 notes 如实标注
- 请求头按文档示例带DashScope 异步必需 `X-DashScope-Async: enable`,协议兜底自动补)
- **落库前干跑渲染自检**StrictUndefined 模拟运行时命名空间):模板引用运行时拿不到的
变量当场拦截,报进 `template_errors`——宁可不建,不埋雷到 test 才崩
- 旧骨架模板(含 `__from_doc__`/`__note__`/`xxx_file` 标记)视为不可用,
apply 时自动弃用status=deprecated并按文档示例重建
- **落库前干跑渲染自检双形态**StrictUndefined数组+字符串各渲染一遍):模板引用运行时
拿不到的变量、或只兼容单一形态,当场拦截报进 `template_errors`——宁可不建,不埋雷
- 旧骨架模板(含 `__from_doc__`/`__note__`/`xxx_file`/旧单值 `params.image_file)` 标记)
视为不可用apply 时自动弃用status=deprecated并按文档示例重建——**存量坏模板
重跑一次 apply 即自愈,不需要人工去页面改**
- 任务查询接口供应商级共用DashScope 全系生成模型都是 GET /tasks/{task_id}
查询步骤模板按 `{protocol}-query-{path}` 命名复用,多模型共享一份
@ -151,32 +157,37 @@ accounted成功/ failed失败。出账前置模型有产品映射
+ 挂 ppid缺一出账置 failed 并写明原因。非 token 计价因子存 llm_usage.usages。
内部助手工具 `check_model_accounting` 检查三态并对 accounted 流水独立复算金额。
## 媒体转换铁律2026-09-05 用户定夺——每个 llm_api_profile 配置必查
## 媒体转换铁律2026-09-06 用户定夺三数组契约——对齐 sage/llmage
生成类模型t2i/i2v/t2v/tts/i2i/v2v/3d 等出参是文件的能力)的适配模板
生成类模型t2i/i2v/t2v/r2v/tts/i2i/v2v/3d 等出参是文件的能力)的适配模板
`llm_api_profile`**data 和 response 必须处理两个媒体转换逻辑**
- **上行request_template / data**:上传/本地媒体一律 `xxx_file` 命名,
`{{ b64media2url(request, params.image_file) }}` 转成本地公网 URL
再传上游base64 落盘 → /idfile 公网地址;已是 http/https URL 则原样透传)。
- **上行request_template / data**:上传媒体统一三数组参数
`image_files` / `audio_files` / `video_files`(值为**字符串或数组均可**
Jinja 模板 `is string` 动态判断两形态。r2v 这类变长输入(最多 9 张参考图、
有些模型图/视频/音频任意组合)用 `{% for %}` 循环按文档示例结构动态组装。
每个元素经 `{{ b64media2url(request, _f) }}` 转成本地公网 URL 再传上游
base64 落盘 → /idfile 公网地址;已是 http/https URL 则原样透传)。
- **下行response_template**:上游生成物 URL 用
`{{ downloadfile2url(request, output.video_url) }}` 落地为本地持久 URL
再给调用者——**上游 URL 有效期极短DashScope 视频仅 24 小时),不落地即丢**。
同类能力对外契约统一i2v 一律 `image_file` 进 → `video` 出;
t2i 出 `image`。模板不用为同一类能力写多套参数名。
同类能力对外契约统一i2v/r2v 一律 `image_files` 进 → `video`t2i 出 `image`
旧单值别名 `xxx_file`/`xxx_url` 与 DashScope 形态 `media` 数组由运行时
`_normalize_media_aliases` 自动归一进三数组(按 type 分组),调用方传哪种都兼容。
**执行机制(已落地,非口头约定)**
- 推理层 `inference.py` 已把 `downloadfile2url`/`b64media2url` 注入模板命名
空间(`_media_ns_extra`request=None 时走部署机 `BASEURL` 兜底拼公网地址)。
- `apply_llm_config` 落库后自动调 `_audit_media_convention` 审计本次涉及的
生成类模板,缺转换函数会返回 `media_audit` 警告,必须如实转告用户。
- 非标协议骨架模板已自带转换占位,人工只需把产物字段名换成文档真实路径。
**核对清单(配每个生成类模型都过一遍)**
1. request 模板含 image/video/audio 上传参数 → 是否有 `b64media2url`
2. response 模板 → 产物 URL 是否经 `downloadfile2url` 落地?
3. 出参字段名是否与同类能力一致video/image
1. request 模板媒体参数是否用三数组契约image_files/audio_files/video_files
2. 变长媒体数组是否 `{% for %}` 动态组装(非固定槽位)且兼容字符串/数组两形态?
3. 每个媒体元素是否经 `b64media2url`
4. response 模板产物 URL 是否经 `downloadfile2url` 落地?
5. 出参字段名是否与同类能力一致video/image
## 提取链路机制2026-09-05 修复)
@ -207,6 +218,9 @@ t2i 出 `image`。模板不用为同一类能力写多套参数名。
1. 先看报错原文定位是哪一环(门禁/上游/模板/记账),不猜。
2. 模板类错误:把渲染结果打出来对照期望 JSON历史案例媒体数组收尾花括号
顺序错 `}}]``}]}`,渲染断裂在 column 361
**模板渲染报错=生成器机制缺陷,禁止让用户去模型治理页面手改模板**2026-09-06
r2v 实测教训:助手把 image_file 渲染崩转嫁人工兜底)——如实报告错误原文+
判断的根因即可,修复生成器后重跑 apply 自愈(旧坏模板自动弃用重建)。
3. 记账类 failed按 note 原因对号——未挂ppid→apply_model_pricing未映射产品→
产品管理导入;金额不符→核对 usages 维度值与定价 YAML 的维度值是否逐字一致
480P≠480字符串必须精确匹配