ソースを参照

修复了qa_feedback反馈API迁移后被简化的问题.

wangxq 1 ヶ月 前
コミット
69478355a5
1 ファイル変更77 行追加16 行削除
  1. 77 16
      unified_api.py

+ 77 - 16
unified_api.py

@@ -1054,7 +1054,8 @@ def qa_feedback_update(feedback_id):
         
         if not update_data:
             return jsonify(bad_request_response(
-                response_text="没有提供有效的更新字段"
+                response_text="没有提供有效的更新字段",
+                missing_params=allowed_fields
             )), 400
         
         manager = get_qa_feedback_manager()
@@ -1081,17 +1082,23 @@ def qa_feedback_update(feedback_id):
 
 @app.route('/api/v0/qa_feedback/add_to_training', methods=['POST'])
 def qa_feedback_add_to_training():
-    """将反馈记录添加到训练数据集API"""
+    """
+    将反馈记录添加到训练数据集API
+    支持混合批量处理:正向反馈加入SQL训练集,负向反馈加入error_sql训练集
+    """
     try:
         req = request.get_json(force=True)
         feedback_ids = req.get('feedback_ids', [])
         
         if not feedback_ids or not isinstance(feedback_ids, list):
             return jsonify(bad_request_response(
-                response_text="缺少有效的反馈ID列表"
+                response_text="缺少有效的反馈ID列表",
+                missing_params=["feedback_ids"]
             )), 400
         
         manager = get_qa_feedback_manager()
+        
+        # 获取反馈记录
         records = manager.get_feedback_by_ids(feedback_ids)
         
         if not records:
@@ -1099,42 +1106,68 @@ def qa_feedback_add_to_training():
                 response_text="未找到任何有效的反馈记录"
             )), 404
         
-        positive_count = 0
-        negative_count = 0
-        successfully_trained_ids = []
+        # 分别处理正向和负向反馈
+        positive_count = 0  # 正向训练计数
+        negative_count = 0  # 负向训练计数
+        already_trained_count = 0  # 已训练计数
+        error_count = 0  # 错误计数
+        
+        successfully_trained_ids = []  # 成功训练的ID列表
         
         for record in records:
             try:
+                # 检查是否已经在训练数据中
                 if record['is_in_training_data']:
+                    already_trained_count += 1
                     continue
                 
                 if record['is_thumb_up']:
+                    # 正向反馈 - 加入标准SQL训练集
                     training_id = vn.train(
                         question=record['question'], 
                         sql=record['sql']
                     )
                     positive_count += 1
+                    logger.info(f"正向训练成功 - ID: {record['id']}, TrainingID: {training_id}")
                 else:
+                    # 负向反馈 - 加入错误SQL训练集
                     training_id = vn.train_error_sql(
                         question=record['question'], 
                         sql=record['sql']
                     )
                     negative_count += 1
+                    logger.info(f"负向训练成功 - ID: {record['id']}, TrainingID: {training_id}")
                 
                 successfully_trained_ids.append(record['id'])
                 
             except Exception as e:
                 logger.error(f"训练失败 - 反馈ID: {record['id']}, 错误: {e}")
+                error_count += 1
         
+        # 更新训练状态
         if successfully_trained_ids:
-            manager.mark_training_status(successfully_trained_ids, True)
+            updated_count = manager.mark_training_status(successfully_trained_ids, True)
+            logger.info(f"批量更新训练状态完成,影响 {updated_count} 条记录")
+        
+        # 构建响应
+        total_processed = positive_count + negative_count + already_trained_count + error_count
         
         return jsonify(success_response(
             response_text=f"训练数据添加完成,成功处理 {positive_count + negative_count} 条记录",
             data={
-                "positive_trained": positive_count,
-                "negative_trained": negative_count,
-                "successfully_trained_ids": successfully_trained_ids
+                "summary": {
+                    "total_requested": len(feedback_ids),
+                    "total_processed": total_processed,
+                    "positive_trained": positive_count,
+                    "negative_trained": negative_count,
+                    "already_trained": already_trained_count,
+                    "errors": error_count
+                },
+                "successfully_trained_ids": successfully_trained_ids,
+                "training_details": {
+                    "sql_training_count": positive_count,
+                    "error_sql_training_count": negative_count
+                }
             }
         ))
         
@@ -1146,7 +1179,10 @@ def qa_feedback_add_to_training():
 
 @app.route('/api/v0/qa_feedback/add', methods=['POST'])
 def qa_feedback_add():
-    """添加反馈记录API"""
+    """
+    添加反馈记录API
+    用于前端直接创建反馈记录
+    """
     try:
         req = request.get_json(force=True)
         question = req.get('question')
@@ -1154,9 +1190,23 @@ def qa_feedback_add():
         is_thumb_up = req.get('is_thumb_up')
         user_id = req.get('user_id', 'guest')
         
-        if not question or not sql or is_thumb_up is None:
+        # 参数验证
+        if not question:
             return jsonify(bad_request_response(
-                response_text="缺少必需参数"
+                response_text="缺少必需参数:question",
+                missing_params=["question"]
+            )), 400
+        
+        if not sql:
+            return jsonify(bad_request_response(
+                response_text="缺少必需参数:sql",
+                missing_params=["sql"]
+            )), 400
+        
+        if is_thumb_up is None:
+            return jsonify(bad_request_response(
+                response_text="缺少必需参数:is_thumb_up",
+                missing_params=["is_thumb_up"]
             )), 400
         
         manager = get_qa_feedback_manager()
@@ -1169,7 +1219,9 @@ def qa_feedback_add():
         
         return jsonify(success_response(
             response_text="反馈记录创建成功",
-            data={"feedback_id": feedback_id}
+            data={
+                "feedback_id": feedback_id
+            }
         ))
         
     except Exception as e:
@@ -1180,13 +1232,19 @@ def qa_feedback_add():
 
 @app.route('/api/v0/qa_feedback/stats', methods=['GET'])
 def qa_feedback_stats():
-    """反馈统计API"""
+    """
+    反馈统计API
+    返回反馈数据的统计信息
+    """
     try:
         manager = get_qa_feedback_manager()
         
+        # 查询各种统计数据
         all_records, total_count = manager.query_feedback(page=1, page_size=1)
         positive_records, positive_count = manager.query_feedback(page=1, page_size=1, is_thumb_up=True)
         negative_records, negative_count = manager.query_feedback(page=1, page_size=1, is_thumb_up=False)
+        trained_records, trained_count = manager.query_feedback(page=1, page_size=1, is_in_training_data=True)
+        untrained_records, untrained_count = manager.query_feedback(page=1, page_size=1, is_in_training_data=False)
         
         return jsonify(success_response(
             response_text="统计信息获取成功",
@@ -1194,7 +1252,10 @@ def qa_feedback_stats():
                 "total_feedback": total_count,
                 "positive_feedback": positive_count,
                 "negative_feedback": negative_count,
-                "positive_rate": round(positive_count / max(total_count, 1) * 100, 2)
+                "trained_feedback": trained_count,
+                "untrained_feedback": untrained_count,
+                "positive_rate": round(positive_count / max(total_count, 1) * 100, 2),
+                "training_rate": round(trained_count / max(total_count, 1) * 100, 2)
             }
         ))