OpenClaw 自定义Model Provider 的一键配置脚本

OpenClaw 自定义 Provider 一键配置脚本。


功能概览

从兼容 OpenAI 协议的后端 API(如 icompify)获取全部模型,一键注册为 OpenClaw 的 Provider,并将所有模型加入聊天窗口可见列表,同时设置默认模型。

脚本路径:`/home/linuxbrew/skill/init-openclaw-model.sh`

**核心能力:**

  • 自动拉取 API 的全部可用模型(兼容 `{data: ...}` 和直接 `...` 格式)

  • 一次性写入 Provider 配置(含全部模型,而非仅默认模型)

  • 自动注册到聊天窗口 allowlist(`/model` 命令和 model picker 可见)

  • 设置全局默认模型


依赖

| 工具 | 用途 | 安装命令 |

|------|------|----------|

| `curl` | 拉取 API 模型列表 | `yum install curl` / `apt install curl` |

| `jq` | JSON 解析与构建 | `yum install jq` / `apt install jq` |

| `openclaw` | 写入配置 | 已安装并可用 |


使用方式

基本运行

```bash

bash /home/linuxbrew/skill/init-openclaw-model.sh

```

完整交互示例

```

═══════════════════════════════════════════════════════

OpenClaw 自定义 Provider 配置脚本

═══════════════════════════════════════════════════════

请输入 API URL 默认: https://api.icompify.com/v1: ← 直接回车使用默认值

请输入 API Key: ← 输入密钥(不显示)

正在从 https://api.icompify.com/v1 获取模型列表...

获取到以下可用模型:

1 kimi-k2.6

2 deepseek-v4-pro

3 deepseek-v4-flash

4 minimax-m3

5 qwen3.5

共 5 个模型

请选择默认模型编号 1-5: 1 ← 选择默认用的模型

默认模型: kimi-k2.6

请输入默认上下文长度 (contextWindow) 默认: 262144: ← 直接回车

请输入默认最大输出长度 (maxTokens) 默认: 65536: ← 直接回车

正在构建 provider 配置(含全部 5 个模型)...

正在写入 OpenClaw...

✓ Provider 配置写入成功。

✓ 模型 allowlist 已注册(5 个)。

✓ 默认模型已设为 icompify/kimi-k2.6。

═══════════════════════════════════════════════════════

配置完成!

═══════════════════════════════════════════════════════

Provider: icompify

Base URL: https://api.icompify.com/v1

模型数量: 5

默认模型: kimi-k2.6

ContextWindow: 262144

MaxTokens: 65536

【Provider 模型数】

5

【Allowlist 注册数】

5

【当前默认模型】

icompify/kimi-k2.6

【可用模型列表】

icompify/kimi-k2.6 text+image 256k default,configured

icompify/deepseek-v4-pro text 1000k configured

...

```

使用其他 API 端点

```bash

bash /home/linuxbrew/skill/init-openclaw-model.sh

自定义 URL:

请输入 API URL 默认: https://api.icompify.com/v1: https://my-api.com/v1

```


配置写入位置

脚本修改 `~/.openclaw/openclaw.json` 的以下路径:

| 配置项 | 说明 |

|--------|------|

| `models.providers.icompify` | Provider 的连接信息、认证密钥、全部模型列表 |

| `agents.defaults.models` | 模型 allowlist(决定 `/model` 命令和 chat picker 可见的模型) |

| `agents.defaults.model.primary` | 默认使用的模型 |


验证配置

```bash

查看已注册的模型列表

openclaw models list | grep icompify

查看开放给 chat 的 allowlist

openclaw config get agents.defaults.models

查看当前默认模型

openclaw config get agents.defaults.model.primary

查看 provider 的详细模型配置

openclaw config get models.providers.icompify

```


常见问题

Q1:脚本运行后聊天窗口还是看不到模型?

**A:** 配置已写入但 Gateway 可能未刷新内部缓存。执行:

```bash

openclaw gateway restart

```

