fix: rewrite model config to use models.json + auth-profiles.json

Old approach wrote .env which OpenClaw ignores. Now writes directly
to portable-home agent config files and sets default model via
openclaw config set.
This commit is contained in:
dongsheng123132
2026-03-09 19:21:13 +08:00
parent cd402a0e5a
commit cc001e4162

View File

@@ -240,124 +240,168 @@ do_dashboard() {
start_gateway start_gateway
} }
# 运行 openclaw 命令(便携模式)
run_openclaw() {
cd "$OPENCLAW_DIR"
"$NODE_BIN" openclaw.mjs "$@"
}
# 写入模型配置到 models.json 和 auth-profiles.json
write_model_config() {
local PROVIDER_ID="$1"
local PROVIDER_NAME="$2"
local BASE_URL="$3"
local API_KEY="$4"
local MODEL_ID="$5"
local MODEL_NAME="$6"
local CONTEXT_WINDOW="${7:-128000}"
local AGENT_DIR="$PORTABLE_STATE_DIR/agents/main/agent"
mkdir -p "$AGENT_DIR"
# 写 auth-profiles.json
cat > "$AGENT_DIR/auth-profiles.json" << AUTHEOF
{
"version": 1,
"profiles": {
"${PROVIDER_ID}:default": {
"type": "api_key",
"provider": "${PROVIDER_ID}",
"key": "${API_KEY}"
}
}
}
AUTHEOF
# 写 models.json
cat > "$AGENT_DIR/models.json" << MODELEOF
{
"providers": {
"${PROVIDER_ID}": {
"baseUrl": "${BASE_URL}",
"api": "openai-completions",
"models": [
{
"id": "${MODEL_ID}",
"name": "${MODEL_NAME}",
"reasoning": false,
"input": ["text"],
"contextWindow": ${CONTEXT_WINDOW},
"maxTokens": 8192
}
],
"apiKey": "${API_KEY}"
}
}
}
MODELEOF
# 设置为默认模型
run_openclaw config set agents.defaults.model "${MODEL_ID}" 2>/dev/null
echo ""
echo -e " ${GREEN}${MODEL_NAME} 已配置完成!${NC}"
echo -e " ${GREEN}模型: ${MODEL_ID}${NC}"
echo -e " ${GREEN}接口: ${BASE_URL}${NC}"
echo ""
echo -e " ${YELLOW}配置已保存到 U 盘。重启网关后生效(主菜单选 [4] 或 [17]${NC}"
}
# [5] 配置国产模型 # [5] 配置国产模型
do_china_models() { do_china_models() {
echo "" echo ""
echo -e " ${CYAN}${BOLD}━━━ 配置国产 AI 模型 ━━━${NC}" echo -e " ${CYAN}${BOLD}━━━ 配置国产 AI 模型 ━━━${NC}"
echo "" echo ""
echo -e " OpenClaw 已内置以下国产模型支持:" echo -e " ${RED}★ 推荐先注册一个,其他以后再加${NC}"
echo "" echo ""
echo -e " ${GREEN}[a]${NC} DeepSeek深度求索 — 性价比最高,推荐首选" echo -e " ${GREEN}[a]${NC} DeepSeek深度求索${RED} ★推荐${NC} — 便宜好用,编程最强"
echo -e " ${GREEN}[b]${NC} Kimi / 月之暗面 — 256K 超长上下文" echo -e " ${GREEN}[b]${NC} Kimi / 月之暗面 — 256K 超长上下文"
echo -e " ${GREEN}[c]${NC} 通义千问 Qwen — 阿里云,免费额度大" echo -e " ${GREEN}[c]${NC} 通义千问 Qwen — 阿里云,免费额度大"
echo -e " ${GREEN}[d]${NC} 智谱 GLM — 清华系,学术场景强" echo -e " ${GREEN}[d]${NC} 智谱 GLM — 清华系,学术场景强"
echo -e " ${GREEN}[e]${NC} MiniMax — 语音和多模态" echo -e " ${GREEN}[e]${NC} MiniMax — 语音和多模态"
echo -e " ${GREEN}[f]${NC} 豆包 Doubao字节跳动 — 火山引擎平台" echo -e " ${GREEN}[f]${NC} 豆包 Doubao字节跳动 — 火山引擎平台"
echo -e " ${GREEN}[g]${NC} 百度千帆 — 百度智能云"
echo -e " ${GREEN}[h]${NC} 小米 Mimo — 小米 AI"
echo "" echo ""
echo -e " ${YELLOW}请选择要配置的模型 (a-h):${NC} " echo -e " ${DIM}[o] 用 OpenClaw 自带的配置向导(英文,更多选项)${NC}"
echo ""
echo -e " ${YELLOW}请选择 (a-f / o):${NC} "
read -n 1 MODEL_CHOICE read -n 1 MODEL_CHOICE
echo "" echo ""
echo "" echo ""
ENV_FILE="$OPENCLAW_DIR/.env" ensure_deps
touch "$ENV_FILE"
case $MODEL_CHOICE in case $MODEL_CHOICE in
a) a)
echo -e " ${CYAN}配置 DeepSeek${NC}" echo -e " ${CYAN}配置 DeepSeek${NC}"
echo " 获取 API Key: https://platform.deepseek.com/" echo " 注册获取 API Key: https://platform.deepseek.com/"
echo "" echo ""
read -p " 请输入 DeepSeek API Key: " API_KEY read -p " 请输入 DeepSeek API Key: " API_KEY
if [ -n "$API_KEY" ]; then if [ -n "$API_KEY" ]; then
grep -v "OPENAI_API_KEY\|OPENAI_BASE_URL" "$ENV_FILE" > "$ENV_FILE.tmp" 2>/dev/null || true write_model_config "deepseek" "DeepSeek" \
mv "$ENV_FILE.tmp" "$ENV_FILE" "https://api.deepseek.com/v1" "$API_KEY" \
echo "OPENAI_API_KEY=$API_KEY" >> "$ENV_FILE" "deepseek-chat" "DeepSeek V3" "128000"
echo "OPENAI_BASE_URL=https://api.deepseek.com/v1" >> "$ENV_FILE"
echo -e " ${GREEN}DeepSeek 已配置!${NC}"
fi fi
;; ;;
b) b)
echo -e " ${CYAN}配置 Kimi (月之暗面)${NC}" echo -e " ${CYAN}配置 Kimi (月之暗面)${NC}"
echo " 获取 API Key: https://platform.moonshot.cn/" echo " 注册获取 API Key: https://platform.moonshot.cn/"
echo "" echo ""
read -p " 请输入 Moonshot API Key: " API_KEY read -p " 请输入 Moonshot API Key: " API_KEY
if [ -n "$API_KEY" ]; then if [ -n "$API_KEY" ]; then
grep -v "OPENAI_API_KEY\|OPENAI_BASE_URL" "$ENV_FILE" > "$ENV_FILE.tmp" 2>/dev/null || true write_model_config "moonshot" "Moonshot" \
mv "$ENV_FILE.tmp" "$ENV_FILE" "https://api.moonshot.cn/v1" "$API_KEY" \
echo "OPENAI_API_KEY=$API_KEY" >> "$ENV_FILE" "kimi-k2.5" "Kimi K2.5" "256000"
echo "OPENAI_BASE_URL=https://api.moonshot.cn/v1" >> "$ENV_FILE"
echo -e " ${GREEN}Kimi 已配置!${NC}"
fi fi
;; ;;
c) c)
echo -e " ${CYAN}配置通义千问 Qwen${NC}" echo -e " ${CYAN}配置通义千问 Qwen${NC}"
echo " 获取 API Key: https://dashscope.console.aliyun.com/" echo " 注册获取 API Key: https://dashscope.console.aliyun.com/"
echo "" echo ""
read -p " 请输入 Qwen API Key: " API_KEY read -p " 请输入 Qwen API Key: " API_KEY
if [ -n "$API_KEY" ]; then if [ -n "$API_KEY" ]; then
grep -v "ZAI_API_KEY" "$ENV_FILE" > "$ENV_FILE.tmp" 2>/dev/null || true write_model_config "qwen" "Qwen" \
mv "$ENV_FILE.tmp" "$ENV_FILE" "https://dashscope.aliyuncs.com/compatible-mode/v1" "$API_KEY" \
echo "ZAI_API_KEY=$API_KEY" >> "$ENV_FILE" "qwen-max" "Qwen Max" "128000"
echo -e " ${GREEN}通义千问已配置!${NC}"
fi fi
;; ;;
d) d)
echo -e " ${CYAN}配置智谱 GLM${NC}" echo -e " ${CYAN}配置智谱 GLM${NC}"
echo " 获取 API Key: https://open.bigmodel.cn/" echo " 注册获取 API Key: https://open.bigmodel.cn/"
echo " 注意: 通过火山引擎(Volcano Engine)接入"
echo "" echo ""
read -p " 请输入 API Key: " API_KEY read -p " 请输入智谱 API Key: " API_KEY
if [ -n "$API_KEY" ]; then if [ -n "$API_KEY" ]; then
echo "# 智谱GLM (via Volcano Engine)" >> "$ENV_FILE" write_model_config "zhipu" "Zhipu" \
echo "VOLCENGINE_API_KEY=$API_KEY" >> "$ENV_FILE" "https://open.bigmodel.cn/api/paas/v4" "$API_KEY" \
echo -e " ${GREEN}智谱 GLM 已配置!${NC}" "glm-4-plus" "GLM-4 Plus" "128000"
fi fi
;; ;;
e) e)
echo -e " ${CYAN}配置 MiniMax${NC}" echo -e " ${CYAN}配置 MiniMax${NC}"
echo " 获取 API Key: https://platform.minimaxi.com/" echo " 注册获取 API Key: https://platform.minimaxi.com/"
echo "" echo ""
read -p " 请输入 MiniMax API Key: " API_KEY read -p " 请输入 MiniMax API Key: " API_KEY
if [ -n "$API_KEY" ]; then if [ -n "$API_KEY" ]; then
grep -v "MINIMAX_API_KEY" "$ENV_FILE" > "$ENV_FILE.tmp" 2>/dev/null || true write_model_config "minimax" "MiniMax" \
mv "$ENV_FILE.tmp" "$ENV_FILE" "https://api.minimax.chat/v1" "$API_KEY" \
echo "MINIMAX_API_KEY=$API_KEY" >> "$ENV_FILE" "MiniMax-Text-01" "MiniMax Text 01" "128000"
echo -e " ${GREEN}MiniMax 已配置!${NC}"
fi fi
;; ;;
f) f)
echo -e " ${CYAN}配置豆包 Doubao (字节跳动)${NC}" echo -e " ${CYAN}配置豆包 Doubao (字节跳动)${NC}"
echo " 获取 API Key: https://console.volcengine.com/ark" echo " 注册获取 API Key: https://console.volcengine.com/ark"
echo "" echo ""
read -p " 请输入火山引擎 API Key: " API_KEY read -p " 请输入火山引擎 API Key: " API_KEY
if [ -n "$API_KEY" ]; then if [ -n "$API_KEY" ]; then
grep -v "VOLCENGINE_API_KEY" "$ENV_FILE" > "$ENV_FILE.tmp" 2>/dev/null || true write_model_config "volcengine" "Volcano Engine" \
mv "$ENV_FILE.tmp" "$ENV_FILE" "https://ark.cn-beijing.volces.com/api/v3" "$API_KEY" \
echo "VOLCENGINE_API_KEY=$API_KEY" >> "$ENV_FILE" "doubao-pro-256k" "Doubao Pro" "256000"
echo -e " ${GREEN}豆包已配置!${NC}"
fi fi
;; ;;
g) o)
echo -e " ${CYAN}配置百度千帆${NC}" echo -e " ${CYAN}启动 OpenClaw 配置向导...${NC}"
echo " 获取 API Key: https://console.bce.baidu.com/qianfan/"
echo "" echo ""
read -p " 请输入千帆 API Key: " API_KEY cd "$OPENCLAW_DIR"
if [ -n "$API_KEY" ]; then run_openclaw onboard
echo "QIANFAN_API_KEY=$API_KEY" >> "$ENV_FILE"
echo -e " ${GREEN}百度千帆已配置!${NC}"
fi
;;
h)
echo -e " ${CYAN}配置小米 Mimo${NC}"
echo " 获取 API Key: https://dev.mi.com/mimo"
echo ""
read -p " 请输入 Mimo API Key: " API_KEY
if [ -n "$API_KEY" ]; then
echo "MIMO_API_KEY=$API_KEY" >> "$ENV_FILE"
echo -e " ${GREEN}小米 Mimo 已配置!${NC}"
fi
;; ;;
*) *)
echo -e " ${YELLOW}无效选择${NC}" echo -e " ${YELLOW}无效选择${NC}"