作业批改系统开发日志 — 游客提交模式改造与Bug修复
TL;DR今天把作业提交从「必须注册登录」改成了「游客模式(文件名解析)」,同时修了一堆连环 bug,包括 JSON 解析、数据库约束、双重拦截、重复提交等。本文记录踩坑过程和修复思路。 背景作业批改系统原先是老师端内部使用的,学生需要注册登录后才能提交作业。需求改成:学生通过文件名直接上传作业,无需注册登录。 文件名格式:姓名_班级_作业名称.扩展名 问题 1:extractJsonFromMarkdown 提取不完整现象前端提交后,submission 表的 totalScore 为 null。数据库 INSERT 时 total_score 列没有值。 排查OpenClaw 返回的响应包含 markdown 前缀文本 + ```json 包裹的 JSON: 1234根据批改作业助手的技能指南,我现在对...进行批改。```json{"totalScore": 72, ...} 123456789101112131415161718旧版 `extractJsonFromMarkdown` 只去掉首尾 ``` 标记,**没有裁剪前缀文...
为NapCatQQ插件添加RAG功能
背景正在开发的作业批改系统需要支持 QQ 群聊答疑功能。学生通过 QQ 向机器人提问时,希望机器人能够基于上传的教学文档(知识库)进行回答,而不是仅依赖模型自身的知识。 架构设计最终架构1学生QQ提问 → NapCat(WS) → OpenClaw OneBot插件 → RAG增强 → 贾维斯Agent → OpenClaw → 回复学生 关键点: 在 OneBot 插件层拦截消息,调用后端 RAG 接口增强 prompt 增强后的消息再发给 Agent 处理 复用现有的向量检索和文档存储系统 实现过程1. 后端接口开发创建 OnebotRagController.java,提供 RAG 增强接口: 123456789101112131415161718192021222324@PostMapping("/rag")public ResponseEntity<RagResponse> rag(@RequestBody RagRequest request) { // 1. RAG 检索 List<String>...
OpenClaw 接入 OneBot 实现 QQ 消息收发
前言最近在做作业批改系统,需要实现老师通过机器人向学生发送成绩和通知的功能。本文记录如何将 OpenClaw 与 OneBot 协议对接,实现 QQ 私聊和群消息的自动发送。 背景为什么选择 OneBot?OpenClaw 原生支持 QQ 频道机器人,但频道机器人无法进入普通 QQ 群。为了覆盖更多使用场景,选择通过 OneBot 协议作为中转: 1OpenClaw → OneBot 插件 → OneBot 实现(LLOneBot)→ QQ 群/好友 技术栈 OpenClaw: AI 网关,负责消息路由和 Agent 管理 OneBot 插件: @kirigaya/openclaw-onebot OneBot 后端: LLOneBot(基于 NTQQ 的 OneBot 11 实现) 安装与配置1. 安装 OneBot 插件1openclaw plugin install @kirigaya/openclaw-onebot --allow-dangerous 注意:该插件包含 child_process 调用,需要 --allow-dangerous 参数。 2. 配...
2026-04-21 每日总结 | 热力图修复 & 学习复盘
一、今日工作完成1. 项目开发:热力图问题修复今日核心完成热力图功能修复,定位并解决了数据返回错误问题: 问题根源:PostgreSQL 中 avg() 聚合函数返回高精度数值类型,直接强转为 float 会导致数据精度丢失、回传异常; 解决方案:调整数据类型转换逻辑,保证数值精度,热力图展示恢复正常。 2. 项目后续改进方向 AI生成功能推进:目前AI相关功能尚未落地,需梳理业务场景,规划AI结合点; 通知消息优化:当前通知仅支持后端发送邮件,后续需对接 openclaw,实现消息推送至对应社交媒体。 二、学习成长复盘1. 英语 & 技术四大件 固定学习任务全部完成; 技术四大件学习10个课时,重做往期习题; 核心收获:发现考点与基础学习内容存在差异,初步摸清考试逻辑与考察重点。 2. 个人项目:博客系统升级为自用博客系统新增视觉特效,优化前端交互体验。 3. 算法学习:动态规划(DP) 主攻方向:动态规划专题,持续攻克难点; 核心痛点:问题拆分、边界条件确定仍需大量经验积累; 学习目标:熟练掌握记忆化搜索解题思路; 后续计划:重温灵神(灵茶山艾府)DP教程,强...
作业批改系统热力图不显示问题排查记录
问题现象教学数据仪表盘中的「知识点掌握度热力图」区域空白,不显示任何数据。浏览器控制台显示接口返回 500 错误。 排查过程第一步:确认数据链路首先检查后端的 HomeworkKnowledgeMapper,发现 SQL 查询逻辑是正确的: 从 homework_knowledge 表查询知识点掌握记录 JOIN homework_evaluation 表按班级筛选 按知识点分组计算平均掌握度 数据流设计没有问题,直接查询批改结果表,避免了知识点名称映射的混乱。 第二步:定位后端异常查看后端日志,发现具体的错误信息: 1java.lang.ClassCastException: class java.math.BigDecimal cannot be cast to class java.lang.Double 错误发生在 DashboardServiceImpl.java 第 121 行。 第三步:分析根因问题出在类型转换上: 12// 原代码Double avgMastery = (Double) stat.get("avg_mastery")...
2026-04-20 学习日志|项目可视化优化+算法BFS&DP复盘
✨ 今日完成1. 项目进度完成了作业系统可视化页面开发,目前页面主体功能已实现。 存在问题: 热力图显示异常 当前为AI预设热力图,未实现从作业提取关键词/关联知识点表展示逻辑 计划明日优先修复该核心问题 2. 日常学习✅ 完成每日英语单词学习+复习✅ 算法专题学习与复盘 3. 算法知识总结BFS 模板复习核心步骤梳理: 定义矩阵范围 m, n 初始化队列 queue,用于存储每一层遍历节点(BFS 按层搜索) 双层循环定位起点,将第一层/起点入队 BFS 核心:双层循环控制遍历层级 + 终止条件判断 + 按题意处理逻辑 动态规划 DP 入门学习学习思路: 从递归切入理解:将大问题拆解为子问题(经典:爬楼梯问题) 递归缺陷:重复计算导致超时 优化方案:记忆化搜索(数组存储重复计算结果) 进阶:推导出状态转移方程,转化为递推 DP 写法 拓展:DP 可向图论方向优化(暂未学习) 📌 今日未完成 计算机四大件学习无进展 明日需重点调整时间分配,保证专项学习时间 🎯 明日计划 固定任务:英语单词、算法刷题、八股背诵 核心任务:计算机四大件系统学习 ...
从作业批改系统到学习管理平台
从作业批改系统到学习管理平台:一次完整的全栈开发实践项目背景今天完成了一个学习管理平台的数据可视化模块开发。这个项目基于已有的作业批改系统,扩展了教师端的数据分析功能,包括班级学情看板、知识点掌握度热力图、高频错题统计等。 技术栈: 后端:Spring Boot + MyBatis-Plus + PostgreSQL 前端:Vue3 + 原生 CSS AI 网关:OpenClaw(多模型调度) 核心功能实现1. 数据可视化看板教师端新增了一个数据看板页面,包含以下模块: 模块 功能描述 核心指标卡片 学生总数、作业总数、平均正确率、需关注学生 成绩分布图 柱状图展示各分数段人数占比 知识点热力图 12个知识点的掌握度可视化(绿/黄/红) 高频错题 TOP10 错误率排序,前3标红高亮 学生学情列表 支持搜索、排序,需关注学生标红 AI教案生成 选择教学目标,生成针对性教案 2. 知识点掌握度分析这是本次开发的核心难点。我们需要: 修改 AI 批改 Prompt:让 AI 在批改作业时,同时分析涉及的知识点及掌握程度...
2026-04-20 学习复盘与明日计划
学习复盘与明日计划今天是假期,整体学习时长不算多,大部分时间用来放松打游戏,晚上才进入学习状态,整体效率还算可以,也发现了自己现阶段学习的核心问题。 今日学习总结 英语:完成了单词的复习与新学任务,保持住了每日的基础积累。 计算机网络:继续跟着课程学习知识点,听了几节课,但学习方式存在明显问题。 核心问题与反思学完课程后没有及时做习题巩固,直接开始下一节内容,导致回头做前面知识点的题目时,大量内容已经遗忘,记忆非常不牢固。 教训:后续学习必须课程+习题同步结合,学完一节立刻做题巩固,避免学了就忘、效率低下。 明日学习流程 优先完成算法学习与英语单词背诵(每日固定基础项) 进行408四大件学习,严格按照「学知识点+立即刷题」的模式执行 推进 Agent 项目 开发与规划 Agent 项目扩展规划(AI 学习管理平台)目前的 Agent 项目有很大的扩展空间,完全可以升级为与 AI 深度结合的学习管理平台,整体架构与功能思路如下: 学生端 学生登录系统后可直接提交作业 AI 自动对作业进行分析、批改、生成学习报告 报告自动存入后台,形成个人学习档案 老师端 提供可视化界面,实时...
计算机网络 可靠传输与滑动窗口 考研笔记
可靠传输滑动窗口机制类似算法中的滑动窗口,分为发送窗口和接收窗口。窗口仅向后滑动,绝不向前后退;窗口滑动完全由接收方返回的确认帧 ACK 控制,接收方通过确认机制限制发送方窗口滑动速度,以此实现流量控制。 考研核心考点 帧序号采用 n 位二进制编号,总序号空间个数:$2^n$ 不同可靠传输协议,发送窗口、接收窗口大小限制各不相同 只有收到确认帧,发送窗口才会向后滑动 停止-等待协议基本概念 数据帧:发送方传输数据的基本单元,帧首部携带帧序号。 确认帧(ACK):接收方正确接收数据帧后,返回给发送方的应答帧,帧内携带对应帧序号,用于告知发送方该帧接收无误,可以发送下一帧。 帧序号:用于区分新旧帧、重复帧,本协议仅需 0、1 两个序号循环即可。 超时重传为解决数据帧丢失问题:发送方每发一帧就启动超时计时器,若长时间未收到对应 ACK,判定帧丢失,超时重传该帧,并重置计时器。 确认帧丢失:发送方依旧超时重传该帧;接收方通过帧序号识别出重复帧,直接丢弃重复帧,并重新发送对应 ACK。 数据帧出错:接收方检测出差错后,直接丢弃出错帧,不发送任何 ACK,触发发送方超时重传。 窗口...
智能作业批改系统
从零构建智能作业批改系统:Spring Boot + Vue3 + RAG 实战 一个基于 AI 的全栈作业批改平台开发实录 项目概述这是一个面向教育场景的智能作业批改系统,支持多格式文档上传、AI 智能批改、流式对话交互,以及基于 RAG(检索增强生成)的知识库问答功能。 技术栈: 后端: Spring Boot 4.x + MyBatis-Plus + PostgreSQL + JWT 前端: Vue 3 + Element Plus + Pinia AI 层: OpenClaw 网关 + 自研 RAG 引擎 文档解析: Apache Tika 一、系统架构设计1.1 整体架构12345678910111213141516171819202122232425262728293031323334┌─────────────────────────────────────────────────────────────────┐│ 前端层 (Vue 3) ││ ┌───...










