feat(llm): 引入基于完成度的 AI 提交指导与限流

- 新增 llm_guidance 策略层,根据源码、判题结果与通过率评估完成度分级
- llm-review.php 改为服务端缓冲上游输出,仅下发白名单分类的固定模板
- 新增 llm_review 与 llm_review_rate_limit 表,实现结果缓存与账户/提交两级限流
- ceinfo 模板渲染编译器标出的源码行号/列号,reinfo 仅向高完成度提交展示结构化 diff
- download.php 按完成度授权测试点下载,封堵白卷提交套取隐藏用例
- judge_client 在 ACM 非比赛场景下记录已通过测试点数,前端可显示进度
- 附 llm_guidance_policy_test 单测覆盖空白卷、注释卷、隐藏 SPJ、OJ_FULL_DIFF 等关键路径
This commit is contained in:
2026-07-23 10:47:50 +08:00
parent 5a27c07bba
commit 12bea84d8b
12 changed files with 1721 additions and 768 deletions
+15
View File
@@ -246,6 +246,21 @@ CREATE TABLE IF NOT EXISTS `share_code` (
PRIMARY KEY (`share_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `llm_review` (
`solution_id` int(11) NOT NULL,
`review` text NOT NULL,
`create_time` datetime NOT NULL,
PRIMARY KEY (`solution_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `llm_review_rate_limit` (
`user_id` varchar(48) NOT NULL,
`solution_id` int(10) unsigned NOT NULL,
`next_allowed_at` datetime NOT NULL,
PRIMARY KEY (`user_id`,`solution_id`),
KEY `idx_next_allowed_at` (`next_allowed_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
delimiter //
drop trigger if exists simfilter//
create trigger simfilter