mirror of
https://github.com/dataelement/bisheng.git
synced 2026-08-30 17:58:00 +08:00
eee2d68570
5 类系统级 LLM 默认选择(knowledge_llm / assistant_llm / evaluation_llm
/ workflow_llm / linsight_llm)从全局唯一的 config 表行升级为按租户隔离
存储于新表 tenant_system_model_config + Root 共享 fallback。修订 F020
AD-07 / AC-11 决策。
后端核心:
- 新表 + ORM/DAO(5 fallback 分支:own / Root-share-on / Root-share-off
/ 缺失),单一 with bypass_tenant_filter 块覆盖跨 scope 读
- alembic F034:dialect-aware(MySQL INSERT IGNORE / sqlite INSERT OR
IGNORE + LONGTEXT.with_variant)+ INSERT IGNORE 幂等 backfill;
downgrade 仅 DROP 新表,旧 config 5 行作为 rollback 锚点保留
- 共享 alembic_helpers.online.{table_exists, column_exists}(F033/F034 共用)
- LLMService 5 类 get/aget/sync_get/update + 5 个 _with_meta 变体(保单值
BC + 仅 router 用 envelope),全部 thin delegate 到 _aget_typed_with_meta
/ _get_typed_sync 私有 helper;_resolve_tenant_id 统一 explicit > ContextVar
> Root 优先级,Celery worker fallback warn log + 监控指标
- Router 5 POST 端点 _assert_can_write_system_config 防御性 FGA 校验 +
_read_before_snapshot + _audit_system_config_update(复用 JsonFieldMasker
脱敏);5 GET 端点统一 envelope 包装;19803 Msg 修订为"Cross-tenant
write forbidden"
消费侧 INV-T18 落地:
- Workflow → GraphEngine → BaseNode tenant_id 透传链;tasks.py 一次解析
Flow.tenant_id 同时透传 RedisCallback + Workflow
- 资源场景按 owner 显式注入 tenant_id:knowledge_imp / knowledge_utils /
abstract+file_encoding transformer / evaluation / linsight task_exec /
4 workflow 节点 共 14 处
- SOP 全局共享 collection(col_linsight_sop)防御性锚到 ROOT_TENANT_ID
防止跨 tenant embedding 错乱(4 处,加注释)
- 删 dead code decide_knowledge_llm / async_decide_knowledge_llm
- 新模块注册到 _TENANT_AWARE_MODEL_MODULES 启用全局 tenant filter
前端:
- finetune.ts 5 envelope getters + legacy unwrap(滚动部署 BC 兜底)
- 新 SystemConfigBanners 共享组件(ScopeBanner 3 状态 + Inherited Badge
+ FallbackBlocked Banner);新 useSystemConfigEnvelope hook 4 简单 Tab
共用;WorkbenchModel 用 useQuery(独立模式不动)
- SystemModelConfig.tsx 接 useAdminScope + isGlobalSuperUser 渲染顶部 banner
- 6 个 i18n key × 3 语言(en-US / ja / zh-Hans)
新增不变量:
- INV-T17:跨 tenant 写系统配置返 403 + 19803
- INV-T18:消费侧 tenant 解析规则(owner 优先 / ContextVar fallback /
Celery 必须显式带 tenant_id)
测试:
- 109 passed(含新 47 项 + F020 regression 全绿):DAO 8 / Service 12 /
Router 14 / Consumers 16(源码契约静态验证)/ F034 migration 9 / shared
alembic_helpers 2 / F020 LLM regression 48
- F034 fresh DB upgrade 9 场景全覆盖:fresh-install / backfill exact 5 keys
/ NULL/空值跳过 / 幂等 / 不覆盖编辑值 / downgrade 保留 config 锚点 /
upgrade-downgrade-upgrade 收敛 / SQLModel.create_all 抢先建表跳过
create_table
文档:
- F022 spec.md(新建)+ F020 spec.md AC-11/AD-07/19803 三处修订
- release-contract.md INV-T17/T18 + F022 行 + 变更历史
- 升级迁移方案 §3.7.1 新增 F022 段落 + 运维手册 §6 19803 描述更新 +
§8.3 迁移列表 21→22 + F034 行
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>