拼好 AI:个人用户的轻量化 AI 模型聚合平台

前言

我做个项目的最初其实是为了把白嫖过来的公益站做一下整合,方便我调用和做一下错误转移(毕竟嫖来的不一定稳),因此找了一些开源的 API 网关来用,比如 New API 和 uni-api。

我最开始用的是 New API,因为好多公益站都在用这个项目。它整个使用下来的体验感觉是不错的,感觉算是大而全。但是成也萧何败也萧何,毕竟我只是个人只用,用不上的功能还是有点太多了。于是寻思有没有更简单一点的项目,最后找到了 uni-api。

如果说 New API 是大而全的话,那么 uni-api 就可以说是小而美了。它没有什么非常复杂的功能,但必要的功能也都有。在遇到 uni-api 之后我就用了它一段时间,感觉除了他那前端因为我是本地部署的,导致给的那个前端站我本地因为 CORS 问题连不上(HTTPS 站点不能有 HTTP 内容跨域请求)之外,感觉挺好的。不过后面还是因为它的前端问题让我萌生了自己撸一个类似的项目的想法。

拼好 AI

拼好 AI 是一个专为个人用户设计的 AI 模型聚合平台。项目的核心功能基于 任意门 项目构建。

核心特性

  • 模型聚合:统一管理多个 AI 服务提供商,支持 OpenAI 和 Gemini 格式。
  • 接口兼容:提供 OpenAI 和 Anthropic 格式的标准化接口
  • 负载均衡:自动负载均衡,避免对单一服务商造成压力
  • 故障转移:自动切换至可用服务,提升使用体验
  • 简化部署:Docker 一键部署,配置简单
  • 多数据库支持:SQLite(默认)、MySQL、PostgreSQL
  • 内置管理界面:提供直观的 Web 管理界面
  • 灵活配置:支持模型映射、批量重命名等高级功能

部署指南

Docker 部署

推荐使用 Docker 进行部署,这是最简单快捷的方式:

1
2
3
4
5
6
7
# 拉取并运行最新版本(请自行设置 token)
docker run -d \
-p 3000:3000 \
-e ENABLE_WEB=true \
-e API_TOKEN=<业务token> \
-e ADMIN_TOKEN=<管理token> \
ghcr.io/meowsalty/pinai:latest

环境变量配置

环境变量说明默认值
ENABLE_WEB启用内置 Web 管理界面false
API_TOKEN业务 Token,用于 API 调用鉴权
ADMIN_TOKEN管理 Token,用于管理 API 访问
GITHUB_PROXYGitHub 代理地址,用于解决网络问题
MODEL_MAPPING模型映射配置

此处并非完整的配置列表,完整列表请参考项目自述文件。

数据库配置

  • 默认数据库:SQLite(数据目录:/app/data
  • 可选数据库:MySQL、PostgreSQL
  • 数据持久化:建议将 /app/data 目录映射到宿主机

Token 说明

  • 业务 Token:用于 API 调用时的身份验证
  • 管理 Token:用于访问管理 API,如未设置则使用业务 Token
  • 无鉴权模式:如果两者都未设置,则所有 API 调用无需鉴权

网络访问说明

  • 内置前端:通过 ENABLE_WEB=true 启用,适合本地部署
  • 独立前端自行部署 或访问 预览站点
  • 镜像加速:如无法访问 GitHub 镜像,可使用国内镜像:ghcr.nju.edu.cn/meowsalty/pinai:latest
  • Github 代理:如无法访问 GitHub,可设置代理,如:https://gh-proxy.com

模型映射功能

对于需要固定模型名称的应用(如 Claude Code),可以使用模型映射功能:

配置格式:原始模型名:目标模型名,原始模型名2:目标模型名2

启用模型映射后,系统会在处理请求时自动将指定的模型名称映射为实际可用的模型。

快速开始

首次访问配置

  1. 在浏览器中打开 http://127.0.0.1:3000
  2. 如果配置了 Token,需要进行初始设置
  3. 点击页面顶部的"默认 API 服务器"
  4. 在弹出的窗口中配置服务器信息:
    • API 密钥:填写配置的 Token(优先使用管理 Token)
  5. 保存配置并刷新页面
  6. 点击侧边栏中的"供应商"添加 API 服务提供商

API 接口调用

拼好 AI 提供以下兼容接口:

接口类型基础路径说明
OpenAI/openai兼容 OpenAI API 格式
Anthropic/anthropic兼容 Anthropic API 格式

管理界面详解

拼好 AI 提供了一个功能完整的 Web 管理界面,主要分为三个核心模块:

仪表盘

仪表盘提供系统的整体概览,包含以下三个主要部分:

实时状态

  • 调用频率:展示最近 1 分钟内的 API 调用情况
  • 活动连接:显示当前活跃的连接数量

实时状态

统计概览

默认展示最近 24 小时内的关键指标:

  • 请求次数:模型调用总次数
  • 成功率:请求成功比例
  • 首字时间:流式请求的平均首字响应时间(不含故障转移时间)
  • Tokens 用量:输入和输出 Tokens 的统计信息

统计概览

排行信息

展示最近 24 小时内的使用排行数据(前 5 名):

  • 模型调用排行
  • 平台调用排行
  • 模型用量排行
  • 平台用量排行

排行信息

供应商

供应商管理提供完整的 CRUD 操作,并支持以下高级功能:

批量导入供应商

支持批量导入供应商信息,格式如下:

1
[类型],[名称],[端点],[密钥]

批量导入供应商

字段说明:

  • 类型:支持 OpenAIGemini 两种格式
  • 名称:供应商自定义名称
  • 端点:API 基础地址(如:https://domain.com
  • 密钥:API 访问密钥

在批量导入时,若勾选了"自动获取模型"选项,则系统将自动获取当前供应商的模型列表并保存。

模型自动获取

在供应商编辑界面,可以通过"获取模型"按钮自动获取当前供应商的模型列表。

模型变更

前提条件:

  • 已配置类型、端点和密钥
  • 支持与现有模型列表的差异对比和选择性更新

模型自动重命名

支持四种重命名方式:

  • 插入:在指定位置插入字符
  • 替换:替换指定字符或模式
  • 正则:基于正则表达式的复杂替换
  • 大小写转换:统一模型名称的大小写格式

规则特性:

  • 规则按从上到下的顺序执行
  • 支持拖拽排序和选择性启用

默认规则:

默认规则

  1. 转换为小写
  2. 移除分组标识
  3. 使用连字符作为连接符
  4. 移除日期信息

正则规则示例:

1
2
3
4
5
6
7
8
9
// 将 claude-3-7-sonnet 转换为 claude-sonnet-3.7

// 规则 1:调整模型系列位置
正则:`^claude-(.+?)-(opus|sonnet|haiku)$`
替换:`claude-$2-$1`

// 规则 2:标准化版本号格式
正则:`-(\d+)-(\d+)$`
替换:`-$1.$2`

日志

日志

使用日志提供详细的 API 调用记录,包含以下信息:

  • 调用时间:请求发生的时间戳
  • 模型名称:实际模型名称(非别名)
  • 供应商:API 服务提供商
  • 请求类型:流式或非流式
  • 状态:成功或失败
  • 请求耗时:从开始到结束的总时间
  • Tokens 用量:输入和输出 Tokens 统计
  • 首字耗时:流式请求的首字响应时间
  • 错误信息:失败请求的错误详情

尾巴

因为拼好 AI 目前其实是还没出到正式版的,基本上是一边用一边修修补补,因此功能和特性估计都不是很稳定,凑合着用吧(x

1760778929595