Coverage for ai_integration/views.py: 100%

46 statements  

« prev     ^ index     » next       coverage.py v7.9.2, created at 2025-07-05 02:45 +0800

1from django.shortcuts import render 

2from django.http import JsonResponse 

3from django.views.decorators.http import require_http_methods 

4from django.views.decorators.csrf import csrf_exempt 

5import json 

6import logging 

7from .services.rag_service import rag_service 

8from .services.search_service import search_service 

9from .models import ChatSession, QueryLog 

10 

11logger = logging.getLogger(__name__) 

12 

13 

14@csrf_exempt 

15@require_http_methods(["POST"]) 

16def chat_endpoint(request): 

17 """AI聊天接口 - 使用RAG生成智能回答""" 

18 try: 

19 data = json.loads(request.body) 

20 query = data.get('query', '') 

21 session_id = data.get('session_id', '') 

22 

23 if not query.strip(): 

24 return JsonResponse({'error': 'Query cannot be empty'}, status=400) 

25 

26 # 使用RAG服务生成回答 

27 rag_response = rag_service.generate_response(query) 

28 

29 # 记录查询日志 

30 if session_id: 

31 try: 

32 session = ChatSession.objects.get(session_id=session_id) 

33 QueryLog.objects.create( 

34 session=session, 

35 query_text=query, 

36 response_text=rag_response['response'], 

37 query_type=rag_response['metadata']['query_type'], 

38 confidence=rag_response['metadata']['confidence'], 

39 processing_time=rag_response['metadata']['processing_time'] 

40 ) 

41 except ChatSession.DoesNotExist: 

42 logger.warning(f"Session not found: {session_id}") 

43 

44 return JsonResponse(rag_response) 

45 except Exception as e: 

46 logger.error(f"Chat endpoint error: {e}") 

47 return JsonResponse({'error': str(e)}, status=500) 

48 

49 

50@csrf_exempt 

51@require_http_methods(["POST"]) 

52def semantic_search(request): 

53 """语义搜索接口 - 直接搜索而不生成AI回答""" 

54 try: 

55 data = json.loads(request.body) 

56 query = data.get('query', '') 

57 limit = data.get('limit', 10) 

58 threshold = data.get('threshold', 0.6) 

59 

60 if not query.strip(): 

61 return JsonResponse({'error': 'Query cannot be empty'}, status=400) 

62 

63 # 使用搜索服务进行语义搜索 

64 search_results = search_service.semantic_search( 

65 query=query, 

66 limit=limit, 

67 similarity_threshold=threshold 

68 ) 

69 

70 response = { 

71 'query': query, 

72 'results': search_results, 

73 'count': len(search_results), 

74 'threshold': threshold 

75 } 

76 

77 return JsonResponse(response) 

78 except Exception as e: 

79 logger.error(f"Search endpoint error: {e}") 

80 return JsonResponse({'error': str(e)}, status=500)