Explorar el Código

发布到143的第二个版本

wangxq hace 5 días
padre
commit
1759e64281

+ 65 - 1
api_usage_examples.md

@@ -6,7 +6,7 @@
 
 ### 1. 获取表列表
 - **路径**: `POST /api/v0/database/tables`
-- **功能**: 获取数据库中的表列表
+- **功能**: 获取数据库中的表列表,支持表名模糊搜索
 
 ### 2. 获取表DDL/文档
 - **路径**: `POST /api/v0/database/table/ddl`
@@ -16,6 +16,7 @@
 
 ### 请求示例
 
+#### 基础查询
 ```bash
 curl -X POST http://localhost:8084/api/v0/database/tables \
   -H "Content-Type: application/json" \
@@ -25,15 +26,28 @@ curl -X POST http://localhost:8084/api/v0/database/tables \
   }'
 ```
 
+#### 表名模糊搜索
+```bash
+curl -X POST http://localhost:8084/api/v0/database/tables \
+  -H "Content-Type: application/json" \
+  -d '{
+    "db_connection": "postgresql://postgres:postgres@192.168.67.1:5432/highway_db",
+    "schema": "public,ods",
+    "table_name_pattern": "ods_*"
+  }'
+```
+
 ### 参数说明
 
 | 参数 | 类型 | 必需 | 说明 |
 |------|------|------|------|
 | db_connection | string | ✅ | 完整的PostgreSQL连接字符串 |
 | schema | string | ❌ | 查询的schema,支持多个用逗号分隔,默认为public |
+| table_name_pattern | string | ❌ | 表名模糊搜索模式,支持通配符:`ods_*`、`*_dim`、`*fact*` |
 
 ### 响应示例
 
+#### 基础查询响应
 ```json
 {
   "success": true,
@@ -54,6 +68,28 @@ curl -X POST http://localhost:8084/api/v0/database/tables \
 }
 ```
 
+#### 模糊搜索响应
+```json
+{
+  "success": true,
+  "code": 200,
+  "message": "获取表列表成功",
+  "data": {
+    "tables": [
+      "ods.ods_user",
+      "ods.ods_order",
+      "ods.ods_product"
+    ],
+    "total": 3,
+    "schemas": ["ods"],
+    "table_name_pattern": "ods_*",
+    "db_connection_info": {
+      "database": "highway_db"
+    }
+  }
+}
+```
+
 ## 📄 API 2: 获取表DDL/文档
 
 ### 请求示例
@@ -147,6 +183,12 @@ curl -X POST http://localhost:8084/api/v0/database/table/ddl \
 
 ## 🚀 特性说明
 
+### 表名模糊搜索(新增功能)
+- 支持通配符模式:`ods_*`、`*_dim`、`*fact*`
+- 支持SQL LIKE语法:`ods_%`、`%_dim`
+- 数据库层面高效过滤,适用于大量表的场景
+- 自动转换通配符为SQL LIKE语法
+
 ### 智能注释生成
 - 当提供`business_context`时,系统会调用LLM生成智能注释
 - LLM会结合表结构、样例数据和业务上下文生成准确的中文注释
@@ -171,6 +213,7 @@ python test_table_inspector_api.py
 
 测试脚本包含:
 - 表列表API的各种参数组合测试
+- 表名模糊搜索功能测试
 - DDL/MD生成API的功能测试
 - 错误处理测试
 - 性能基准测试
@@ -181,6 +224,7 @@ python test_table_inspector_api.py
 2. **LLM调用**: 当提供`business_context`时会调用LLM,响应时间较长
 3. **权限要求**: 需要数据库的读取权限
 4. **超时设置**: DDL生成包含LLM调用,建议设置60秒以上超时
+5. **表名模糊搜索**: 支持 `*` 通配符和 `%` SQL语法,区分大小写
 
 ## 🔗 集成示例
 
@@ -196,6 +240,17 @@ const tables = await fetch('/api/v0/database/tables', {
   })
 }).then(r => r.json());
 
