Langcli logoAI编程助手

自定义模型

通过Langcli的配置文件settings.json的 modelProviders 设置项,Langcli 允许你配置自定义模型提供商。这使你能够使用 /model 命令在不同的 AI 模型之间切换(包括来自 LangRouter 的模型以及你自己定义的模型)。

概述

使用 modelProviders 可按协议类型声明自定义的模型列表,供 /model 选择器切换。可选的协议类型包括openai、anthropic、gemini。每个模型定义都需要一个 id 且必须包含 envKey,可选字段包括 name、description、baseUrl 和 generationConfig等。

配置文件settings.json的路径

  • Macos/Linux/WSL: ~/.langcli/settings.json
  • windows: C:\Users\%USERNAME%\.langcli\settings.json

协议类型下的重复模型id

在单个 协议类型 下定义多个具有相同 id 的模型(例如在 openai 中有两个 "id": "gpt-4o" 的条目)目前不受支持。如果存在重复项,首次出现的条目将生效,后续重复项将被跳过并显示警告。请注意,id 字段既用作配置标识符,也用作发送给 API 的实际模型名称,因此使用唯一 ID(如 gpt-4o-creative、gpt-4o-balanced)并不是可行的变通方案。这是一个已知限制,我们计划在后续版本中解决。

验证settings.json的修改是否合法

你修改了settings.json之后,可以执行下面的命令来验证你的修改是否合法:

langcli doctor 

如有异常,这条指令会提示你。如无异常,doctor指令仅仅会输出Diagnostics、Updates信息,你按回车键确认即可。

支持的协议类型

modelProviders 对象的键必须是有效的协议类型值。目前支持的协议类型包括:

协议类型描述
openaiOpenAI兼容APIs (例如vLLM/Ollama的本地自托管模型服务, Litellm, OpenAI, Azure OpenAI)
anthropicAnthropic Claude API
geminiGoogle Gemini API

无效协议类型

如果使用了无效的协议类型键(例如,拼写错误如 "openai-custom"),该配置将被静默跳过,相关模型不会出现在 /model 选择器中。请始终使用上面列出的受支持认证类型值之一。

按协议类型的配置示例

以下是针对不同协议类型的完整配置示例,展示了可用参数及其组合。

本地自托管模型(通过 OpenAI 兼容的 API)

大多数本地推理服务器(vLLM、Ollama、LM Studio 等)都提供与 OpenAI 兼容的 API 端点。使用 openai 协议类型和本地 baseUrl 对其进行配置:

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.langrouter.ai",
    "ANTHROPIC_AUTH_TOKEN": "your_langrouter_api_key",
    "OLLAMA_API_KEY": "ollama",
    "VLLM_API_KEY": "not-needed"
  },
  "model": "custom:qwen3.6:35b-a3b-q4_K_M",
  "modelProviders": {
    "openai": [
      {
        "id": "qwen3.6:35b-a3b-q4_K_M",
        "name": "Qwen3.6:35B A3B (Ollama)",
        "envKey": "OLLAMA_API_KEY",
        "baseUrl": "http://localhost:11434/v1",
        "generationConfig": {
          "timeout": 300000,
          "maxRetries": 2,
          "contextWindowSize": 32768,
          "samplingParams": {
            "temperature": 0.7,
            "top_p": 0.9,
            "max_tokens": 4096
          }
        }
      },
      {
        "id": "llama-3.1-8b",
        "name": "Llama 3.1 8B (vLLM)",
        "envKey": "VLLM_API_KEY",
        "baseUrl": "http://localhost:8000/v1",
        "generationConfig": {
          "timeout": 120000,
          "maxRetries": 2,
          "contextWindowSize": 128000,
          "samplingParams": {
            "temperature": 0.6,
            "max_tokens": 8192
          }
        }
      }
    ]
  }
}

