記錄 RAG 人工審核者 hash
All checks were successful
CD Pipeline / deploy (push) Successful in 58s

This commit is contained in:
OoO
2026-05-13 09:13:29 +08:00
parent bb65ba71ba
commit f2b91beb61
4 changed files with 78 additions and 9 deletions

View File

@@ -455,7 +455,7 @@ class PromotionGate:
return self._stage_4_review(episode)
def promote(self, episode_id: int) -> Optional[int]:
def promote(self, episode_id: int, human_approver: Optional[str] = None) -> Optional[int]:
"""執行晉升:寫 ai_insights + 更新 learning_episodes.{insight_id, promotion_status}。
Returns:
@@ -506,10 +506,15 @@ class PromotionGate:
UPDATE learning_episodes
SET promotion_status = 'approved',
insight_id = :insight_id,
human_approver = COALESCE(:human_approver, human_approver),
reviewed_at = NOW()
WHERE id = :id
"""),
{'insight_id': insight_id, 'id': episode_id},
{
'insight_id': insight_id,
'human_approver': human_approver,
'id': episode_id,
},
)
session.commit()
logger.info(
@@ -526,12 +531,19 @@ class PromotionGate:
logger.error("[PromotionGate] promote failed (episode_id=%s): %s", episode_id, exc)
return None
def reject(self, episode_id: int, reason: str, detail: Optional[str] = None) -> bool:
def reject(
self,
episode_id: int,
reason: str,
detail: Optional[str] = None,
human_approver: Optional[str] = None,
) -> bool:
"""拒絕晉升:標 promotion_status='rejected_*' + rejected_reason。
Args:
reason: rejected_quality / rejected_hallucination / rejected_duplicate / rejected_human
detail: 補充說明(會與 reason 拼成 rejected_reason 文本)
human_approver: 已 hash 後的人工審核者識別;不存 PII 原文。
"""
valid_statuses = (
'rejected_quality',
@@ -555,10 +567,16 @@ class PromotionGate:
UPDATE learning_episodes
SET promotion_status = :status,
rejected_reason = :rej_reason,
human_approver = COALESCE(:human_approver, human_approver),
reviewed_at = NOW()
WHERE id = :id
"""),
{'status': reason, 'rej_reason': full_reason, 'id': episode_id},
{
'status': reason,
'rej_reason': full_reason,
'human_approver': human_approver,
'id': episode_id,
},
)
session.commit()
return True