fix(expression): 自动审核结果持久化到数据库
- _evaluate_expression 将审核结果写入 Expression 数据库字段 - _select_expressions 筛选改用 expr.checked 数据库字段 - check_expression_suitability 返回错误时 early-return,不写数据库 - 移除 expression_review_store 内存缓存依赖
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user