跳到主要内容

预设配置

使用预定义配置进行快速设置。

什么是预设?

预设是预配置的设置,包括针对特定用例优化的提供商配置、路由规则和转换器。

使用预设

CLI 方式(命令行)

CLI 方式适合开发者通过命令行快速操作。

安装预设

从本地目录安装:

ccr preset install /path/to/preset-directory

重新配置已安装的预设:

ccr preset install my-preset

使用预设

安装预设后,可以使用预设名称启动 Claude Code:

# 使用指定预设启动
ccr my-preset "your prompt"

预设会:

  • 自动加载预配置的 Provider
  • 应用预设的路由规则
  • 使用预设中配置的 transformer

列出所有预设

ccr preset list

此命令将显示所有已安装的预设及其名称、版本和描述。

查看预设信息

ccr preset info my-preset

删除预设

ccr preset delete my-preset

Web UI 方式

Web UI 提供更友好的可视化界面,支持更多安装方式。

访问 Web UI

ccr ui

然后在浏览器中打开 http://localhost:3000

从 GitHub 仓库安装

  1. 点击"预设商城"按钮
  2. 在预设列表中选择要安装的预设
  3. 点击"安装"按钮

重新配置预设

  1. 在预设列表中点击"查看详情"按钮
  2. 在详情页面中修改配置项
  3. 点击"应用"保存配置

管理预设

  • 查看:点击预设右侧的信息图标
  • 删除:点击预设右侧的删除图标

创建自定义预设

预设目录结构

预设以目录形式存储,每个预设包含以下结构:

~/.claude-code-router/presets/<preset-name>/
├── manifest.json # 必填:预设配置文件
├── transformers/ # 可选:自定义转换器
│ └── custom-transformer.js
├── scripts/ # 可选:自定义脚本
│ └── status.js
└── README.md # 可选:说明文档

动态配置系统

CCR 引入了强大的动态配置系统,支持:

  • 多种输入类型:选择器、多选、确认框、文本输入、数字输入等
  • 条件逻辑:根据用户输入动态显示/隐藏配置项
  • 变量引用:配置项之间可以互相引用
  • 动态选项:选项列表可以从预设配置或用户输入中动态生成

Schema 字段类型

类型说明示例
password密码输入(隐藏显示)API Key
input单行文本输入Base URL
number数字输入最大Token数
select单选下拉框选择Provider
multiselect多选框启用功能
confirm确认框是否使用代理
editor多行文本编辑器自定义配置

条件运算符

运算符说明示例
eq等于{"field": "provider", "operator": "eq", "value": "openai"}
ne不等于{"field": "advanced", "operator": "ne", "value": true}
in包含于{"field": "feature", "operator": "in", "value": ["a", "b"]}
nin不包含于{"field": "type", "operator": "nin", "value": ["x", "y"]}
exists字段存在{"field": "apiKey", "operator": "exists"}
gt/lt/gte/lte大于/小于/大于等于/小于等于用于数字比较

动态选项类型

static - 静态选项
"options": {
"type": "static",
"options": [
{"label": "选项1", "value": "value1"},
{"label": "选项2", "value": "value2"}
]
}
providers - 从 Providers 配置提取
"options": {
"type": "providers"
}

自动从 Providers 数组中提取 name 作为选项。

models - 从指定 Provider 的 models 提取
"options": {
"type": "models",
"providerField": "{{selectedProvider}}"
}

根据用户选择的 Provider,动态显示该 Provider 的 models。

模板变量

使用 {{变量名}} 语法在 template 中引用用户输入:

"template": {
"Providers": [
{
"name": "{{providerName}}",
"api_key": "{{apiKey}}"
}
]
}

配置映射

对于复杂的配置需求,使用 configMappings 精确控制值的位置:

"configMappings": [
{
"target": "Providers[0].api_key",
"value": "{{apiKey}}"
},
{
"target": "PROXY_URL",
"value": "{{proxyUrl}}",
"when": {
"field": "useProxy",
"operator": "eq",
"value": true
}
}
]

完整示例

