| from openai import OpenAI | |
| from app.config import OPENAI_API_KEY | |
| class ChatEngine: | |
| def __init__(self): | |
| self.client = OpenAI(api_key=OPENAI_API_KEY) if OPENAI_API_KEY else None | |
| def answer(self, user_text: str, context: str = "") -> str: | |
| # fallback, если ключа нет | |
| if not self.client: | |
| return "⚠️ OPENAI_API_KEY не задан. (Пилотный режим) Ваш вопрос: " + user_text | |
| system = ( | |
| "Ты ассистент 2MOOD. Отвечай кратко и по делу. " | |
| "Если дан контекст из базы знаний — опирайся на него и добавляй ссылки на источники (имя файла). " | |
| "Если контекста нет — скажи, что в базе знаний не найдено подтверждение, и предложи уточнить." | |
| ) | |
| user = f"Вопрос: {user_text}\n\nКонтекст из базы знаний:\n{context or '(нет)'}" | |
| resp = self.client.chat.completions.create( | |
| model="gpt-4o-mini", | |
| messages=[ | |
| {"role": "system", "content": system}, | |
| {"role": "user", "content": user}, | |
| ], | |
| temperature=0.2, | |
| ) | |
| return resp.choices[0].message.content.strip() | |