4.2 KiB
4.2 KiB
Model Proxy 模块
大模型请求代理模块,用于代理和管理大模型 API 请求。
功能特性
- API Key 代理:用户使用自己的 API Key,后端代理到实际的大模型服务
- 配置管理:通过 HTTP API 管理 API Key 配置
- 高性能:基于 Netty 实现的高性能 HTTP/HTTPS 代理
- 缓存支持:使用本地缓存提高查询性能
架构设计
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Client │ ───> │ Model Proxy │ ───> │ LLM Provider │
│ (User API Key)│ │ Server │ │ (Backend API) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
▼
┌──────────────────┐
│ Configuration │
│ Service │
└──────────────────┘
核心组件
1. ModelProxyServer
代理服务器启动类,基于 Netty 实现 HTTP/HTTPS 代理服务。
配置项:
model.proxy.port: 代理服务端口(默认:8088)model.proxy.ssl.enabled: 是否启用 SSL(默认:false)
2. HttpProxyRequestHandler
HTTP 请求处理器,负责:
- 提取用户 API Key
- 查询代理配置
- 转发请求到后端服务
- 转发响应到客户端
3. ModelApiProxyConfigService
配置管理服务,提供:
- 根据用户 API Key 查询配置
- 添加/更新配置
- 删除配置
- 根据 ID 查询配置
4. ModelApiProxyConfigController
HTTP API 控制器,提供 RESTful 接口:
GET /api/model/proxy/config/query?userApiKey={key}- 查询配置GET /api/model/proxy/config/get/{id}- 根据 ID 查询POST /api/model/proxy/config/save- 保存/更新配置DELETE /api/model/proxy/config/delete/{id}- 删除配置
使用方法
1. 配置代理服务
在 application.yml 中配置:
model:
proxy:
port: 8088
ssl:
enabled: false
2. 添加代理配置
调用 API 添加配置:
curl -X POST http://localhost:8080/api/model/proxy/config/save \
-H "Content-Type: application/json" \
-d '{
"userApiKey": "sk-user-xxx",
"baseUrl": "https://api.openai.com/v1",
"backendApiKey": "sk-backend-yyy",
"model": "gpt-4",
"enabled": true,
"description": "OpenAI GPT-4 代理"
}'
3. 使用代理
客户端使用用户 API Key 调用大模型:
curl -X POST http://localhost:8088/api/proxy/model/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-user-xxx" \
-d '{
"model": "gpt-4",
"messages": [{"role": "user", "content": "Hello!"}]
}'
代理服务器会:
- 提取
Authorization或x-api-key头中的用户 API Key - 查询对应的代理配置
- 将请求转发到后端服务(使用后端 API Key)
- 将响应返回给客户端
数据库表
CREATE TABLE `model_api_proxy_config` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`tenant_id` BIGINT(20) NOT NULL,
`user_api_key` VARCHAR(255) NOT NULL,
`base_url` VARCHAR(512) NOT NULL,
`backend_api_key` VARCHAR(255) NOT NULL,
`model` VARCHAR(128) DEFAULT NULL,
`enabled` TINYINT(1) NOT NULL DEFAULT 1,
`description` VARCHAR(512) DEFAULT NULL,
`created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_user_api_key` (`tenant_id`, `user_api_key`)
);
接口文档
启动服务后访问 Swagger 文档:http://localhost:8080/swagger-ui.html
注意事项
- 代理服务器默认使用 HTTP,如需 HTTPS 请配置 SSL 证书
- 用户 API Key 需要在租户内唯一
- 配置信息会缓存 5 分钟,修改配置后即时生效
- 支持 WebSocket 连接升级