【开源自荐】 AI Selector:一款通用 AI 配置组件,让你的应用快速接入 20+ LLM AI厂商

在线演示:https://tombcato.github.io/ai-selector/react/index.html

开源地址:https://github.com/tombcato/ai-selector

官网介绍:https://tombcato.github.io/ai-selector

前言

如果你正在开发一个需要用户配置 AI 服务的应用(比如 AI 写作助手、智能客服、代码补全工具等),你可能会遇到这些问题:

  • 🤯 需要对接多家 AI 厂商(OpenAI、Claude、Gemini、DeepSeek...),每家 API 格式都不一样
  • 📜 需要维护一长串模型列表,还要时刻关注厂商更新
  • 🎨 还要设计一套 UI 让用户方便地选择和配置

AI Selector 就是为解决这些问题而生的。

Smart Ticker文字替换特效实现:https://blog.csdn.net/tombcato/article/details/156424365


✨ 核心特性

特性 描述
🤖 20+ 厂商 OpenAI, Claude, Gemini, DeepSeek, 通义, 智谱, Mistral... 开箱即用
智能模型发现 自动调用厂商 API 获取最新模型列表,无需手动维护
📡 连接诊断 一键测试 API 连通性与延迟
🔐 AES 加密存储 API Key 加密保存到 localStorage,非明文
🎨 开箱即用 UI Tailwind CSS 设计系统,深色模式,中英双语
🔌 React + Vue 双框架适配器,核心逻辑共享
🧩 Headless 模式 只用 useAIConfig Hook,完全自定义 UI
🔄 零后端可选 支持前端直连(默认) / 后端代理 / 自定义 fetcher

🚀 快速开始

安装

bash 复制代码
# React
npm install @tombcato/ai-selector-react

# Vue
npm install @tombcato/ai-selector-vue

使用

tsx 复制代码
// React
import { AIConfigForm } from '@tombcato/ai-selector-react';
import '@tombcato/ai-selector-react/style.css';

function App() {
  return (
    <AIConfigForm
      proxyUrl=""           // 空字符串 = 直连模式
      language="zh"         // 'zh' | 'en'
      showPreview           // 显示配置预览
      onSave={(config) => {
        console.log('用户保存的配置:', config);
        // { providerId: 'openai', apiKey: 'sk-xxx', model: 'gpt-4o', ... }
      }}
    />
  );
}

就这么简单!用户可以:

  1. 选择 AI 厂商(20+ 内置选项)
  2. 输入 API Key
  3. 选择模型(自动从厂商 API 获取最新列表)
  4. 测试连接
  5. 保存配置

🎯 三种接入模式

1️⃣ 直连模式(零后端)

复制代码
浏览器 ────────────► AI 厂商 API
  • ✅ 零配置,开箱即用
  • ⚠️ API Key 暴露在浏览器 Network 中
  • ⚠️ 部分厂商可能阻止 CORS

适合:个人项目、内部工具、原型验证

2️⃣ 代理模式(推荐生产环境)

复制代码
浏览器 ───► 后端代理 ───► AI 厂商 API
tsx 复制代码
<AIConfigForm proxyUrl="https://your-backend/ai-proxy" />
  • ✅ 隐藏 API Key
  • ✅ 绕过 CORS 限制
  • 📦 需要部署后端(项目内含 Python FastAPI 示例)

3️⃣ 自定义模式(完全控制)

tsx 复制代码
<AIConfigForm
  modelFetcher={async (params) => {
    // 自己实现模型获取、连接测试逻辑
    return await yourCustomFetch(params);
  }}
/>

🔐 API Key 安全存储

默认使用 AES 加密 存储到 localStorage:

typescript 复制代码
import { 
  createConfigStorage, 
  encryptedStorageAdapter  // 默认,AES 加密
} from '@tombcato/ai-selector-core';

const storage = createConfigStorage();
const config = storage.load();  // 自动解密
storage.save(newConfig);        // 自动加密

localStorage 中看到的是密文:

复制代码
U2FsdGVkX1+abc123...

🧩 Headless 模式

如果你不想用内置 UI,可以只使用 useAIConfig Hook:

tsx 复制代码
import { useAIConfig } from '@tombcato/ai-selector-react';

function MyCustomUI() {
  const {
    providerId, apiKey, model, models, providers, isValid,
    setProviderId, setApiKey, selectModel, runTest, save,
  } = useAIConfig({ proxyUrl: '' });

  return (
    <div>
      <select value={providerId} onChange={e => setProviderId(e.target.value)}>
        {providers.map(p => <option key={p.id} value={p.id}>{p.name}</option>)}
      </select>
      {/* 完全自定义的 UI */}
    </div>
  );
}

🛠️ 自定义 Provider

需要对接私有部署的模型?或者覆盖内置厂商的配置?

tsx 复制代码
<AIConfigForm
  config={{
    mode: 'default',  // 'default' | 'customOnly'
    custom: {
      // 覆盖内置配置
      openai: {
        name: 'Enterprise OpenAI',
        baseUrl: 'https://gateway.company.com/openai/v1',
      },
      // 添加自定义厂商
      'my-llm': {
        name: 'Internal LLM',
        baseUrl: 'http://localhost:8080/v1',
        apiFormat: 'openai',
        needsApiKey: false,
        models: [{ id: 'llama-3-8b', name: 'Llama 3 8B' }]
      }
    }
  }}
/>

📦 项目结构

复制代码
ai-selector/
├── packages/
│   ├── core/     # 核心逻辑(框架无关)
│   ├── react/    # React 适配器
│   └── vue/      # Vue 适配器
└── backend/      # Python 代理示例 (FastAPI)

核心逻辑在 @tombcato/ai-selector-core 中,React 和 Vue 只是薄薄的 UI 封装。


🤝 贡献

欢迎提 Issue 和 PR!

GitHub: https://github.com/tombcato/ai-selector

如果这个项目对你有帮助,欢迎给个 ⭐ Star!


📜 License

MIT © 2026 AI Selector

相关推荐
Deepoch1 天前
破解酒店服务难题:Deepoc赋能机器人智能升级
人工智能·机器人·开发板·具身模型·deepoc·酒店机器人
间彧1 天前
Vibe Coding在实际项目中如何与现有开发流程(如敏捷开发、CI/CD)结合?
人工智能
JSU_曾是此间年少1 天前
pytorch自动微分机制探寻
人工智能·pytorch·python
Hcoco_me1 天前
大模型面试题40:结合RoPE位置编码、优秀位置编码的核心特性
人工智能·深度学习·lstm·transformer·word2vec
Dr_哈哈1 天前
Node.js fs 与 path 完全指南
前端
刘立军1 天前
程序员应该熟悉的概念(8)嵌入和语义检索
人工智能·算法
Mr.Lee jack1 天前
TileRT超低延迟的大语言模型推理系统
人工智能·pytorch·deepseek
啊花是条龙1 天前
《产品经理说“Tool 分组要一条会渐变的彩虹轴,还要能 zoom!”——我 3 步把它拆成 1024 个像素》
前端·javascript·echarts
kisshuan123961 天前
基于VFNet的轮胎标签检测与分类系统
人工智能·分类·数据挖掘
C_心欲无痕1 天前
css - 使用@media print:打印完美网页
前端·css