import logging import google.generativeai as genai import os from pathlib import Path logger = logging.getLogger(__name__) class DomovoyAI: def __init__(self): api_key = os.environ.get("GOOGLE_API_KEY") if api_key: genai.configure(api_key=api_key) self.model = genai.GenerativeModel('gemini-1.5-flash') self.enabled = True else: self.enabled = False logger.warning("AI Service disabled: GOOGLE_API_KEY missing") # Загрузка базы знаний self.kb_path = Path(__file__).parent.parent / "data" / "knowledge_base.txt" self.knowledge_base = "" if self.kb_path.exists(): with open(self.kb_path, "r", encoding="utf-8") as f: self.knowledge_base = f.read() logger.info(f"Knowledge base loaded: {len(self.knowledge_base)} chars") async def answer_question(self, question: str, user_info: dict = None) -> str: if not self.enabled: return "Извините, мой ИИ-модуль временно отключен. Обратитесь к администратору." # Формируем контекст kb_context = f"\n\nЮРИДИЧЕСКАЯ БАЗА ЗНАНИЙ (ГИС ЖКХ):\n{self.knowledge_base}" if self.knowledge_base else "" prompt = f""" Ты - умный и вежливый ИИ-помощник жильцов дома Ленком 37 по имени 'Домовой'. Твоя задача: отвечать на вопросы жильцов, основываясь на правилах вежливости и ГАРДИНГЕ (Grounding) на факты. Контекст пользователя: {user_info or 'Анонимный жилец'} {kb_context} Вопрос: {question} ПРАВИЛА ОТВЕТА: 1. Отвечай кратко, по делу, с заботой о жильце. 2. Если вопрос касается юридических тем, тарифов или судов - используй данные из ЮРИДИЧЕСКОЙ БАЗЫ ЗНАНИЙ выше. 3. Если в базе знаний есть конкретные номера обращений ГИС ЖКХ (начинаются на 73-), упоминай их как доказательство. 4. Если ты не уверен или данных в базе нет - так и скажи, предложи обратиться к администратору или в чат соседей. 5. Не выдумывай факты, которых нет в базе! """ try: response = self.model.generate_content(prompt) return response.text.strip() except Exception as e: logger.error(f"AI Service error: {e}") return "Произошла ошибка при анализе юридической базы. Попробуйте позже." ai_service = DomovoyAI()