如果你在用 OpenCode 管理多个 AI 提供商,可能会遇到这样的需求:想禁用某个提供商,或者只允许用特定的几个。这时候,Policies(策略)功能就能帮上忙。
策略是什么?和权限有什么区别?
简单来说,策略就是告诉 OpenCode:"这个资源你能不能用"。比如你可以配置一条策略,禁止使用 OpenAI 的模型。
你可能会问,这和权限(Permissions)有什么区别?区别在于控制的对象不同。权限控制的是"工具在会话里能做什么",而策略控制的是"OpenCode 能不能用某个资源"。举个例子,权限决定你能不能执行某个命令,策略决定你能不能调用某个 AI 提供商。
目前这个功能还是实验性的,配置在 opencode.json 文件的 experimental.policies 数组里。
怎么配置策略?
每个策略语句包含三个字段:
effect:允许还是拒绝,值是"allow"或"deny"action:要控制的操作,目前只有provider.use这一个resource:资源 ID 或者通配符模式
来看个例子,禁止使用 OpenAI 提供商:
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "openai"
}
]
}
}
配置之后,即使你已经填好了 OpenAI 的 API Key,这个提供商也不会出现在模型选择列表里。
策略匹配规则
resource 字段支持通配符匹配,规则很简单:
*匹配零个或多个字符?匹配一个字符
比如你想禁用所有以 company- 开头的提供商,可以这样写:
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "company-*"
}
]
}
}
这样 company-us、company-eu 这些提供商都会被禁用。
规则顺序很重要
当多条策略都匹配同一个提供商时,最后匹配的那条生效。所以通常的做法是:宽泛规则放前面,具体例外放后面。
比如你想只允许使用 Anthropic 的提供商,可以这样配置:
{
"$schema": "https://opencode.ai/config.json",
"experimental": {
"policies": [
{
"effect": "deny",
"action": "provider.use",
"resource": "*"
},
{
"effect": "allow",
"action": "provider.use",
"resource": "anthropic"
}
]
}
}
第一条策略禁止所有提供商,第二条策略允许 Anthropic。因为第二条后匹配,所以最终效果是只允许 Anthropic。
默认行为
如果没有任何策略匹配某个提供商,OpenCode 默认允许使用。这意味着如果你什么都不配置,所有已配置的提供商都可以正常使用。
全局配置 vs 项目配置
策略可以在两个地方配置:
- 全局配置:影响所有项目
- 项目配置:只影响当前项目
当两个地方的策略都匹配同一个提供商时,全局策略优先于项目策略。这个设计很贴心——它能防止某个项目仓库偷偷启用你已经全局禁用的提供商。
替代旧的提供商列表设置
如果你之前用过 disabled_providers 和 enabled_providers 这两个设置,现在可以用策略来替代它们。
替代 disabled_providers
比如你之前禁用了 OpenAI 和 Google,现在可以这样写:
{
"experimental": {
"policies": [
{ "effect": "deny", "action": "provider.use", "resource": "openai" },
{ "effect": "deny", "action": "provider.use", "resource": "google" }
]
}
}
替代 enabled_providers
如果你之前是白名单模式,只允许特定提供商,现在可以先禁止所有,再允许特定的:
{
"experimental": {
"policies": [
{ "effect": "deny", "action": "provider.use", "resource": "*" },
{ "effect": "allow", "action": "provider.use", "resource": "anthropic" },
{ "effect": "allow", "action": "provider.use", "resource": "openai" }
]
}
}
小结
OpenCode 的策略功能让你能精细控制可以使用哪些 AI 提供商。虽然目前只支持 provider.use 这一个操作,但通配符匹配和规则顺序的设计已经足够灵活。如果你需要统一管理多个项目的提供商使用策略,这个功能值得一试。
记住,这是个实验性功能,未来可能会有变化。配置前建议备份一下你的 opencode.json 文件。