Добавлена передача текущего времени в запросе ИИ.

This commit is contained in:
Kirill Kirilenko 2026-02-13 16:02:19 +03:00
parent 75e94449b5
commit f1ae49c82d

View file

@ -1,4 +1,5 @@
import base64 import base64
import datetime
from dataclasses import dataclass from dataclasses import dataclass
from typing import List, Tuple, Any, Optional from typing import List, Tuple, Any, Optional
@ -11,8 +12,8 @@ GROUP_CHAT_SYSTEM_PROMPT = """
Ты - ИИ-помощник в групповом чате.\n Ты - ИИ-помощник в групповом чате.\n
Отвечай на вопросы и поддерживай контекст беседы.\n Отвечай на вопросы и поддерживай контекст беседы.\n
Ты не можешь обсуждать политику и религию.\n Ты не можешь обсуждать политику и религию.\n
Сообщения пользователей будут приходить в следующем формате: '[Имя]: текст сообщения'\n Сообщения пользователей будут приходить в следующем формате: '[дата время, имя]: текст сообщения'\n
При ответе НЕ нужно указывать ни пользователя, которому он предназначен, ни свое имя.\n При ответе НЕ нужно указывать ни время, ни пользователя, которому предназначен ответ, ни свое имя.\n
НЕ используй разметку Markdown. НЕ используй разметку Markdown.
""" """
GROUP_CHAT_MAX_MESSAGES = 20 GROUP_CHAT_MAX_MESSAGES = 20
@ -20,6 +21,8 @@ GROUP_CHAT_MAX_MESSAGES = 20
PRIVATE_CHAT_SYSTEM_PROMPT = """ PRIVATE_CHAT_SYSTEM_PROMPT = """
Ты - ИИ-помощник в чате c пользователем.\n Ты - ИИ-помощник в чате c пользователем.\n
Отвечай на вопросы и поддерживай контекст беседы.\n Отвечай на вопросы и поддерживай контекст беседы.\n
Сообщения пользователя будут приходить в следующем формате: '[дата время]: текст сообщения'\n
При ответе НЕ нужно указывать время.\n
НЕ используй разметку Markdown. НЕ используй разметку Markdown.
""" """
PRIVATE_CHAT_MAX_MESSAGES = 40 PRIVATE_CHAT_MAX_MESSAGES = 40
@ -38,6 +41,12 @@ class Message:
message_id: int = None message_id: int = None
def _add_message_prefix(text: Optional[str], username: Optional[str] = None) -> str:
current_time = datetime.datetime.now().strftime("%d.%m.%Y %H:%M")
prefix = f"[{current_time}, {username}]" if username is not None else f"[{current_time}]"
return f"{prefix}: {text}" if text is not None else f"{prefix}:"
def _serialize_message(role: str, text: Optional[str], image: Optional[bytes]) -> dict: def _serialize_message(role: str, text: Optional[str], image: Optional[bytes]) -> dict:
json = {"role": role, "content": []} json = {"role": role, "content": []}
if text is not None: if text is not None:
@ -64,10 +73,7 @@ class AiAgent:
message: Message, forwarded_messages: List[Message]) -> Tuple[str, bool]: message: Message, forwarded_messages: List[Message]) -> Tuple[str, bool]:
context = self._get_chat_context(is_group_chat=True, bot_id=bot_id, chat_id=chat_id) context = self._get_chat_context(is_group_chat=True, bot_id=bot_id, chat_id=chat_id)
if message.text is not None: message.text = _add_message_prefix(message.text, message.user_name)
message.text = f"[{message.user_name}]: {message.text}"
else:
message.text = f"[{message.user_name}]:"
context.append(_serialize_message(role="user", text=message.text, image=message.image)) context.append(_serialize_message(role="user", text=message.text, image=message.image))
for fwd_message in forwarded_messages: for fwd_message in forwarded_messages:
@ -110,6 +116,7 @@ class AiAgent:
async def get_private_chat_reply(self, bot_id: int, chat_id: int, message: Message) -> Tuple[str, bool]: async def get_private_chat_reply(self, bot_id: int, chat_id: int, message: Message) -> Tuple[str, bool]:
context = self._get_chat_context(is_group_chat=False, bot_id=bot_id, chat_id=chat_id) context = self._get_chat_context(is_group_chat=False, bot_id=bot_id, chat_id=chat_id)
message.text = _add_message_prefix(message.text)
content: list[dict[str, Any]] = [] content: list[dict[str, Any]] = []
if message.text is not None: if message.text is not None:
content.append({"type": "text", "text": message.text}) content.append({"type": "text", "text": message.text})