Copilot全局模型策略:企业别再靠默认开启
企业接入多模型以后,一个非常常见的状态是:
管理员没有明确配
↓
平台新模型上线
↓
用户自动就能用了
这对个人用户很方便,对企业治理却不一定合适。
GitHub 8月26日开始逐步执行 Copilot 的 Global Model Policy,并计划在 9月1日前完成 rollout。核心变化是:
以前没单独配置过的模型
+
新上线的GA模型
会继承企业的全局默认策略。
GitHub 同时明确:
Open-weight模型默认禁用
需要数据保留、且不在GitHub数据保留协议覆盖范围内的模型默认禁用
管理员已经显式 Enabled / Disabled 的模型不会被全局策略覆盖。
这个机制真正值得企业 Agent 平台借鉴的,不是“GitHub多了一个设置”。
而是:
模型治理必须区分“明确选择”和“继承默认”。
如果系统里只有:
enabled=true/false
很多治理问题根本表达不出来。
两态模型不够
最简单:
public enum ModelState {
ENABLED,
DISABLED
}
问题是你无法知道:
是谁决定的?
是企业策略?
组织策略?
团队策略?
还是平台默认?
真正需要的是:
Decision
+
Source
一个更完整的状态
public enum ModelPolicyState {
EXPLICIT_ENABLED,
EXPLICIT_DISABLED,
INHERIT_ORG,
INHERIT_ENTERPRISE,
INHERIT_DEFAULT
}
再保存:
public record ModelPolicyDecision(
String modelId,
ModelPolicyState state,
String decidedBy,
String policyVersion,
Instant decidedAt) {
}
这样 UI 才能真正解释:
为什么这个模型现在可用
为什么“继承”必须显示出来
假设:
Model A
今天可用。
管理员以为:
之前有人批准过
实际只是:
默认策略=Enabled
下个月企业把默认策略改成:
Disabled
Model A 立刻不可用。
如果 UI 只显示:
Enabled
团队会非常困惑。
所以可用状态最好拆成:
Effective State
Policy Source
例如:
{
"model": "model-a",
"effective": "ENABLED",
"source": "ENTERPRISE_DEFAULT",
"explicit": false
}
GitHub现在有4种可见状态
公开说明里最终模型会显示类似:
Enabled
Disabled
Delegate to enterprise teams/apps or organizations
Delegate to default policy
这本质上就是:
Override
+
Inheritance
传统 IAM 和 Feature Flag 里非常常见。
模型治理也应该这么做。
企业模型目录至少要有这些字段
public record ModelCatalogEntry(
String modelId,
String provider,
ModelClass modelClass,
boolean openWeight,
DataRetentionClass retention,
Set regions,
Set capabilities,
RiskLevel riskLevel) {
}
不是只存:
name
price
context_length
因为企业决策通常取决于:
数据是否保留
是否开源权重
在哪个区域
能否调用工具
是否支持代码执行
我会把Data Retention单独建模
public enum DataRetentionClass {
ZERO_RETENTION,
CONTRACT_COVERED,
PROVIDER_STANDARD,
UNKNOWN
}
规则:
UNKNOWN
→默认不可用
而不是:
新模型先开
发现问题再关
Open-weight为什么要单独一类
GitHub 当前默认把 open-weight 模型排除在自动启用之外。
这不意味着:
open-weight = 不安全
而是它的治理属性不同。
企业可能要额外考虑:
部署位置
许可证
模型来源
权重供应链
运行环境
安全责任
所以模型目录最好把:
Distribution Model
也纳入策略。
一个Policy Rule
model_policy:
default: enabled
deny_if:
- data_retention: UNKNOWN
- region_not_allowed: true
require_explicit_approval_if:
- open_weight: true
- tool_use_risk: HIGH
这比一个总开关细得多。
新模型上线时不要直接继承“可用”
模型供应商更新速度很快。
平台每周可能新增:
Model A
Model B
Model C
如果全局默认是 Enabled,理论上用户无需任何 Review 就能开始使用。
更安全的企业策略通常是:
GA模型:
可继承
高风险模型:
必须显式
Preview:
必须显式
Unknown Retention:
禁止
Model Lifecycle也要进入治理
public enum ModelLifecycle {
PREVIEW,
GA,
DEPRECATED,
RETIRED
}
不同状态不同 Policy。
例如:
preview:
default: disabled
ga:
default: inherit
deprecated:
new_sessions: false
retired:
allowed: false
Deprecated不能只发邮件通知
如果一个 Agent 配置锁死:
model-x
模型进入 Deprecated,平台要知道:
哪些Agent依赖它
所以需要:
Model → Agent Dependency Graph
一个依赖表
create table agent_model_binding (
agent_id varchar(128) not null,
agent_version varchar(64) not null,
model_id varchar(128) not null,
routing_profile varchar(128),
primary key(
agent_id,
agent_version,
model_id
)
);
模型状态变化时,可以直接算影响面。
Policy变更前必须做Simulation
例如企业准备:
Default Enabled
→ Default Disabled
不要直接保存。
先模拟:
会影响多少用户?
多少Agent?
多少自动化?
哪些模型会变状态?
输出:
{
"models_changed": 14,
"agents_impacted": 38,
"scheduled_tasks_impacted": 112,
"users_impacted": 912
}
管理员确认后再执行。
这其实就是主线第22篇会继续展开的:
Policy Simulation
Durable Decision非常重要
GitHub 明确表示:
显式Enabled / Disabled
不会被全局默认覆盖
这叫:
Durable Override
企业内部也应该如此。
如果 Security 明确禁用:
model-x
以后 Platform Admin 改:
default=enabled
不能把它重新打开。
Override要保存Reason
public record ModelOverride(
String modelId,
boolean enabled,
String reason,
String ticketId,
String approvedBy,
Instant expiresAt) {
}
很多 Override 不应该永久。
例如:
临时PoC
可以:
30天后过期
到期重新 Review。
模型权限最好按Audience分层
Developer
Data Analyst
Finance
Legal
Security
不同团队对模型能力和数据边界要求不同。
所以:
Enterprise Default
之下还可以有:
Org / Team Overlay
例如:
enterprise:
default: enabled
legal:
deny:
- retention: PROVIDER_STANDARD
security:
allow_explicit:
- high_cyber_capability
但继承层级不能无限深
如果:
Enterprise
→ Org
→ Team
→ App
→ User
每层都有 Override,最终没人知道状态从哪来。
我会限制成:
Enterprise
→ Organization
→ Application
三层以内。
User 个人偏好不能突破管理员策略。
Effective Policy必须可解释
API:
GET /models/{id}/effective-policy
返回:
{
"model": "model-a",
"effective_state": "DISABLED",
"reason_chain": [
{
"level": "enterprise",
"state": "ENABLED"
},
{
"level": "organization",
"state": "DISABLED",
"reason": "data-retention-policy"
}
]
}
不要只返回:
403 Model unavailable
管理员排障会轻松很多。
每次Run都要保存Effective Model Policy
Agent Run:
public record ModelExecutionRecord(
String runId,
String requestedModel,
String effectiveModel,
String policyVersion,
String policyDecisionId) {
}
以后出事故能知道:
当时为什么允许这个模型
Policy Drift也需要告警
模型 Metadata 可能变化:
数据保留政策
区域
生命周期
能力
如果 Catalog 变了,现有 Policy 应重新评估。
例如:
Retention:
CONTRACT_COVERED
→ UNKNOWN
应该立即:
Re-evaluate Effective Access
不是等管理员下个月手工看。
发布新Agent也要检查Model Policy
Agent 配置:
models:
primary: model-a
fallback: model-b
发布前检查:
primary允许?
fallback允许?
目标Tenant都允许?
不要等生产 Failover 才发现备用模型被禁。
Fallback最容易绕过治理
正常:
Model A
经过批准。
出故障后:
自动切Model B
但 B 可能:
数据保留不同
区域不同
风险不同
所以 Fallback Policy 必须独立校验。
Primary Allowed
≠
Fallback Allowed
一个Model Routing Gate
public boolean canRoute(
TenantContext tenant,
ModelCatalogEntry model,
TaskRisk risk) {
return policyEngine.evaluate(
tenant,
model,
risk
).allowed();
}
Router 只能从:
Allowed Model Set
里做价格/性能优化。
最少测试这10种情况
1. 新GA模型继承默认策略
2. Explicit Disabled不被默认Enabled覆盖
3. Open-weight模型要求显式批准
4. Unknown Retention默认拒绝
5. Org策略覆盖Enterprise默认
6. 用户不能突破Org禁用
7. 模型Deprecated后新Run禁止
8. Fallback模型独立鉴权
9. Policy变更Simulation正确计算影响
10. Model Metadata变化触发Re-evaluate
企业多模型治理最危险的状态,不是:
一个模型被禁用了
而是:
大家都以为它是“有人批准后开启”,
实际只是继承了默认值。
GitHub 这次 Global Model Policy 把“显式选择”和“继承默认”分开,是一个很值得照搬的设计。
模型越来越多以后,企业真正需要管理的不是一张:
允许 / 禁止
列表。
而是一套:
Model Metadata
+
Inheritance
+
Explicit Override
+
Policy Version
+
Impact Simulation
+
Execution Audit
这才是多模型平台能够长期运转的治理基础。
更多企业级 AI 应用、Agent、RAG 与模型工程化内容,我会继续整理在 智元界:
https://www.zyentor.com/