兼容 OpenAI 的提供商(openai

该协议类型不仅支持 OpenAI 的官方 API,还支持任何与 OpenAI 兼容的端点,包括 OpenRouter 等聚合模型提供商。

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.langrouter.ai",
    "ANTHROPIC_AUTH_TOKEN": "your_langrouter_api_key",
    "DEEPSEEK_API_KEY": "abc",
    "OPENAI_API_KEY": "sk-your-actual-openai-key-here",
    "OPENROUTER_API_KEY": "sk-or-your-actual-openrouter-key-here"
  },
  "model": "custom:gpt-4o",
  "modelProviders": {
    "openai": [
      {
        "id": "deepseek-v4-flash[1m]",
        "name": "deepseek-v4-flash[1m] (custom)",
        "envKey": "DEEPSEEK_API_KEY",
        "baseUrl": "https://api.deepseek.com",
        "generationConfig": {
          "timeout": 300000,
          "maxRetries": 2,
          "contextWindowSize": 1000000,
          "samplingParams": {
            "temperature": 0.7,
            "top_p": 0.9,
            "max_tokens": 384000
          }
        }
      },
      {
        "id": "deepseek-v4-pro[1m]",
        "name": "deepseek-v4-pro[1m] (custom)",
        "envKey": "DEEPSEEK_API_KEY",
        "baseUrl": "https://api.deepseek.com",
        "generationConfig": {
          "timeout": 300000,
          "maxRetries": 2,
          "contextWindowSize": 1000000,
          "samplingParams": {
            "temperature": 0.7,
            "top_p": 0.9,
            "max_tokens": 384000
          }
        }
      },
      {
        "id": "gpt-4o",
        "name": "GPT-4o",
        "envKey": "OPENAI_API_KEY",
        "baseUrl": "https://api.openai.com/v1",
        "generationConfig": {
          "timeout": 60000,
          "maxRetries": 3,
          "enableCacheControl": true,
          "contextWindowSize": 128000,
          "modalities": {
            "image": true
          },
          "customHeaders": {
            "X-Client-Request-ID": "req-123"
          },
          "extra_body": {
            "enable_thinking": true,
            "service_tier": "priority"
          },
          "samplingParams": {
            "temperature": 0.2,
            "top_p": 0.8,
            "max_tokens": 4096,
            "presence_penalty": 0.1,
            "frequency_penalty": 0.1
          }
        }
      },
      {
        "id": "gpt-4o-mini",
        "name": "GPT-4o Mini",
        "envKey": "OPENAI_API_KEY",
        "baseUrl": "https://api.openai.com/v1",
        "generationConfig": {
          "timeout": 30000,
          "samplingParams": {
            "temperature": 0.5,
            "max_tokens": 2048
          }
        }
      },
      {
        "id": "openai/gpt-4o",
        "name": "GPT-4o (via OpenRouter)",
        "envKey": "OPENROUTER_API_KEY",
        "baseUrl": "https://openrouter.ai/api/v1",
        "generationConfig": {
          "timeout": 120000,
          "maxRetries": 3,
          "samplingParams": {
            "temperature": 0.7
          }
        }
      }
    ]
  }
}

Anthropic (anthropic)

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.langrouter.ai",
    "ANTHROPIC_AUTH_TOKEN": "your_langrouter_api_key",
    "MY_ANTHROPIC_API_KEY": "sk-ant-your-actual-anthropic-key-here"
  },
  "model": "custom:claude-3-opus",
  "modelProviders": {
    "anthropic": [
      {
        "id": "claude-3-5-sonnet",
        "name": "Claude 3.5 Sonnet",
        "envKey": "MY_ANTHROPIC_API_KEY",
        "baseUrl": "https://api.anthropic.com/v1",
        "generationConfig": {
          "timeout": 120000,
          "maxRetries": 3,
          "contextWindowSize": 200000,
          "samplingParams": {
            "temperature": 0.7,
            "max_tokens": 8192,
            "top_p": 0.9
          }
        }
      },
      {
        "id": "claude-3-opus",
        "name": "Claude 3 Opus",
        "envKey": "MY_ANTHROPIC_API_KEY",
        "baseUrl": "https://api.anthropic.com/v1",
        "generationConfig": {
          "timeout": 180000,
          "samplingParams": {
            "temperature": 0.3,
            "max_tokens": 4096
          }
        }
      }
    ]
  }
}

Google Gemini (gemini)

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.langrouter.ai",
    "ANTHROPIC_AUTH_TOKEN": "your_langrouter_api_key",
    "GEMINI_API_KEY": "AIza-your-actual-gemini-key-here"
  },
  "model": "custom:gemini-2.0-flash",
  "modelProviders": {
    "gemini": [
      {
        "id": "gemini-2.0-flash",
        "name": "Gemini 2.0 Flash",
        "envKey": "GEMINI_API_KEY",
        "baseUrl": "https://generativelanguage.googleapis.com",
        "capabilities": {
          "vision": true
        },
        "generationConfig": {
          "timeout": 60000,
          "maxRetries": 2,
          "contextWindowSize": 1000000,
          "schemaCompliance": "auto",
          "samplingParams": {
            "temperature": 0.4,
            "top_p": 0.95,
            "max_tokens": 8192,
            "top_k": 40
          }
        }
      }
    ]
  }
}

补充说明

对于不需要身份验证的本地服务器,您可以使用任何占位符值作为 API 密钥:

# 对于 Ollama(无需验证)
"OLLAMA_API_KEY": "ollama"

# 对于 vLLM(如果未配置身份验证)
"VLLM_API_KEY": "not-needed"

extra_body参数的设置

extra_body 参数 仅对 兼容openai协议的模型/服务商 有效。Anthropic 和 Gemini 提供商会忽略此参数。

envKey参数的设置

envKey 字段指定的是环境变量的名称,而不是实际的 API 密钥值。要使配置生效,您需要确保已将相应的环境变量设置为您的真实 API 密钥。您可以通过在 settings.json 文件中使用 env 字段来实现(如上面的示例所示):

{
  "env": {
    "OPENAI_API_KEY": "sk-your-actual-key-here"
  }
}

每个自定义模型示例都包含一个 envKey 字段,用于说明如何配置 API 密钥。

最后更新