AI使用笔记 12

OpenCode 策略配置指南:轻松掌控你的AI资源使用

如果你在用 OpenCode 管理多个 AI 提供商,可能会遇到这样的需求:想禁用某个提供商,或者只允许用特定的几个。这时候,Policies(策略)功能就能帮上忙。

策略是什么?和权限有什么区别?

简单来说,策略就是告诉 OpenCode:"这个资源你能不能用"。比如你可以配置一条策略,禁止使用 OpenAI 的模型。

你可能会问,这和权限(Permissions)有什么区别?区别在于控制的对象不同。权限控制的是"工具在会话里能做什么",而策略控制的是"OpenCode 能不能用某个资源"。举个例子,权限决定你能不能执行某个命令,策略决定你能不能调用某个 AI 提供商。

目前这个功能还是实验性的,配置在 opencode.json 文件的 experimental.policies 数组里。

怎么配置策略?

每个策略语句包含三个字段:

  • effect:允许还是拒绝,值是 "allow""deny"
  • action:要控制的操作,目前只有 provider.use 这一个
  • resource:资源 ID 或者通配符模式

来看个例子,禁止使用 OpenAI 提供商:

json
{
  "$schema": "https://opencode.ai/config.json",
  "experimental": {
    "policies": [
      {
        "effect": "deny",
        "action": "provider.use",
        "resource": "openai"
      }
    ]
  }
}

配置之后,即使你已经填好了 OpenAI 的 API Key,这个提供商也不会出现在模型选择列表里。

策略匹配规则

resource 字段支持通配符匹配,规则很简单:

  • * 匹配零个或多个字符
  • ? 匹配一个字符

比如你想禁用所有以 company- 开头的提供商,可以这样写:

json
{
  "$schema": "https://opencode.ai/config.json",
  "experimental": {
    "policies": [
      {
        "effect": "deny",
        "action": "provider.use",
        "resource": "company-*"
      }
    ]
  }
}

这样 company-uscompany-eu 这些提供商都会被禁用。

规则顺序很重要

当多条策略都匹配同一个提供商时,最后匹配的那条生效。所以通常的做法是:宽泛规则放前面,具体例外放后面。

比如你想只允许使用 Anthropic 的提供商,可以这样配置:

json
{
  "$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 项目配置

策略可以在两个地方配置:

  1. 全局配置:影响所有项目
  2. 项目配置:只影响当前项目

当两个地方的策略都匹配同一个提供商时,全局策略优先于项目策略。这个设计很贴心——它能防止某个项目仓库偷偷启用你已经全局禁用的提供商。

替代旧的提供商列表设置

如果你之前用过 disabled_providersenabled_providers 这两个设置,现在可以用策略来替代它们。

替代 disabled_providers

比如你之前禁用了 OpenAI 和 Google,现在可以这样写:

json
{
  "experimental": {
    "policies": [
      { "effect": "deny", "action": "provider.use", "resource": "openai" },
      { "effect": "deny", "action": "provider.use", "resource": "google" }
    ]
  }
}

替代 enabled_providers

如果你之前是白名单模式,只允许特定提供商,现在可以先禁止所有,再允许特定的:

json
{
  "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 文件。

感谢阅读,如果这篇文章对你有帮助,欢迎继续浏览同栏目内容。

返回 AI使用笔记