docs: введен механизм очистки мусорного контекста. Готовность к внедрению интеллектуального механизма очистки контекста.
This commit is contained in:
@@ -1,29 +1,56 @@
|
||||
"""
|
||||
FILE: modules/web_api/llm/db/db_chat.py
|
||||
ROLE: Управление историей сообщений и очисткой эфемерного контекста.
|
||||
"""
|
||||
from typing import List, Dict, Any
|
||||
from .connection import get_db_connection
|
||||
|
||||
def db_save_chat_message(session_id: str, role: str, content: str):
|
||||
if not content:
|
||||
return
|
||||
def db_save_chat_message(session_id: str, role: str, content: str, is_ephemeral: int = 0) -> None:
|
||||
"""Сохраняет сообщение в БД (is_ephemeral=1 для временных служебных шагов, 0 для постоянных)."""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("""
|
||||
INSERT INTO chat_messages (session_id, role, content, created_at)
|
||||
VALUES (?, ?, ?, CURRENT_TIMESTAMP)
|
||||
""", (session_id, role, content))
|
||||
INSERT INTO chat_messages (session_id, role, content, is_ephemeral)
|
||||
VALUES (?, ?, ?, ?)
|
||||
""", (session_id, role, content, is_ephemeral))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
|
||||
def db_get_chat_history(session_id: str, limit: int = 20) -> List[Dict[str, Any]]:
|
||||
"""Получает последние сообщения истории диалога в хронологическом порядке."""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("""
|
||||
SELECT role, content FROM chat_messages
|
||||
SELECT role, content
|
||||
FROM chat_messages
|
||||
WHERE session_id = ?
|
||||
ORDER BY id DESC LIMIT ?
|
||||
ORDER BY id DESC
|
||||
LIMIT ?
|
||||
""", (session_id, limit))
|
||||
rows = cursor.fetchall()
|
||||
conn.close()
|
||||
return [{"role": r["role"], "content": r["content"]} for r in reversed(rows)]
|
||||
return [{"role": r["role"], "content": r["content"]} for r in reversed(rows)]
|
||||
|
||||
|
||||
def db_purge_ephemeral_messages(session_id: str) -> int:
|
||||
"""
|
||||
Физически удаляет все временные служебные сообщения выбранной сессии
|
||||
после завершения сценария работы с инструментом.
|
||||
"""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("DELETE FROM chat_messages WHERE session_id = ? AND is_ephemeral = 1", (session_id,))
|
||||
deleted = cursor.rowcount
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return deleted
|
||||
|
||||
|
||||
def db_clear_chat_history(session_id: str) -> None:
|
||||
"""Полная очистка всех сообщений сессии."""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("DELETE FROM chat_messages WHERE session_id = ?", (session_id,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
@@ -17,12 +17,12 @@ def db_get_active_system_prompt() -> str:
|
||||
return row["prompt_text"] if row else "Ты — ИИ-ассистент SCUD Orion AI."
|
||||
|
||||
def db_get_tool_action(tool_name: str) -> Optional[Dict[str, Any]]:
|
||||
"""Получение шаблона и кнопок действия для инструмента из SQLite."""
|
||||
"""Получение шаблона, кнопок и настроек эфемерности инструмента из SQLite."""
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("""
|
||||
SELECT tool_name, category, bypass_llm, success_template,
|
||||
follow_up_question, action_type, buttons_json
|
||||
follow_up_question, action_type, buttons_json, is_ephemeral
|
||||
FROM tool_action_registry
|
||||
WHERE tool_name = ? AND is_active = 1
|
||||
""", (tool_name,))
|
||||
|
||||
Reference in New Issue
Block a user