全部项目
Project已结束

HUEL-OJ-Auto · OJ 大模型自动刷题工具

独立开发的 Rust 命令行工具,连接 HUEL OJ 与兼容 OpenAI 接口的大模型,支持题目获取、代码生成、提交和失败反馈重试。

里程碑

2 个关键节点
  1. 开始项目

    项目开始

    开始探索使用 Rust 串联 OJ 接口与大模型代码生成流程。

  2. 结束项目

    项目结束

    完成本阶段工具开发,提供命令行交互与模型配置入口。

目标与背景

平时拿大模型辅助测试校内 OJ(HUEL OJ)题目时,每次都要在网页端复制题面、整理输入输出格式、贴进对话窗口,拿到代码后再切回网页提交并查看判题报错,来回切窗口非常繁琐。

于是我用 Rust 写了这个命令行小工具:把“拉取题面 → 请求大模型生成代码 → 自动提交判题 → 根据报错反馈重试”串成一条能在终端里直接观察的自动化流水线,同时也借这个项目练手 Rust 的异步网络请求与配置管理。

我的工作

我独立完成了整个命令行工具的设计与开发,包括校内 OJ 的登录态维护与接口封装、题目 HTML/JSON 数据解析、OpenAI 兼容接口调用、返回代码块提取清洗、判题结果轮询,以及终端交互菜单与本地 oj-auto.toml 配置管理。

实现内容

  • 单题与区间批量处理:自动读取指定题号(或题号区间)的题目描述、输入输出要求与样例,拼装成结构化提示词发给模型;从模型回复中剥离 Markdown 代码围栏,按 OJ 提交接口格式编码并上传。批量运行时若单题网络异常会打印错误并继续处理下一题,不会直接中断整批任务。
  • 带判题反馈的多轮修正:当提交未通过(如编译错误、答案错误或超时)时,工具会自动拉取历史提交记录与 OJ 返回的具体报错信息,连同上一轮代码一起喂回给大模型要求针对性修正,单题最多自动重试三轮,并在终端实时打印每一步状态。
  • 多模型配置切换:模型接口地址、API Key、模型名称(如 deepseek-chat 等)及温度参数统一保存在 oj-auto.toml 中,支持在命令行菜单里直接新增、编辑或一键切换当前使用的模型。

方案与取舍

底层使用 Rust 配合 Tokio 异步运行时与 reqwest 处理网络通信,用 Serde 完成接口响应与 TOML 配置文件的序列化解析。交互层没有做复杂的图形界面,而是直接采用轻量直观的终端菜单与彩色日志输出——对于这种调试性质很强的工具来说,能一眼看清“当前发了什么请求、模型回了什么代码、OJ 判了什么状态”比花哨的界面实用得多。

大模型侧统一对接标准的 OpenAI Chat Completions 兼容接口,这样无论是切到 DeepSeek 还是其他兼容服务,都不需要改动核心题面处理逻辑。

局限与复盘

目前工具的提示词模板和提交流程主要针对 C 语言编程题编写。实际跑下来也能明显感觉到,“能自动生成并提交”不等于包过所有题目:遇到题面表述隐晦、边界条件刁钻的算法题,即便带上三轮判题反馈重试,模型依然可能在同一个逻辑坑里打转。

此外,工具直接依赖校内 OJ 现有的网页接口结构,一旦后端改版就需要同步调整解析层。不过折腾完这一趟,最大的收获还是把思路从“单次让 AI 写段代码”拉到了完整的闭环工程上:异常兜底、请求限速、错误上下文提取以及最大重试次数限制,哪一步没处理好都没法稳定跑起来。

站内搜索

找到你感兴趣的内容

文章分类
选择文章分类,匹配任意一个所选分类

多选时显示属于任一所选分类的文章。

文章标签
选择文章标签,多个标签需同时包含

多选时只显示同时包含所选标签的文章。

输入关键词开始搜索