From afef3a9e1106e2de5152076763fef198a163c51d Mon Sep 17 00:00:00 2001 From: Fam Zheng Date: Wed, 29 Oct 2025 21:21:01 +0000 Subject: [PATCH] add ai-chat api --- api/products/views.py | 93 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/api/products/views.py b/api/products/views.py index 36dd991..7e4bf54 100644 --- a/api/products/views.py +++ b/api/products/views.py @@ -35,6 +35,7 @@ from .ip2region import * from .miniprogram import mplink from .sendmsg import admin_broadcast from .article import gen_article_css +from .aichat import AIChatService MANAGE_PY = os.path.join(settings.BASE_DIR, 'manage.py') @@ -1924,3 +1925,95 @@ class ScanDataLabelsView(BaseView): return JsonResponse({ 'items': ret, }) + + +class AIChatView(BaseView): + """AI聊天API视图 - 仅支持发送消息,临时会话模式""" + name = 'ai-chat' + auth_check = None + + def post(self, request): + """发送消息给AI并获取回复""" + try: + # 获取请求参数 + session_id = request.data.get('session_id') + message = request.data.get('message') + context = request.data.get('context', {}) + chat_type = request.data.get('chat_type', 'platform') + product_id = request.data.get('product_id') + + # 验证必需参数 + if not message: + return JsonResponse({ + 'error': 'message is required' + }, status=400) + + # 获取或创建会话 + session = self._get_or_create_session(session_id, request.tenant, product_id) + + # 确定聊天类型和产品ID + if chat_type == 'product' and product_id: + ai_chat_type = 'product' + ai_product_id = product_id + else: + ai_chat_type = 'platform' + ai_product_id = None + + # 创建AI服务实例 + ai_service = AIChatService( + chat_type=ai_chat_type, + product_id=ai_product_id + ) + + # 调用AI服务 + response = ai_service.chat(message) + + # 保存消息记录 + self._save_message(session, 'user', message) + self._save_message(session, 'assistant', response) + + return JsonResponse({ + 'session_id': session.session_id, + 'response': response, + 'chat_type': ai_chat_type, + 'product_id': ai_product_id + }) + + except Exception as e: + return JsonResponse({ + 'error': f'AI chat failed: {str(e)}' + }, status=500) + + + def _get_or_create_session(self, session_id, tenant, product_id=None): + """获取或创建聊天会话""" + if session_id: + # 尝试获取现有会话 + session = ChatSession.objects.filter( + session_id=session_id, + tenant=tenant + ).first() + if session: + return session + + # 创建新会话 + if not session_id: + session_id = str(uuid.uuid4()) + + session = ChatSession.objects.create( + session_id=session_id, + tenant=tenant, + product_id=product_id + ) + + return session + + def _save_message(self, session, role, content, message_type='text'): + """保存消息到数据库""" + ChatMessage.objects.create( + session=session, + role=role, + message_type=message_type, + text_content=content + ) +