# ai-gateway-pro
**Repository Path**: happy-youth/ai-gateway-pro
## Basic Information
- **Project Name**: ai-gateway-pro
- **Description**: 本项目基于若依框架,打造轻量化AI智能体代理平台。支持火山引擎、OpenAI、智谱等主流厂商统一接入,内置滑动窗口熔断与跨厂商降级,单模型故障自动切换备选。提供代码执行、动态SQL、第三方接口三类技能及自定义参数透传。全链路提示词版本记录与一键回滚,降级事件异步审计。统一对话接口自动完成意图识别、技能调度与 AI总结,快速为现有系统私有化接入智能体能力。
- **Primary Language**: Java
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/happy-youth/ai-gateway-pro
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 1
- **Created**: 2026-04-15
- **Last Updated**: 2026-09-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: SpringBoot, AI, Gateway, Agent, 熔断限流
## README
# AI Gateway Pro —— AI 智能网关平台
连接无限模型,编排极致智能
## 开源许可说明
本项目基于 **木兰宽松许可证 Mulan PSL v2** 开源分发。
1. 允许个人、企业免费复制、修改、闭源商用、私有化部署;
2. 分发、二次改造、打包发布(开源/闭源均可)时,**必须完整保留本项目全部版权声明、LICENSE文件、源码头部授权注释**,不得删除、屏蔽、篡改;
3. 禁止删除、涂抹源码内版权标识,禁止抹去来源宣称自研;
4. 禁止未经授权使用本项目名称、Logo进行商业宣传(本协议无商标授权);
5. 若违反上述分发约束,属于侵犯软件著作权,我方将通过平台投诉、公证、民事诉讼追责,追究停止侵权、赔偿损失。
源码头部授权模板、部署规范见仓库LICENSE文件末尾使用指南。
***
## 🚀 平台简介
**AI Gateway Pro** 是一款基于 Java 17 + Spring Boot 4 + Vue 3 开发的 AI 智能网关平台。它在 RuoYi 框架权限管理能力的基础上,深度集成了 **MCP 协议**、**多模型动态调度**与**可视化技能编排**,旨在打造一个安全、高性能、可观测的 AI 能力中台。
> [!IMPORTANT]
> **✨ 核心愿景**:无需关注底层大模型差异,通过低代码方式快速构建具备复杂业务逻辑的 AI Agent。
> 
***
## ✨ 核心特性
### 1. 🤖 多模型统一适配与调度
- **全厂商接入**:原生适配 OpenAI、阿里云通义千问、火山引擎豆包、智谱清言等主流厂商。
- **三段式架构**:支持 MCP 决策层、业务执行层与结果总结层独立选择不同模型,平衡成本与性能。
- **流式响应**:完美支持 SSE 流式输出,提供极致的打字机交互体验。
### 2. 🛠️ 深度技能编排 (Skill Orchestration)
- **多类型技能支持**:
- **代码类 (Java/Bean)**:全量控制复杂业务逻辑。
- **动态 SQL 类**:配置化编写 SQL,支持动态参数注入(如 `#{userId}`)。
- **外部 HTTP 类**:一键对接第三方 API,支持 JSON 响应解析。
- **参数全链路透传**:支持自定义全局动态参数,实现从用户 Context 到技能执行的无缝流转。
### 3. 🧠 MCP 意图识别引擎
- **智能决策**:基于 Model Context Protocol,自动识别用户意图并匹配最优技能组合。
- **思考过程可视化**:实时展示 AI 的“深度思考”过程(Reasoning),提升用户信任感。
### 4. 📊 实时数据监控看板
- **Token 审计**:精确统计各模型、各业务维度的 Token 消耗(Input/Output)。
- **性能分析**:实时追踪请求量、成功率及平均响应耗时趋势。
- **成本画像**:基于饼图分析厂商资源占比,助力精细化成本管控。
### 5. 🛡️ 模型熔断降级 (Circuit Breaker & Fallback)
- **滑动窗口熔断**:支持按模型配置统计窗口、失败阈值与冷却时间,在时间窗口内失败达到阈值自动熔断跳过该模型。
- **跨厂商降级链**:支持 MCP、收口总结、默认兜底三个阶段各自配置降级模型链,按优先级自动切换至备选模型。
- **半开试探恢复**:熔断冷却结束后自动放行一次试探请求,成功则关闭熔断,失败则重新熔断。
- **异步日志审计**:降级事件通过 Spring Event 异步写入数据库,不阻塞主业务流程。
- **可视化监控**:提供降级日志查询页与降级统计页(模型失败排名、失败趋势图),首页看板实时展示当前熔断模型数量。
***
## 🏗️ 技术架构
### 1. 系统架构图
```mermaid
graph TD
User((用户/客户端)) -->|HTTPS/SSE| LB[负载均衡]
LB --> Admin[Gateway Admin - 接口层]
Admin --> Framework[Gateway Framework - 安全/核心配置]
Framework --> System[Gateway System - 业务逻辑层]
subgraph AI 能力层
System --> Fallback[Model Fallback - 降级编排]
Fallback --> CB[Circuit Breaker - 熔断器]
CB --> Strategy[Model Strategy - 模型策略]
Strategy --> OpenAI[OpenAI API]
Strategy --> DouBao[DouBao API]
Strategy --> Other[其他模型]
CB -.->|熔断状态| Redis
end
subgraph 数据支撑层
System --> MySQL[(MySQL - 业务/统计)]
System --> Redis[(Redis - 缓存/鉴权/熔断)]
System --> EventBus[Spring Event Bus]
EventBus --> Stats[Stats Service - 异步统计入库]
EventBus --> FallbackLog[Fallback Log Listener - 异步降级日志]
FallbackLog --> MySQL
end
```
### 2. AI 智能对话流转 (MCP Sequence)
```mermaid
sequenceDiagram
participant U as 用户
participant M as MCP (意图识别)
participant S as Skill (技能执行)
participant SM as Summary (总结收口)
participant LLM as 大模型厂商
U->>M: 发起请求 ("查询北京天气")
M->>LLM: 意图分析
LLM-->>M: 识别意图: WEATHER_QUERY
参数: {city: "北京"}
rect rgb(240, 240, 240)
note right of M: 技能编排阶段
M->>S: 触发技能 (注入参数: city="北京")
S->>S: 执行 SQL/HTTP 调用
S-->>SM: 返回原始数据
end
SM->>LLM: 结果总结
LLM-->>SM: 生成自然语言回复
SM-->>U: "北京今天晴,气温 25℃..."
```
***
## 🛠️ 技术栈
| 维度 | 技术选型 | 说明 |
| :-------- | :-------------------- | :--------------- |
| **后端核心** | Spring Boot 4.0.3 | 响应式与高性能基础框架 |
| **权限安全** | Spring Security + JWT | 无状态认证与细颗粒度权限控制 |
| **持久层** | MyBatis 4.0.1 | 灵活的 SQL 映射与高性能查询 |
| **前端框架** | Vue 3.5 + Vite | 现代化响应式 UI 框架 |
| **UI 组件** | Element Plus | 适配 AI 主题的现代化组件库 |
| **图表库** | ECharts 5.6 | 统计数据可视化看板 |
***
## 📂 快速启动
### 1. 环境要求
- **JDK 17+**
- **MySQL 8.0+**
- **Redis 6.0+**
- **Node.js 18+**
### 2. 数据库初始化
执行 `sql/` 目录下的脚本:
1. `ai_gateway_pro.sql`: 系统基础权限表
2. `quartz.sql`: 定时任务表
### 3. 应用启动
**后端启动:**
```bash
cd ai-gateway
mvn clean install -DskipTests
mvn spring-boot:run -pl gateway-admin
```
**前端启动:**
```bash
cd ai-gateway-vue
npm install
npm run dev
```
> 默认账号:`admin` / `admin123`
***
## 📸 界面预览
| 登录页面 | 首页(统计) |
| :-----------------------------------: | :-----------------------------------: |
|  |  |
| 厂商管理 | 新增厂商 |
| :-----------------------------------: | :-----------------------------------: |
|  |  |
| 厂商模型管理 | 新增修改模型 |
| :-----------------------------------: | :-----------------------------------: |
|  |  |
| 智能体管理 | 新增修改智能体 |
| :-----------------------------------: | :-----------------------------------: |
|  |  |
| 智能体动态参数 | 新增修改参数 |
| :-----------------------------------: | :-----------------------------------: |
|  |  |
| 智能体默认兜底 | 智能体收口总结 |
| :-----------------------------------: | :-----------------------------------: |
|  |  |
| MCP管理 | MCP 新增修改 |
| :-----------------------------------: | :-----------------------------------: |
|  |  |
| 技能管理 (可自定义实现 SQL http 的方式) | SQL 技能 (下方给出具体教程) |
| :-----------------------------------: | :-----------------------------------: |
|  |  |
| 自定义方法实现技能 | Https 技能 |
| :-----------------------------------: | :-----------------------------------: |
|  |  |
| 提示词历史版本 | 提示词历史版本对比 查看 |
| :-----------------------------------: | :-----------------------------------: |
|  |  |
| 智能体对话 | 智能体对话触发技能(查询用户信息) |
| :-----------------------------------: | :-----------------------------------: |
|  |  |
| 智能体触发技能 (查询订单信息) | 智能体对话触发技能(查询用户岗位信息) |
| :-----------------------------------: | :-----------------------------------: |
|  |  |
| 熔断降级日志 | 熔断降级统计 |
|:-----------------------:|:-----------------------:|
|  |  |
## 自定义技能具体实现方式
1. 后端这个目录下进行操作
ai-gateway/gateway-system/src/main/java/com/gateway/system/agent/skill/executor/code
2. 创建一个类
3. 实现 `SkillExecutor` 接口
4. 注册到 `SkillExecutorFactory` 中
```java
/**
* 查询用户信息执行器
*
* 示例实现:模拟查询用户信息
*/
@Service("queryUserInfo")
public class QueryUserInfoExecutor implements SkillCodeExecutor {
@Override
public Object execute(Map params) {
// 从参数中获取 userId
String userId = params.get("userId") != null ? params.get("userId").toString() : "unknown";
// 模拟查询用户数据
Map userInfo = new HashMap<>();
userInfo.put("userId", userId);
userInfo.put("userName", "用户" + userId);
userInfo.put("email", "user" + userId + "@example.com");
userInfo.put("phone", "138" + String.format("%08d", (int)(Math.random() * 100000000)));
userInfo.put("status", "active");
userInfo.put("createTime", "2024-01-15 10:30:00");
// 模拟部门信息
Map deptInfo = new HashMap<>();
deptInfo.put("deptId", "D001");
deptInfo.put("deptName", "技术部");
userInfo.put("department", deptInfo);
return userInfo;
}
@Override
public String getDescription() {
return "根据用户ID查询用户详细信息,包括基本信息、部门信息等";
}
}
```
***
## 📜 开源协议
本项目遵循 [木兰宽松许可证 Mulan PSL v2](http://license.coscl.org.cn/MulanPSL2) 开源协议。