# AI 模块 - 服务注册表模式

> **SQL文件**: `sql/ai.sql`  
> **旧版(废弃)**: `sql/ai-complete-deprecated.sql`

## 🎯 设计理念

**核心原则：配置驱动 + 抽象统一接口**

> ❌ 旧版：厂商表 → 模型表 → 配置表（三层实体 + 多张表 + 多步操作）  
> ✅ 简化版：**一个服务表 + 一个统一接口 + 一个服务ID**

**新增 AI = 插入一行配置 = 5分钟搞定！**

---

## 📦 架构对比

### 旧版（复杂）
```
ai_provider (厂商表)
    ↓
ai_model (模型表，关联厂商)
    ↓
ai_model_config (配置表，关联模型)
    ↓
ai_conversation / ai_message (对话表)
```

### 简化版
```
ai_service (服务表，合并厂商+模型+配置)
    ↓
ai_conversation / ai_message (对话表)
```

---

## 🗂️ 数据库结构

### ai_service 服务表（核心）

| 字段 | 类型 | 说明 |
|------|------|------|
| service_id | BIGINT | 服务ID |
| service_name | VARCHAR(100) | 服务名称（如：GPT-4o） |
| service_code | VARCHAR(50) | 服务代码（唯一，如：openai-gpt4o） |
| provider | VARCHAR(50) | 厂商标识（openai/zhipu/alibaba等） |
| provider_name | VARCHAR(50) | 厂商名称 |
| model_code | VARCHAR(100) | 模型代码（gpt-4o/glm-4等） |
| api_url | VARCHAR(500) | API地址 |
| api_key | VARCHAR(500) | API密钥 |
| temperature | DECIMAL(3,2) | 温度参数 |
| max_tokens | INT | 最大Token数 |
| system_prompt | TEXT | 系统提示词 |
| supports_stream | CHAR(1) | 支持流式：0=否 1=是 |
| supports_vision | CHAR(1) | 支持视觉：0=否 1=是 |
| enabled | CHAR(1) | 是否启用：0=否 1=是 |
| is_default | CHAR(1) | 是否默认：0=否 1=是 |

---

## 🚀 快速添加新 AI

### 方式一：SQL 插入

```sql
INSERT INTO ai_service (
  service_name, service_code, provider, provider_name, model_code,
  api_url, api_key, temperature, max_tokens, enabled, create_time
) VALUES (
  'Claude 3.5 Sonnet',           -- 服务名称
  'claude-sonnet',               -- 服务代码（唯一）
  'anthropic',                   -- 厂商标识
  'Anthropic',                   -- 厂商名称
  'claude-3-5-sonnet-20241022',  -- 模型代码
  'https://api.anthropic.com/v1/messages',  -- API地址
  'sk-xxx',                      -- API密钥
  0.7,                           -- 温度
  4096,                          -- 最大Token
  '1',                           -- 启用
  NOW()
);
```

### 方式二：管理界面

1. 进入 **AI助手 → 服务配置**
2. 点击 **新增**
3. 填写：服务名称、服务代码、选择厂商、模型代码、API地址、API密钥
4. 保存即可

---

## 📁 代码结构

### 后端
```
yushu-system/
├── domain/AiService.java          # 服务实体
├── mapper/AiServiceMapper.java    # Mapper接口
├── service/IAiServiceService.java # Service接口
└── service/impl/AiServiceServiceImpl.java

yushu-admin/controller/
└── AiServiceController.java       # 服务管理API
```

### 前端
```
src/api/system/ai/
└── service.js                     # 服务管理API

src/views/system/ai/
├── service/index.vue              # 服务配置页面
└── chat/index.vue                 # 对话页面（已更新）
```

---

## 🔧 API 接口

### 服务管理
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | /system/ai/service/list | 查询服务列表 |
| GET | /system/ai/service/enabled | 查询已启用服务（下拉框） |
| GET | /system/ai/service/{id} | 获取服务详情 |
| POST | /system/ai/service | 新增服务 |
| PUT | /system/ai/service | 修改服务 |
| DELETE | /system/ai/service/{ids} | 删除服务 |
| PUT | /system/ai/service/default/{id} | 设为默认服务 |

### 对话（更新）
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /system/ai/chat/send | 发送消息（使用 serviceId） |
| POST | /system/ai/chat/conversation | 创建会话（使用 serviceId） |

---

## ✅ 预置服务

SQL 已包含以下 AI 服务配置（只需填入 API Key）：

| 服务名称 | 厂商 | 模型代码 |
|---------|------|---------|
| GPT-4o | OpenAI | gpt-4o |
| GPT-4o Mini | OpenAI | gpt-4o-mini |
| GPT-3.5 Turbo | OpenAI | gpt-3.5-turbo |
| GLM-4 | 智谱AI | glm-4 |
| GLM-4-Flash | 智谱AI | glm-4-flash |
| 通义千问-Max | 阿里云 | qwen-max |
| Kimi 128K | 月之暗面 | moonshot-v1-128k |
| DeepSeek Chat | DeepSeek | deepseek-chat |
| Claude 3.5 Sonnet | Anthropic | claude-3-5-sonnet |
| Ollama Llama3 | 本地部署 | llama3 |

---

## 🔄 迁移指南

如果从旧版迁移：

1. 执行 `sql/ai-service-simplified.sql`
2. 将旧的 `ai_model_config` 数据导入 `ai_service`
3. 更新前端代码使用新 API
4. （可选）删除旧表

---

## 🎉 好处总结

| 优势 | 说明 |
|------|------|
| **极简操作** | 新增AI只需一条SQL或填一个表单 |
| **统一抽象** | 所有AI共用相同接口，无需关心厂商差异 |
| **配置驱动** | 不改代码即可接入新模型 |
| **易于维护** | 单表设计，无复杂关联 |
| **支持本地部署** | Ollama、vLLM 等本地模型同样支持 |

---

**YuShu Team** © 2024
