58 lines
3.1 KiB
Python
58 lines
3.1 KiB
Python
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()
|