fix: 技能库删除单位换算硬规则(4个技能)

- model-auto-config/auto-api-pricing-config/model-onboarding/platform-architecture
- 定价按文档原文记录+单位如实标注,不预设不换算
- 单位吻合由测试记账核对暴露,差异交用户决策
This commit is contained in:
yumoqing 2026-09-02 17:50:10 +08:00
parent 94de38b22f
commit f7d44d18df
5 changed files with 28 additions and 18 deletions

View File

@ -47,8 +47,10 @@ tools: [fetch_model_doc, extract_llm_api_spec, apply_llm_config, platform_llm_st
## 定价生成规则(硬规则)
- 单位YAML 里 `unit_prices` 用人类可读值 + `unit: 百万` + `unit_values: {百万: 1000000}`
文档「元/百万tokens」直接落数值「元/千tokens」×1000 换算
- 单位:**按文档原文记录,不换算**。`unit_prices` 用文档数值,`unit` 用文档单位名,
`unit_values` 按该单位的实际 token/计量数设分母(如 文档「元/千tokens」→
`unit: 千` + `unit_values:{千:1000}`;文档「元/百万」→ `unit: 百万` + `{百万:1000000}`)。
引擎按 `amount = unit_prices × usage / unit_value` 计算,单位配错由测试记账暴露
- **区间下界含 0 必须用 `=~`**`0 =~ 128000``~=` 会排除 0 值导致计费为 0
- 键名是 `pricings`(复数);`unit_values` 只放实际用到的单位
- 缓存价:**只有定价文档明确列出缓存命中价才配置**(拆 `uncache_tokens`/`cached_tokens` 两因子);
@ -63,4 +65,4 @@ tools: [fetch_model_doc, extract_llm_api_spec, apply_llm_config, platform_llm_st
- `references/uapi-templates.md` — 协议模板库从生产真实配置提炼openai_compat 流式/多模态、
dashscope 异步、任务轮询型、音乐/3D 特殊响应、upapp/uapiio 样例
- `references/pricing-patterns.md` — 定价 YAML 五类模板token/缓存/视频秒/按次/积分)+ 单位换算
- `references/pricing-patterns.md` — 定价 YAML 五类模板token/缓存/视频秒/按次/积分)+ 单位表

View File

