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
« 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
11logger = logging.getLogger(__name__)
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', '')
23 if not query.strip():
24 return JsonResponse({'error': 'Query cannot be empty'}, status=400)
26 # 使用RAG服务生成回答
27 rag_response = rag_service.generate_response(query)
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}")
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)
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)
60 if not query.strip():
61 return JsonResponse({'error': 'Query cannot be empty'}, status=400)
63 # 使用搜索服务进行语义搜索
64 search_results = search_service.semantic_search(
65 query=query,
66 limit=limit,
67 similarity_threshold=threshold
68 )
70 response = {
71 'query': query,
72 'results': search_results,
73 'count': len(search_results),
74 'threshold': threshold
75 }
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)