然后刷新浏览器页面即可。

Q2:之前已经有一个 icompify provider,会被覆盖吗?

**A:** 会。脚本在写入 provider 时若检测到已存在,会使用 `--replace` 强制替换(但不影响 `agents.defaults.models` allowlist 中的其他 provider 模型,因为 allowlist 被声明为 `--merge` 合并)。

Q3:允许多个 API Provider 并存吗?

**A:** 可以。修改脚本内的 provider 名称 `icompify` 为其他 ID(如 `custom2`),多次运行即可注册多个 Provider。注意 allowlist 的 `--merge` 会自动保留旧条目。

Q4:如何手动切换到其他模型?

**A:** 在 OpenClaw 聊天窗口发送:

```

/model icompify/deepseek-v4-pro

```

或在 model picker 中点击切换(配置成功后所有模型均会出现在列表中)。


脚本执行的动作

  1. 调用 `${API_URL}/models` 拉取模型列表

  2. 将每个模型写入 `models.providers.icompify`(含全部模型,而非仅默认模型)

  3. 将全部模型注册到 `agents.defaults.models`(允许 chat/model picker 看见并切换)

  4. 设置 `agents.defaults.model.primary` 为选中的默认模型


待修复 Bug

| # | 问题 | 说明 |

|---|------|------|

| 1 | **所有模型使用相同的上下文长度** | 脚本要求用户输入一个 `contextWindow`,然后**同样值填到所有模型**。不同模型实际上下文窗口差异很大(如 128k vs 1M),应逐个模型独立配置或使用 API 返回的 `context_length` 等字段。 |

| 2 | **所有模型使用相同的 maxTokens** | 脚本要求用户输入一个 `maxTokens`,同样值填到所有模型。大模型和轻量模型的生成能力不同,应区分设置或对接 API 返回的 `max_tokens` 字段。 |

| 3 | **所有模型统一标记 `input: "text", "image"`** | 脚本**盲目给所有模型都开了文本+图片双模态**。实际上有些模型是纯文本模型,根本不支持图片输入。应读取 API 返回的模态信息(如 `capabilities` 或 `input_modality` 字段),或允许按模型手工标记。 |


手动回滚

如需删除脚本添加的配置:

```bash

删除 provider

openclaw config unset models.providers.icompify

删除 allowlist 中 icompify 的模型(需一个个删,或用脚本批量清理)

openclaw config unset agents.defaults.models."icompify/kimi-k2.6"

... 重复其他模型

恢复默认模型(需先改为已存在的其他模型)

openclaw config set agents.defaults.model.primary "anthropic/claude-sonnet-4"

```


安全风险

  • API Key 以 Bearer Token 形式在 `curl` 请求头中传递,脚本**不会**将 Key 打印到终端或日志

  • `openclaw.json` 中的 `apiKey` 以明文存储,文件权限为 `600`。请确保该文件不被未授权用户读取

脚本文件实际内容:

#!/usr/bin/env bash

OpenClaw 自定义 Provider 一键配置脚本(纯 Bash + jq 版)

用法: bash init-openclaw-model.sh

set -e

─── 颜色 ───

GREEN='\033[0;32m'

YELLOW='\033[1;33m'

CYAN='\033[0;36m'

RED='\033[0;31m'

NC='\033[0m'

echo -e "{CYAN}═══════════════════════════════════════════════════════{NC}"

echo -e "{CYAN} OpenClaw 自定义 Provider 配置脚本{NC}"

echo -e "{CYAN}═══════════════════════════════════════════════════════{NC}"

─── 依赖检查 ───

if ! command -v jq &>/dev/null; then

echo -e "{RED}错误:本脚本依赖 jq,请先安装 jq(如 yum install jq / apt install jq)。{NC}"

exit 1

fi

─── 1. 输入 API URL ───

read -rp "请输入 API URL 默认: https://api.icompify.com/v1: " API_URL

API_URL=${API_URL:-"https://api.icompify.com/v1"}

API_URL="${API_URL%/}"

