# AI 插件(forge-plugin-ai)
AI 能力插件,集成 Spring AI,支持多 AI 提供商(通义千问、OpenAI、智谱、月之暗面等),提供 Agent 管理、Chat 会话和流式 SSE 响应。
## 快速开始
### 1. 引入依赖
```xml
com.mdframe.forge
forge-plugin-ai
```
### 2. 配置 AI 提供商
在 `ai_provider` 表中添加提供商配置:
| 字段 | 说明 |
|------|------|
| `provider_name` | 提供商名称 |
| `provider_type` | 类型(openai / azure / dashscope / ollama) |
| `api_key` | API Key |
| `base_url` | API 基础地址 |
| `models` | 支持的模型列表(JSON) |
| `default_model` | 默认模型 |
| `is_default` | 是否为默认提供商 |
## 支持的平台
| 提供商 | `provider_type` | 说明 |
|--------|-----------------|------|
| 通义千问(DashScope) | `dashscope` | 阿里大模型 |
| OpenAI | `openai` | GPT-4/GPT-3.5 |
| 智谱 AI | `openai` | 兼容 OpenAI 接口 |
| 月之暗面 | `openai` | 兼容 OpenAI 接口 |
| Ollama | `ollama` | 本地部署模型 |
| Azure OpenAI | `azure` | Azure 托管 OpenAI |
## 核心功能
### Agent 管理
Agent 是预配置了系统提示词和模型的 AI 助手:
**数据库表**:`ai_agent`
| 字段 | 说明 |
|------|------|
| `agent_name` | Agent 名称 |
| `agent_code` | Agent 编码(唯一标识) |
| `description` | 描述 |
| `system_prompt` | 系统提示词 |
| `provider_id` | 关联的提供商 ID |
| `model_name` | 使用的模型 |
| `temperature` | 温度参数(0~1) |
| `max_tokens` | 最大输出 Token 数 |
| `extra_config` | 额外配置(JSON) |
| `status` | 状态 |
### Chat 会话
#### 流式对话
```java
@Autowired
private AiChatService aiChatService;
// 流式 Chat(返回 Flux)
Flux stream = aiChatService.chatStream(
"你好,请帮我分析一下这个数据",
"data-analyst", // agentCode
sessionId, // 可为空,为空时自动创建
userId,
null, // providerId(null 时使用 Agent 默认配置)
null, // modelName
null, // temperature
null, // maxTokens
null, // projectName
null // canvasContext
);
```
#### 参数解析优先级
所有 Chat 参数都遵循以下回退链:
```
显式传入 > Agent 配置 > 提供商配置 > 默认值
```
### 多轮上下文
`DbChatMemory` 实现了 Spring AI 的 `ChatMemory` 接口,基于数据库 `ai_chat_record` 表存储对话历史,默认保留最近 20 条消息作为上下文。
### Dashboard 生成
```java
// 非流式
String dashboard = aiChatService.generateDashboard(AIGenerateRequest);
// 流式
Flux stream = aiChatService.generateDashboardStream(AIGenerateRequest);
```
## REST API
### Chat 接口
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/api/ai/chat/stream` | 流式对话(SSE) |
| POST | `/api/ai/dashboard` | 生成 Dashboard |
| POST | `/api/ai/dashboard/stream` | 流式生成 Dashboard |
### Agent 管理
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/ai/agent/page` | 分页查询 Agent |
| GET | `/api/ai/agent/{id}` | 获取 Agent 详情 |
| POST | `/api/ai/agent` | 创建 Agent |
| PUT | `/api/ai/agent` | 更新 Agent |
| DELETE | `/api/ai/agent/{id}` | 删除 Agent |
### Provider 管理
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/api/ai/provider/page` | 分页查询 Provider |
| GET | `/api/ai/provider/{id}` | 获取 Provider 详情 |
| POST | `/api/ai/provider` | 创建 Provider |
| PUT | `/api/ai/provider` | 更新 Provider |
| DELETE | `/api/ai/provider/{id}` | 删除 Provider |
## 数据库表
| 表名 | 说明 |
|------|------|
| `ai_provider` | AI 提供商配置 |
| `ai_agent` | AI Agent 配置 |
| `ai_chat_session` | Chat 会话 |
| `ai_chat_record` | Chat 消息记录 |
## 核心组件
| 组件 | 说明 |
|------|------|
| `AiChatService` | 核心 Chat 服务,支持流式/非流式、Dashboard 生成 |
| `AiChatRecordService` | Chat 记录持久化 |
| `AiChatSessionService` | 会话管理(getOrCreate) |
| `DbChatMemory` | 基于数据库的 Chat Memory(实现 Spring AI `ChatMemory`) |
| `AiPromptTemplateRenderer` | Dashboard 系统提示词渲染 |
| `AiAgentService` | Agent 管理服务 |
| `AiProviderService` | Provider 管理服务 |
## DTO
### `ChatRequest`
| 字段 | 说明 |
|------|------|
| `content` | 用户输入内容 |
| `agentCode` | Agent 编码 |
| `sessionId` | 会话 ID |
| `providerId` | 指定提供商 ID(覆盖 Agent 默认值) |
| `modelName` | 指定模型(覆盖默认值) |
| `temperature` | 温度参数 |
| `maxTokens` | 最大 Token |
| `projectName` | 项目名称 |
| `canvasContext` | Canvas 上下文 |
### `AIGenerateRequest`
| 字段 | 说明 |
|------|------|
| `sessionId` | 会话 ID |
| `prompt` | 提示词 |
| `style` | 样式风格 |
| `canvasWidth` | Canvas 宽度 |
| `canvasHeight` | Canvas 高度 |
| `componentCatalog` | 组件目录 |
| `projectName` | 项目名称 |
| `canvasContext` | Canvas 上下文 |