{
"name": "multi-provider-example",
"version": "1.0.0",
"description": "多Provider配置示例 - 支持OpenAI和DeepSeek切换",
"author": "CCR Team",
"keywords": ["openai", "deepseek", "multi-provider"],
"ccrVersion": "2.0.0",
"schema": [
{
"id": "primaryProvider",
"type": "select",
"label": "主要Provider",
"prompt": "选择您主要使用的LLM提供商",
"options": {
"type": "static",
"options": [
{
"label": "OpenAI",
"value": "openai",
"description": "使用OpenAI的GPT模型"
},
{
"label": "DeepSeek",
"value": "deepseek",
"description": "使用DeepSeek的高性价比模型"
}
]
},
"required": true,
"defaultValue": "openai"
},
{
"id": "apiKey",
"type": "password",
"label": "API Key",
"prompt": "请输入您的API Key",
"placeholder": "sk-...",
"required": true
},
{
"id": "defaultModel",
"type": "select",
"label": "默认模型",
"prompt": "选择默认使用的模型",
"options": {
"type": "static",
"options": [
{"label": "GPT-4o", "value": "gpt-4o"},
{"label": "GPT-4o-mini", "value": "gpt-4o-mini"}
]
},
"required": true,
"defaultValue": "gpt-4o",
"when": {
"field": "primaryProvider",
"operator": "eq",
"value": "openai"
}
},
{
"id": "enableProxy",
"type": "confirm",
"label": "启用代理",
"prompt": "是否通过代理访问API?",
"defaultValue": false
},
{
"id": "proxyUrl",
"type": "input",
"label": "代理地址",
"prompt": "输入代理服务器地址",
"placeholder": "http://127.0.0.1:7890",
"required": true,
"when": {
"field": "enableProxy",
"operator": "eq",
"value": true
}
}
],
"template": {
"Providers": [
{
"name": "{{primaryProvider}}",
"api_base_url": "https://api.openai.com/v1/chat/completions",
"api_key": "{{apiKey}}",
"models": ["{{defaultModel}}"]
}
],
"Router": {
"default": "{{primaryProvider}},{{defaultModel}}"
},
"PROXY_URL": "{{proxyUrl}}"
},
"configMappings": [
{
"target": "PROXY_URL",
"value": "{{proxyUrl}}",
"when": {
"field": "enableProxy",
"operator": "eq",
"value": true
}
}
]
}

manifest.json 完整字段说明

manifest.json 是预设的核心配置文件,使用 JSON5 格式(支持注释)。

1. 元数据字段(Metadata)

这些字段用于描述预设的基本信息:

字段类型必填说明
namestring预设名称(唯一标识符)
versionstring版本号(遵循 semver 规范)
descriptionstring-预设描述
authorstring-作者信息
homepagestring-项目主页 URL
repositorystring-源代码仓库 URL
licensestring-许可证类型
keywordsstring[]-关键词标签
ccrVersionstring-兼容的 CCR 版本

示例:

{
"name": "my-preset",
"version": "1.0.0",
"description": "我的自定义预设",
"author": "Your Name",
"homepage": "https://github.com/yourname/ccr-presets",
"repository": "https://github.com/yourname/ccr-presets.git",
"license": "MIT",
"keywords": ["openai", "production"],
"ccrVersion": "2.0.0"
}

2. 配置字段(Configuration)

这些字段会直接合并到 CCR 的配置中,所有 config.json 支持的字段都可以在这里使用:

字段类型说明
ProvidersarrayProvider 配置数组
Routerobject路由配置
transformersarray转换器配置
StatusLineobject状态栏配置
NON_INTERACTIVE_MODEboolean启用非交互模式(用于 CI/CD)

CLI 专用字段(这些字段仅在 CLI 模式下有效,服务器不使用):

字段类型说明
noServerboolean跳过本地服务器启动,直接使用 Provider 的 API
claudeCodeSettingsobjectClaude Code 特定设置(环境变量、状态栏等)

示例:

{
"Providers": [
{
"name": "openai",
"api_base_url": "https://api.openai.com/v1/chat/completions",
"api_key": "${OPENAI_API_KEY}",
"models": ["gpt-4o", "gpt-4o-mini"]
}
],
"Router": {
"default": "openai,gpt-4o",
"background": "openai,gpt-4o-mini"
},
"PORT": 8080
}

3. 动态配置系统字段

这些字段用于创建可交互的配置模板:

字段类型说明
schemaarray配置输入表单定义
templateobject配置模板(使用变量引用)
configMappingsarray配置映射规则
userValuesobject用户填写的值(运行时使用)

schema 字段类型:

类型说明使用场景
password密码输入(隐藏)API Key
input单行文本输入URL
number数字输入端口号
select单选下拉框选择 Provider
multiselect多选框启用功能
confirm确认框是否启用
editor多行文本编辑器自定义配置

动态配置示例:

