diff --git a/API接口参数文档.md b/API接口参数文档.md new file mode 100644 index 000000000..fab51e1a4 --- /dev/null +++ b/API接口参数文档.md @@ -0,0 +1,1255 @@ +# MaxKB API接口参数文档 + +## 1. 概述 + +本文档详细描述了MaxKB系统中所有API接口的参数信息,包括用户管理、应用管理、对话管理、知识库管理等模块的接口。 + +## 2. 用户管理接口 + +### 2.1 登录接口 + +- **URL**: `/api/users/login` +- **方法**: POST +- **认证**: 无需认证 + +#### 请求参数 + +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| username | string | 是 | 用户名 | +| password | string | 是 | 密码 | +| captcha | string | 否 | 验证码(登录失败次数超过阈值时需要) | +| encryptedData | string | 否 | 加密数据 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." + } +} +``` + +### 2.2 登出接口 + +- **URL**: `/api/users/logout` +- **方法**: POST +- **认证**: Token认证 + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": true +} +``` + +### 2.3 获取验证码接口 + +- **URL**: `/api/users/captcha` +- **方法**: GET +- **认证**: 无需认证 + +#### 请求参数 + +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| username | string | 否 | 用户名 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "captcha": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." + } +} +``` + +### 2.4 用户个人信息接口 + +- **URL**: `/api/users/profile` +- **方法**: GET +- **认证**: Token认证 + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "id": "user123", + "username": "admin", + "email": "admin@example.com", + "is_active": true + } +} +``` + +### 2.5 切换语言接口 + +- **URL**: `/api/users/language` +- **方法**: POST +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| language | string | 是 | 语言代码(如:zh-CN, en-US) | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": true +} +``` + +## 3. 应用管理接口 + +### 3.1 应用列表接口 + +- **URL**: `/api/application/workspace/{workspace_id}/application` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": "app123", + "name": "测试应用", + "description": "这是一个测试应用", + "workspace_id": "workspace1", + "create_time": "2025-01-01 10:00:00" + } + ] +} +``` + +### 3.2 应用分页接口 + +- **URL**: `/api/application/workspace/{workspace_id}/application/{current_page}/{page_size}` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| current_page | path | integer | 是 | 当前页码 | +| page_size | path | integer | 是 | 每页大小 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "records": [ + { + "id": "app123", + "name": "测试应用", + "description": "这是一个测试应用" + } + ], + "total": 10, + "size": 20, + "current": 1, + "pages": 1 + } +} +``` + +### 3.3 应用详情接口 + +- **URL**: `/api/application/workspace/{workspace_id}/application/{application_id}` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "id": "app123", + "name": "测试应用", + "description": "这是一个测试应用", + "workspace_id": "workspace1", + "create_time": "2025-01-01 10:00:00", + "update_time": "2025-01-02 10:00:00" + } +} +``` + +### 3.4 创建应用接口 + +- **URL**: `/api/application/workspace/{workspace_id}/application` +- **方法**: POST +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| name | body | string | 是 | 应用名称 | +| description | body | string | 否 | 应用描述 | +| type | body | string | 是 | 应用类型 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "id": "app123", + "name": "测试应用" + } +} +``` + +### 3.5 更新应用接口 + +- **URL**: `/api/application/workspace/{workspace_id}/application/{application_id}` +- **方法**: PUT +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| name | body | string | 否 | 应用名称 | +| description | body | string | 否 | 应用描述 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": true +} +``` + +### 3.6 删除应用接口 + +- **URL**: `/api/application/workspace/{workspace_id}/application/{application_id}` +- **方法**: DELETE +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": true +} +``` + +## 4. 监控统计接口 + +### 4.1 对话统计趋势接口 + +- **URL**: `/api/application/{workspace_id}/{application_id}/stats` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| start_time | query | string | 是 | 开始时间,格式:YYYY-MM-DD | +| end_time | query | string | 是 | 结束时间,格式:YYYY-MM-DD | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "chat_record_count": 10, + "customer_added_count": 5, + "customer_num": 100, + "day": "2025-01-01", + "star_num": 8, + "tokens_num": 1000, + "trample_num": 2 + } + ] +} +``` + +### 4.2 Token使用统计接口 + +- **URL**: `/api/application/{workspace_id}/{application_id}/stats/token-usage` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| start_time | query | string | 是 | 开始时间,格式:YYYY-MM-DD | +| end_time | query | string | 是 | 结束时间,格式:YYYY-MM-DD | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "chat_user_id": "user123", + "nick_name": "用户1", + "tokens_num": 5000 + } + ] +} +``` + +### 4.3 热门问题统计接口 + +- **URL**: `/api/application/{workspace_id}/{application_id}/stats/top-questions` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| start_time | query | string | 是 | 开始时间,格式:YYYY-MM-DD | +| end_time | query | string | 是 | 结束时间,格式:YYYY-MM-DD | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "problem_text": "如何使用MaxKB", + "count": 50 + } + ] +} +``` + +## 5. 对话管理接口 + +### 5.1 应用级别对话记录列表接口 + +- **URL**: `/api/application/{workspace_id}/{application_id}/chat-record/{chat_id}` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| chat_id | path | string | 是 | 对话ID | +| search_type | query | string | 否 | 搜索类型 | +| search_text | query | string | 否 | 搜索文本 | +| start_time | query | string | 否 | 开始时间 | +| end_time | query | string | 否 | 结束时间 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": "record123", + "chat_id": "chat123", + "problem_text": "如何使用MaxKB", + "answer_text": "MaxKB是一个智能客服平台...", + "create_time": "2025-01-01 10:00:00", + "tokens": 100, + "star": 1, + "trample": 0 + } + ] +} +``` + +### 5.2 用户级别历史对话列表接口 + +- **URL**: `/api/chat/historical_conversation` +- **方法**: GET +- **认证**: Token认证 + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": "chat123", + "abstract": "如何使用MaxKB", + "create_time": "2025-01-01 10:00:00", + "update_time": "2025-01-01 10:05:00" + } + ] +} +``` + +### 5.3 发送消息接口 + +- **URL**: `/api/chat/chat_message/{chat_id}` +- **方法**: POST +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| chat_id | path | string | 是 | 对话ID | +| message_list | body | array | 是 | 消息列表 | +| problem_text | body | string | 是 | 用户问题 | +| stream | body | boolean | 否 | 是否使用流的形式输出 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "id": "record123", + "chat_id": "chat123", + "problem_text": "如何使用MaxKB", + "answer_text": "MaxKB是一个智能客服平台...", + "create_time": "2025-01-01 10:00:00", + "tokens": 100 + } +} +``` + +## 6. 知识库管理接口 + +### 6.1 知识库列表接口 + +- **URL**: `/api/knowledge/workspace/{workspace_id}/knowledge` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": "knowledge123", + "name": "测试知识库", + "description": "这是一个测试知识库", + "workspace_id": "workspace1", + "create_time": "2025-01-01 10:00:00" + } + ] +} +``` + +### 6.2 知识库分页接口 + +- **URL**: `/api/knowledge/workspace/{workspace_id}/knowledge/{current_page}/{page_size}` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| current_page | path | integer | 是 | 当前页码 | +| page_size | path | integer | 是 | 每页大小 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "records": [ + { + "id": "knowledge123", + "name": "测试知识库", + "description": "这是一个测试知识库" + } + ], + "total": 5, + "size": 20, + "current": 1, + "pages": 1 + } +} +``` + +### 6.3 文档列表接口 + +- **URL**: `/api/knowledge/workspace/{workspace_id}/knowledge/{knowledge_id}/document` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| knowledge_id | path | string | 是 | 知识库ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": "doc123", + "name": "测试文档", + "knowledge_id": "knowledge123", + "create_time": "2025-01-01 10:00:00" + } + ] +} +``` + +### 6.4 段落列表接口 + +- **URL**: `/api/knowledge/workspace/{workspace_id}/knowledge/{knowledge_id}/document/{document_id}/paragraph` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| knowledge_id | path | string | 是 | 知识库ID | +| document_id | path | string | 是 | 文档ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": "paragraph123", + "content": "这是一段测试内容", + "document_id": "doc123", + "create_time": "2025-01-01 10:00:00" + } + ] +} +``` + +## 7. Token获取方式 + +### 7.1 用户登录获取Token + +- **URL**: `/api/users/login` +- **方法**: POST +- **认证**: 无需认证 + +#### 请求参数 + +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| username | string | 是 | 用户名 | +| password | string | 是 | 密码 | +| captcha | string | 否 | 验证码(登录失败次数超过阈值时需要) | +| encryptedData | string | 否 | 加密数据 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." + } +} +``` + +### 7.2 应用访问令牌 + +系统还支持应用级别的访问令牌,通过`ApplicationAccessToken`模型生成,用于应用间的API调用。 + +### 7.3 Token使用方式 + +获取token后,在调用其他API接口时,需要在请求头中添加: + +``` +Authorization: Bearer your_token_here +``` + +## 8. 通用参数说明 + +### 8.1 分页参数 + +| 参数名 | 类型 | 描述 | +|--------|------|------| +| current_page | integer | 当前页码,从1开始 | +| page_size | integer | 每页大小,默认20 | + +### 8.2 时间参数 + +| 参数名 | 类型 | 描述 | +|--------|------|------| +| start_time | string | 开始时间,格式:YYYY-MM-DD | +| end_time | string | 结束时间,格式:YYYY-MM-DD | + +### 8.3 搜索参数 + +| 参数名 | 类型 | 描述 | +|--------|------|------| +| search_text | string | 搜索文本 | +| search_type | string | 搜索类型 | + +## 9. 响应格式 + +所有API接口的响应格式统一为: + +```json +{ + "code": 200, // 状态码,200表示成功 + "message": "success", // 消息,success表示成功 + "data": {} // 数据,根据接口不同返回不同结构 +} +``` + +### 9.1 错误响应 + +| 错误码 | 描述 | +|--------|------| +| 401 | 未授权,Token无效或过期 | +| 403 | 无权限访问该资源 | +| 404 | 资源不存在 | +| 500 | 服务器内部错误 | + +## 7. 系统管理接口 + +### 7.1 工作空间用户资源权限接口 + +- **URL**: `/api/system_manage/workspace/{workspace_id}/user_resource_permission/user/{user_id}/resource/{resource}` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| user_id | path | string | 是 | 用户ID | +| resource | path | string | 是 | 资源类型 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "resource_id": "resource123", + "resource_name": "测试资源", + "has_permission": true + } + ] +} +``` + +### 7.2 工作空间用户资源权限分页接口 + +- **URL**: `/api/system_manage/workspace/{workspace_id}/user_resource_permission/user/{user_id}/resource/{resource}/{current_page}/{page_size}` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| user_id | path | string | 是 | 用户ID | +| resource | path | string | 是 | 资源类型 | +| current_page | path | integer | 是 | 当前页码 | +| page_size | path | integer | 是 | 每页大小 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "records": [ + { + "resource_id": "resource123", + "resource_name": "测试资源", + "has_permission": true + } + ], + "total": 10, + "size": 20, + "current": 1, + "pages": 1 + } +} +``` + +### 7.3 邮件设置接口 + +- **URL**: `/api/system_manage/email_setting` +- **方法**: GET, POST +- **认证**: Token认证 + +#### 请求参数 (POST) + +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| smtp_server | string | 是 | SMTP服务器 | +| smtp_port | integer | 是 | SMTP端口 | +| smtp_username | string | 是 | SMTP用户名 | +| smtp_password | string | 是 | SMTP密码 | +| sender_email | string | 是 | 发件人邮箱 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "smtp_server": "smtp.example.com", + "smtp_port": 587, + "smtp_username": "admin@example.com", + "sender_email": "admin@example.com" + } +} +``` + +### 7.4 系统配置接口 + +- **URL**: `/api/system_manage/config` +- **方法**: GET +- **认证**: Token认证 + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "system_name": "MaxKB", + "version": "1.0.0", + "admin_path": "/admin" + } +} +``` + +## 8. 工具管理接口 + +### 8.1 工具列表接口 + +- **URL**: `/api/tool/workspace/{workspace_id}/tool` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": "tool123", + "name": "测试工具", + "description": "这是一个测试工具", + "workspace_id": "workspace1", + "create_time": "2025-01-01 10:00:00" + } + ] +} +``` + +### 8.2 工具分页接口 + +- **URL**: `/api/tool/workspace/{workspace_id}/tool/{current_page}/{page_size}` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| current_page | path | integer | 是 | 当前页码 | +| page_size | path | integer | 是 | 每页大小 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "records": [ + { + "id": "tool123", + "name": "测试工具", + "description": "这是一个测试工具" + } + ], + "total": 5, + "size": 20, + "current": 1, + "pages": 1 + } +} +``` + +### 8.3 工具详情接口 + +- **URL**: `/api/tool/workspace/{workspace_id}/tool/{tool_id}` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| tool_id | path | string | 是 | 工具ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "id": "tool123", + "name": "测试工具", + "description": "这是一个测试工具", + "workspace_id": "workspace1", + "create_time": "2025-01-01 10:00:00" + } +} +``` + +### 8.4 测试工具连接接口 + +- **URL**: `/api/tool/workspace/{workspace_id}/tool/test_connection` +- **方法**: POST +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| tool_id | body | string | 是 | 工具ID | +| config | body | object | 是 | 工具配置 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "success": true, + "message": "连接成功" + } +} +``` + +## 9. OSS接口 + +### 9.1 文件上传接口 + +- **URL**: `/api/oss/file` +- **方法**: POST +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| file | file | 是 | 上传的文件 | +| type | string | 是 | 文件类型 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "file_url": "http://example.com/files/test.png", + "file_name": "test.png", + "file_size": 102400 + } +} +``` + +## 10. 文件夹管理接口 + +### 10.1 文件夹列表接口 + +- **URL**: `/api/folder/workspace/{workspace_id}/{source}/folder` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| source | path | string | 是 | 资源类型(如:application, knowledge) | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": "folder123", + "name": "测试文件夹", + "parent_id": null, + "workspace_id": "workspace1", + "source": "application", + "create_time": "2025-01-01 10:00:00" + } + ] +} +``` + +### 10.2 创建文件夹接口 + +- **URL**: `/api/folder/workspace/{workspace_id}/{source}/folder` +- **方法**: POST +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| source | path | string | 是 | 资源类型(如:application, knowledge) | +| name | body | string | 是 | 文件夹名称 | +| parent_id | body | string | 否 | 父文件夹ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "id": "folder123", + "name": "测试文件夹", + "parent_id": null, + "workspace_id": "workspace1", + "source": "application" + } +} +``` + +### 10.3 更新文件夹接口 + +- **URL**: `/api/folder/workspace/{workspace_id}/{source}/folder/{folder_id}` +- **方法**: PUT +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| source | path | string | 是 | 资源类型(如:application, knowledge) | +| folder_id | path | string | 是 | 文件夹ID | +| name | body | string | 是 | 文件夹名称 | +| parent_id | body | string | 否 | 父文件夹ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": true +} +``` + +### 10.4 删除文件夹接口 + +- **URL**: `/api/folder/workspace/{workspace_id}/{source}/folder/{folder_id}` +- **方法**: DELETE +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| source | path | string | 是 | 资源类型(如:application, knowledge) | +| folder_id | path | string | 是 | 文件夹ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": true +} +``` + +## 11. 模型提供商接口 + +### 11.1 模型提供商列表接口 + +- **URL**: `/api/models_provider/provider` +- **方法**: GET +- **认证**: Token认证 + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": "provider123", + "name": "OpenAI", + "type": "llm", + "status": "active" + } + ] +} +``` + +### 11.2 模型类型列表接口 + +- **URL**: `/api/models_provider/provider/model_type_list` +- **方法**: GET +- **认证**: Token认证 + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "type": "llm", + "name": "大语言模型" + }, + { + "type": "embedding", + "name": "嵌入模型" + } + ] +} +``` + +### 11.3 模型列表接口 + +- **URL**: `/api/models_provider/provider/model_list` +- **方法**: GET +- **认证**: Token认证 + +#### 请求参数 + +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| provider_id | string | 是 | 提供商ID | +| model_type | string | 是 | 模型类型 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": "model123", + "name": "gpt-4", + "description": "OpenAI GPT-4模型" + } + ] +} +``` + +### 11.4 工作空间模型设置接口 + +- **URL**: `/api/models_provider/workspace/{workspace_id}/model` +- **方法**: GET, POST +- **认证**: Token认证 + +#### 请求参数 (POST) + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| provider_id | body | string | 是 | 提供商ID | +| model_id | body | string | 是 | 模型ID | +| api_key | body | string | 是 | API密钥 | +| base_url | body | string | 否 | 基础URL | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "id": "model_setting123", + "provider_id": "provider123", + "model_id": "model123", + "workspace_id": "workspace1" + } +} +``` + +## 12. 通用参数说明 + +### 12.1 分页参数 + +| 参数名 | 类型 | 描述 | +|--------|------|------| +| current_page | integer | 当前页码,从1开始 | +| page_size | integer | 每页大小,默认20 | + +### 12.2 时间参数 + +| 参数名 | 类型 | 描述 | +|--------|------|------| +| start_time | string | 开始时间,格式:YYYY-MM-DD | +| end_time | string | 结束时间,格式:YYYY-MM-DD | + +### 12.3 搜索参数 + +| 参数名 | 类型 | 描述 | +|--------|------|------| +| search_text | string | 搜索文本 | +| search_type | string | 搜索类型 | + +## 13. 响应格式 + +所有API接口的响应格式统一为: + +```json +{ + "code": 200, // 状态码,200表示成功 + "message": "success", // 消息,success表示成功 + "data": {} // 数据,根据接口不同返回不同结构 +} +``` + +### 13.1 错误响应 + +| 错误码 | 描述 | +|--------|------| +| 401 | 未授权,Token无效或过期 | +| 403 | 无权限访问该资源 | +| 404 | 资源不存在 | +| 500 | 服务器内部错误 | + +## 14. 注意事项 + +1. 所有接口都需要有效的Token认证 +2. Token有过期时间,过期后需要重新获取 +3. 登录失败次数过多时,需要输入验证码 +4. 对于大量数据的查询,建议使用分页接口 +5. 时间格式必须为 `YYYY-MM-DD` +6. 路径参数中的ID通常为UUID格式 +7. 部分接口需要特定的权限才能访问 +8. 上传文件时,需要使用multipart/form-data格式 +9. 对于流式输出的接口,响应会分多次返回 +10. 接口调用频率过高可能会被限流 diff --git a/对话日志API接口文档.md b/对话日志API接口文档.md new file mode 100644 index 000000000..9609acbe3 --- /dev/null +++ b/对话日志API接口文档.md @@ -0,0 +1,622 @@ +# 对话日志API接口文档 + +## 1. 概述 + +本文档详细描述了AI-RAG系统中用于获取和管理对话日志的API接口,包括应用级别的对话记录管理和用户级别的对话历史查询等功能。 + +## 2. 接口分类 + +### 2.1 应用级别对话日志接口 + +| 接口名称 | URL | 方法 | 功能描述 | +|---------|-----|------|----------| +| 对话记录列表 | `/api/application/{workspace_id}/{application_id}/chat-record/{chat_id}` | GET | 获取指定对话的记录列表 | +| 对话记录分页 | `/api/application/{workspace_id}/{application_id}/chat-record/{chat_id}/page/{current_page}/{page_size}` | GET | 分页获取对话记录 | +| 对话记录详情 | `/api/application/{workspace_id}/{application_id}/chat-record/{chat_id}/record/{chat_record_id}` | GET | 获取对话记录详情 | +| 添加到知识库 | `/api/application/{workspace_id}/{application_id}/chat-record/add-knowledge` | POST | 将对话内容添加到知识库 | +| 获取标注段落列表 | `/api/application/{workspace_id}/{application_id}/chat-record/{chat_id}/record/{chat_record_id}/improve` | GET | 获取对话记录的标注段落列表 | +| 标注段落 | `/api/application/{workspace_id}/{application_id}/chat-record/{chat_id}/record/{chat_record_id}/improve/{knowledge_id}/{document_id}` | PUT | 标注对话记录中的段落 | +| 删除标注 | `/api/application/{workspace_id}/{application_id}/chat-record/{chat_id}/record/{chat_record_id}/improve/{knowledge_id}/{document_id}/{paragraph_id}` | DELETE | 删除对话记录的标注 | + +### 2.2 用户级别对话历史接口 + +| 接口名称 | URL | 方法 | 功能描述 | +|---------|-----|------|----------| +| 历史对话列表 | `/api/chat/historical_conversation` | GET | 获取用户的历史对话列表 | +| 历史对话分页 | `/api/chat/historical_conversation/{current_page}/{page_size}` | GET | 分页获取历史对话 | +| 历史对话详情 | `/api/chat/historical_conversation/{chat_id}` | GET | 获取指定对话的详细信息 | +| 历史对话记录 | `/api/chat/historical_conversation_record/{chat_id}` | GET | 获取指定对话的记录列表 | +| 历史对话记录分页 | `/api/chat/historical_conversation_record/{chat_id}/{current_page}/{page_size}` | GET | 分页获取对话记录 | +| 对话记录详情 | `/api/chat/historical_conversation/{chat_id}/record/{chat_record_id}` | GET | 获取对话记录的详细信息 | + +## 3. 应用级别对话日志接口详细说明 + +### 3.1 对话记录列表接口 + +#### 接口信息 +- **URL**: `/api/application/{workspace_id}/{application_id}/chat-record/{chat_id}` +- **方法**: GET +- **认证**: Token认证 +- **权限**: 需要应用对话日志读取权限 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| chat_id | path | string | 是 | 对话ID | +| search_type | query | string | 否 | 搜索类型 | +| search_text | query | string | 否 | 搜索文本 | +| start_time | query | string | 否 | 开始时间 | +| end_time | query | string | 否 | 结束时间 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": "record123", + "chat_id": "chat123", + "problem_text": "如何使用MaxKB", + "answer_text": "MaxKB是一个智能客服平台...", + "create_time": "2025-01-01 10:00:00", + "tokens": 100, + "star": 1, + "trample": 0 + }, + // 更多记录... + ] +} +``` + +### 3.2 对话记录分页接口 + +#### 接口信息 +- **URL**: `/api/application/{workspace_id}/{application_id}/chat-record/{chat_id}/page/{current_page}/{page_size}` +- **方法**: GET +- **认证**: Token认证 +- **权限**: 需要应用对话日志读取权限 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| chat_id | path | string | 是 | 对话ID | +| current_page | path | integer | 是 | 当前页码 | +| page_size | path | integer | 是 | 每页大小 | +| search_type | query | string | 否 | 搜索类型 | +| search_text | query | string | 否 | 搜索文本 | +| start_time | query | string | 否 | 开始时间 | +| end_time | query | string | 否 | 结束时间 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "records": [ + { + "id": "record123", + "chat_id": "chat123", + "problem_text": "如何使用MaxKB", + "answer_text": "MaxKB是一个智能客服平台...", + "create_time": "2025-01-01 10:00:00", + "tokens": 100, + "star": 1, + "trample": 0 + }, + // 更多记录... + ], + "total": 100, + "size": 20, + "current": 1, + "pages": 5 + } +} +``` + +### 3.3 对话记录详情接口 + +#### 接口信息 +- **URL**: `/api/application/{workspace_id}/{application_id}/chat-record/{chat_id}/record/{chat_record_id}` +- **方法**: GET +- **认证**: Token认证 +- **权限**: 需要应用对话日志读取权限 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| chat_id | path | string | 是 | 对话ID | +| chat_record_id | path | string | 是 | 对话记录ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "id": "record123", + "chat_id": "chat123", + "problem_text": "如何使用MaxKB", + "answer_text": "MaxKB是一个智能客服平台...", + "create_time": "2025-01-01 10:00:00", + "tokens": 100, + "star": 1, + "trample": 0, + "execution_details": [ + // 执行详情... + ] + } +} +``` + +### 3.4 添加到知识库接口 + +#### 接口信息 +- **URL**: `/api/application/{workspace_id}/{application_id}/chat-record/add-knowledge` +- **方法**: POST +- **认证**: Token认证 +- **权限**: 需要应用对话日志添加知识权限 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| knowledge_id | body | string | 是 | 知识库ID | +| document_id | body | string | 是 | 文档ID | +| content | body | string | 是 | 要添加的内容 | +| title | body | string | 是 | 标题 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "status": "success", + "message": "添加成功" + } +} +``` + +### 3.5 获取标注段落列表接口 + +#### 接口信息 +- **URL**: `/api/application/{workspace_id}/{application_id}/chat-record/{chat_id}/record/{chat_record_id}/improve` +- **方法**: GET +- **认证**: Token认证 +- **权限**: 需要应用对话日志标注权限 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| chat_id | path | string | 是 | 对话ID | +| chat_record_id | path | string | 是 | 对话记录ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": "paragraph123", + "content": "MaxKB是一个智能客服平台...", + "start_index": 0, + "end_index": 100 + }, + // 更多段落... + ] +} +``` + +### 3.6 标注段落接口 + +#### 接口信息 +- **URL**: `/api/application/{workspace_id}/{application_id}/chat-record/{chat_id}/record/{chat_record_id}/improve/{knowledge_id}/{document_id}` +- **方法**: PUT +- **认证**: Token认证 +- **权限**: 需要应用对话日志标注权限 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| chat_id | path | string | 是 | 对话ID | +| chat_record_id | path | string | 是 | 对话记录ID | +| knowledge_id | path | string | 是 | 知识库ID | +| document_id | path | string | 是 | 文档ID | +| content | body | string | 是 | 标注内容 | +| start_index | body | integer | 是 | 开始索引 | +| end_index | body | integer | 是 | 结束索引 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "status": "success", + "message": "标注成功" + } +} +``` + +### 3.7 删除标注接口 + +#### 接口信息 +- **URL**: `/api/application/{workspace_id}/{application_id}/chat-record/{chat_id}/record/{chat_record_id}/improve/{knowledge_id}/{document_id}/{paragraph_id}` +- **方法**: DELETE +- **认证**: Token认证 +- **权限**: 需要应用对话日志标注权限 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| chat_id | path | string | 是 | 对话ID | +| chat_record_id | path | string | 是 | 对话记录ID | +| knowledge_id | path | string | 是 | 知识库ID | +| document_id | path | string | 是 | 文档ID | +| paragraph_id | path | string | 是 | 段落ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "status": "success", + "message": "删除成功" + } +} +``` + +## 4. 用户级别对话历史接口详细说明 + +### 4.1 历史对话列表接口 + +#### 接口信息 +- **URL**: `/api/chat/historical_conversation` +- **方法**: GET +- **认证**: Token认证 +- **权限**: 无需特殊权限(基于Token获取当前用户数据) + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": "chat123", + "abstract": "如何使用MaxKB", + "create_time": "2025-01-01 10:00:00", + "update_time": "2025-01-01 10:05:00" + }, + // 更多对话... + ] +} +``` + +### 4.2 历史对话分页接口 + +#### 接口信息 +- **URL**: `/api/chat/historical_conversation/{current_page}/{page_size}` +- **方法**: GET +- **认证**: Token认证 +- **权限**: 无需特殊权限(基于Token获取当前用户数据) + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| current_page | path | integer | 是 | 当前页码 | +| page_size | path | integer | 是 | 每页大小 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "records": [ + { + "id": "chat123", + "abstract": "如何使用MaxKB", + "create_time": "2025-01-01 10:00:00", + "update_time": "2025-01-01 10:05:00" + }, + // 更多对话... + ], + "total": 50, + "size": 20, + "current": 1, + "pages": 3 + } +} +``` + +### 4.3 历史对话详情接口 + +#### 接口信息 +- **URL**: `/api/chat/historical_conversation/{chat_id}` +- **方法**: GET +- **认证**: Token认证 +- **权限**: 无需特殊权限(基于Token获取当前用户数据) + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| chat_id | path | string | 是 | 对话ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "id": "chat123", + "abstract": "如何使用MaxKB", + "create_time": "2025-01-01 10:00:00", + "update_time": "2025-01-01 10:05:00" + } +} +``` + +### 4.4 历史对话记录接口 + +#### 接口信息 +- **URL**: `/api/chat/historical_conversation_record/{chat_id}` +- **方法**: GET +- **认证**: Token认证 +- **权限**: 无需特殊权限(基于Token获取当前用户数据) + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| chat_id | path | string | 是 | 对话ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "id": "record123", + "chat_id": "chat123", + "problem_text": "如何使用MaxKB", + "answer_text": "MaxKB是一个智能客服平台...", + "create_time": "2025-01-01 10:00:00", + "tokens": 100 + }, + // 更多记录... + ] +} +``` + +### 4.5 历史对话记录分页接口 + +#### 接口信息 +- **URL**: `/api/chat/historical_conversation_record/{chat_id}/{current_page}/{page_size}` +- **方法**: GET +- **认证**: Token认证 +- **权限**: 无需特殊权限(基于Token获取当前用户数据) + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| chat_id | path | string | 是 | 对话ID | +| current_page | path | integer | 是 | 当前页码 | +| page_size | path | integer | 是 | 每页大小 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "records": [ + { + "id": "record123", + "chat_id": "chat123", + "problem_text": "如何使用MaxKB", + "answer_text": "MaxKB是一个智能客服平台...", + "create_time": "2025-01-01 10:00:00", + "tokens": 100 + }, + // 更多记录... + ], + "total": 30, + "size": 10, + "current": 1, + "pages": 3 + } +} +``` + +### 4.6 对话记录详情接口 + +#### 接口信息 +- **URL**: `/api/chat/historical_conversation/{chat_id}/record/{chat_record_id}` +- **方法**: GET +- **认证**: Token认证 +- **权限**: 无需特殊权限(基于Token获取当前用户数据) + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| chat_id | path | string | 是 | 对话ID | +| chat_record_id | path | string | 是 | 对话记录ID | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "id": "record123", + "chat_id": "chat123", + "problem_text": "如何使用MaxKB", + "answer_text": "MaxKB是一个智能客服平台...", + "create_time": "2025-01-01 10:00:00", + "tokens": 100, + "execution_details": [ + // 执行详情... + ] + } +} +``` + +## 5. 权限说明 + +### 5.1 应用级别接口权限 + +| 接口类型 | 所需权限 | +|---------|----------| +| 对话记录查询 | 应用对话日志读取权限 | +| 添加到知识库 | 应用对话日志添加知识权限 | +| 段落标注 | 应用对话日志标注权限 | + +### 5.2 用户级别接口权限 + +用户级别接口基于Token认证,自动获取当前用户的对话数据,无需额外权限。 + +## 6. 示例请求 + +### 6.1 应用级别示例 + +```bash +# 获取对话记录列表 +curl -X GET "http://localhost:8080/api/application/workspace1/application1/chat-record/chat123?search_text=MaxKB" \ + -H "Authorization: Bearer your_token_here" + +# 分页获取对话记录 +curl -X GET "http://localhost:8080/api/application/workspace1/application1/chat-record/chat123/page/1/20" \ + -H "Authorization: Bearer your_token_here" + +# 添加到知识库 +curl -X POST "http://localhost:8080/api/application/workspace1/application1/chat-record/add-knowledge" \ + -H "Authorization: Bearer your_token_here" \ + -H "Content-Type: application/json" \ + -d '{"knowledge_id": "knowledge123", "document_id": "doc123", "content": "MaxKB使用指南", "title": "如何使用MaxKB"}' +``` + +### 6.2 用户级别示例 + +```bash +# 获取历史对话列表 +curl -X GET "http://localhost:8080/api/chat/historical_conversation" \ + -H "Authorization: Bearer your_token_here" + +# 分页获取历史对话 +curl -X GET "http://localhost:8080/api/chat/historical_conversation/1/20" \ + -H "Authorization: Bearer your_token_here" + +# 获取对话记录 +curl -X GET "http://localhost:8080/api/chat/historical_conversation_record/chat123" \ + -H "Authorization: Bearer your_token_here" +``` + +## 7. 错误响应 + +| 错误码 | 描述 | +|--------|------| +| 401 | 未授权,Token无效或过期 | +| 403 | 无权限访问该资源 | +| 404 | 对话或记录不存在 | +| 500 | 服务器内部错误 | + +## 8. 数据来源 + +- 对话记录数据:来自 `application_chat_record` 表 +- 对话历史数据:来自 `application_chat` 表 +- 用户数据:来自 `application_chat_user` 表 + +## 9. Token获取方式 + +### 9.1 用户登录获取Token + +#### 接口信息 +- **URL**: `/api/users/login` +- **方法**: POST +- **认证**: 无需认证 + +#### 请求参数 + +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| username | string | 是 | 用户名 | +| password | string | 是 | 密码 | +| captcha | string | 否 | 验证码(登录失败次数超过阈值时需要) | +| encryptedData | string | 否 | 加密数据 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." + } +} +``` + +### 9.2 应用访问令牌 + +系统还支持应用级别的访问令牌,通过`ApplicationAccessToken`模型生成,用于应用间的API调用。 + +### 9.3 Token使用方式 + +获取token后,在调用其他API接口时,需要在请求头中添加: + +``` +Authorization: Bearer your_token_here +``` + +## 10. 注意事项 + +1. 应用级别接口需要指定工作空间和应用ID,用户级别接口基于Token自动获取 +2. 所有接口都需要有效的Token认证 +3. 对于大量数据的查询,建议使用分页接口 +4. 标注功能需要先获取标注段落列表,然后进行标注操作 +5. 添加到知识库功能需要指定目标知识库和文档 +6. Token有过期时间,过期后需要重新获取 +7. 登录失败次数过多时,需要输入验证码 \ No newline at end of file diff --git a/监控统计数据API接口文档.md b/监控统计数据API接口文档.md new file mode 100644 index 000000000..d2b4f5107 --- /dev/null +++ b/监控统计数据API接口文档.md @@ -0,0 +1,242 @@ +# 监控统计数据API接口文档 + +## 1. 概述 + +本文档详细描述了AI-RAG系统中用于获取监控统计数据的API接口,包括对话统计趋势、Token使用统计和热门问题统计等功能。 + +## 2. 接口列表 + +| 接口名称 | URL | 方法 | 功能描述 | +|---------|-----|------|----------| +| 对话统计趋势 | `/api/application/{workspace_id}/{application_id}/stats` | GET | 获取应用的对话相关统计趋势数据 | +| Token使用统计 | `/api/application/{workspace_id}/{application_id}/stats/token-usage` | GET | 获取应用的Token使用统计数据 | +| 热门问题统计 | `/api/application/{workspace_id}/{application_id}/stats/top-questions` | GET | 获取应用的热门问题统计数据 | + +## 3. 接口详细说明 + +### 3.1 对话统计趋势接口 + +#### 接口信息 +- **URL**: `/api/application/{workspace_id}/{application_id}/stats` +- **方法**: GET +- **认证**: Token认证 +- **权限**: 需要应用概览读取权限 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| start_time | query | string | 是 | 开始时间,格式:YYYY-MM-DD | +| end_time | query | string | 是 | 结束时间,格式:YYYY-MM-DD | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "chat_record_count": 10, + "customer_added_count": 5, + "customer_num": 100, + "day": "2025-01-01", + "star_num": 8, + "tokens_num": 1000, + "trample_num": 2 + }, + // 更多日期数据... + ] +} +``` + +#### 字段说明 +- **chat_record_count**: 对话次数 +- **customer_added_count**: 新增用户数 +- **customer_num**: 用户总数 +- **day**: 日期 +- **star_num**: 点赞数 +- **tokens_num**: Tokens消耗 +- **trample_num**: 踩数 + +### 3.2 Token使用统计接口 + +#### 接口信息 +- **URL**: `/api/application/{workspace_id}/{application_id}/stats/token-usage` +- **方法**: GET +- **认证**: Token认证 +- **权限**: 需要应用概览读取权限 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| start_time | query | string | 是 | 开始时间,格式:YYYY-MM-DD | +| end_time | query | string | 是 | 结束时间,格式:YYYY-MM-DD | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "chat_user_id": "user123", + "nick_name": "用户1", + "tokens_num": 5000 + }, + // 更多用户数据... + ] +} +``` + +#### 字段说明 +- **chat_user_id**: 用户ID +- **nick_name**: 用户昵称 +- **tokens_num**: 该用户的Token消耗 + +### 3.3 热门问题统计接口 + +#### 接口信息 +- **URL**: `/api/application/{workspace_id}/{application_id}/stats/top-questions` +- **方法**: GET +- **认证**: Token认证 +- **权限**: 需要应用概览读取权限 + +#### 请求参数 + +| 参数名 | 位置 | 类型 | 必填 | 描述 | +|--------|------|------|------|------| +| workspace_id | path | string | 是 | 工作空间ID | +| application_id | path | string | 是 | 应用ID | +| start_time | query | string | 是 | 开始时间,格式:YYYY-MM-DD | +| end_time | query | string | 是 | 结束时间,格式:YYYY-MM-DD | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": [ + { + "problem_text": "如何使用MaxKB", + "count": 50 + }, + // 更多问题数据... + ] +} +``` + +#### 字段说明 +- **problem_text**: 问题文本 +- **count**: 该问题的出现次数 + +## 4. 权限说明 + +所有统计接口都需要以下权限之一: +- 应用概览读取权限 +- 工作空间管理角色权限 +- 具有应用权限的普通用户角色 +- 工作空间管理角色 + +## 5. 时间范围说明 + +- 开始时间和结束时间均为必填参数 +- 时间格式必须为 `YYYY-MM-DD` +- 系统会自动处理时间范围,包括开始日期的 00:00:00 到结束日期的 23:59:59 + +## 6. 示例请求 + +### 6.1 对话统计趋势示例 + +```bash +curl -X GET "http://localhost:8080/api/application/workspace1/application1/stats?start_time=2025-01-01&end_time=2025-01-31" \ + -H "Authorization: Bearer your_token_here" +``` + +### 6.2 Token使用统计示例 + +```bash +curl -X GET "http://localhost:8080/api/application/workspace1/application1/stats/token-usage?start_time=2025-01-01&end_time=2025-01-31" \ + -H "Authorization: Bearer your_token_here" +``` + +### 6.3 热门问题统计示例 + +```bash +curl -X GET "http://localhost:8080/api/application/workspace1/application1/stats/top-questions?start_time=2025-01-01&end_time=2025-01-31" \ + -H "Authorization: Bearer your_token_here" +``` + +## 7. 错误响应 + +| 错误码 | 描述 | +|--------|------| +| 401 | 未授权,Token无效或过期 | +| 403 | 无权限访问该资源 | +| 500 | 应用ID不存在 | +| 500 | 服务器内部错误 | + +## 8. 数据来源 + +- 对话统计数据:来自 `application_chat_record` 表 +- 用户统计数据:来自 `ApplicationChatUserStats` 表 +- Token使用数据:来自 `application_chat_record` 表中的 `tokens` 字段 +- 热门问题数据:来自 `application_chat_record` 表中的 `problem_text` 字段 + +## 9. Token获取方式 + +### 9.1 用户登录获取Token + +#### 接口信息 +- **URL**: `/api/users/login` +- **方法**: POST +- **认证**: 无需认证 + +#### 请求参数 + +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| username | string | 是 | 用户名 | +| password | string | 是 | 密码 | +| captcha | string | 否 | 验证码(登录失败次数超过阈值时需要) | +| encryptedData | string | 否 | 加密数据 | + +#### 响应数据 + +```json +{ + "code": 200, + "message": "success", + "data": { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." + } +} +``` + +### 9.2 应用访问令牌 + +系统还支持应用级别的访问令牌,通过`ApplicationAccessToken`模型生成,用于应用间的API调用。 + +### 9.3 Token使用方式 + +获取token后,在调用其他API接口时,需要在请求头中添加: + +``` +Authorization: Bearer your_token_here +``` + +## 10. 注意事项 + +1. 统计数据可能存在一定的延迟,因为数据收集和处理需要时间 +2. 对于较大的时间范围,响应时间可能会较长 +3. 建议合理设置时间范围,避免请求过大的数据集 +4. 所有接口都需要有效的Token认证 +5. Token有过期时间,过期后需要重新获取 +6. 登录失败次数过多时,需要输入验证码 \ No newline at end of file