【分享】模型切换器:解决override等工具运行时切换模型的痛点!

各位佬友七夕快乐啊!今天给大家带来一个工具—模型切换器。

相信大家在使用始皇神器override过程中一定遇到切换模型方面的困扰吧,用好的模型担心额度使用,用差的模型回复质量又不行,每次想要换模型还需要修改配置,重新部署有一点点麻烦,不能做到运行时动态切换模型(只能怪github copilot没有提供模型切换的功能)。还有其他工具如chatbox,浏览器插件sider也是只能自定义一个模型不能灵活切换模型。针对这些痛点,于是开发了这个模型切换器,希望能帮到大家!

项目地址:

对应版本:

当前分享内容对应 release v1.0.0

项目特色:

  1. 提供简单易用的Web 模型切换界面,点几下就能切换模型
  2. 支持运行时动态切换模型,不用重启程序
  3. 支持Docker部署,对于喜欢容器化的佬友来说简直不要太爽
  4. 提供API接口,方便集成到其他项目中

部署方法:

  1. 本地部署:
    • 克隆代码
    • 安装依赖
     pip install -r requirements.txt
    
    • 新建并设置.env文件
    # oneapi/newapi地址,不包含v1
    BASE_URL=    
    # 请求秘钥,sk-xxxx
    API_KEY=
    # 默认使用模型
    OVERRIDE_MODEL=gpt-4o
    
    • 运行
    python main.py
    
  2. Docker部署:
    • 构建镜像:
    docker build -t override-model-switcher .
    
    • 运行容器:
    docker run -p 8000:8000 -e BASE_URL=xxx -e API_KEY=xxx -e OVERRIDE_MODEL=xxx override-model-switcher
    
  3. 其他免费的云服务部署(略,自行研究)

override使用方案

  1. 修改override项目config配置下面两个配置
     "chat_api_base": "{模型切换器服务地址}/v1",
     "chat_api_key": "{模型切换器服务配置的api_key}",
     "chat_model_default": "override", 
    
  2. 模型切换

这里提供两个方法:

  • 服务自带的web页面,地址:{模型切换器服务地址}/

  • 配合utools工具的快捷命令插件使用,添加关键字可以很方便的调用

    命令代码如下,在tools目录下也有备份,
    API_URL : 填模型切换器服务的地址
    base_url : oneapi/newapi服务地址(不包含v1)
    api_key : oneapi/newapi的令牌

     import tkinter as tk
     from tkinter import messagebox
     import requests
     
     # 设置API的URL
     API_URL = "http://localhost:8000/switch/override_models"
     base_url = ""
     api_key = ""
     def fetch_models():
         # 发送 GET 请求到 OpenAI API 以获取模型列表
         try:
             response = requests.get(
                 f"{base_url}/v1/models", headers={"Authorization": f"Bearer {api_key}"}
             )
             response.raise_for_status()  # 检查请求是否成功
             return response.json()
         except requests.exceptions.RequestException as e:
             return None
     
     def get_allowed_models():
         models_data = fetch_models()
         # 检查获取的数据是否有效
         if models_data and 'data' in models_data:
             return [model['id'] for model in models_data['data']]
         return []
     
     def switch_model(model):
         try:
             response = requests.post(API_URL, json={"model": model})
             if response.status_code == 200:
                 messagebox.showinfo("成功", f"模型已切换为 {model}")
                 current_model.set(f"当前模型:{model}")  # 更新当前模型标签
             else:
                 messagebox.showerror("错误", f"切换失败: {response.text}")
         except requests.RequestException as e:
             messagebox.showerror("错误", f"请求失败: {str(e)}")
     
     # 创建主窗口
     root = tk.Tk()
     
     # 初始化当前模型变量
     current_model = tk.StringVar(value="当前模型:无")
     root.title("模型切换工具")
     
     # 设置窗口大小和位置
     root.geometry("300x300+50+50")
     
     # 创建标签
     label = tk.Label(root, text="选择要切换的模型:")
     label.pack(pady=10)
     
     # 显示当前生效的模型信息
     current_model_label = tk.Label(root, textvariable=current_model)
     current_model_label.pack(pady=10)
     
     # 获取可用模型并创建下拉选择菜单
     MODELS = get_allowed_models()
     model_menu = tk.OptionMenu(root, current_model, *MODELS, command=switch_model)
     model_menu.pack(pady=10)
     
     # 运行主循环
     root.mainloop()
    

    使用效果图(请忽略界面的丑陋)

    image

当然了佬友们也可以根据提供的/switch/override_models接口,自己实现切换工具,怎么方便怎么来

结语

有什么问题或建议,欢迎各位佬友在下面留言讨论!有帮助的话,动动小手点点赞~

PS: 别忘了保护好你的API密钥,千万不要泄露哦!

16 个赞

感谢分享

1 个赞

太强了 :tieba_013: :tieba_013: :tieba_013:

1 个赞

太强了吧Jay!

1 个赞

蟹蟹大帅哥捧场!!! :bili_082:

捧场学习:grinning::grinning::grinning:

1 个赞

蟹蟹杰伦 :bili_082:

1 个赞

:+1:

1 个赞

:bili_064: :bili_064: :bili_064:

:bili_082: :bili_082: :bili_082:

1 个赞

:yum: :yum: :yum:

先马住

1 个赞

好东西先收藏

1 个赞

好好好,直击痛点

1 个赞

哈哈哈,我也是头疼这个问题 :lark_033:

不错不错

2 个赞

太强了 jay 佬!

:tieba_022: 天哥谬赞了,项目更新了现在更酷炫一点 :tieba_026:

半夜还在更新表单 :xhs_033: :xhs_033: :xhs_033:

我去这都被你发现了 :tieba_087: