From a4e2a76d979b40fa67efeee2409e6b9a43e34bec Mon Sep 17 00:00:00 2001 From: wanjia Date: Mon, 9 Jun 2025 16:51:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=93=8D=E5=BA=94=E5=8F=82=E6=95=B0=E8=A7=84?= =?UTF-8?q?=E8=8C=83flhf=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/rlhf/views.py | 158 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 126 insertions(+), 32 deletions(-) diff --git a/apps/rlhf/views.py b/apps/rlhf/views.py index eb3166b..6a3db32 100644 --- a/apps/rlhf/views.py +++ b/apps/rlhf/views.py @@ -41,7 +41,11 @@ class ConversationViewSet(viewsets.ModelViewSet): conversation = self.get_object() messages = Message.objects.filter(conversation=conversation).order_by('timestamp') serializer = MessageSerializer(messages, many=True) - return Response(serializer.data) + return Response({ + 'code': 200, + 'message': '成功', + 'data': serializer.data + }) @action(detail=True, methods=['post']) def message(self, request, pk=None): @@ -49,7 +53,11 @@ class ConversationViewSet(viewsets.ModelViewSet): content = request.data.get('content') if not content: - return Response({'error': '消息内容不能为空'}, status=status.HTTP_400_BAD_REQUEST) + return Response({ + 'code': 400, + 'message': '消息内容不能为空', + 'data': None + }, status=status.HTTP_400_BAD_REQUEST) # 创建用户消息 user_message = Message.objects.create( @@ -79,7 +87,11 @@ class ConversationViewSet(viewsets.ModelViewSet): MessageSerializer(ai_message).data ] - return Response(messages) + return Response({ + 'code': 200, + 'message': '成功', + 'data': messages + }) @action(detail=True, methods=['post']) def submit(self, request, pk=None): @@ -88,7 +100,11 @@ class ConversationViewSet(viewsets.ModelViewSet): description = request.data.get('description', '') if conversation.is_submitted: - return Response({'error': '该对话已提交'}, status=status.HTTP_400_BAD_REQUEST) + return Response({ + 'code': 400, + 'message': '该对话已提交', + 'data': None + }, status=status.HTTP_400_BAD_REQUEST) # 更新对话为已提交状态 conversation.is_submitted = True @@ -115,8 +131,9 @@ class ConversationViewSet(viewsets.ModelViewSet): ) return Response({ + 'code': 200, 'message': '对话提交成功', - 'submission_id': submission.id + 'data': {'submission_id': submission.id} }) @action(detail=True, methods=['post']) @@ -124,7 +141,11 @@ class ConversationViewSet(viewsets.ModelViewSet): conversation = self.get_object() if not conversation.is_submitted: - return Response({'error': '该对话未提交,无需恢复'}, status=status.HTTP_400_BAD_REQUEST) + return Response({ + 'code': 400, + 'message': '该对话未提交,无需恢复', + 'data': None + }, status=status.HTTP_400_BAD_REQUEST) # 更新对话为未提交状态 conversation.is_submitted = False @@ -147,7 +168,11 @@ class ConversationViewSet(viewsets.ModelViewSet): target_id=str(conversation.id) ) - return Response({'message': '对话已恢复为未提交状态'}) + return Response({ + 'code': 200, + 'message': '对话已恢复为未提交状态', + 'data': None + }) def _generate_ai_response(self, user_message, conversation): """ @@ -221,13 +246,21 @@ class FeedbackViewSet(viewsets.ModelViewSet): feedback_value = request.data.get('feedback_value') if not message_id or not conversation_id: - return Response({'error': '消息ID和对话ID不能为空'}, status=status.HTTP_400_BAD_REQUEST) + return Response({ + 'code': 400, + 'message': '消息ID和对话ID不能为空', + 'data': None + }, status=status.HTTP_400_BAD_REQUEST) try: message = Message.objects.get(id=message_id) conversation = Conversation.objects.get(id=conversation_id) except (Message.DoesNotExist, Conversation.DoesNotExist): - return Response({'error': '消息或对话不存在'}, status=status.HTTP_404_NOT_FOUND) + return Response({ + 'code': 404, + 'message': '消息或对话不存在', + 'data': None + }, status=status.HTTP_404_NOT_FOUND) # 创建或更新反馈 feedback, created = Feedback.objects.update_or_create( @@ -244,7 +277,11 @@ class FeedbackViewSet(viewsets.ModelViewSet): # 更新用户的标注统计 self._update_annotation_stats(request.user.id, feedback_value) - return Response(FeedbackSerializer(feedback).data) + return Response({ + 'code': 200, + 'message': '反馈提交成功', + 'data': FeedbackSerializer(feedback).data + }) def _update_annotation_stats(self, user_id, feedback_value): """更新用户的标注统计信息""" @@ -308,14 +345,20 @@ class DetailedFeedbackViewSet(viewsets.ModelViewSet): if not message_id or not conversation_id or not feedback_type: return Response({ - 'error': '消息ID、对话ID和反馈类型不能为空' + 'code': 400, + 'message': '消息ID、对话ID和反馈类型不能为空', + 'data': None }, status=status.HTTP_400_BAD_REQUEST) try: message = Message.objects.get(id=message_id) conversation = Conversation.objects.get(id=conversation_id) except (Message.DoesNotExist, Conversation.DoesNotExist): - return Response({'error': '消息或对话不存在'}, status=status.HTTP_404_NOT_FOUND) + return Response({ + 'code': 404, + 'message': '消息或对话不存在', + 'data': None + }, status=status.HTTP_404_NOT_FOUND) # 将标签列表转换为JSON字符串 if isinstance(feedback_tags, list): @@ -351,7 +394,11 @@ class DetailedFeedbackViewSet(viewsets.ModelViewSet): # 更新用户的标注统计 self._update_annotation_stats(request.user.id, feedback_type) - return Response(DetailedFeedbackSerializer(detailed_feedback).data) + return Response({ + 'code': 200, + 'message': '详细反馈提交成功', + 'data': DetailedFeedbackSerializer(detailed_feedback).data + }) def _update_annotation_stats(self, user_id, feedback_type): """更新用户的标注统计信息""" @@ -407,7 +454,11 @@ class ConversationSubmissionViewSet(viewsets.ModelViewSet): @action(detail=True, methods=['post']) def review(self, request, pk=None): if request.user.role != 'admin': - return Response({'error': '只有管理员可以进行审核'}, status=status.HTTP_403_FORBIDDEN) + return Response({ + 'code': 403, + 'message': '只有管理员可以进行审核', + 'data': None + }, status=status.HTTP_403_FORBIDDEN) submission = self.get_object() status_value = request.data.get('status') @@ -415,10 +466,18 @@ class ConversationSubmissionViewSet(viewsets.ModelViewSet): reviewer_notes = request.data.get('reviewer_notes', '') if not status_value or status_value not in ['accepted', 'rejected']: - return Response({'error': '状态值无效'}, status=status.HTTP_400_BAD_REQUEST) + return Response({ + 'code': 400, + 'message': '状态值无效', + 'data': None + }, status=status.HTTP_400_BAD_REQUEST) if quality_score is not None and (quality_score < 1 or quality_score > 5): - return Response({'error': '质量分数必须在1-5之间'}, status=status.HTTP_400_BAD_REQUEST) + return Response({ + 'code': 400, + 'message': '质量分数必须在1-5之间', + 'data': None + }, status=status.HTTP_400_BAD_REQUEST) # 更新提交状态 submission.status = status_value @@ -441,8 +500,9 @@ class ConversationSubmissionViewSet(viewsets.ModelViewSet): ) return Response({ + 'code': 200, 'message': '审核完成', - 'submission': ConversationSubmissionSerializer(submission).data + 'data': ConversationSubmissionSerializer(submission).data }) @@ -464,13 +524,19 @@ class ConversationEvaluationViewSet(viewsets.ModelViewSet): if not conversation_id or not has_logical_issues or not needs_satisfied: return Response({ - 'error': '对话ID、逻辑问题和需求满足度不能为空' + 'code': 400, + 'message': '对话ID、逻辑问题和需求满足度不能为空', + 'data': None }, status=status.HTTP_400_BAD_REQUEST) try: conversation = Conversation.objects.get(id=conversation_id) except Conversation.DoesNotExist: - return Response({'error': '对话不存在'}, status=status.HTTP_404_NOT_FOUND) + return Response({ + 'code': 404, + 'message': '对话不存在', + 'data': None + }, status=status.HTTP_404_NOT_FOUND) # 创建或更新评估 evaluation, created = ConversationEvaluation.objects.update_or_create( @@ -497,7 +563,11 @@ class ConversationEvaluationViewSet(viewsets.ModelViewSet): } ) - return Response(ConversationEvaluationSerializer(evaluation).data) + return Response({ + 'code': 200, + 'message': '评估提交成功', + 'data': ConversationEvaluationSerializer(evaluation).data + }) class SystemConfigViewSet(viewsets.ModelViewSet): @@ -519,17 +589,33 @@ class SystemConfigViewSet(viewsets.ModelViewSet): # 获取当前模型 model_config = SystemConfig.objects.filter(config_key='current_model').first() if model_config: - return Response({'model': model_config.config_value}) - return Response({'model': '默认模型'}) + return Response({ + 'code': 200, + 'message': '成功', + 'data': {'model': model_config.config_value} + }) + return Response({ + 'code': 200, + 'message': '成功', + 'data': {'model': '默认模型'} + }) elif request.method == 'POST': # 设置当前模型 if request.user.role != 'admin': - return Response({'error': '只有管理员可以更改模型'}, status=status.HTTP_403_FORBIDDEN) + return Response({ + 'code': 403, + 'message': '只有管理员可以更改模型', + 'data': None + }, status=status.HTTP_403_FORBIDDEN) model_name = request.data.get('model') if not model_name: - return Response({'error': '模型名称不能为空'}, status=status.HTTP_400_BAD_REQUEST) + return Response({ + 'code': 400, + 'message': '模型名称不能为空', + 'data': None + }, status=status.HTTP_400_BAD_REQUEST) # 更新或创建配置 config, created = SystemConfig.objects.update_or_create( @@ -543,17 +629,25 @@ class SystemConfigViewSet(viewsets.ModelViewSet): } ) - return Response({'model': model_name}) + return Response({ + 'code': 200, + 'message': '模型设置成功', + 'data': {'model': model_name} + }) @action(detail=False, methods=['get']) def models(self, request): # 返回可用的模型列表 return Response({ - 'models': [ - {'id': 'model1', 'name': 'GPT-3.5'}, - {'id': 'model2', 'name': 'GPT-4'}, - {'id': 'model3', 'name': 'Claude'}, - {'id': 'model4', 'name': 'LLaMA'}, - {'id': 'model5', 'name': 'Qwen'} - ] + 'code': 200, + 'message': '成功', + 'data': { + 'models': [ + {'id': 'model1', 'name': 'GPT-3.5'}, + {'id': 'model2', 'name': 'GPT-4'}, + {'id': 'model3', 'name': 'Claude'}, + {'id': 'model4', 'name': 'LLaMA'}, + {'id': 'model5', 'name': 'Qwen'} + ] + } }) \ No newline at end of file