fix(expression): 自动审核结果持久化到数据库

- _evaluate_expression 将审核结果写入 Expression 数据库字段
- _select_expressions 筛选改用 expr.checked 数据库字段
- check_expression_suitability 返回错误时 early-return,不写数据库
- 移除 expression_review_store 内存缓存依赖
This commit is contained in:
hsd221
2026-05-05 23:26:21 +08:00
committed by SengokuCola
parent 337170af12
commit f2fa24d5b5
2 changed files with 16 additions and 16 deletions

View File

@@ -17,9 +17,9 @@ from sqlmodel import select
from src.common.database.database import get_db_session from src.common.database.database import get_db_session
from src.common.database.database_model import Expression from src.common.database.database_model import Expression
from src.common.database.database_model import ModifiedBy
from src.common.logger import get_logger from src.common.logger import get_logger
from src.config.config import global_config from src.config.config import global_config
from src.learners.expression_review_store import get_review_state, set_review_state
from src.learners.expression_utils import check_expression_suitability from src.learners.expression_utils import check_expression_suitability
from src.manager.async_task_manager import AsyncTask from src.manager.async_task_manager import AsyncTask
@@ -53,7 +53,7 @@ class ExpressionAutoCheckTask(AsyncTask):
statement = select(Expression) statement = select(Expression)
all_expressions = session.exec(statement).all() all_expressions = session.exec(statement).all()
unevaluated_expressions = [expr for expr in all_expressions if not get_review_state(expr.id)["checked"]] unevaluated_expressions = [expr for expr in all_expressions if not expr.checked]
if not unevaluated_expressions: if not unevaluated_expressions:
logger.info("没有未检查的表达方式") logger.info("没有未检查的表达方式")
@@ -62,9 +62,7 @@ class ExpressionAutoCheckTask(AsyncTask):
selected_count = min(count, len(unevaluated_expressions)) selected_count = min(count, len(unevaluated_expressions))
selected = random.sample(unevaluated_expressions, selected_count) selected = random.sample(unevaluated_expressions, selected_count)
logger.info( logger.info(f"{len(unevaluated_expressions)} 条未检查表达方式中随机选择了 {selected_count}")
f"{len(unevaluated_expressions)} 条未检查表达方式中随机选择了 {selected_count}"
)
return selected return selected
except Exception as e: except Exception as e:
@@ -86,8 +84,18 @@ class ExpressionAutoCheckTask(AsyncTask):
expression.style, expression.style,
) )
if error:
logger.warning(f"表达方式评估时出现错误 [ID: {expression.id}]: {error}")
return False
try: try:
set_review_state(expression.id, True, not suitable, "ai") with get_db_session() as session:
expr = session.exec(select(Expression).where(Expression.id == expression.id)).first()
if expr:
expr.checked = True
expr.rejected = not suitable
expr.modified_by = ModifiedBy.AI
session.add(expr)
status = "通过" if suitable else "不通过" status = "通过" if suitable else "不通过"
# 保留这段注释,方便后续需要时恢复更详细的审核日志。 # 保留这段注释,方便后续需要时恢复更详细的审核日志。
@@ -98,9 +106,6 @@ class ExpressionAutoCheckTask(AsyncTask):
# f"Reason: {reason[:50]}..." # f"Reason: {reason[:50]}..."
# ) # )
if error:
logger.warning(f"表达方式评估时出现错误 [ID: {expression.id}]: {error}")
logger.debug(f"表达方式 [ID: {expression.id}] 评估完成: {status}, reason={reason}") logger.debug(f"表达方式 [ID: {expression.id}] 评估完成: {status}, reason={reason}")
return suitable return suitable

View File

@@ -96,10 +96,7 @@ def get_chat_name_from_latest_message(chat_id: str, db_session: Any) -> Optional
"""从最近消息中解析聊天显示名称。""" """从最近消息中解析聊天显示名称。"""
statement = ( statement = (
select(Messages) select(Messages).where(col(Messages.session_id) == chat_id).order_by(col(Messages.timestamp).desc()).limit(1)
.where(col(Messages.session_id) == chat_id)
.order_by(col(Messages.timestamp).desc())
.limit(1)
) )
message = db_session.exec(statement).first() message = db_session.exec(statement).first()
if not message: if not message:
@@ -236,9 +233,7 @@ async def get_chat_list() -> ChatListResponse:
is_group=bool(chat_session.group_id), is_group=bool(chat_session.group_id),
) )
expression_chat_ids = { expression_chat_ids = {chat_id for chat_id in session.exec(select(Expression.session_id)).all() if chat_id}
chat_id for chat_id in session.exec(select(Expression.session_id)).all() if chat_id
}
for session_id in expression_chat_ids: for session_id in expression_chat_ids:
if session_id in chat_by_id: if session_id in chat_by_id:
continue continue