Files
ai_proxy/server/model/app
2026-03-03 06:05:51 +08:00
..
2026-03-03 06:05:51 +08:00
2026-03-03 06:05:51 +08:00
2026-03-03 06:05:51 +08:00
2026-03-03 06:05:51 +08:00
2026-03-03 06:05:51 +08:00
2026-03-03 06:05:51 +08:00
2026-03-03 06:05:51 +08:00
2026-03-03 06:05:51 +08:00

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 - 预设管理 API
  • ai_provider.go - 提供商管理 API
  • ai_proxy.go - 代理转发 APIOpenAI 兼容接口)
  • 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: 深度限制

预设注入流程

  1. 接收用户请求
  2. 加载预设配置
  3. 按 injection_order 排序 prompts
  4. 根据 injection_depth 插入到对话历史中
  5. 替换变量({{user}}, {{char}}
  6. 应用正则脚本placement=1 处理输入)
  7. 转发到上游 AI
  8. 应用正则脚本placement=2 处理输出)
  9. 记录日志
  10. 返回响应

待完善功能

  1. 完整的预设注入引擎

    • 完整实现 injection_depth 逻辑
    • 完整实现正则脚本处理
    • 支持更多变量替换
  2. 流式响应

    • 实现 SSE 流式输出
    • 支持流式日志记录
  3. 预设绑定管理

    • 实现 binding_key 机制
    • 支持多预设切换
  4. 导入导出

    • 完善 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