Files
rag/docs/状态码功能更新说明.md
lacerate551 100d1a06eb init: RAG 知识库服务初始提交
- 后端 API(Flask + Gunicorn)
- RAG 引擎(混合检索 + 云端 Reranker + 引用溯源)
- 文档解析(MinerU + 多格式支持)
- Docker 生产部署配置
- 排除前端项目、敏感配置、模型文件
2026-06-04 17:35:27 +08:00

220 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 状态码功能更新说明
> **更新日期**: 2026-04-30
> **改动范围**: 长时间运行端口的响应格式增强
---
## 一、更新概述
为方便后端判断 RAG 服务处理状态,以下端口增加了统一的 `status_code` 字段:
| 端口 | 改动文件 |
|------|----------|
| `/documents/upload` | `api/document_routes.py` |
| `/documents/batch-upload` | `api/document_routes.py` |
| `/sync` | `api/sync_routes.py` |
| `/exam/generate` | `exam_pkg/api.py` |
| `/exam/grade` | `exam_pkg/api.py` |
---
## 二、状态码速查表
### 处理中 (10xx)
| 状态码 | 常量名 | 说明 |
|--------|--------|------|
| 1000 | PROCESSING | 通用处理中 |
| 1010 | SYNC_RUNNING | 同步进行中 |
| 1020 | EXAM_GENERATING | 出题生成中 |
| 1021 | EXAM_GRADING | 批阅进行中 |
### 成功 (20xx)
| 状态码 | 常量名 | 说明 |
|--------|--------|------|
| 2000 | SUCCESS | 通用成功 |
| 2002 | UPLOAD_SUCCESS | 文件上传成功 |
| 2003 | BATCH_UPLOAD_SUCCESS | 批量上传成功 |
| 2010 | SYNC_SUCCESS | 同步完成 |
| 2020 | EXAM_SUCCESS | 出题成功 |
| 2021 | GRADE_SUCCESS | 批阅完成 |
### 客户端错误 (40xx)
| 状态码 | 常量名 | 说明 |
|--------|--------|------|
| 4000 | BAD_REQUEST | 请求参数错误 |
| 4004 | NO_FILE | 没有上传文件 |
| 4005 | NO_FILE_SELECTED | 没有选择文件 |
| 4006 | NO_COLLECTION | 未指定向量库 |
| 4007 | UNSUPPORTED_FORMAT | 不支持的文件格式 |
| 4008 | FILE_TOO_LARGE | 文件过大 |
### 服务端错误 (50xx)
| 状态码 | 常量名 | 说明 |
|--------|--------|------|
| 5000 | INTERNAL_ERROR | 内部错误 |
| 5010 | SYNC_ERROR | 同步失败 |
| 5020 | EXAM_ERROR | 出题失败 |
| 5021 | GRADE_ERROR | 批阅失败 |
---
## 三、各端口改动对照
### 3.1 文档上传 `/documents/upload`
| 场景 | 旧响应 | 新响应 |
|------|--------|--------|
| 成功 | `{"success": true, ...}` | `{"status": "success", "status_code": 2002, ...}` |
| 无文件 | `{"error": "没有上传文件"}` | `{"status": "failed", "status_code": 4004, ...}` |
| 格式错误 | `{"error": "不支持的文件类型"}` | `{"status": "failed", "status_code": 4007, ...}` |
| 文件过大 | `{"error": "文件大小超过限制"}` | `{"status": "failed", "status_code": 4008, ...}` |
### 3.2 批量上传 `/documents/batch-upload`
| 场景 | 旧响应 | 新响应 |
|------|--------|--------|
| 成功 | `{"success": true, ...}` | `{"status": "success", "status_code": 2003, ...}` |
### 3.3 同步服务 `/sync`
| 场景 | 旧响应 | 新响应 |
|------|--------|--------|
| 成功 | `{"success": true, ...}` | `{"status": "success", "status_code": 2010, ...}` |
| 服务不可用 | `{"error": "同步服务未启用"}` | `{"status": "failed", "status_code": 5000, ...}` |
| 同步失败 | `{"error": "xxx"}` | `{"status": "failed", "status_code": 5010, ...}` |
### 3.4 出题 `/exam/generate`
| 场景 | 旧响应 | 新响应 |
|------|--------|--------|
| 成功 | `{"success": true, ...}` | `{"status": "success", "status_code": 2020, ...}` |
| 参数缺失 | `{"error": "缺少参数"}` | `{"status": "failed", "status_code": 4000, ...}` |
| 出题失败 | `{"error": "xxx"}` | `{"status": "failed", "status_code": 5020, ...}` |
### 3.5 批阅 `/exam/grade`
| 场景 | 旧响应 | 新响应 |
|------|--------|--------|
| 成功 | `{"success": true, ...}` | `{"status": "success", "status_code": 2021, ...}` |
| 批阅失败 | `{"error": "xxx"}` | `{"status": "failed", "status_code": 5021, ...}` |
---
## 四、响应格式示例
### 成功响应
```json
{
"status": "success",
"status_code": 2002,
"message": "文件上传成功",
"success": true,
"data": {
"file": {
"filename": "document.pdf",
"collection": "public_kb",
"path": "public_kb/document.pdf",
"size": 102400
}
}
}
```
### 错误响应
```json
{
"status": "failed",
"status_code": 4007,
"message": "不支持的文件格式: .exe支持: pdf, docx, doc, xlsx, txt",
"success": false,
"error": {
"error": "UNSUPPORTED_FORMAT",
"error_code": 4007,
"details": {}
}
}
```
---
## 五、后端对接代码示例
### Python 示例
```python
def handle_rag_response(response):
"""处理 RAG 服务响应"""
data = response.json()
status_code = data.get("status_code", 0)
# 判断处理状态
if 2000 <= status_code < 3000:
# 成功
return data.get("data", data)
elif 4000 <= status_code < 5000:
# 客户端错误
raise ClientError(data.get("message"), status_code)
elif 5000 <= status_code < 6000:
# 服务端错误
raise ServerError(data.get("message"), status_code)
# 兼容旧格式
if data.get("success"):
return data
raise Exception(data.get("error", "未知错误"))
```
### JavaScript 示例
```javascript
function handleRagResponse(data) {
const statusCode = data.status_code || 0;
if (statusCode >= 2000 && statusCode < 3000) {
// 成功
return data.data || data;
} else if (statusCode >= 4000 && statusCode < 5000) {
// 客户端错误
throw new ClientError(data.message, statusCode);
} else if (statusCode >= 5000 && statusCode < 6000) {
// 服务端错误
throw new ServerError(data.message, statusCode);
}
// 兼容旧格式
if (data.success) return data;
throw new Error(data.error || "未知错误");
}
```
---
## 六、向后兼容说明
所有响应保留了 `success` 字段:
- 成功时 `success: true`
- 失败时 `success: false`
旧代码仍可通过 `success` 字段判断,无需立即修改。
---
## 七、文件变更清单
| 文件 | 变更类型 |
|------|----------|
| `core/status_codes.py` | 新增 |
| `api/response_utils.py` | 新增 |
| `api/document_routes.py` | 修改 |
| `api/sync_routes.py` | 修改 |
| `exam_pkg/api.py` | 修改 |