+// 获取表列表(使用模糊搜索)
+const filteredTables = await fetch('/api/v0/database/tables', {
+  method: 'POST',
+  headers: { 'Content-Type': 'application/json' },
+  body: JSON.stringify({
+    db_connection: 'postgresql://user:pass@host:5432/db',
+    schema: 'public,ods',
+    table_name_pattern: 'ods_*'
+  })
+}).then(r => r.json());
+
 // 获取表DDL
 const ddl = await fetch('/api/v0/database/table/ddl', {
   method: 'POST',
@@ -221,6 +276,15 @@ response = requests.post('http://localhost:8084/api/v0/database/tables',
   })
 tables = response.json()
 
+# 获取表列表(使用模糊搜索)
+response = requests.post('http://localhost:8084/api/v0/database/tables', 
+  json={
+    'db_connection': 'postgresql://user:pass@host:5432/db',
+    'schema': 'public,ods',
+    'table_name_pattern': 'ods_*'
+  })
+ods_tables = response.json()
+
 # 获取表DDL  
 response = requests.post('http://localhost:8084/api/v0/database/table/ddl',
   json={

+ 10 - 3
citu_app.py

@@ -3205,7 +3205,8 @@ def get_database_tables():
     请求体:
     {
         "db_connection": "postgresql://postgres:postgres@192.168.67.1:5432/highway_db",  // 可选,不传则使用默认配置
-        "schema": "public,ods"  // 可选,支持多个schema用逗号分隔,默认为public
+        "schema": "public,ods",  // 可选,支持多个schema用逗号分隔,默认为public
+        "table_name_pattern": "ods_*"  // 可选,表名模式匹配,支持通配符:ods_*、*_dim、*fact*、ods_%
     }
     
     响应:
@@ -3216,7 +3217,8 @@ def get_database_tables():
         "data": {
             "tables": ["public.table1", "public.table2", "ods.table3"],
             "total": 3,
-            "schemas": ["public", "ods"]
+            "schemas": ["public", "ods"],
+            "table_name_pattern": "ods_*"
         }
     }
     """
@@ -3236,13 +3238,14 @@ def get_database_tables():
         
         # 可选参数
         schema = req.get('schema', '')
+        table_name_pattern = req.get('table_name_pattern')
         
         # 创建表检查API实例
         table_inspector = TableInspectorAPI()
         
         # 使用asyncio运行异步方法
         async def get_tables():
-            return await table_inspector.get_tables_list(db_connection, schema)
+            return await table_inspector.get_tables_list(db_connection, schema, table_name_pattern)
         
         # 在新的事件循环中运行异步方法
         try:
@@ -3264,6 +3267,10 @@ def get_database_tables():
             }
         }
         
+        # 如果使用了表名模式,添加到响应中
+        if table_name_pattern:
+            response_data["table_name_pattern"] = table_name_pattern
+        
         return jsonify(success_response(
             response_text="获取表列表成功",
             data=response_data

+ 69 - 14
data_pipeline/api/table_inspector_api.py

@@ -18,7 +18,7 @@ class TableInspectorAPI:
         self.logger = logging.getLogger("TableInspectorAPI")
         self.db_inspector = None
     
-    async def get_tables_list(self, db_connection: str, schema: Optional[str] = None) -> List[str]:
+    async def get_tables_list(self, db_connection: str, schema: Optional[str] = None, table_name_pattern: Optional[str] = None) -> List[str]:
         """
         获取数据库表列表
         
@@ -26,6 +26,11 @@ class TableInspectorAPI:
             db_connection: 完整的PostgreSQL连接字符串
             schema: 可选的schema参数,支持多个schema用逗号分隔
                    如果为None或空字符串,则只返回public schema的表
+            table_name_pattern: 可选的表名模式匹配,支持通配符
+                               - ods_* : 以"ods_"开头的表
+                               - *_dim : 以"_dim"结尾的表
+                               - *fact* : 包含"fact"的表
+                               - ods_% : 直接使用SQL LIKE语法
         
         Returns:
             表名列表,格式为 schema.tablename
@@ -41,7 +46,7 @@ class TableInspectorAPI:
             target_schemas = self._parse_schemas(schema)
             
             # 查询表列表
-            tables = await self._query_tables(target_schemas)
+            tables = await self._query_tables(target_schemas, table_name_pattern)
             
             return tables
             
@@ -76,12 +81,17 @@ class TableInspectorAPI:
         
         return schemas
     
-    async def _query_tables(self, schemas: List[str]) -> List[str]:
+    async def _query_tables(self, schemas: List[str], table_name_pattern: Optional[str] = None) -> List[str]:
         """
         查询指定schema中的表
         
         Args:
             schemas: schema列表
+            table_name_pattern: 可选的表名模式匹配,支持通配符
+                               - ods_* : 以"ods_"开头的表
+                               - *_dim : 以"_dim"结尾的表
+                               - *fact* : 包含"fact"的表
+                               - ods_% : 直接使用SQL LIKE语法
         
         Returns:
             表名列表,格式为 schema.tablename
@@ -90,15 +100,29 @@ class TableInspectorAPI:
         
         async with self.db_inspector.connection_pool.acquire() as conn:
             for schema in schemas:
-                # 查询指定schema中的表
-                query = """
-                SELECT schemaname, tablename 
-                FROM pg_tables 
-                WHERE schemaname = $1
-                ORDER BY tablename
-                """
-                
-                rows = await conn.fetch(query, schema)
+                # 构建查询语句
+                if table_name_pattern:
+                    # 转换通配符模式为SQL LIKE语法
+                    sql_pattern = self._convert_wildcard_to_sql_like(table_name_pattern)
+                    
+                    query = """
+                    SELECT schemaname, tablename 
+                    FROM pg_tables 
+                    WHERE schemaname = $1 AND tablename LIKE $2
+                    ORDER BY tablename
+                    """
+                    
+                    rows = await conn.fetch(query, schema, sql_pattern)
+                else:
+                    # 没有表名模式,查询所有表
+                    query = """
+                    SELECT schemaname, tablename 
+                    FROM pg_tables 
+                    WHERE schemaname = $1
+                    ORDER BY tablename
+                    """
+                    
+                    rows = await conn.fetch(query, schema)
                 
                 # 格式化表名为 schema.tablename
                 for row in rows:
@@ -110,7 +134,8 @@ class TableInspectorAPI:
         # 按名称排序
         tables.sort()
         
-        self.logger.info(f"查询到 {len(tables)} 个表,schemas: {schemas}")
+        pattern_info = f",表名模式: {table_name_pattern}" if table_name_pattern else ""
+        self.logger.info(f"查询到 {len(tables)} 个表,schemas: {schemas}{pattern_info}")
         
         return tables
     
@@ -312,4 +337,34 @@ class TableInspectorAPI:
             'host': host,
             'port': int(port),
             'dbname': dbname
-        } 
+        }
+
+    def _convert_wildcard_to_sql_like(self, pattern: str) -> str:
+        """
+        将通配符模式转换为SQL LIKE语法
+        
+        Args:
+            pattern: 通配符模式
+                    - ods_* : 以"ods_"开头的表
+                    - *_dim : 以"_dim"结尾的表
+                    - *fact* : 包含"fact"的表
+                    - ods_% : 直接使用SQL LIKE语法(不转换)
+        
+        Returns:
+            SQL LIKE语法的模式字符串
+        """
+        if not pattern:
+            return "%"
+            
+        # 如果已经是SQL LIKE语法(包含%),直接返回
+        if "%" in pattern:
+            return pattern
+            
+        # 转换通配符*为%
+        sql_pattern = pattern.replace("*", "%")
+        
+        # 记录转换日志
+        if pattern != sql_pattern:
+            self.logger.debug(f"通配符模式转换: {pattern} -> {sql_pattern}")
+        
+        return sql_pattern 

+ 11 - 12
docs/data_pipeline_api_auto_workflow_guide.md

@@ -52,6 +52,7 @@
 #### 1.1 参数示例
 
 **参数样例1**:
+
 ```json
 {
     "task_name": "服务区初始化数据加载",
@@ -150,13 +151,15 @@
 
 **请求地址**: `http://localhost:8084/api/v0/database/tables`
 
-**参数**(都是可选参数):
+**参数**(都是可选参数):`db_connection / schema / table_name_pattern` 
+
 > 如果要查询的数据库没有在app_config.py中配置,或者不是查询业务数据的表,那么需要提供db_connection字符串。
 
 ```json
 {
     "db_connection": "postgresql://postgres:postgres@192.168.67.1:5432/highway_db",
-    "schema": "public,ods,dw"
+    "schema": "public,ods,dw",
+    "table_name_pattern": "*_area*"
 }
 ```
 
@@ -173,21 +176,17 @@
         },
         "response": "获取表列表成功",
         "schemas": [
-            "public"
+            "public",
+            "ods",
+            "dw"
         ],
+        "table_name_pattern": "*_area*",
         "tables": [
-            "public.bss_branch",
-            "public.bss_business_day_data",
-            "public.bss_car_day_count",
-            "public.bss_company",
-            "public.bss_section_route",
             "public.bss_section_route_area_link",
             "public.bss_service_area",
-            "public.bss_service_area_mapper",
-            "public.highway_metadata",
-            "public.qa_feedback"
+            "public.bss_service_area_mapper"
         ],
-        "total": 10
+        "total": 3
     },
     "message": "操作成功",
     "success": true

+ 3 - 13
docs/data_pipeline_api_manual_step_guide.md

@@ -34,7 +34,7 @@
 | 方法 | 端点 | 描述 |
 |------|------|------|
 | `POST` | `/api/v0/data_pipeline/tasks` | 创建训练任务 |
-| `POST` | `/api/v0/database/tables` | 查询数据库表列表 |
+| `POST` | `/api/v0/database/tables` | 查询业务数据库表列表 |
 | `POST` | `/api/v0/data_pipeline/tasks/{task_id}/table-list` | 在线提交表名列表 |
 | `POST` | `/api/v0/data_pipeline/tasks/{task_id}/upload-table-list` | 上传表清单文件 |
 
@@ -141,16 +141,6 @@ POST:  `http://localhost:8084/api/v0/data_pipeline/tasks/task_20250703_000820/ex
 - **前置条件**: 任务已创建,表清单文件已上传
 - **后续步骤**: 为 `qa_generation` 提供基础数据
 
-#### 查看执行状态
-
-GET `/api/v0/data_pipeline/tasks/{task_id}/status`
-
-
-
-```json
-
-```
-
 ### 步骤2: Question-SQL对生成 (`qa_generation`)
 
 #### 功能描述
@@ -358,9 +348,9 @@ POST `http://localhost:8084/api/v0/data_pipeline/tasks/task_20250703_000820/exec
 
 GET `http://localhost:8084/api/v0/data_pipeline/tasks/task_20250703_000820`
 
-开始执行:"step_status": { "ddl_generation": "running",
+开始执行:"step_status": { "ddl_generation": "running", ...
 
-结束执行:"step_status": { "ddl_generation": "completed",
+结束执行:"step_status": { "ddl_generation": "completed", ...
 
 **成功执行返回结果**
 

+ 91 - 8
docs/database_table_api_guide.md

@@ -6,15 +6,15 @@
 
 | API端点 | 功能 | 必需参数 | 可选参数 |
 |---------|------|----------|----------|
-| `POST /api/v0/database/tables` | 获取数据库表列表 | 无 | `db_connection`, `schema` |
+| `POST /api/v0/database/tables` | 获取数据库表列表(支持模糊搜索) | 无 | `db_connection`, `schema`, `table_name_pattern` |
 | `POST /api/v0/database/table/ddl` | 获取表DDL和结构分析 | `table` | `db_connection`, `business_context`, `type` |
 
 ## 1. 获取数据库表列表
 
 ### 接口信息
 - **URL**: `POST /api/v0/database/tables`
-- **功能**: 获取指定数据库中的表列表
-- **特点**: 纯数据库查询,不涉及AI功能
+- **功能**: 获取指定数据库中的表列表,支持表名模糊搜索
+- **特点**: 纯数据库查询,不涉及AI功能,支持高效的数据库层面过滤
 
 ### 请求参数
 
@@ -22,6 +22,35 @@
 |--------|------|------|------|------|
 | `db_connection` | string | 否 | PostgreSQL连接字符串<br/>不传则使用默认配置 | `"postgresql://user:pass@host:port/db"` |
 | `schema` | string | 否 | Schema名称,支持逗号分隔多个<br/>默认为"public" | `"public,ods,dw"` |
+| `table_name_pattern` | string | 否 | 表名模糊搜索模式<br/>支持通配符和SQL LIKE语法 | `"ods_*"`, `"*_dim"`, `"*fact*"` |
+
+### 表名模糊搜索模式说明
+
+| 模式 | 说明 | 匹配示例 |
+|------|------|----------|
+| `ods_*` | 以"ods_"开头的表 | `ods_user`, `ods_order`, `ods_product` |
+| `*_dim` | 以"_dim"结尾的表 | `user_dim`, `time_dim`, `product_dim` |
+| `*fact*` | 包含"fact"的表 | `sales_fact`, `order_fact_table` |
+| `ods_%` | 直接使用SQL LIKE语法 | 与 `ods_*` 相同 |
+
+### 模糊搜索使用场景
+
+1. **数据仓库分层查询**:快速找到特定层级的表
+   - `ods_*` - 查找所有ODS层表
+   - `dwd_*` - 查找所有DWD层表  
+   - `dws_*` - 查找所有DWS层表
+
+2. **维度表查询**:找到所有维度表
+   - `*_dim` - 查找所有维度表
+   - `dim_*` - 查找以dim开头的维度表
+
+3. **事实表查询**:找到所有事实表
+   - `*fact*` - 查找包含fact的表
+   - `fact_*` - 查找以fact开头的表
+
+4. **业务主题查询**:按业务主题过滤表
+   - `user_*` - 查找用户相关的表
+   - `order_*` - 查找订单相关的表
 
 ### 请求示例
 
@@ -48,8 +77,26 @@
 {}
 ```
 
+#### 使用表名模糊搜索
+```json
+{
+    "schema": "public,ods",
+    "table_name_pattern": "ods_*"
+}
+```
+
+#### 复杂搜索示例
+```json
+{
+    "db_connection": "postgresql://postgres:postgres@192.168.67.1:5432/bank_db",
+    "schema": "public,ods,dw",
+    "table_name_pattern": "*_dim"
+}
+```
+
 ### 响应示例
 
+#### 基础查询响应
 ```json
 {
     "code": 200,
@@ -78,6 +125,31 @@
 }
 ```
 
+#### 模糊搜索响应示例
+```json
+{
+    "code": 200,
+    "data": {
+        "db_connection_info": {
+            "database": "highway_db"
+        },
+        "response": "获取表列表成功",
+        "schemas": [
+            "ods"
+        ],
+        "tables": [
+            "ods.ods_user",
+            "ods.ods_order",
+            "ods.ods_product"
+        ],
+        "total": 3,
+        "table_name_pattern": "ods_*"
+    },
+    "message": "操作成功",
+    "success": true
+}
+```
+
 ## 2. 获取表DDL和结构分析
 
 ### 接口信息
@@ -527,8 +599,9 @@
 ### 性能考虑
 
 1. **表列表查询**: 速度较快,适合频繁调用
-2. **DDL分析**: 涉及AI处理,响应时间较长(5-30秒)
-3. **大表处理**: 系统会自动进行智能采样,避免性能问题
+2. **表名模糊搜索**: 在数据库层面进行过滤,性能优异,适合大量表的数据库
+3. **DDL分析**: 涉及AI处理,响应时间较长(5-30秒)
+4. **大表处理**: 系统会自动进行智能采样,避免性能问题
 
 ### 安全考虑
 
@@ -542,6 +615,7 @@
 2. **外部调用**: 明确传入 `db_connection` 参数
 3. **文档生成**: 传入详细的 `business_context` 以获得更好的AI注释
 4. **批量处理**: 先调用表列表API获取所有表,再逐个分析
+5. **模糊搜索**: 对于大量表的数据库,使用 `table_name_pattern` 进行精准过滤
 
 ## 示例代码
 
@@ -551,9 +625,11 @@
 import requests
 
 # 获取表列表
-def get_tables(schema="public"):
+def get_tables(schema="public", table_name_pattern=None):
     url = "http://localhost:8084/api/v0/database/tables"
     data = {"schema": schema}
+    if table_name_pattern:
+        data["table_name_pattern"] = table_name_pattern
     response = requests.post(url, json=data)
     return response.json()
 
@@ -572,6 +648,7 @@ def get_table_ddl(table, business_context=None, output_type="ddl"):
 
 # 使用示例
 tables = get_tables("public")
+ods_tables = get_tables("public,ods", "ods_*")  # 模糊搜索ODS表
 ddl = get_table_ddl("public.bank_churners", "银行客户信息", "md")
 ```
 
@@ -579,11 +656,16 @@ ddl = get_table_ddl("public.bank_churners", "银行客户信息", "md")
 
 ```javascript
 // 获取表列表
-async function getTables(schema = 'public') {
+async function getTables(schema = 'public', tableNamePattern = null) {
+    const data = { schema };
+    if (tableNamePattern) {
+        data.table_name_pattern = tableNamePattern;
+    }
+    
     const response = await fetch('/api/v0/database/tables', {
         method: 'POST',
         headers: { 'Content-Type': 'application/json' },
-        body: JSON.stringify({ schema })
+        body: JSON.stringify(data)
     });
     return await response.json();
 }
@@ -609,6 +691,7 @@ async function getTableDDL(table, businessContext = null, type = 'ddl') {
 - **v1.0** (2025-07-02): 初始版本,支持基础的表查询和DDL生成
 - **v1.1** (2025-07-02): 新增AI智能注释功能,支持枚举字段识别
 - **v1.2** (2025-07-02): `db_connection` 参数改为可选,支持使用默认配置
+- **v1.3** (2025-07-03): 新增表名模糊搜索功能,支持通配符和SQL LIKE语法
 
 ---
 

+ 397 - 0
docs/training_data_webui_design.md

@@ -0,0 +1,397 @@
+# 训练数据管理 WebUI 设计文档
+
+## 概述
+
+本文档描述训练数据管理系统的Web用户界面设计方案,旨在为用户提供简洁易用的训练数据集创建、执行和管理功能。整个系统围绕四个核心步骤展开:DDL/MD生成、Question-SQL生成、SQL验证和训练数据加载。
+
+## 系统设计原则
+
+### UI设计原则
+- **简洁优先**:界面元素精简,减少用户认知负担
+- **流程引导**:清晰的步骤指示和进度反馈
+- **状态可视**:实时显示任务执行状态和结果
+- **操作便捷**:支持快速创建和一键执行
+
+### 技术原则
+- **API驱动**:所有操作基于REST API实现
+- **异步处理**:长时间任务采用轮询方式获取状态
+- **错误友好**:清晰的错误提示和恢复指导
+
+## 页面架构设计
+
+### 整体布局
+```
+┌─────────────────────────────────────────┐
+│                导航栏                    │
+├─────────────────────────────────────────┤
+│                                         │
+│              主要内容区                  │
+│                                         │
+└─────────────────────────────────────────┘
+```
+
+### 页面结构
+- **主页面**:任务创建和列表管理
+- **任务详情页**:执行控制和状态监控
+- **文件管理页**:查看和下载生成文件
+- **日志查看页**:执行日志和错误诊断
+
+## 核心页面设计
+
+### 1. 主页面 - 任务管理
+
+#### 功能概述
+- 创建新的训练数据任务
+- 查看历史任务列表
+- 任务状态一览和快速操作
+
+#### 页面布局设计
+
+```mermaid
+graph TD
+    A[页面标题: 训练数据管理] --> B[创建任务区域]
+    B --> C[任务列表区域]
+    
+    B --> B1[任务名称输入框]
+    B --> B2[数据库连接配置]
+    B --> B3[业务上下文输入]
+    B --> B4[创建任务按钮]
+    
+    C --> C1[搜索和过滤]
+    C --> C2[任务列表表格]
+    C --> C3[批量操作按钮 - 管理员]
+    
+    C2 --> C2a[任务ID]
+    C2 --> C2b[任务名称]
+    C2 --> C2c[状态]
+    C2 --> C2d[创建时间]
+    C2 --> C2e[操作按钮]
+```
+
+#### 控件详细设计
+
+**创建任务表单**
+- **任务名称**:单行文本输入框,必填,默认"训练数据任务_[时间戳]"
+- **数据库连接**:单行文本输入框,必填,占位符显示连接串格式
+- **业务上下文**:多行文本输入框,必填,描述业务场景用于LLM理解
+- **创建按钮**:主要按钮,触发任务创建API
+
+**任务列表表格**
+- **任务ID**:链接,点击进入任务详情页
+- **任务名称**:普通文本
+- **状态标签**:
+  - 待处理 (pending) - 灰色
+  - 执行中 (in_progress) - 蓝色
+  - 已完成 (completed) - 绿色
+  - 失败 (failed) - 红色
+- **创建时间**:格式化显示
+- **操作**:
+  - 查看详情(按钮)
+  - 删除(按钮,管理员)
+
+#### API集成点
+- `POST /api/v0/data_pipeline/tasks` - 创建任务
+- `GET /api/v0/data_pipeline/tasks` - 获取任务列表
+- `DELETE /api/v0/data_pipeline/tasks` - 删除任务(管理员)
+
+### 2. 任务详情页 - 执行控制
+
+#### 功能概述
+- 提供表名列表(在线输入或文件上传)
+- 选择执行模式(完整/分步)
+- 监控任务执行状态
+- 管理生成的文件
+
+#### 页面布局设计
+
+```mermaid
+graph TD
+    A[返回列表 + 任务标题] --> B[任务信息卡片]
+    A --> C[表名配置区域]
+    A --> D[执行控制区域]
+    A --> E[状态监控区域]
+    A --> F[快速导航]
+    
+    C --> C1[表名输入方式选择]
+    C --> C2[在线输入文本域]
+    C --> C3[文件上传组件]
+    C --> C4[表名预览]
+    
+    D --> D1[执行模式选择]
+    D --> D2[开始执行按钮]
+    D --> D3[步骤执行按钮组]
+    
+    E --> E1[整体进度条]
+    E --> E2[步骤状态卡片]
+    E --> E3[当前步骤详情]
+    
+    F --> F1[查看文件按钮]
+    F --> F2[查看日志按钮]
+```
+
+#### 控件详细设计
+
+**任务信息卡片**
+- 任务ID、名称、创建时间
+- 数据库连接信息
+- 业务上下文描述
+
+**表名配置区域**
+- **方式选择**:单选按钮组(在线输入/文件上传)
+- **在线输入**:多行文本域,支持逗号分隔的表名
+- **文件上传**:拖拽上传组件,支持.txt文件
+- **表名预览**:只读列表,显示解析后的表名
+
+**执行控制区域**
+- **模式选择**:单选按钮组
+  - 完整执行:一次性执行四个步骤
+  - 分步执行:手动控制每个步骤
+- **执行按钮**:
+  - 完整模式:单个"开始执行"按钮
+  - 分步模式:四个步骤按钮(根据依赖关系启用/禁用)
+
+**状态监控区域**
+- **整体进度条**:显示总体完成百分比
+- **步骤卡片**:四个卡片,每个显示:
+  - 步骤名称和描述
+  - 状态图标和文字
+  - 执行时间
+  - 错误信息(如有)
+
+#### API集成点
+- `POST /api/v0/data_pipeline/tasks/{task_id}/table-list` - 提交表名
+- `POST /api/v0/data_pipeline/tasks/{task_id}/upload-table-list` - 上传表名文件
+- `POST /api/v0/data_pipeline/tasks/{task_id}/execute` - 执行任务
+- `GET /api/v0/data_pipeline/tasks/{task_id}` - 获取任务状态(轮询)
+
+### 3. 文件管理页 - 结果查看
+
+#### 功能概述
+- 查看任务生成的所有文件
+- 下载特定文件
+- 上传修改后的文件(管理员)
+
+#### 页面布局设计
+
+```mermaid
+graph TD
+    A[文件管理标题] --> B[文件概览]
+    A --> C[文件列表]
+    A --> D[上传区域 - 管理员]
+    
+    B --> B1[总文件数]
+    B --> B2[总大小]
+    B --> B3[目录状态]
+    
+    C --> C1[文件表格]
+    C1 --> C1a[文件名]
+    C1 --> C1b[类型]
+    C1 --> C1c[大小]
+    C1 --> C1d[修改时间]
+    C1 --> C1e[操作]
+    
+    D --> D1[拖拽上传组件]
+    D --> D2[覆盖模式选择]
+```
+
+#### 控件详细设计
+
+**文件列表表格**
+- **文件名**:按类型分组显示,支持搜索
+- **文件类型**:图标+标签显示(DDL/MD/JSON/LOG等)
+- **文件大小**:人性化格式显示
+- **修改时间**:相对时间+绝对时间
+- **操作**:下载按钮
+
+**文件分类显示**
+- DDL文件:建表语句文件
+- MD文档:表结构说明文档
+- JSON数据:问答对训练数据
+- 日志文件:执行日志和验证报告
+
+#### API集成点
+- `GET /api/v0/data_pipeline/tasks/{task_id}/files` - 获取文件列表
+- `GET /api/v0/data_pipeline/tasks/{task_id}/files/{file_name}` - 下载文件
+- `POST /api/v0/data_pipeline/tasks/{task_id}/files` - 上传文件(管理员)
+
+### 4. 日志查看页 - 执行监控
+
+#### 功能概述
+- 实时查看任务执行日志
+- 按日志级别过滤
+- 错误诊断和排查
+
+#### 页面布局设计
+
+```mermaid
+graph TD
+    A[日志查看标题] --> B[过滤控制]
+    A --> C[日志显示区域]
+    A --> D[底部操作]
+    
+    B --> B1[日志级别选择]
+    B --> B2[时间范围选择]
+    B --> B3[关键词搜索]
+    B --> B4[刷新按钮]
+    
+    C --> C1[日志列表]
+    C1 --> C1a[时间戳]
+    C1 --> C1b[级别标签]
+    C1 --> C1c[日志内容]
+    
+    D --> D1[导出日志按钮]
+    D --> D2[清空显示按钮]
+```
+
+#### 控件详细设计
+
+**过滤控制栏**
+- **日志级别**:多选复选框(INFO/WARNING/ERROR)
+- **时间范围**:快捷选择按钮(最近1小时/今天/全部)
+- **关键词搜索**:实时搜索输入框
+- **自动刷新**:开关按钮,控制是否自动轮询
+
+**日志显示区域**
+- **虚拟滚动**:支持大量日志的高性能显示
+- **级别标识**:不同颜色的标签
+- **时间格式**:显示相对时间,hover显示绝对时间
+- **内容格式**:支持换行和长文本折叠
+
+#### API集成点
+- `GET /api/v0/data_pipeline/tasks/{task_id}/logs` - 获取日志(支持分页和过滤)
+
+## 用户操作流程设计
+
+### 流程1:快速创建训练数据(推荐)
+
+```mermaid
+flowchart TD
+    A[打开主页面] --> B[填写任务信息]
+    B --> C[点击创建任务]
+    C --> D[进入任务详情页]
+    D --> E[选择在线输入表名]
+    E --> F[输入表名列表]
+    F --> G[选择完整执行模式]
+    G --> H[点击开始执行]
+    H --> I[等待执行完成]
+    I --> J[查看生成文件]
+    
+    style A fill:#e1f5fe
+    style J fill:#c8e6c9
+```
+
+### 流程2:分步控制执行(高级用户)
+
+```mermaid
+flowchart TD
+    A[创建任务并配置表名] --> B[选择分步执行模式]
+    B --> C[执行DDL生成]
+    C --> D[查看DDL文件]
+    D --> E{结果满意?}
+    E -->|是| F[执行QA生成]
+    E -->|否| G[重新执行DDL生成]
+    G --> D
+    F --> H[查看QA文件]
+    H --> I{结果满意?}
+    I -->|是| J[执行SQL验证]
+    I -->|否| K[重新执行QA生成]
+    K --> H
+    J --> L[执行训练加载]
+    L --> M[完成]
+    
+    style A fill:#e1f5fe
+    style M fill:#c8e6c9
+```
+
+## 响应式设计考虑
+
+### 桌面端(推荐)
+- 最小宽度:1200px
+- 多列布局,充分利用屏幕空间
+- 表格支持水平滚动
+
+### 平板端
+- 适配768px-1199px宽度
+- 自适应列布局
+- 表格优化显示
+
+### 手机端(基础支持)
+- 单列布局
+- 卡片式展示替代表格
+- 简化操作流程
+
+## 状态管理设计
+
+### 页面状态
+- **任务创建状态**:表单验证、提交状态
+- **执行状态**:各步骤的执行状态和进度
+- **文件状态**:文件列表、上传状态
+- **日志状态**:过滤条件、自动刷新状态
+
+### 数据轮询策略
+- **任务状态**:每5秒轮询一次
+- **日志数据**:自动刷新时每3秒轮询
+- **文件列表**:步骤完成后自动刷新
+
+## 错误处理设计
+
+### 用户友好的错误提示
+- **网络错误**:显示重试按钮
+- **权限错误**:显示联系管理员提示
+- **数据错误**:显示具体错误信息和修正建议
+- **系统错误**:显示错误ID便于技术支持
+
+### 错误恢复机制
+- **自动重试**:网络临时故障自动重试
+- **手动重试**:提供重试按钮
+- **状态回滚**:失败后恢复到上一个稳定状态
+
+## 性能优化建议
+
+### 前端优化
+- **懒加载**:文件列表和日志按需加载
+- **虚拟滚动**:处理大量日志数据
+- **缓存策略**:任务列表和状态信息适度缓存
+- **防抖处理**:搜索和过滤操作防抖
+
+### 用户体验优化
+- **加载状态**:所有异步操作显示加载指示器
+- **进度反馈**:长时间操作显示进度条
+- **操作确认**:危险操作需要用户确认
+- **快捷键支持**:常用操作支持键盘快捷键
+
+## 技术实现建议
+
+### 前端技术栈
+- **框架**:React/Vue.js 等现代前端框架
+- **状态管理**:Redux/Vuex 管理复杂状态
+- **UI组件库**:Ant Design/Element UI 快速开发
+- **HTTP客户端**:Axios 处理API调用
+
+### 关键技术点
+- **WebSocket**:考虑用于实时状态推送(可选)
+- **文件上传**:支持拖拽和进度显示
+- **表格组件**:支持排序、过滤、分页
+- **代码高亮**:SQL和JSON内容语法高亮
+
+## 管理员功能说明
+
+以下功能仅限管理员使用,需在相应UI元素上添加"管理员"标识:
+
+### 主页面管理功能
+- **批量删除任务**:选择多个任务进行批量删除
+- **任务状态管理**:强制修改任务状态(高级)
+
+### 文件管理功能
+- **文件上传**:上传修改后的训练数据文件
+- **文件删除**:删除指定文件(危险操作)
+
+### 系统管理功能
+- **清理旧任务**:自动清理30天前的任务目录
+- **系统状态监控**:查看系统资源使用情况
+
+## 总结
+
+本设计文档提供了训练数据管理WebUI的完整设计方案,重点关注用户体验和API集成。通过简洁的界面设计、清晰的操作流程和完善的错误处理,用户可以轻松完成训练数据集的创建、执行和管理工作。
+
+设计遵循现代Web应用的最佳实践,支持响应式布局和渐进式功能增强,能够满足不同用户群体的使用需求。 

+ 397 - 0
docs/训练数据管理WebUI设计文档.md

@@ -0,0 +1,397 @@
+# 训练数据管理 WebUI 设计文档
+
+## 概述
+
+本文档描述训练数据管理系统的Web用户界面设计方案,旨在为用户提供简洁易用的训练数据集创建、执行和管理功能。整个系统围绕四个核心步骤展开:DDL/MD生成、Question-SQL生成、SQL验证和训练数据加载。
+
+## 系统设计原则
+
+### UI设计原则
+- **简洁优先**:界面元素精简,减少用户认知负担
+- **流程引导**:清晰的步骤指示和进度反馈
+- **状态可视**:实时显示任务执行状态和结果
+- **操作便捷**:支持快速创建和一键执行
+
+### 技术原则
+- **API驱动**:所有操作基于REST API实现
+- **异步处理**:长时间任务采用轮询方式获取状态
+- **错误友好**:清晰的错误提示和恢复指导
+
+## 页面架构设计
+
+### 整体布局
+```
+┌─────────────────────────────────────────┐
+│                导航栏                    │
+├─────────────────────────────────────────┤
+│                                         │
+│              主要内容区                  │
+│                                         │
+└─────────────────────────────────────────┘
+```
+
+### 页面结构
+- **主页面**:任务创建和列表管理
+- **任务详情页**:执行控制和状态监控
+- **文件管理页**:查看和下载生成文件
+- **日志查看页**:执行日志和错误诊断
+
+## 核心页面设计
+
+### 1. 主页面 - 任务管理
+
+#### 功能概述
+- 创建新的训练数据任务
+- 查看历史任务列表
+- 任务状态一览和快速操作
+
+#### 页面布局设计
+
+```mermaid
+graph TD
+    A[页面标题: 训练数据管理] --> B[创建任务区域]
+    B --> C[任务列表区域]
+    
+    B --> B1[任务名称输入框]
+    B --> B2[数据库连接配置]
+    B --> B3[业务上下文输入]
+    B --> B4[创建任务按钮]
+    
+    C --> C1[搜索和过滤]
+    C --> C2[任务列表表格]
+    C --> C3[批量操作按钮 - 管理员]
+    
+    C2 --> C2a[任务ID]
+    C2 --> C2b[任务名称]
+    C2 --> C2c[状态]
+    C2 --> C2d[创建时间]
+    C2 --> C2e[操作按钮]
+```
+
+#### 控件详细设计
+
+**创建任务表单**
+- **任务名称**:单行文本输入框,必填,默认"训练数据任务_[时间戳]"
+- **数据库连接**:单行文本输入框,必填,占位符显示连接串格式
+- **业务上下文**:多行文本输入框,必填,描述业务场景用于LLM理解
+- **创建按钮**:主要按钮,触发任务创建API
+
+**任务列表表格**
+- **任务ID**:链接,点击进入任务详情页
+- **任务名称**:普通文本
+- **状态标签**:
+  - 待处理 (pending) - 灰色
+  - 执行中 (in_progress) - 蓝色
+  - 已完成 (completed) - 绿色
+  - 失败 (failed) - 红色
+- **创建时间**:格式化显示
+- **操作**:
+  - 查看详情(按钮)
+  - 删除(按钮,管理员)
+
+#### API集成点
+- `POST /api/v0/data_pipeline/tasks` - 创建任务
+- `GET /api/v0/data_pipeline/tasks` - 获取任务列表
+- `DELETE /api/v0/data_pipeline/tasks` - 删除任务(管理员)
+
+### 2. 任务详情页 - 执行控制
+
+#### 功能概述
+- 提供表名列表(在线输入或文件上传)
+- 选择执行模式(完整/分步)
+- 监控任务执行状态
+- 管理生成的文件
+
+#### 页面布局设计
+
+```mermaid
+graph TD
+    A[返回列表 + 任务标题] --> B[任务信息卡片]
+    A --> C[表名配置区域]
+    A --> D[执行控制区域]
+    A --> E[状态监控区域]
+    A --> F[快速导航]
+    
+    C --> C1[表名输入方式选择]
+    C --> C2[在线输入文本域]
+    C --> C3[文件上传组件]
+    C --> C4[表名预览]
+    
+    D --> D1[执行模式选择]
+    D --> D2[开始执行按钮]
+    D --> D3[步骤执行按钮组]
+    
+    E --> E1[整体进度条]
+    E --> E2[步骤状态卡片]
+    E --> E3[当前步骤详情]
+    
+    F --> F1[查看文件按钮]
+    F --> F2[查看日志按钮]
+```
+
+#### 控件详细设计
+
+**任务信息卡片**
+- 任务ID、名称、创建时间
+- 数据库连接信息
+- 业务上下文描述
+
+**表名配置区域**
+- **方式选择**:单选按钮组(在线输入/文件上传)
+- **在线输入**:多行文本域,支持逗号分隔的表名
+- **文件上传**:拖拽上传组件,支持.txt文件
+- **表名预览**:只读列表,显示解析后的表名
+
+**执行控制区域**
+- **模式选择**:单选按钮组
+  - 完整执行:一次性执行四个步骤
+  - 分步执行:手动控制每个步骤
+- **执行按钮**:
+  - 完整模式:单个"开始执行"按钮
+  - 分步模式:四个步骤按钮(根据依赖关系启用/禁用)
+
+**状态监控区域**
+- **整体进度条**:显示总体完成百分比
+- **步骤卡片**:四个卡片,每个显示:
+  - 步骤名称和描述
+  - 状态图标和文字
+  - 执行时间
+  - 错误信息(如有)
+
+#### API集成点
+- `POST /api/v0/data_pipeline/tasks/{task_id}/table-list` - 提交表名
+- `POST /api/v0/data_pipeline/tasks/{task_id}/upload-table-list` - 上传表名文件
+- `POST /api/v0/data_pipeline/tasks/{task_id}/execute` - 执行任务
+- `GET /api/v0/data_pipeline/tasks/{task_id}` - 获取任务状态(轮询)
+
+### 3. 文件管理页 - 结果查看
+
+#### 功能概述
+- 查看任务生成的所有文件
+- 下载特定文件
+- 上传修改后的文件(管理员)
+
+#### 页面布局设计
+
+```mermaid
+graph TD
+    A[文件管理标题] --> B[文件概览]
+    A --> C[文件列表]
+    A --> D[上传区域 - 管理员]
+    
+    B --> B1[总文件数]
+    B --> B2[总大小]
+    B --> B3[目录状态]
+    
+    C --> C1[文件表格]
+    C1 --> C1a[文件名]
+    C1 --> C1b[类型]
+    C1 --> C1c[大小]
+    C1 --> C1d[修改时间]
+    C1 --> C1e[操作]
+    
+    D --> D1[拖拽上传组件]
+    D --> D2[覆盖模式选择]
+```
+
+#### 控件详细设计
+
+**文件列表表格**
+- **文件名**:按类型分组显示,支持搜索
+- **文件类型**:图标+标签显示(DDL/MD/JSON/LOG等)
+- **文件大小**:人性化格式显示
+- **修改时间**:相对时间+绝对时间
+- **操作**:下载按钮
+
+**文件分类显示**
+- DDL文件:建表语句文件
+- MD文档:表结构说明文档
+- JSON数据:问答对训练数据
+- 日志文件:执行日志和验证报告
+
+#### API集成点
+- `GET /api/v0/data_pipeline/tasks/{task_id}/files` - 获取文件列表
+- `GET /api/v0/data_pipeline/tasks/{task_id}/files/{file_name}` - 下载文件
+- `POST /api/v0/data_pipeline/tasks/{task_id}/files` - 上传文件(管理员)
+
+### 4. 日志查看页 - 执行监控
+
+#### 功能概述
+- 实时查看任务执行日志
+- 按日志级别过滤
+- 错误诊断和排查
+
+#### 页面布局设计
+
+```mermaid
+graph TD
+    A[日志查看标题] --> B[过滤控制]
+    A --> C[日志显示区域]
+    A --> D[底部操作]
+    
+    B --> B1[日志级别选择]
+    B --> B2[时间范围选择]
+    B --> B3[关键词搜索]
+    B --> B4[刷新按钮]
+    
+    C --> C1[日志列表]
+    C1 --> C1a[时间戳]
+    C1 --> C1b[级别标签]
+    C1 --> C1c[日志内容]
+    
+    D --> D1[导出日志按钮]
+    D --> D2[清空显示按钮]
+```
+
+#### 控件详细设计
+
+**过滤控制栏**
+- **日志级别**:多选复选框(INFO/WARNING/ERROR)
+- **时间范围**:快捷选择按钮(最近1小时/今天/全部)
+- **关键词搜索**:实时搜索输入框
+- **自动刷新**:开关按钮,控制是否自动轮询
+
+**日志显示区域**
+- **虚拟滚动**:支持大量日志的高性能显示
+- **级别标识**:不同颜色的标签
+- **时间格式**:显示相对时间,hover显示绝对时间
+- **内容格式**:支持换行和长文本折叠
+
+#### API集成点
+- `GET /api/v0/data_pipeline/tasks/{task_id}/logs` - 获取日志(支持分页和过滤)
+
+## 用户操作流程设计
+
+### 流程1:快速创建训练数据(推荐)
+
+```mermaid
+flowchart TD
+    A[打开主页面] --> B[填写任务信息]
+    B --> C[点击创建任务]
+    C --> D[进入任务详情页]
+    D --> E[选择在线输入表名]
+    E --> F[输入表名列表]
+    F --> G[选择完整执行模式]
+    G --> H[点击开始执行]
+    H --> I[等待执行完成]
+    I --> J[查看生成文件]
+    
+    style A fill:#e1f5fe
+    style J fill:#c8e6c9
+```
+
+### 流程2:分步控制执行(高级用户)
+
+```mermaid
+flowchart TD
+    A[创建任务并配置表名] --> B[选择分步执行模式]
+    B --> C[执行DDL生成]
+    C --> D[查看DDL文件]
+    D --> E{结果满意?}
+    E -->|是| F[执行QA生成]
+    E -->|否| G[重新执行DDL生成]
+    G --> D
+    F --> H[查看QA文件]
+    H --> I{结果满意?}
+    I -->|是| J[执行SQL验证]
+    I -->|否| K[重新执行QA生成]
+    K --> H
+    J --> L[执行训练加载]
+    L --> M[完成]
+    
+    style A fill:#e1f5fe
+    style M fill:#c8e6c9
+```
+
+## 响应式设计考虑
+
+### 桌面端(推荐)
+- 最小宽度:1200px
+- 多列布局,充分利用屏幕空间
+- 表格支持水平滚动
+
+### 平板端
+- 适配768px-1199px宽度
+- 自适应列布局
+- 表格优化显示
+
+### 手机端(基础支持)
+- 单列布局
+- 卡片式展示替代表格
+- 简化操作流程
+
+## 状态管理设计
+
+### 页面状态
+- **任务创建状态**:表单验证、提交状态
+- **执行状态**:各步骤的执行状态和进度
+- **文件状态**:文件列表、上传状态
+- **日志状态**:过滤条件、自动刷新状态
+
+### 数据轮询策略
+- **任务状态**:每5秒轮询一次
+- **日志数据**:自动刷新时每3秒轮询
+- **文件列表**:步骤完成后自动刷新
+
+## 错误处理设计
+
+### 用户友好的错误提示
+- **网络错误**:显示重试按钮
+- **权限错误**:显示联系管理员提示
+- **数据错误**:显示具体错误信息和修正建议
+- **系统错误**:显示错误ID便于技术支持
+
+### 错误恢复机制
+- **自动重试**:网络临时故障自动重试
+- **手动重试**:提供重试按钮
+- **状态回滚**:失败后恢复到上一个稳定状态
+
+## 性能优化建议
+
+### 前端优化
+- **懒加载**:文件列表和日志按需加载
+- **虚拟滚动**:处理大量日志数据
+- **缓存策略**:任务列表和状态信息适度缓存
+- **防抖处理**:搜索和过滤操作防抖
+
+### 用户体验优化
+- **加载状态**:所有异步操作显示加载指示器
+- **进度反馈**:长时间操作显示进度条
+- **操作确认**:危险操作需要用户确认
+- **快捷键支持**:常用操作支持键盘快捷键
+
+## 技术实现建议
+
+### 前端技术栈
+- **框架**:React/Vue.js 等现代前端框架
+- **状态管理**:Redux/Vuex 管理复杂状态
+- **UI组件库**:Ant Design/Element UI 快速开发
+- **HTTP客户端**:Axios 处理API调用
+
+### 关键技术点
+- **WebSocket**:考虑用于实时状态推送(可选)
+- **文件上传**:支持拖拽和进度显示
+- **表格组件**:支持排序、过滤、分页
+- **代码高亮**:SQL和JSON内容语法高亮
+
+## 管理员功能说明
+
+以下功能仅限管理员使用,需在相应UI元素上添加"管理员"标识:
+
+### 主页面管理功能
+- **批量删除任务**:选择多个任务进行批量删除
+- **任务状态管理**:强制修改任务状态(高级)
+
+### 文件管理功能
+- **文件上传**:上传修改后的训练数据文件
+- **文件删除**:删除指定文件(危险操作)
+
+### 系统管理功能
+- **清理旧任务**:自动清理30天前的任务目录
+- **系统状态监控**:查看系统资源使用情况
+
+## 总结
+
+本设计文档提供了训练数据管理WebUI的完整设计方案,重点关注用户体验和API集成。通过简洁的界面设计、清晰的操作流程和完善的错误处理,用户可以轻松完成训练数据集的创建、执行和管理工作。
+
+设计遵循现代Web应用的最佳实践,支持响应式布局和渐进式功能增强,能够满足不同用户群体的使用需求。 

+ 15 - 1
list.txt

@@ -132,4 +132,18 @@ wrapt==1.17.2
 wsproto==1.2.0
 yarl==1.20.0
 zipp==3.21.0
-zstandard==0.23.0
+zstandard==0.23.0
+attrs==25.3.0
+backoff==2.2.1
+bcrypt==4.3.0
+bidict==0.23.1
+blinker==1.9.0
+build==1.2.2.post1
+cachetools==5.5.2
+certifi==2025.4.26
+chainlit==2.5.5
+charset-normalizer==3.4.2
+chevron==0.14.0
+chroma-hnswlib==0.7.6
+chromadb==0.6.3
+click==8.1.8