domovoy_bot/services/ai_service.py

58 lines
3.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()