diff --git a/.gitignore b/.gitignore index 10d7e3f7d5d35e75dc92c6afde6084b39326ad9c..dd395eb295d0ad3a1c87b8ca07e68adc51655cee 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,9 @@ coverage # Turbo .turbo +# npm cache +.npm-cache + # Vercel .vercel .cursor diff --git "a/BuildingAI\346\212\200\346\234\257\346\236\266\346\236\204.md" "b/BuildingAI\346\212\200\346\234\257\346\236\266\346\236\204.md" new file mode 100644 index 0000000000000000000000000000000000000000..6e950bef5665b8d8c0755a09a96de2ffda97a5f3 --- /dev/null +++ "b/BuildingAI\346\212\200\346\234\257\346\236\266\346\236\204.md" @@ -0,0 +1,487 @@ +# BuildingAI技术架构文档 + +## 1. 项目概述 + +BuildingAI是一个基于扩展的企业级AI平台,提供了AI对话、AI应用生成、模型管理、系统配置等核心功能。平台采用模块化设计,支持通过扩展系统灵活扩展功能。 + +## 2. 技术栈 + +| 模块 | 技术栈 | 主要职责 | +| ---- | ------------------------ | --------------------- | +| API层 | NestJS、TypeScript、PostgreSQL | 提供RESTful API接口 | +| Web层 | Nuxt.js、Vue3、TailwindCSS | 提供前端界面和用户交互 | +| Core层 | TypeScript、NestJS模块、TypeORM | 提供核心业务逻辑和服务 | +| 数据库 | PostgreSQL、TypeORM | 数据存储和管理 | +| 扩展系统 | TypeScript、NestJS动态模块 | 支持功能扩展和插件机制 | + +## 3. 整体架构 + +BuildingAI采用分层架构设计,主要分为API层、Web层、Core层和扩展系统。 + +### 3.1 分层架构图 + +``` +┌─────────────┐ +│ Web层 │ +└─────────────┘ + ↓ +┌─────────────┐ +│ API层 │ +└─────────────┘ + ↓ +┌─────────────┐ +│ Core层 │ +└─────────────┘ + ↓ +┌─────────────┐ +│ 数据库层 │ +└─────────────┘ + ↓ +┌─────────────┐ +│ 扩展系统 │ +└─────────────┘ +``` + +### 3.2 模块关系 + +- **API层**:提供RESTful API接口,处理前端请求和响应 +- **Web层**:提供前端界面和用户交互 +- **Core层**:提供核心业务逻辑和服务 +- **数据库层**:数据存储和管理 +- **扩展系统**:支持功能扩展和插件机制 + +## 4. API模块技术实现 + +API模块采用NestJS的模块化架构,提供了AI对话、模型管理、系统配置等核心功能的RESTful API接口。 + +### 4.1 入口文件配置 + +```typescript +import { NestFactory } from '@nestjs/core'; +import { AppModule } from './modules/app.module'; +import { ConfigService } from '@nestjs/config'; + +async function bootstrap() { + const app = await NestFactory.create(AppModule); + const configService = app.get(ConfigService); + const port = configService.get('port') || 3000; + await app.listen(port); +} +bootstrap(); +``` + +### 4.2 动态模块配置 + +```typescript +@Module({ + imports: [ + ConfigModule.forRoot({ isGlobal: true }), + RedisModule.registerAsync({ + useFactory: (configService: ConfigService) => ({ + url: configService.get('redis.url'), + }), + inject: [ConfigService], + }), + // 其他核心模块导入 + ], + controllers: [AppController], + providers: [AppService], +}) +export class AppModule { + // 动态模块注册逻辑 +} +``` + +### 4.3 核心模块集成 + +```typescript +@Module({ + imports: [ + CacheModule.register({ isGlobal: true }), + EventEmitterModule.forRoot(), + LoggerModule.forRoot(), + QueueModule.forRoot(), + SharedModule.forRoot(), + StorageModule.forRoot(), + ], +}) +export class AppModule {} +``` + +### 4.4 安全防护机制 + +```typescript +@Module({ + providers: [ + { + provide: APP_GUARD, + useClass: DemoGuard, + }, + { + provide: APP_GUARD, + useClass: AuthGuard, + }, + ], +}) +export class AppModule {} +``` + +### 4.5 AI核心模块 + +AI模块是API层的核心,包含以下子模块: + +``` +ai/ +├── agent/ # AI智能体管理 +├── chat/ # 对话管理 +├── datasets/ # 数据集管理 +├── mcp/ # MCP集成 +├── model/ # 模型管理 +├── provider/ # AI提供商管理 +└── secret/ # 密钥管理 +``` + +#### 4.5.1 AI Agent模块 + +- **功能**:创建和管理具有记忆的AI智能体 +- **主要组件**:控制器、服务、DTO、验证器 +- **关键特性**: + - 支持智能体目标设置 + - 工具使用能力 + - 自主任务执行 + - 记忆管理 + +#### 4.5.2 AI Chat模块 + +- **功能**:多模态对话管理 +- **主要组件**:控制器、服务、DTO +- **关键特性**: + - 实时对话交互 + - 对话记录管理 + - 支持多种AI模型 + - 上下文保持 + +#### 4.5.3 AI Datasets模块 + +- **功能**:数据集管理和向量化 +- **主要组件**:控制器、服务、处理器、向量化引擎 +- **关键特性**: + - 支持多种数据格式 + - 数据分段和标注 + - 数据集版本管理 + - 向量化处理 + +#### 4.5.4 AI Model模块 + +- **功能**:AI模型管理 +- **主要特性**: + - 模型配置管理 + - 模型版本控制 + - 模型调用接口 + +#### 4.5.5 AI Provider模块 + +- **功能**:AI服务提供商管理 +- **主要特性**: + - 多提供商支持 + - 提供商配置管理 + - 负载均衡和故障转移 + +## 5. Web模块技术实现 + +### 5.1 前端框架配置 + +```typescript +export default defineBuildingAIConfig({ + ssr: false, + pages: { + '*': { + // 页面配置 + }, + }, + components: { + global: true, + dirs: [ + // 组件目录 + ], + }, + app: { + // 应用配置 + }, + css: [ + // CSS样式 + ], + vite: { + // Vite配置 + }, +}); +``` + +### 5.2 组件设计 + +```typescript +export default defineComponent({ + // 组件定义 + setup() { + // 组件逻辑 + }, +}); +``` + +## 6. Core模块技术实现 + +### 6.1 核心服务设计 + +```typescript +@Injectable() +export class CoreService { + // 核心业务逻辑 +} +``` + +### 6.2 工具类设计 + +```typescript +export class CoreUtils { + // 工具方法 +} +``` + +### 6.3 事件系统 + +```typescript +export class EventBus { + // 事件发布和订阅 +} +``` + +## 7. 数据库架构 + +### 7.1 数据模型设计 + +BuildingAI使用TypeORM作为ORM框架,定义了BaseEntity和SoftDeleteBaseEntity两个抽象基类。 + +```typescript +import { PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from 'typeorm'; + +@Entity() +export abstract class BaseEntity { + @PrimaryGeneratedColumn('uuid') + id: string; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; +} +``` + +### 7.2 主要实体列表 + +BuildingAI包含35个数据库实体,涵盖了核心业务领域: + +| 实体名称 | 主要职责 | +| ------------------ | ----------------- | +| account-log.entity | 记录账户操作日志 | +| ai-agent.entity | 存储AI代理信息 | +| ai-app.entity | 存储AI应用信息 | +| ai-conversation.entity | 存储AI对话历史 | +| ai-dataset.entity | 存储数据集信息 | +| ai-message.entity | 存储消息内容 | +| ai-model.entity | 存储AI模型信息 | +| extension.entity | 存储扩展信息 | +| user.entity | 存储用户信息 | +| workflow.entity | 存储工作流信息 | + +### 7.3 实体关系说明 + +BuildingAI实体之间存在多种关系: + +- User与AiApp、AiAgent、AiDataset等实体存在一对多关系 +- AiApp与AiConversation、AiMessage等实体存在一对多关系 +- Extension与ExtensionConfig存在一对多关系 +- AiDataset与AiDatasetItem存在一对多关系 + +## 8. 扩展系统 + +### 8.1 扩展加载流程 + +1. **扩展发现**:系统在启动时扫描extensions目录 +2. **配置解析**:读取extensions.json配置文件,确定哪些扩展需要加载 +3. **模块加载**:使用动态导入加载扩展模块 +4. **路由注册**:为扩展注册API路由 +5. **扩展初始化**:调用扩展的初始化方法 + +### 8.2 扩展开发规范 + +- **语言**:TypeScript +- **入口**:扩展必须导出AppModule +- **配置**:扩展可以包含package.json和manifest.json +- **依赖**:扩展依赖必须声明在package.json中 + +### 8.3 扩展加载实现 + +extension加载是通过 `extension.utils.ts` 中的一系列函数实现的,完整流程包括: + +1. **扩展列表获取**: +```typescript +export async function getExtensionList(extensionsDir?: string): Promise { + const targetDir = extensionsDir || join(process.cwd(), '..', '..', 'extensions'); + const extensions: ExtensionInfo[] = []; + + try { + const entries = await readdir(targetDir, { withFileTypes: true }); + for (const entry of entries) { + if (!entry.isDirectory() || entry.name.startsWith('.')) continue; + + const extensionName = entry.name; + const extensionPath = join(targetDir, extensionName); + const buildPath = join(extensionPath, 'build'); + const indexPath = join(buildPath, 'index.js'); + + if (!existsSync(indexPath)) { + TerminalLogger.log('Extension', `Extension "${extensionName}" build not found, skipping...`); + continue; + } + + // 读取 package.json 获取元数据 + const packageJsonPath = join(extensionPath, 'package.json'); + let version = '0.0.0'; + let description: string | undefined; + let author: { name: string; avatar?: string; homepage?: string } | undefined; + + if (existsSync(packageJsonPath)) { + const packageJson = JSON.parse(await readFile(packageJsonPath, 'utf-8')); + version = packageJson.version || '0.0.0'; + description = packageJson.description; + // 解析 author 字段 + } + + extensions.push({ name: extensionName, identifier: extensionName, path: extensionPath, enabled: true, version, description, author }); + } + return extensions; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + TerminalLogger.error('Extensions', `Failed to load extensions: ${errorMessage}`); + return extensions; + } +} +``` + +2. **扩展模块加载**: +```typescript +export async function loadExtensionModule(extensionInfo: ExtensionInfo): Promise { + try { + const buildPath = join(extensionInfo.path, 'build'); + const indexPath = join(buildPath, 'index.js'); + const fileUrl = pathToFileURL(indexPath).href; + const extensionModule = await import(fileUrl); + + if (!extensionModule.AppModule) { + TerminalLogger.warn('Extension', `Extension "${extensionInfo.name}" does not export AppModule, skipping...`); + return null; + } + + TerminalLogger.success('Extension', `Loaded extension: ${extensionInfo.name}`); + return extensionModule.AppModule; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + TerminalLogger.error('Extension', `Failed to load extension "${extensionInfo.name}": ${errorMessage}`); + return null; + } +} +``` + +### 8.4 扩展DB配置与Schema管理 + +extension系统为每个extension创建独立的数据库Schema,确保数据隔离: + +```typescript +export function getExtensionSchemaName(identifier: string): string { + // Replace invalid characters with underscores + // PostgreSQL schema names must start with a letter or underscore + // and can only contain letters, numbers, and underscores + let sanitized = identifier.toLowerCase().replace(/[^a-z0-9_]/g, '_'); + + // Ensure it starts with a letter or underscore + if (!/^[a-z_]/.test(sanitized)) { + sanitized = `ext_${sanitized}`; + } + + return sanitized; +} +``` + +### 8.5 extension包名称解析 + +系统提供了从调用栈中确定控制器所属extension包的机制: + +```typescript +export function getExtensionPackNameFromControllerSync(): string { + const extensions = getCachedExtensionList(); + + // 如果只有一个插件,直接返回 + if (extensions.length === 1) { + return extensions?.[0]!.name; + } + + // 如果有多个插件,需要通过调用栈来确定 + if (!stackFinderFn) { + throw new Error('未设置堆栈查找函数,请先调用 setStackFinderFn() 设置查找函数'); + } + + // 查找调用栈中的文件 + const callerFiles = stackFinderFn([".ts", ".js"]) || []; + + if (callerFiles.length === 0) { + throw new Error("无法从调用栈中找到文件"); + } + + // 尝试从每个文件路径中提取插件名称 + for (const file of callerFiles) { + const extensionName = extractExtensionNameFromPath(file); + if (extensionName) { + // 验证插件名称是否在缓存列表中 + const extension = extensions.find((p) => p.name === extensionName); + if (extension) { + return extension.name; + } + } + } + + throw new Error("无法从调用栈中确定插件名称"); +} +``` + +## 9. 部署方式 + +- **开发环境**:使用本地开发服务器 +- **生产环境**:使用Docker容器化部署 + +## 10. 系统配置 + +- **数据库配置**:通过.env文件配置数据库连接信息 +- **Redis配置**:通过.env文件配置Redis连接信息 +- **日志配置**:通过.env文件配置日志级别和输出方式 + +## 11. 监控与维护 + +- **日志监控**:使用Winston日志框架记录系统日志 +- **错误处理**:全局异常过滤器处理和返回统一的错误格式 +- **性能监控**:使用监控工具监测系统性能 +- **定期维护**:定期备份数据库和清理日志文件 + +## 12. 安全设计 + +- **认证机制**:JWT认证和权限控制 +- **数据加密**:敏感数据加密存储 +- **安全审计**:记录系统操作日志 +- **输入验证**:对API请求参数进行验证 +- **防护措施**:防止SQL注入、XSS攻击等安全威胁 + +--- + +**文档版本**:1.0.0 +**作者**:BuildingAI团队 +**创建时间**:2023年12月1日 \ No newline at end of file diff --git "a/BuildingAI\351\234\200\346\261\202\346\226\207\346\241\243PRD.md" "b/BuildingAI\351\234\200\346\261\202\346\226\207\346\241\243PRD.md" new file mode 100644 index 0000000000000000000000000000000000000000..d44db31689a9b0669d2a9f88d6d4fadcbd6224af --- /dev/null +++ "b/BuildingAI\351\234\200\346\261\202\346\226\207\346\241\243PRD.md" @@ -0,0 +1,341 @@ +# BuildingAI需求文档PRD + +## 1. 项目概述 + +### 1.1 项目背景 +BuildingAI是一个企业级AI平台,提供可视化配置界面,无需代码即可构建原生企业AI应用。该平台旨在帮助企业快速部署和管理AI能力,提高业务效率和竞争力。 + +### 1.2 项目目标 +- 提供无需代码的AI应用构建平台 +- 支持多种AI能力和扩展机制 +- 确保系统的稳定性和安全性 +- 提供友好的用户界面和完善的文档 + +### 1.3 技术栈 +- **后端**: NestJS 11.x +- **前端**: Nuxt.js 4.x + Vue.js 3.x +- **数据库**: PostgreSQL 17.x +- **缓存**: Redis +- **部署**: Docker +- **开发工具**: TypeScript 5.x, Turbo 2.x + +## 2. 功能需求 + +### 2.1 核心功能 + +#### 2.1.1 AI对话 +- 支持多模态模型的对话AI +- 文本生成功能 +- 实时对话交互 +- 对话记录管理 + +#### 2.1.2 AI智能体 +- 创建具有记忆的智能体 +- 设置智能体目标 +- 支持工具使用能力 +- 自主任务执行 +- 智能体对话记录 + +#### 2.1.3 AI数据集 +- 支持多种数据格式 +- 数据分段和标注 +- 数据集版本管理 +- 数据集共享和权限管理 + +#### 2.1.4 MCP集成 +- 通过SSE协议调用MCP工具 +- Streamable HTTP协议支持 +- MCP服务器和工具管理 +- 用户MCP服务器配置 + +#### 2.1.5 模型管理 +- 主流大模型集成 +- 统一API规范 +- 模型版本管理 +- 模型性能监控 +- AI提供商管理 + +#### 2.1.6 密钥管理 +- 密钥模板管理 +- 密钥生成和存储 +- 密钥权限控制 + +#### 2.1.7 扩展机制 +- 安装扩展扩展系统功能 +- AI技能扩展 +- 扩展市场和管理 + +#### 2.1.8 计费与支付 +- 内置会员管理 +- 计费功能 +- 支付接口集成 +- 消费记录查询 + +### 2.2 系统功能 + +#### 2.2.1 系统管理 +- 系统初始化 +- 系统配置 +- 版本管理 +- 系统监控 + +#### 2.2.2 用户管理 +- 用户注册和登录 +- 角色和权限管理 +- 用户信息管理 +- 密码重置 + +#### 2.2.3 内容管理 +- 网站配置 +- 内容发布 +- 分类管理 +- 标签管理 + +#### 2.2.4 文件管理 +- 文件上传和下载 +- 文件分类管理 +- 文件权限控制 +- 云存储支持 + +## 3. 技术需求 + +### 3.1 性能需求 +- 响应时间<500ms +- 支持1000+并发用户 +- 数据存储安全可靠 + +### 3.2 安全需求 +- 数据加密存储 +- 权限控制 +- 防止SQL注入 +- 防止XSS攻击 +- 定期安全审计 + +### 3.3 可扩展性需求 +- 模块化架构 +- 支持微服务扩展 +- 支持水平扩展 + +### 3.4 可维护性需求 +- 代码注释率>30% +- 完善的文档 +- 自动化测试 +- 日志系统 + +## 4. 系统架构 + +### 4.1 整体架构 +``` +┌───────────────────────────────────────────────────────────────────────────┐ +│ 客户端 │ +└───────────────────────────────────────────────────────────────────────────┘ + ▲ + │ HTTP/HTTPS + ▼ +┌───────────────────────────────────────────────────────────────────────────┐ +│ 前端服务 │ +│ (Nuxt.js 4.x) │ +└───────────────────────────────────────────────────────────────────────────┘ + ▲ + │ API + ▼ +┌───────────────────────────────────────────────────────────────────────────┐ +│ 后端服务 │ +│ (NestJS 11.x) │ +│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ +│ │ AI模块 │ │ 用户模块 │ │ 权限模块 │ │ 计费模块 │ │ 扩展模块 │ │ +│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ +└───────────────────────────────────────────────────────────────────────────┘ + ▲ + │ + ▼ +┌───────────────────────────────────────────────────────────────────────────┐ +│ 数据层 │ +│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ +│ │ PostgreSQL │ │ Redis │ │ 文件存储 │ │ 队列系统 │ │ 缓存系统 │ │ +│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ +└───────────────────────────────────────────────────────────────────────────┘ +``` + +### 4.2 模块架构 + +#### 4.2.1 API模块 +- 提供所有业务接口 +- 支持RESTful API +- 接口版本管理 +- 动态模块配置(AppModule.register()) +- 核心模块集成 + - CacheModule and RedisModule: 缓存功能 + - DatabaseModule: 数据库连接 + - BillingModule: 计费功能 + - SecretModule: 密钥管理 + - UploadModule: 文件上传 + - AnalyseModule: 分析功能 +- **AI子模块** + - AiAgentModule: 智能体管理 + - AiChatModule: 对话管理 + - AiDatasetsModule: 数据集管理 + - AiMcpModule: MCP集成 + - AiModelModule: 模型管理 + - AiProviderModule: AI提供商管理 + - SecretManagerModule: 密钥管理 +- **安全防护机制** + - DemoGuard: 演示环境保护 + - AuthGuard: 身份认证 + - ExtensionGuard: 扩展权限保护 + - PermissionsGuard: 权限验证 + - SuperAdminGuard: 超级管理员保护 +- **扩展系统** + - 加载启用的扩展 + - 初始化扩展缓存 + - 为扩展创建数据库架构 + - 隔离扩展功能 + +#### 4.2.2 Web模块 +- 提供用户界面 +- 支持响应式设计 +- 优化用户体验 + - 控制台界面 + - AI应用构建界面 + - 系统管理界面 + +#### 4.2.3 Core模块 +- 提供核心功能 +- 通用服务和工具 +- 系统扩展机制 + +#### 4.2.4 Extension模块 +- 扩展系统功能 +- 支持第三方集成 +- 扩展管理界面 + +## 5. 部署方式 + +### 5.1 Docker部署(推荐) +```bash +# 复制环境变量 +cp .env.example .env +# 启动应用 +docker compose up -d +``` + +### 5.2 本地部署 +```bash +# 安装依赖 +pnpm install +# 启动开发服务器 +pnpm dev +# 构建生产版本 +pnpm build +# 启动生产服务器 +pnpm start +``` + +### 5.3 环境要求 +- CPU: ≥ 2 cores +- Memory: ≥ 4 GB RAM +- Storage: ≥ 5 GB free space +- Node.js: ≥ 22.0.0 + +## 6. 系统配置 + +### 6.1 环境变量 +```env +# 基本配置 +APP_NAME=BuildingAI +APP_VERSION=25.0.2 + +# 服务器配置 +SERVER_PORT=4090 +SERVER_CORS_ENABLED=true +SERVER_CORS_ORIGIN=* + +# 数据库配置 +DB_TYPE=postgres +DB_HOST=localhost +DB_PORT=5432 +DB_USERNAME=postgres +DB_PASSWORD=postgres +DB_DATABASE=buildingai + +# Redis配置 +REDIS_HOST=localhost +REDIS_PORT=6379 +REDIS_PASSWORD= +REDIS_DB=0 +``` + +### 6.2 初始化配置 +访问http://localhost:4090/install完成初始设置向导: +- 创建超级管理员账户 +- 设置网站基本信息 +- 配置AI模型 +- 设置支付方式 + +## 7. 系统扩展 + +### 7.1 扩展开发 +扩展开发遵循以下规范: +- 使用TypeScript +- 遵循NestJS和Nuxt.js规范 +- 提供扩展描述文件 +- 支持自动安装和卸载 + +### 7.2 扩展安装 +```bash +# 安装官方扩展 +pnpm install @buildingai/extension-example +# 安装第三方扩展 +pnpm install https://github.com/user/extension-example.git +``` + +### 7.3 扩展管理 +- 在控制台中管理扩展 +- 启用/禁用扩展 +- 更新扩展版本 +- 查看扩展日志 + +## 8. 系统监控 + +### 8.1 日志系统 +- 记录系统操作日志 +- 记录错误日志 +- 支持日志分级 +- 支持日志备份 + +### 8.2 监控指标 +- 系统性能指标 +- API请求量 +- 错误率 +- 响应时间 + +### 8.3 报警机制 +- 邮件报警 +- 短信报警 +- 实时通知 + +## 9. 系统维护 + +### 9.1 数据备份 +- 定期备份数据库 +- 备份文件存储在安全位置 +- 支持增量备份 + +### 9.2 系统更新 +```bash +# 更新系统 +pnpm run bd:update +# 从Git更新 +pnpm run bd:update-git +``` + +### 9.3 故障处理 +- 定期检查系统状态 +- 及时处理故障 +- 故障记录和分析 + +## 10. 总结 + +BuildingAI是一个功能强大的企业级AI平台,提供了无需代码即可构建AI应用的能力。该平台具有良好的扩展性和稳定性,适用于各种企业级应用场景。 + +通过可视化配置界面,企业可以快速部署和管理AI能力,提高业务效率和竞争力。 \ No newline at end of file diff --git a/packages/core/src/modules/billing/base-billing.service.ts b/packages/core/src/modules/billing/base-billing.service.ts index cb49c90d54b335ce79528a34e517404a2ab7b8c8..86b53d9563f6e1df560a07acd6c40b1213251025 100644 --- a/packages/core/src/modules/billing/base-billing.service.ts +++ b/packages/core/src/modules/billing/base-billing.service.ts @@ -101,7 +101,7 @@ export class BaseBillingService { const newPower = user.power - amount; // Update user power - await entityManager.increment(User, { id: userId }, "power", -amount); + await manager.increment(User, { id: userId }, "power", -amount); // Record power change log await manager.insert(AccountLog, { @@ -197,7 +197,7 @@ export class BaseBillingService { const newPower = user.power + amount; // Update user power - await entityManager.increment(User, { id: userId }, "power", amount); + await manager.increment(User, { id: userId }, "power", amount); // Record power change log await manager.insert(AccountLog, { diff --git "a/\346\216\247\345\210\266\345\217\260\346\231\272\350\203\275\344\275\223\350\217\234\345\215\225\345\222\214\351\241\265\351\235\242\345\212\237\350\203\275PRD.md" "b/\346\216\247\345\210\266\345\217\260\346\231\272\350\203\275\344\275\223\350\217\234\345\215\225\345\222\214\351\241\265\351\235\242\345\212\237\350\203\275PRD.md" new file mode 100644 index 0000000000000000000000000000000000000000..f550adf6420bafd1ae1ac2f3bbf2b0c893b96645 --- /dev/null +++ "b/\346\216\247\345\210\266\345\217\260\346\231\272\350\203\275\344\275\223\350\217\234\345\215\225\345\222\214\351\241\265\351\235\242\345\212\237\350\203\275PRD.md" @@ -0,0 +1,338 @@ +# 控制台智能体菜单和页面功能PRD + +## 1. 文档概述 + +### 1.1 文档目的 +本文档旨在定义控制台智能体菜单和页面的功能需求、界面设计和交互逻辑,为开发团队提供清晰的开发指南。 + +### 1.2 适用范围 +适用于控制台智能体模块的所有相关页面和功能开发。 + +### 1.3 术语定义 +- **智能体**:具备特定能力和个性的AI实体,可与用户进行对话并执行任务 +- **智能体广场**:展示和分享智能体的公共平台 +- **DSL**:领域特定语言,用于智能体的配置和导出 +- **MCP**:模型调用协议,用于智能体与外部服务的交互 + +## 2. 功能需求 + +### 2.1 核心功能 +1. 智能体创建与编辑 +2. 智能体列表管理 +3. 智能体配置管理 +4. 智能体发布与版本控制 +5. 智能体对话记录与分析 +6. 智能体集成与扩展 + +### 2.2 辅助功能 +1. 智能体模板市场 +2. DSL导入/导出 +3. 权限管理 +4. 日志与审计 +5. 多语言支持 + +## 3. 菜单结构 + +### 3.1 菜单层级 +``` +控制台 +├── 智能体管理 +│ ├── 智能体列表 +│ ├── 智能体广场 +│ ├── 对话记录 +│ └── 智能体配置 +└── 系统设置 + └── MCP服务设置 +``` + +### 3.2 菜单详情 + +| 菜单名称 | 路径 | 权限 | 功能描述 | +|---------|------|------|----------| +| 智能体列表 | `/console/ai/agent` | AI_AGENT_LIST | 展示所有智能体,支持搜索、过滤和批量操作 | +| 智能体广场 | `/console/ai/agent/square` | AI_AGENT_SQUARE | 展示公共智能体,支持浏览和导入 | +| 对话记录 | `/console/ai/agent/chat-logs` | AI_AGENT_CHAT_LOGS | 查看所有智能体的对话历史 | +| 智能体配置 | `/console/ai/agent/config` | AI_AGENT_CONFIG | 管理智能体的全局配置和模板 | +| MCP服务设置 | `/console/settings/mcp` | MCP_SERVER_SETTINGS | 配置和管理MCP服务器 | + +## 4. 页面功能 + +### 4.1 智能体列表页面 + +#### 4.1.1 页面结构 +``` +智能体列表页面 +├── 顶部工具栏 +│ ├── 搜索框 +│ ├── 创建智能体按钮 +│ ├── 导入DSL按钮 +│ └── 批量操作按钮 +├── 智能体卡片列表 +│ ├── 智能体名称 +│ ├── 智能体类型 +│ ├── 创建时间 +│ ├── 状态 +│ └── 操作按钮(编辑、删除、导出DSL) +└── 分页组件 +``` + +#### 4.1.2 核心功能 +- 搜索:支持按名称、类型、标签搜索智能体 +- 创建:支持从零创建智能体或从模板创建 +- 导入:支持导入YAML格式的DSL配置文件 +- 导出:支持导出智能体配置为YAML格式 +- 编辑:支持修改智能体的基本信息和配置 +- 删除:支持删除智能体(需二次确认) +- 批量操作:支持批量删除智能体 + +### 4.2 智能体创建/编辑页面 + +#### 4.2.1 页面结构 +``` +智能体创建/编辑页面 +├── 基本信息表单 +│ ├── 智能体名称 +│ ├── 智能体描述 +│ ├── 智能体类型 +│ ├── 智能体头像 +│ └── 状态 +├── 配置表单 +│ ├── 角色设定 +│ ├── 模型配置 +│ ├── 知识库关联 +│ ├── 快捷指令 +│ └── 高级配置 +└── 操作按钮 + ├── 保存草稿 + ├── 发布智能体 + └── 取消 +``` + +#### 4.2.2 核心功能 +- 基本信息:设置智能体的基本属性 +- 角色设定:定义智能体的身份、性格和行为准则 +- 模型配置:选择AI模型和设置参数 +- 知识库关联:关联智能体需要用到的知识库 +- 快捷指令:配置常用的快捷操作 +- 高级配置:设置上下文长度、温度、TOP_P等参数 + +### 4.3 智能体配置页面 + +#### 4.3.1 页面结构 +``` +智能体配置页面 +├── 配置列表 +│ ├── 配置名称 +│ ├── 配置类型 +│ ├── 创建时间 +│ └── 操作按钮(编辑、删除) +└── 配置表单 + ├── 配置名称 + ├── 配置类型 + ├── 配置内容 + └── 保存按钮 +``` + +#### 4.3.2 核心功能 +- 配置管理:管理智能体的全局配置和模板 +- 配置类型:支持系统配置和自定义配置 +- 配置内容:支持JSON格式的配置内容 + +### 4.4 智能体发布页面 + +#### 4.4.1 页面结构 +``` +智能体发布页面 +├── 发布信息表单 +│ ├── 版本号 +│ ├── 发布说明 +│ └── 发布范围 +└── 操作按钮 + ├── 发布智能体 + └── 取消 +``` + +#### 4.4.2 核心功能 +- 版本控制:支持版本号管理和发布历史 +- 发布范围:支持公开、私有、指定用户等发布范围 +- 发布说明:支持添加版本更新说明 + +## 5. 数据结构 + +### 5.1 智能体实体 +```typescript +interface Agent { + id: string; + name: string; + description?: string; + createMode: string; + avatar?: string; + chatAvatar?: string; + rolePrompt?: string; + showContext: boolean; + showReference: boolean; + enableFeedback: boolean; + enableWebSearch: boolean; + userCount: number; + modelConfig?: ModelConfig; + billingConfig?: ModelBillingConfig; + datasetIds?: string[]; + openingStatement?: string; + openingQuestions?: string[]; + quickCommands?: QuickCommandConfig[]; + autoQuestions?: AutoQuestionsConfig; + formFields?: FormFieldConfig[]; + formFieldsInputs?: Record; + mcpServerIds?: string[]; + isPublished: boolean; + isPublic: boolean; + publishToken?: string; + apiKey?: string; + createBy: string; + publishConfig?: { + allowOrigins?: string[]; + rateLimitPerMinute?: number; + showBranding?: boolean; + allowDownloadHistory?: boolean; + }; + thirdPartyIntegration?: ThirdPartyIntegrationConfig; + tags?: Tag[]; +} +``` + +### 5.2 智能体配置 +```typescript +interface AgentConfig { + id: string; + name: string; + type: string; + content: any; + createdAt: Date; + updatedAt: Date; +} +``` + +## 6. 接口需求 + +### 6.1 智能体管理接口 + +| 接口名称 | 方法 | 路径 | 功能描述 | +|---------|------|------|----------| +| 智能体列表 | GET | /api/v1/ai/agent | 获取智能体列表 | +| 创建智能体 | POST | /api/v1/ai/agent | 创建新智能体 | +| 智能体详情 | GET | /api/v1/ai/agent/{id} | 获取智能体详情 | +| 更新智能体 | PUT | /api/v1/ai/agent/{id} | 更新智能体信息 | +| 删除智能体 | DELETE | /api/v1/ai/agent/{id} | 删除智能体 | +| 批量删除智能体 | POST | /api/v1/ai/agent/batch-delete | 批量删除智能体 | + +### 6.2 智能体配置接口 + +| 接口名称 | 方法 | 路径 | 功能描述 | +|---------|------|------|----------| +| 配置列表 | GET | /api/v1/ai/agent/config | 获取配置列表 | +| 创建配置 | POST | /api/v1/ai/agent/config | 创建新配置 | +| 配置详情 | GET | /api/v1/ai/agent/config/{id} | 获取配置详情 | +| 更新配置 | PUT | /api/v1/ai/agent/config/{id} | 更新配置信息 | +| 删除配置 | DELETE | /api/v1/ai/agent/config/{id} | 删除配置 | + +### 6.3 智能体发布接口 + +| 接口名称 | 方法 | 路径 | 功能描述 | +|---------|------|------|----------| +| 发布智能体 | POST | /api/v1/ai/agent/{id}/publish | 发布智能体 | +| 撤销发布 | POST | /api/v1/ai/agent/{id}/unpublish | 撤销智能体发布 | +| 发布历史 | GET | /api/v1/ai/agent/{id}/publish-history | 获取发布历史 | + +## 7. 权限控制 + +### 7.1 角色与权限 + +| 角色 | 权限 | +|------|------| +| 管理员 | 所有智能体相关权限 | +| 开发者 | 创建、编辑、发布智能体 | +| 普通用户 | 使用智能体、查看对话记录 | + +### 7.2 权限颗粒度 +- 智能体级别的权限控制 +- 操作级别的权限控制 +- 资源级别的权限控制 + +## 8. 非功能需求 + +### 8.1 性能需求 +- 页面加载时间 ≤ 2秒 +- 并发用户数 ≥ 1000 +- 数据响应时间 ≤ 500毫秒 + +### 8.2 安全性需求 +- 所有接口必须支持认证和授权 +- 敏感数据必须加密传输 +- 操作必须记录审计日志 + +### 8.3 可用性需求 +- 系统可用性 ≥ 99.9% +- 故障恢复时间 ≤ 30分钟 + +### 8.4 兼容性需求 +- 支持主流浏览器(Chrome、Firefox、Safari、Edge) +- 支持响应式设计 + +## 9. 依赖关系 + +### 9.1 内部依赖 +- 用户模块 +- 权限模块 +- 模型模块 +- 知识库模块 + +### 9.2 外部依赖 +- AI模型服务 +- 知识库服务 +- MCP服务 + +## 10. 验收标准 + +### 10.1 功能验收 +- 所有功能必须按照需求实现 +- 所有页面必须正常显示和交互 +- 所有接口必须返回正确的结果 + +### 10.2 性能验收 +- 页面加载时间必须 ≤ 2秒 +- 数据响应时间必须 ≤ 500毫秒 +- 并发用户数 ≥ 1000 + +### 10.3 安全验收 +- 所有接口必须支持认证和授权 +- 敏感数据必须加密传输 +- 操作必须记录审计日志 + +### 10.4 兼容性验收 +- 支持主流浏览器(Chrome、Firefox、Safari、Edge) +- 支持响应式设计 +- 所有接口必须支持认证和授权 +- 敏感数据必须加密传输 + +### 10.4 兼容性验收 +- 支持主流浏览器 +- 支持响应式设计 + +## 11. 附录 + +### 11.1 界面设计图 +[此处放置界面设计图的链接] + +### 11.2 原型图 +[此处放置原型图的链接] + +### 11.3 参考文档 +- 智能体实体定义:ai-agent.entity.ts +- 智能体API:packages/api/src/modules/ai/agent +- 智能体前端页面:packages/web/buildingai-ui/app/pages/console/ai/agent + +# 版本历史 + +| 版本 | 日期 | 作者 | 描述 | +|------|------|------|------| +| 1.0 | 2023-10-15 | AI团队 | 初始版本 | \ No newline at end of file