Skip to content

开发一个简单 Claude Code 模型切换器

前言

  • 在使用 Claude Code 模型时,需要根据不同的场景切换模型,也可以体验不同的模型,处理效果。
  • 效果:

在这里插入图片描述

在这里插入图片描述

技术栈

  • NodeJS + TypeScipt

实现

  • 目标:通过命令行切换 Claude Code 模型
    • ai init: 初始化 Claude Code 模型切换器配置,以便于管理各个模型的设置的参数
    • ai use <模型>: 切换到指定的 Claude Code 模型
    • ai ls: 列出所有可用的 Claude Code 模型

ai init

  • 安装识别用户命令依赖 commander
ts
const aiModelPath = resolve(os.homedir(), '.ai-model.json') // 配置文件路径
const aiJsonc = loadJSONCFile(resolve(import.meta.dirname, 'ai.jsonc'), true) // 默认配置
const aiCommand = program.command('ai')
aiCommand
  .command('init')
  .description('初始化 AI 模型配置')
  .action(() => {
    info()
    if (existsSync(aiModelPath)) {
      info(`配置已存在,路径 ${chalk.green(aiModelPath)}`)
      return
    }
    writeFileSync(aiModelPath, JSON.stringify(aiJsonc, null, 2))
    console.log(`配置已初始化,路径 ${aiModelPath}`)
  })

ai use <模型>

ts
aiCommand
  .command('use <模型>')
  .description('切换 AI 模型')
  .action(async (value: string) => {
    const claudeConfig = loadClaudeConfig()
    const [models, content] = loadAIModelConfig()
    // 检查模型是否存在
    if (!models.some(([name]) => name === value)) {
      info(`模型 ${chalk.red(value)} 不存在`)
      process.exit(1)
    }

    // 检查当前环境变量是否和目标模型一致
    if (!keys.some(key => claudeConfig.env[key] !== content[value].env[key])) {
      info(`当前正处于 ${chalk.green(value)} 模型,无需切换`)
    } else {
      claudeConfig.env = content[value].env
      writeFileSync(claudeConfigPath, JSON.stringify(claudeConfig, null, 2))
      success(`模型 ${chalk.green(value)} 已切换`)
    }
  })

ai ls

ts
aiCommand
  .command('ls')
  .description('查看当前已配置的 AI 模型')
  .action(() => {
    const [models] = loadAIModelConfig()
    let fieldMax = 0
    let current = -1
    const claudeConfig = loadClaudeConfig()
    models.forEach(([name, value], i) => {
      fieldMax = Math.max(fieldMax, name.length)

      // 找到第一个和当前环境变量一致的模型
      if (current < 0 && !keys.some(key => claudeConfig.env[key] !== value.env[key])) {
        current = i
      }
    })

    models.forEach(([name, value], i) => {
      const { ANTHROPIC_BASE_URL } = value.env
      const prefix = i === current ? chalk.green('*') : ' '
      const separator = getSeparatorStr(name.length, fieldMax + 4, '-')
      const str = `${prefix} ${name} ${separator} ${ANTHROPIC_BASE_URL}`
      info(str)
    })
  })

演示

  • node >= 24.x
  • windows 电脑全局安装 mine-auto-cli
sh
npm i -g mine-auto-cli
  • 查看是否安装成功
sh
auto -v
  • 使用上面三个命令初始化、切换模型、查看模型
sh
# 初始化
auto ai init

# 查看已配置的模型
auto ai ls

# 切换模型
auto ai use deepseek

# 查看命令更多帮助信息
auto ai -h

在这里插入图片描述

总结

  • 以上就是一个简单的 Claude Code 模型切换器的实现,通过命令行可以方便地切换不同的模型,处理不同的场景。
  • 项目源码
  • 当前 ai 文件源码

基于 MIT 许可发布