─── 2. 输入 API Key ───

read -rsp "请输入 API Key: " API_KEY

echo

─── 3. 获取模型列表 ───

echo -e "{YELLOW}正在从 API_URL 获取模型列表...${NC}"

MODELS_JSON=$(curl -sS -f --connect-timeout 15 \

-H "Authorization: Bearer $API_KEY" \

-H "Content-Type: application/json" \

"${API_URL}/models") || {

echo -e "{RED}错误:无法连接 API 或获取模型列表。{NC}"

echo "请求地址: ${API_URL}/models"

exit 1

}

─── 4. 解析模型列表 ───

MODEL_LIST=(echo "MODELS_JSON" | jq -c '

if type == "object" and .data != null and (.data | type) == "array" then .data

elif type == "array" then .

else \[\]

end

| map(select(type == "object" and (.id // empty) != ""))

| map({id: .id, name: (.name // .id)})

')

TOTAL=(echo "MODEL_LIST" | jq 'length')

if \[ "$TOTAL" -eq 0 ]; then

echo -e "{RED}错误:未从 API 获取到任何模型。{NC}"

echo "API 原始返回前 800 字符:"

echo "${MODELS_JSON:0:800}"

exit 1

fi

─── 5. 显示模型列表 ───

echo -e "{GREEN}获取到以下可用模型:{NC}"

echo

MODEL_IDS=()

MODEL_NAMES=()

for ((i = 0; i < TOTAL; i++)); do

IDX=$((i + 1))

MID=(echo "MODEL_LIST" | jq -r ".$i.id")

MNAME=(echo "MODEL_LIST" | jq -r ".$i.name")

MODEL_IDS+=("$MID")

MODEL_NAMES+=("$MNAME")

printf " %2s %-40s\n" "IDX" "MNAME"

done

echo

echo "共 $TOTAL 个模型"

echo

─── 6. 选择默认模型 ───

default_model_idx=""

while true; do

read -rp "请选择默认模型编号 1-$TOTAL: " default_model_idx

if \[ "$default_model_idx" =\~ \^\[0-9+ \]\] \&\& \[\[ "default_model_idx" -ge 1 ]] && \[ "$default_model_idx" -le "$TOTAL" ]; then

break

fi

echo -e "{RED}无效编号,请重新选择。{NC}"

done

DEFAULT_MODEL="{MODEL_IDS\[((default_model_idx - 1))]}"

echo -e "默认模型: {GREEN}DEFAULT_MODEL${NC}"

─── 7. 输入上下文参数 ───

read -rp "请输入默认上下文长度 (contextWindow) 默认: 262144: " CONTEXT_WINDOW

CONTEXT_WINDOW=${CONTEXT_WINDOW:-262144}

read -rp "请输入默认最大输出长度 (maxTokens) 默认: 65536: " MAX_TOKENS

MAX_TOKENS=${MAX_TOKENS:-65536}

─── 8. 构建完整 provider 配置(含全部模型) ───

echo -e "{YELLOW}正在构建 provider 配置(含全部 TOTAL 个模型)...${NC}"

PROVIDER_JSON=(echo "MODEL_LIST" | jq \

--arg url "$API_URL" \

--arg key "$API_KEY" \

--argjson ctx "$CONTEXT_WINDOW" \

--argjson maxt "$MAX_TOKENS" \

'{

baseUrl: $url,

apiKey: $key,

api: "openai-completions",

models: [

.\[\] | {

id: .id,

name: (.name // .id),

input: "text", "image",

contextWindow: $ctx,

contextTokens: $ctx,

maxTokens: $maxt,

cost: {input: 0, output: 0, cacheRead: 0, cacheWrite: 0}

}

]

}')

─── 9. 构建 allowlist(agents.defaults.models) ───

echo -e "{YELLOW}正在构建模型 allowlist...{NC}"

ALLOWLIST_JSON=(echo "MODEL_LIST" | jq '

.\[ | {

key: ("icompify/" + .id),

value: {alias: .name}

} ] | from_entries

')

─── 10. 写入 OpenClaw 配置 ───

echo -e "{YELLOW}正在写入 OpenClaw...{NC}"

10a. provider

if openclaw config set models.providers.icompify "$PROVIDER_JSON" --strict-json 2>/dev/null; then

echo " ✓ Provider 配置写入成功。"

else

echo -e " {YELLOW}Provider 已存在,使用 --replace 强制替换...{NC}"

openclaw config set models.providers.icompify "$PROVIDER_JSON" --strict-json --replace

echo " ✓ Provider 配置已替换。"

fi

10b. allowlist --- 关键步骤:

把全部模型注册到 agents.defaults.models,否则 /model 和聊天窗口看不到

openclaw config set agents.defaults.models "$ALLOWLIST_JSON" --strict-json --merge

echo " ✓ 模型 allowlist 已注册($TOTAL 个)。"

10c. 设置默认模型

openclaw config set agents.defaults.model.primary "icompify/${DEFAULT_MODEL}"

echo " ✓ 默认模型已设为 icompify/$DEFAULT_MODEL。"

─── 11. 验证 ───

echo

echo -e "{GREEN}═══════════════════════════════════════════════════════{NC}"

echo -e "{GREEN} 配置完成!{NC}"

echo -e "{GREEN}═══════════════════════════════════════════════════════{NC}"

echo

echo -e "Provider: {CYAN}icompify{NC}"

echo -e "Base URL: {CYAN}API_URL${NC}"

echo -e "模型数量: {CYAN}TOTAL${NC}"

echo -e "默认模型: {CYAN}DEFAULT_MODEL${NC}"

echo -e "ContextWindow: {CYAN}CONTEXT_WINDOW${NC}"

echo -e "MaxTokens: {CYAN}MAX_TOKENS${NC}"

echo

验证实际写入

echo "【Provider 模型数】"

openclaw config get models.providers.icompify 2>/dev/null | jq '.models | length' || echo " (获取失败)"

echo "【Allowlist 注册数】"

openclaw config get agents.defaults.models 2>/dev/null | jq 'length' || echo " (获取失败)"

echo "【当前默认模型】"

openclaw config get agents.defaults.model.primary 2>/dev/null || echo " (获取失败)"

echo

echo "【可用模型列表】"

openclaw models list 2>/dev/null | grep icompify | head -20 || echo " (列表为空)"

echo

echo -e "{YELLOW}提示:如聊天窗口 model picker 未立即刷新,可执行:{NC}"

echo -e " {CYAN}openclaw gateway restart{NC}"

echo -e " 或刷新浏览器页面。"

相关推荐
小北的AI科技分享1 天前
企业AI定制开发:从需求分析到落地部署的完整指南
定制·模型·路径
AC赳赳老秦2 天前
开源组件版本数据监控:OpenClaw 抓取公开版本信息,自动提醒更新与安全风险
前端·python·安全·开源·github·php·openclaw
小北的AI科技分享2 天前
企业AI落地开发:从技术选型到价值交付的实践路径
应用·模型·平均
小北的AI科技分享3 天前
企业AI开发:从技术选型到落地的关键路径
运维·模型·评估
七夜zippoe3 天前
OpenClaw Prompt 工程:从角色设定到 Skill 封装的 Agent 输出质量方法论
java·服务器·prompt·openclaw·skill封装
AC赳赳老秦4 天前
CSDN 技术社区数据采集:OpenClaw 抓取公开技术热帖,生成领域技术热点周报
java·大数据·前端·数据库·python·php·openclaw
console.log('npc')4 天前
OpenClaw 使用教程:开源 AI Agent 编排框架完全指南
人工智能·microsoft·ai编程·openclaw
栈溢出的浪漫5 天前
技术速递|基于 OpenClaw、MCP 和 Azure Container Apps 构建自主 Microsoft Teams 智能体
mcp·openclaw·自主智能体·技术速递·azurecontainerapps