{
"schema": [
{
"id": "apiKey",
"type": "password",
"label": "API Key",
"prompt": "请输入您的 API Key",
"required": true
},
{
"id": "provider",
"type": "select",
"label": "Provider",
"options": {
"type": "static",
"options": [
{"label": "OpenAI", "value": "openai"},
{"label": "DeepSeek", "value": "deepseek"}
]
},
"defaultValue": "openai"
}
],
"template": {
"Providers": [
{
"name": "#{provider}",
"api_key": "#{apiKey}"
}
]
}
}

创建预设示例

示例 1:简单预设(无动态配置)

# 创建预设目录
mkdir -p ~/.claude-code-router/presets/simple-openai

# 创建 manifest.json
cat > ~/.claude-code-router/presets/simple-openai/manifest.json << 'EOF'
{
"name": "simple-openai",
"version": "1.0.0",
"description": "简单的 OpenAI 配置",
"author": "Your Name",

"Providers": [
{
"name": "openai",
"api_base_url": "https://api.openai.com/v1/chat/completions",
"api_key": "${OPENAI_API_KEY}",
"models": ["gpt-4o", "gpt-4o-mini"]
}
],

"Router": {
"default": "openai,gpt-4o",
"background": "openai,gpt-4o-mini"
}
}
EOF

# 配置预设(输入 API Key)
ccr preset install simple-openai

# 使用预设
ccr simple-openai "your prompt"

示例 2:高级预设(动态配置)

# 创建预设目录
mkdir -p ~/.claude-code-router/presets/advanced-config

# 创建 manifest.json
cat > ~/.claude-code-router/presets/advanced-config/manifest.json << 'EOF'
{
"name": "advanced-config",
"version": "1.0.0",
"description": "支持多 Provider 选择的高级配置",
"author": "Your Name",
"keywords": ["openai", "deepseek", "multi-provider"],

"schema": [
{
"id": "provider",
"type": "select",
"label": "选择 Provider",
"prompt": "选择您主要使用的 LLM 提供商",
"options": {
"type": "static",
"options": [
{
"label": "OpenAI",
"value": "openai",
"description": "使用 OpenAI 的 GPT 模型"
},
{
"label": "DeepSeek",
"value": "deepseek",
"description": "使用 DeepSeek 的高性价比模型"
}
]
},
"defaultValue": "openai",
"required": true
},
{
"id": "apiKey",
"type": "password",
"label": "API Key",
"prompt": "请输入您的 API Key",
"placeholder": "sk-...",
"required": true
},
{
"id": "enableProxy",
"type": "confirm",
"label": "启用代理",
"prompt": "是否通过代理访问 API?",
"defaultValue": false
},
{
"id": "proxyUrl",
"type": "input",
"label": "代理地址",
"prompt": "输入代理服务器地址",
"placeholder": "http://127.0.0.1:7890",
"required": true,
"when": {
"field": "enableProxy",
"operator": "eq",
"value": true
}
}
],

"template": {
"Providers": [
{
"name": "#{provider}",
"api_base_url": "#{provider === 'openai' ? 'https://api.openai.com/v1/chat/completions' : 'https://api.deepseek.com/v1/chat/completions'}",
"api_key": "#{apiKey}",
"models": ["gpt-4o", "gpt-4o-mini"]
}
],
"Router": {
"default": "#{provider},gpt-4o",
"background": "#{provider},gpt-4o-mini"
}
},

"configMappings": [
{
"target": "PROXY_URL",
"value": "#{proxyUrl}",
"when": {
"field": "enableProxy",
"operator": "eq",
"value": true
}
}
]
}
EOF

# 配置预设(会提示输入)
ccr preset install advanced-config

# 使用预设
ccr advanced-config "your prompt"

导出当前配置为预设

如果您已经配置好了 CCR,可以导出当前配置:

# 导出当前配置
ccr preset export my-exported-preset

导出时会自动:

  • 识别敏感字段(如 api_key)并替换为环境变量占位符
  • 生成 schema 用于收集用户输入
  • 生成 templateconfigMappings

可选项:

ccr preset export my-exported-preset \
--description "导出的配置" \
--author "Your Name" \
--tags "production,openai"

预设文件位置

预设保存在:

~/.claude-code-router/presets/

每个预设都是一个目录,包含 manifest.json 文件。

最佳实践

  1. 使用动态配置:为需要用户输入的配置项使用schema系统
  2. 提供默认值:为非必填项提供合理的默认值
  3. 条件显示:使用when条件避免不必要的输入
  4. 清晰的标签:为每个字段提供清晰的label和prompt
  5. 验证输入:使用validator确保输入的有效性
  6. 版本控制:将常用预设保存在版本控制中
  7. 文档化:为自定义预设添加描述和版本信息

下一步