@ -20,17 +20,21 @@ pricing_item(旧表,参考) spec_value / pricing_unit / pricing_amount / cost_a
新配置统一走 `pricing_data` YAML`pricing_item` 是历史遗留,了解即可。
## 单位换算表(元 → YAML unit_prices
## 单位表(按文档原文记录,不换算)
| 文档单位 | 换算 | YAML 落法 |
引擎公式:`amount = unit_prices × usage / unit_value``unit_values` 是单位的计量数,
**按文档单位如实设置**,不做数值换算:
| 文档单位 | `unit` | `unit_values` 落法 |
|---|---|---|
| 元/百万tokens | 直接 | `unit_prices: 6.0` + `unit: 百万` + `unit_values:{百万:1000000}` |
| 元/千tokens | ×1000 | `unit_prices: 6.0` + `unit: 百万`×1000 再落百万) |
| 元/秒(视频/音频) | 直接 | `unit_prices: 1.6` + `unit: 秒` |
| 元/次 | 直接 | `unit_prices: 0.2` + `unit: 次` |
| 元/张(图片) | 直接 | `unit_prices: 0.2` + `unit: 次`(按张=按次 |
| 元/百万tokens | `百万` | `{百万: 1000000}` |
| 元/千tokens | `千` | `{千: 1000}` |
| 元/秒(视频/音频) | `秒` | `{秒: 1}` |
| 元/次 | `次` | `{次: 1}` |
| 元/张(图片) | `次` | `{次: 1}`(按张=按次,在 description 注明 |
**禁止** `6e-06` 这种科学计数法——引擎会二次除法算错。
文档没有的单位不要发明;计量数配错会在测试记账阶段暴露。
## 模板 1文本模型 token 计价(缓存拆分仅当文档明确列出缓存价)

View File

@ -16,7 +16,7 @@ tools: [fetch_model_doc, extract_llm_api_spec, apply_llm_config, platform_llm_st
2. **提取**`extract_llm_api_spec(doc_text)` → 结构化规格。重点核对:
- `endpoints[].base_url / region`domestic 国内 / international 国际)
- `protocol`:能走 `/chat/completions` 的一律 `openai_compat`
- `models[].price_*`单位统一**元/千tokens**。文档给「元/百万」必须 ÷1000保留6位小数
- `models[].price_*`按文档原文记录,单位在 description 中如实标注(如「元/百万tokens」禁止换算
- `models[].cost_*`:供应商成本,未知时与 price 相同
3. **确认**:把端点、协议、每个模型的定价摘要给用户确认后再落库。
4. **落库**`apply_llm_config(spec)`(幂等:供应商按名复用、模型按
@ -25,17 +25,19 @@ tools: [fetch_model_doc, extract_llm_api_spec, apply_llm_config, platform_llm_st
## 硬规则
- **定价真实性**:文档没写价格的模型 → 价格填 `null` 并在 description 注明,绝不编数字。
- **单位换算**:元/百万tokens ÷ 1000 = 元/千tokens
- **单位**:价格按文档原文记录,单位如实标注在 description禁止自行换算——单位是否吻合由上线测试阶段的记账核对验证
- **缓存价**:仅当定价文档明确列出缓存命中价时记录;未列就不配置,禁止从输入价推导缓存价。
- **thinking 模式**:开源模型思考/非思考输出价不同且平台计费时无法区分 → 取较高(思考)价兜底,并在 description 注明。
- **协议限制**:非 `openai_compat` 的模型,模板会存档但运行时暂不可被产线调用,
`apply` 返回的 `runtime_note` 必须如实转告用户。
- **端点去重**同供应商已有端点不重复添加apply 内部已合并,确认时留意新增数)。
## 定价示例(换算
## 定价示例(按文档原文
文档:「输入 2 元/百万tokens输出 6 元/百万tokens」
→ price_input = 0.002price_output = 0.006(元/千tokens
→ price_input = 2price_output = 6description 注明「单位:元/百万tokens」。
**不换算**——单位语义由人工确认阶段决定注意llm_model 四价在结算代码中按
元/千token 语义使用,若单位不一致测试阶段记账核对会暴露,届时人工决策)。
## 验证

View File

@ -31,7 +31,7 @@ tools: [fetch_model_doc, extract_llm_api_spec, apply_llm_config, platform_llm_st
|---|---|---|
| llm_vendor | 供应商 + 端点目录 | endpoints JSON: [{base_url, region, timeout}],全球端点配一次 |
| llm_api_profile | 适配模板 | **按协议×能力去重**,同 (protocol, capability) 复用,勿重复建 |
| llm_model | 模型目录 | vendor_model_id + profile_id + ppid + 四价(元/千token |
| llm_model | 模型目录 | vendor_model_id + profile_id + ppid + 四价(按文档原文记录;结算代码按 /1000 语义计费,单位吻合由测试记账核对 |
| llm_account | 供应商账号 | api_key(AES) + endpoint_ids(选用端点下标) + balance(成本侧钱包) |
| llm_org_policy | 机构策略 | 主模型 + 备链 + 端点偏好;**有它才启用治理** |
| llm_org_quota / llm_user_quota | 机构池/个人额度 | 余额+限流,预授权从这里冻结 |
@ -122,7 +122,9 @@ asyncio.run(m())
**测试通过判据(四项缺一不可)**
- [ ] `CALL_OK`:模型真实返回内容(不是报错/空)
- [ ] `llm_usage` 有新流水且 `status=ok`status=failed 即未通过)
- [ ] `charge = req_tokens/1000×price_input + resp_tokens/1000×price_output`(售价侧金额与四价吻合,核对 llm_model 定价)
- [ ] `charge` 与配置口径一致:将 llm_model 落库的四价代入引擎结算公式(`govern_settle`
`charge` 应等于引擎实际计算值;**口径以落库配置为准,不预设任何单位**——
若与文档标注单位明显不符,如实报告差异并交用户决策,禁止自行改价
- [ ] 账号 `balance` 减少 ≈ `cost`(成本侧扣减生效)
任一项不通过:**禁止进入上线步骤**,先查根因(见故障对照表)。
@ -164,7 +166,7 @@ asyncio.run(m())
## 硬规则
- 定价只来自文档原文(参见 auto-api-pricing-config 技能);缓存价/折扣价未列不配
- 定价只来自文档原文**按文档原文记录、不换算不推导**(参见 auto-api-pricing-config 技能);缓存价/折扣价未列不配
- apikey 只在 `llm_account`AES**不写进技能/日志/回报文本**
- 改 apikey、改策略后必须重启进程内缓存
- 测试不过不上线;测试必查调用成功 + 记账四项,缺流水即失败

View File

@ -38,7 +38,7 @@ role角色执行/ pm审核复盘/ qc门禁/ failed失败处
1. **供应商**llm_vendor协议 + 端点目录base_url/region/timeout全球端点配一次
2. **账号**llm_account选端点 + 独立充值记账api_key 单层 AES 加密
3. **适配模板**llm_api_profile按协议×能力去重request/response/param_schema
4. **模型目录**llm_modelvendor_model_id + 能力 + 模板引用 + 四价price_in/out、cost_in/out,元/千tokens
4. **模型目录**llm_modelvendor_model_id + 能力 + 模板引用 + 四价price_in/out、cost_in/out;按文档原文记录,结算代码按 /1000 语义计费
5. **客户配置**llm_org_policy主备模型 + 端点偏好any/prefer/must × domestic/intl
限流窗口与记账按(账号,端点)对;多账号轮转 + 主备容错。