pipeline-llm/README.md
yumoqing 660ad21365 feat(pipeline-llm): 模型治理模块v1.0.0 — 供应商/端点目录/账号钱包/模型注册/组织容错策略/限额限流/双维度记账
- 8张llm_前缀表(手写幂等DDL): vendor/account/model/api_profile/org_policy/org_quota/user_quota/usage
- gateway.py 门禁链: 限流→限额→策略选模型(主备容错)→账号×端点轮转(偏好过滤+余额加权+冷却避让)→预授权-结算
- api_key AES单层加密(非RC4,盐不对称不可解); 限流Redis分钟窗口(db4) fail-open
- 双维度记账: 一次调用同行记cost(账号侧)+charge(组织池侧); 充值=recharge行
- CRUD+index.ui 8卡片导航+总览; appcodes字典5组; 设计规范+30测试用例
- 策略即开关: 机构无策略→__LEGACY__走旧llm表(向后兼容零改动)
2026-09-01 17:27:17 +08:00

75 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# pipeline-llm — 产线平台模型治理模块
产线平台的模型层:供应商/账号/模型治理 + 组织容错策略 + 限额限流 + 双维度记账。
所有表 `llm_` 前缀建在宿主应用库pipeline
## 模块定位
解决五类问题:
1. **供给侧治理**:供应商协议+全球端点目录、账号(钱包)、模型注册、适配模板
2. **容量治理**:供应商限流 → 多账号轮转;多供应商 → 主备模型容错
3. **需求侧治理**:组织级模型容错策略、组织限额限流、个人限额限流
4. **计费**:双维度记账(成本侧记账号、消费侧记组织/个人),模型挂定价 `pricing_program.ppid`
5. **端点选择**端点目录配在供应商下全球配置一次账号选用端点客户按区域偏好prefer/must
## 数据表8 张)
| 表 | 说明 |
|---|---|
| `llm_vendor` | 供应商(协议 + 端点目录 JSON |
| `llm_account` | 供应商账号(钱包:余额/充值/选端点api_key AES 加密) |
| `llm_model` | 模型注册(能力分类/挂定价 ppid/成本售价name 唯一) |
| `llm_api_profile` | 适配模板(协议×能力形态去重) |
| `llm_org_policy` | 组织容错策略(主备模型 + 端点偏好) |
| `llm_org_quota` | 组织限额限流(池余额 + QPM |
| `llm_user_quota` | 个人限额限流(额度上限 + QPM |
| `llm_usage` | 用量流水(双维度记账事实表) |
## 调用门禁链
```
① 个人限流 → ② 组织限流 → ③ 个人额度 → ④ 组织池(预授权)
→ ⑤ 组织策略选模型(主→备) → ⑥ 账号×端点候选池(偏好过滤+余额加权+冷却避让)
→ ⑦ 调用 → ⑧ 结算(实际用量,多退少补,双维度记账)
```
任何一级不过:快速失败 + 明确中文原因(不挂起、不静默)。
## 集成方式(复用不改建)
模块只提供治理引擎与配置管理;实际 LLM 转发仍由宿主已有的
`pipeline_service.llm_bridge` / `llm_proxy` 承担,在两处挂钩子:
- `llm_bridge._get_model_config`:治理启用时前置解析(主备容错+端点选择)
- `llm_proxy.proxy_chat_completion`:调用前后接门禁与结算(运行环境 token 路径)
机构未配置治理(无策略、无新模型)→ 返回 `__LEGACY__`,调用方回退旧 `llm` 表,向后兼容。
## 宿主接入清单
1. `app/pipeline_app.py` init() 加 `load_llm()`try/except ImportError 兜底)
2. `build.sh`clone 枚举 + pip install 枚举 + CRUD 生成枚举 + wwwroot 符号链接枚举
3. `scripts/create_tables.py`IDE 幂等建表枚举加 `pipeline-llm`(或执行本模块 `mysql.ddl.sql`
4. `scripts/import_init.py`INIT_MODULES 加本模块 `init/data.json`appcodes 字典)
5. `conf/rp.json``/pipeline-llm/**` 注册到 `logined`;运行 `scripts/load_path.py`
6. `wwwroot/index.ui` 主菜单加「模型治理」项URL `/pipeline-llm`
7. `restart-pipeline.sh` 重启(.py 变更必须重启;`api_key` 有缓存,改 key 也须重启)
## 关键约定
- **api_key 用 AES 单层加密**`appPublic.aes.aes_encode_b64`password_key 做密钥)。
⚠️ 不用 RC4`password()/unpassword()` 盐不对称,加密后永久不可解。
- **限流用 Redis 分钟窗口原子计数**db4与会话 db3 隔离Redis 故障时限流放行fail-open
余额仍由 DB 条件 UPDATE 守住。
- **429 → (账号,端点)对冷却 60s**;账号级冷却用 `*` 通配键。
- **双维度记账**:一次调用同行记 `cost`(成本侧,账号余额扣)+ `charge`(消费侧,组织池扣);
充值是 `status=recharge` 行(对账用)。
- **预授权-结算**:调用前按预估冻结,调用后按实际 token 多退少补。
## 文档
- `docs/design-spec.md` — 完整设计规范(架构/表/机制/功能点/分期)
- `docs/test-cases.md` — 测试用例30 例,部署后全部执行)
## 开发日志
`docs/work-log-2026-09-01.md`