AI 中转代理系统 - App 模块
已完成的功能模块
按照 server 目录的标准结构,已将 AI 中转代理项目的代码编写到各个 app 目录下:
1. Model 层 (server/model/app/)
核心模型:
ai_preset.go- AI 预设模板模型(支持 SillyTavern 格式)ai_provider.go- AI 服务提供商模型ai_preset_binding.go- 用户-预设-提供商绑定模型ai_request_log.go- AI 请求日志模型ai_preset_types.go- 预设相关的自定义类型
Request 结构体 (server/model/app/request/):
ai_preset.go- 预设相关请求(创建、更新、导入)ai_provider.go- 提供商相关请求(创建、更新)ai_proxy.go- 代理请求(聊天补全、消息、角色卡片)
Response 结构体 (server/model/app/response/):
ai_proxy.go- 代理响应(OpenAI 兼容格式)
2. Service 层 (server/service/app/)
ai_preset.go- 预设服务(CRUD、导入导出)ai_provider.go- 提供商服务(CRUD、连接测试)ai_proxy.go- 代理服务(核心预设注入引擎、转发到上游 AI)enter.go- Service 统一入口
3. API 层 (server/api/v1/app/)
ai_preset.go- 预设管理 APIai_provider.go- 提供商管理 APIai_proxy.go- 代理转发 API(OpenAI 兼容接口)enter.go- API 统一入口
4. Router 层 (server/router/app/)
ai_preset.go- 预设路由ai_provider.go- 提供商路由ai_proxy.go- 代理路由enter.go- Router 统一入口
核心功能特性
1. AI 预设管理
- ✅ 创建、更新、删除预设
- ✅ 获取预设列表和详情
- ✅ 导入 SillyTavern 格式预设
- ✅ 导出预设为 JSON
- ✅ 支持公开/私有预设
- ✅ 完整的 Prompt 注入配置
- ✅ 正则脚本处理
2. AI 服务提供商管理
- ✅ 创建、更新、删除提供商
- ✅ 获取提供商列表和详情
- ✅ 支持自定义配置
- ✅ 启用/禁用状态管理
3. AI 代理服务
- ✅ OpenAI 兼容的聊天补全接口
- ✅ 预设注入引擎
- ✅ 变量替换({{user}}, {{char}})
- ✅ 正则脚本处理(输入/输出)
- ✅ 转发到上游 AI 服务
- ✅ 请求日志记录
- ⏳ 流式响应(待实现)
API 端点
预设管理
POST /app/preset # 创建预设
PUT /app/preset # 更新预设
DELETE /app/preset/:id # 删除预设
GET /app/preset/:id # 获取预设详情
GET /app/preset/list # 获取预设列表
POST /app/preset/import # 导入预设
GET /app/preset/:id/export # 导出预设
提供商管理
POST /app/provider # 创建提供商
PUT /app/provider # 更新提供商
DELETE /app/provider/:id # 删除提供商
GET /app/provider/:id # 获取提供商详情
GET /app/provider/list # 获取提供商列表
代理接口(OpenAI 兼容)
POST /v1/chat/completions # 聊天补全
数据模型说明
AiPreset(预设模板)
- UserID: 用户ID
- Name: 预设名称
- Description: 预设描述
- Prompts: 提示词数组(支持 SillyTavern 格式)
- RegexScripts: 正则脚本数组
- Temperature, TopP, MaxTokens: 模型参数
- StreamEnabled: 是否启用流式
- IsDefault: 是否默认
- IsPublic: 是否公开
Prompt(提示词)
- Name: 提示词名称
- Role: 角色(system/user/assistant)
- Content: 提示词内容
- Identifier: 标识符
- InjectionPosition: 注入位置
- InjectionDepth: 注入深度
- InjectionOrder: 注入顺序
- Marker: 是否为占位符
RegexScript(正则脚本)
- ScriptName: 脚本名称
- FindRegex: 查找正则
- ReplaceString: 替换字符串
- Placement: 应用位置(1=输入, 2=输出)
- MinDepth, MaxDepth: 深度限制
预设注入流程
- 接收用户请求
- 加载预设配置
- 按 injection_order 排序 prompts
- 根据 injection_depth 插入到对话历史中
- 替换变量({{user}}, {{char}})
- 应用正则脚本(placement=1 处理输入)
- 转发到上游 AI
- 应用正则脚本(placement=2 处理输出)
- 记录日志
- 返回响应
待完善功能
-
完整的预设注入引擎
- 完整实现 injection_depth 逻辑
- 完整实现正则脚本处理
- 支持更多变量替换
-
流式响应
- 实现 SSE 流式输出
- 支持流式日志记录
-
预设绑定管理
- 实现 binding_key 机制
- 支持多预设切换
-
导入导出
- 完善 SillyTavern JSON 解析
- 支持批量导入导出
使用示例
1. 创建 AI 提供商
POST /app/provider
{
"name": "OpenAI",
"baseUrl": "https://api.openai.com/v1",
"apiKey": "sk-xxx",
"model": "gpt-4",
"isActive": true
}
2. 导入 SillyTavern 预设
POST /app/preset/import
{
"name": "TG角色扮演",
"data": { ... } // TGbreak.json 内容
}
3. 发送聊天请求
POST /v1/chat/completions
{
"messages": [
{"role": "user", "content": "你好"}
],
"presetId": 1,
"characterCard": {
"name": "小美",
"description": "活泼的女孩"
}
}
项目结构
server/
├── model/app/ # 数据模型
│ ├── ai_preset.go
│ ├── ai_provider.go
│ ├── ai_preset_binding.go
│ ├── ai_request_log.go
│ ├── request/ # 请求结构体
│ └── response/ # 响应结构体
├── service/app/ # 业务逻辑
│ ├── ai_preset.go
│ ├── ai_provider.go
│ ├── ai_proxy.go
│ └── enter.go
├── api/v1/app/ # API 处理器
│ ├── ai_preset.go
│ ├── ai_provider.go
│ ├── ai_proxy.go
│ └── enter.go
└── router/app/ # 路由注册
├── ai_preset.go
├── ai_provider.go
├── ai_proxy.go
└── enter.go