feat: 完善人工关注与内容合规配置

This commit is contained in:
2026-08-24 17:49:56 +08:00
parent 6ffdd2c259
commit 910e67bd89
53 changed files with 1808 additions and 49 deletions

View File

@@ -0,0 +1,52 @@
"""add durable human attention screening jobs
Revision ID: 0039_attention_config
Revises: 0038_user_behavior
"""
from alembic import op
import sqlalchemy as sa
revision = "0039_attention_config"
down_revision = "0038_user_behavior"
branch_labels = None
depends_on = None
def upgrade() -> None:
op.create_table(
"sys_human_attention_job",
sa.Column("id", sa.BigInteger(), autoincrement=True, nullable=False),
sa.Column("session_id", sa.BigInteger(), nullable=False),
sa.Column("message_id", sa.BigInteger(), nullable=False),
sa.Column("retrieval_log_id", sa.BigInteger(), nullable=True),
sa.Column("user_id", sa.BigInteger(), nullable=False),
sa.Column("question", sa.Text(), nullable=False),
sa.Column("answer", sa.Text(), nullable=False),
sa.Column("knowledge_missing", sa.Integer(), server_default="0", nullable=False),
sa.Column("config_snapshot", sa.Text(), nullable=False),
sa.Column("status", sa.String(length=20), server_default="pending", nullable=False),
sa.Column("attempt_count", sa.Integer(), server_default="0", nullable=False),
sa.Column("max_attempts", sa.Integer(), server_default="3", nullable=False),
sa.Column("next_run_at", sa.DateTime(), nullable=True),
sa.Column("locked_at", sa.DateTime(), nullable=True),
sa.Column("locked_by", sa.String(length=100), nullable=True),
sa.Column("error_message", sa.Text(), nullable=True),
sa.Column("created_at", sa.DateTime(), server_default=sa.text("CURRENT_TIMESTAMP"), nullable=False),
sa.Column("finished_at", sa.DateTime(), nullable=True),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("message_id", name="uq_human_attention_job_message"),
)
op.create_index("ix_human_attention_job_status_next", "sys_human_attention_job", ["status", "next_run_at", "id"])
op.create_index("ix_human_attention_job_user", "sys_human_attention_job", ["user_id"])
op.create_index("ix_human_attention_job_session", "sys_human_attention_job", ["session_id"])
op.create_index("ix_human_attention_job_retrieval", "sys_human_attention_job", ["retrieval_log_id"])
def downgrade() -> None:
op.drop_index("ix_human_attention_job_retrieval", table_name="sys_human_attention_job")
op.drop_index("ix_human_attention_job_session", table_name="sys_human_attention_job")
op.drop_index("ix_human_attention_job_user", table_name="sys_human_attention_job")
op.drop_index("ix_human_attention_job_status_next", table_name="sys_human_attention_job")
op.drop_table("sys_human_attention_job")