import logging from django.conf import settings from datetime import datetime from apps.accounts.models import UserGoal from apps.gmail.models import GmailConversation, ConversationSummary from apps.chat.models import ChatHistory from apps.common.services.ai_service import AIService logger = logging.getLogger(__name__) def get_active_goal(user): """ 获取用户最新的活跃目标 Args: user: 用户对象 Returns: UserGoal: 用户目标对象或None """ return UserGoal.objects.filter(user=user, is_active=True).order_by('-updated_at').first() def get_conversation_summary(conversation_id): """ 获取对话摘要 Args: conversation_id: 对话ID Returns: str: 摘要内容或None """ try: # 先检查持久化存储的摘要 try: conversation = GmailConversation.objects.get(conversation_id=conversation_id) summary = ConversationSummary.objects.get(conversation=conversation) return summary.content except (GmailConversation.DoesNotExist, ConversationSummary.DoesNotExist): pass # 如果没有持久化的摘要,尝试生成简单摘要 chat_history = ChatHistory.objects.filter(conversation_id=conversation_id).order_by('-created_at')[:5] if not chat_history: return None # 生成简单摘要(最近几条消息) messages = [] for msg in chat_history: if len(messages) < 3: # 只取最新的3条 role = "用户" if msg.role == "user" else "达人" content = msg.content if len(content) > 100: content = content[:100] + "..." messages.append(f"{role}: {content}") if messages: return "最近对话: " + " | ".join(reversed(messages)) return None except Exception as e: logger.error(f"获取对话摘要失败: {str(e)}") return None def get_last_message(conversation_id): """ 获取对话中最后一条对方发送的消息 Args: conversation_id: 对话ID Returns: str: 最后一条消息内容或None """ try: # 获取对话中最后一条对方(达人)发送的消息 last_message = ChatHistory.objects.filter( conversation_id=conversation_id, role='assistant' # 达人的消息 ).order_by('-created_at').first() if last_message: return last_message.content return None except Exception as e: logger.error(f"获取最后一条消息失败: {str(e)}") return None def generate_recommended_reply(user, goal_description, conversation_summary, last_message): """ 根据用户目标、对话摘要和最后一条消息生成推荐话术 Args: user: 用户对象 goal_description: 用户目标描述 conversation_summary: 对话摘要 last_message: 达人最后发送的消息内容 Returns: tuple: (推荐话术内容, 错误信息) """ # 直接调用AIService生成回复 return AIService.generate_email_reply(goal_description, conversation_summary, last_message)