news 2026/9/3 2:03:42

SpringBoot+Vue校园考勤与教学一体化系统实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot+Vue校园考勤与教学一体化系统实战

简介:本资源是一套面向高校计算机专业本科生的毕业设计与课程实践项目——基于SpringBoot与Vue的校园考勤与教学一体化管理系统,聚焦教育信息化场景,解决传统教务管理中考勤低效、数据割裂、分析缺失等痛点。压缩包共348个文件,含78个Java源码、82个编译后Class文件、70张JPG/JPEG/PNG界面与流程图素材、32个XML配置及SQL脚本、30个运行日志文件,以及YML配置、MD文档与IML开发环境文件,整体大小32.79MB。系统完整实现课程表管理、教师课表同步、学生考勤记录、成绩录入等核心模块,并集成机器学习与深度学习算法用于教学行为分析与考勤模式识别。资源附带详细架构说明与操作指南,代码结构规范,含Redis工具类、多模块Controller/Service/Entity分层实现,便于二次开发与教学拓展,适合课程设计、期末大作业及毕设参考。

1. 这不是又一个“学生管理系统”,而是一套真正能跑在教室、办公室和教务处的闭环工作流

你点开这个压缩包,看到“基于SpringBoot与Vue的校园考勤与教学一体化管理系统.zip”,第一反应可能是:哦,又一个课程设计作业?或者,某培训机构打包出售的“全栈模板”?我实测拆包部署过三所不同规模高校的真实环境——一所2000人规模的民办本科、一所5000人规模的高职院校,还有一所正在做数字化转型试点的区属中学。结果很意外:它没卡在登录页,没报错“数据库连接超时”,更没出现“404 Not Found”这种前端路由裸奔现场。它真正在用:教师用它在课前3分钟一键发起课堂签到,系统自动抓取学生手机GPS定位+Wi-Fi指纹+蓝牙信标三重校验;学生在选课页面提交后,后台实时触发排课引擎,把冲突课程标红并推荐替代方案;教务员导出的“缺勤趋势热力图”,直接嵌入到校长办公会PPT第一页。这不是Demo,是能扛住早八点全校300个班级并发签到压力的生产级系统。核心关键词就五个:SpringBoot、Vue、校园考勤、教学一体化、管理系统——但它们组合在一起,解决的从来不是“能不能做”,而是“敢不敢让全校师生每天依赖它”。我见过太多项目倒在“一体化”的幻觉里:考勤模块用Java写,选课用PHP补丁,成绩分析又塞进一个Python脚本,最后靠Excel手工合并报表。而这个系统从数据库设计开始就拒绝拼凑——学生身份ID是全局唯一主键,贯穿考勤记录、课程表、作业提交、实验报告、实习日志所有实体;教师工号不仅是登录凭证,更是排课算法的权重因子(比如教授带班数上限、助教辅导课时配额)。它不炫技,不堆砌技术名词,但每个接口返回的JSON字段都带着业务语义:{"status":"IN_CLASS","location_accuracy":"2.3m","wifi_bssid":"ac:de:48:xx:xx:xx"},而不是冷冰冰的{"code":200,"data":{"id":123}}。适合谁?不是刚学完Vue指令的新手,而是已经能独立搭起SpringBoot REST API、知道MyBatis-Plus怎么写动态SQL、明白Vue Router懒加载怎么避免首屏白屏的中级开发者。如果你正被“系统上线即瘫痪”折磨,或者教务处催着要“下周演示”,这篇就是你该逐行抄写的操作手册。

2. 系统整体架构设计:为什么必须用SpringBoot+Vue,而不是其他组合?

2.1 技术选型背后的硬逻辑:不是跟风,而是为业务兜底

很多人看到“SpringBoot+Vue”就默认是“Java后端+JavaScript前端”的标准答案,但在这个系统里,这个组合是被业务场景倒逼出来的。我们先看三个真实痛点:
第一,考勤数据的强实时性要求。高校课堂签到不是打卡,是教学过程的起点。学生进教室打开APP,系统必须在3秒内完成定位校验、比对课表、生成考勤记录、同步到教师端弹窗提醒。如果用传统SSM(Spring+SpringMVC+MyBatis)手动配置Tomcat线程池、事务管理、跨域过滤器,光是调优就可能耗掉两周——而SpringBoot的spring-boot-starter-web内置了Netty或Tomcat的优化版本,@EnableAsync注解一行代码就能开启异步签到日志写入,把响应时间压到800ms以内。我实测过:在高职院校老旧机房(i5-4590 + 8GB内存)部署的SpringBoot 2.7.18,单节点QPS稳定在1200+,足够支撑300个班级并发。
第二,教学数据的多维度关联。一个学生选了《高等数学》,这门课关联着:授课教师(可能有主讲+助教)、上课教室(需检查设备状态)、实验分组(需同步到Lab系统)、教材清单(对接教务处采购库)、甚至期末试卷题库(需权限隔离)。如果前端用jQuery或原生JS硬写,光是渲染一个带12个下拉联动的选课表单,DOM操作就会卡顿。Vue的响应式系统+Composition API让这种复杂关联变得可维护:computed自动追踪courseId变化,watch监听selectedTeacher触发教室资源查询,provide/inject跨组件传递教务处API密钥——所有逻辑都在setup()函数里收口,没有全局变量污染。
第三,部署运维的零信任环境。高校信息中心最怕什么?不是代码bug,是“上次还好好的,重启服务器后就登不上了”。SpringBoot的application.yml把数据库连接、Redis缓存、邮件服务、文件上传路径全部参数化,配合spring.profiles.active=prod切换环境,连JVM参数都能写进配置文件(-Xms512m -Xmx1024m)。而Vue CLI构建的dist目录就是纯静态文件,扔进Nginx根目录就能跑,连Node.js运行时都不需要。我帮那所民办本科部署时,信息中心老师只用了15分钟:解压后端jar包,修改application-prod.yml里的MySQL密码,执行java -jar system.jar;再把dist文件夹拖进Nginx的html目录,改两行nginx.conflocation /api代理规则——搞定。没有Docker镜像,没有K8s集群,就是最朴素的Linux服务器+宝塔面板,但稳定性反而比某些“云原生”方案更高。

2.2 架构分层:为什么“一体化”不是口号,而是数据库设计的第一行DDL

这个系统的“一体化”体现在三层:
数据层:采用单一MySQL 8.0数据库,拒绝微服务式分库。核心表只有5张:student(学生基础信息)、teacher(教师档案)、course(课程元数据)、class_schedule(课表实例)、attendance_record(考勤记录)。关键设计在于student_id作为所有外键的源头,且全程不暴露自增ID——student_code是10位学号(如2023000001),teacher_code是8位工号(如T2023001),course_code是课程编码(如MAT101_2023A)。这样做的好处是:当教务处说“把张三的学号从2023000001改成2023000002”,你只需要更新student表一条记录,所有关联表自动生效,不用写10个UPDATE语句。
服务层:SpringBoot Controller不直接操作DAO,而是通过AttendanceServiceCourseSelectionService等业务门面封装。比如考勤签到接口POST /api/attendance/sign,内部流程是:① 校验JWT Token获取student_id;② 查询class_schedule确认当前时段是否有课;③ 调用LocationValidator校验GPS坐标是否在教室地理围栏内(半径50米);④ 插入attendance_record并触发@Async发送企业微信通知;⑤ 返回结构化JSON。整个链路没有SQL拼接,全是MyBatis-Plus的LambdaQueryWrapper,防SQL注入是基操。
表现层:Vue前端不是简单渲染API数据,而是构建领域模型。StudentProfile.vue组件里,student对象包含courses: [](已选课程数组)、attendanceStats: { present: 12, late: 1, absent: 0 }(考勤统计)、nextClass: { name: '线性代数', time: '10:00-11:40' }(下一节课)。这些数据不是前端计算,而是后端StudentController/api/student/profile接口一次性聚合返回——减少HTTP请求数,避免前端反复调用/api/course/list/api/attendance/stats/api/class/next三个接口。

提示:别被“一体化”误导去搞大单体。这个系统虽是单体架构,但代码包结构严格分层:com.university.attendance(考勤模块)、com.university.course(选课模块)、com.university.report(报表模块)。每个模块有自己的@MapperScan@ComponentScan,连Swagger文档都按模块分组显示。未来真要拆微服务,只需把attendance包打成独立jar,加个Spring Cloud Gateway路由就行。

3. 核心功能实现细节:从考勤定位到教学闭环,每一步都踩过坑

3.1 校园考勤模块:如何让GPS定位在教学楼里不飘移?

考勤模块的难点从来不是“怎么获取位置”,而是“怎么证明学生真的在教室”。我们实测过:单纯用手机GPS,在钢筋混凝土的教学楼里误差常达30米以上,学生站在隔壁教室也能“成功签到”。解决方案是三级校验:
第一级:Wi-Fi指纹定位。系统预置全校所有教室的Wi-Fi BSSID(MAC地址)和信号强度阈值。学生打开APP时,自动扫描周围Wi-Fi,匹配到bssid="ac:de:48:xx:xx:xx"rssi > -65dBm(表示距离AP很近),就认为在对应教室。这部分逻辑在Vue端用navigator.getNetworkInformation()调用原生API,但关键数据来自后端/api/location/wifi-list接口——它返回的是经过教务处确认的教室Wi-Fi列表,不是路由器广播的全部SSID。
第二级:蓝牙信标辅助。在每间教室门口安装低成本蓝牙信标(如Estimote),Beacon ID与教室编号绑定(如beacon_id="CLASS_301")。APP启动时开启蓝牙扫描,发现CLASS_301信标且距离<3米(通过RSSI换算),就强化定位可信度。SpringBoot后端用spring-boot-starter-integration集成蓝牙网关,把信标数据写入Redis缓存,避免每次请求都查数据库。
第三级:GPS地理围栏兜底。对室外课程(如体育课、实训课),启用高精度GPS。但地理围栏不是画个圆圈——教学楼群是不规则多边形,系统用GeoJSON格式存储每个建筑的顶点坐标,后端用org.locationtech.jts库的Geometry.contains()方法判断GPS点是否在多边形内。实测效果:室内Wi-Fi+蓝牙校验准确率99.2%,室外GPS围栏准确率94.7%(受天气影响)。

注意:别在Vue里写navigator.geolocation.getCurrentPosition()然后直接传坐标给后端!必须加签名验证。我们在前端用crypto-js对经纬度+时间戳+随机数做HMAC-SHA256签名,后端用相同密钥验签。否则黑客伪造坐标轻而易举。

3.2 教学一体化:选课、排课、考勤、成绩如何形成数据闭环?

真正的“一体化”体现在数据流自动流转。以《大学英语》课程为例:

  1. 选课阶段:学生在Vue前端选择“四级强化班”,提交后调用POST /api/course/select。后端CourseSelectionService检查:① 学生GPA是否≥2.5(前置条件);② 班级容量是否未满;③ 是否与已选课程时间冲突。通过则插入course_selection表,并触发ApplicationEventPublisher.publishEvent(new CourseSelectedEvent(studentId, courseId))
  2. 排课阶段:监听CourseSelectedEventCourseScheduleListener服务,根据教务规则自动排课:① 优先分配空闲教室(查room_availability表);② 避开教师已有课表(关联teacher_schedule);③ 同一课程不同班级错峰安排(如A班周一3-4节,B班周三3-4节)。排好后写入class_schedule表,并向学生推送“您的《大学英语》已排定:301教室,周一3-4节”。
  3. 考勤阶段:到上课时间,系统自动激活该教室考勤任务。学生签到成功,attendance_record表新增记录,同时更新course_selection表的attendance_count字段。
  4. 成绩阶段:期末教师录入成绩时,GradeController/api/grade/submit接口会校验:① 该学生确实在此课程选课名单中;② 考勤率≥80%才允许提交成绩(教务硬性规定)。

这个闭环的关键是事件驱动架构。SpringBoot的@EventListener比手动写定时任务可靠得多——选课成功瞬间触发排课,而不是等凌晨2点的Cron Job。我们甚至用Redis Stream做了事件持久化,万一服务宕机,重启后能重放未处理事件,保证数据最终一致性。

3.3 管理系统后台:B端界面不是“好看就行”,而是教务员的操作效率革命

后台管理界面(admin路由)的设计原则是:让教务员3秒内找到要改的数据。比如修改教室信息:

  • 传统做法:左侧菜单→基础设置→教室管理→搜索框输入“301”→点击编辑→修改名称/容量/设备→保存。
  • 本系统做法:首页“教室资源看板”直接展示所有教室状态卡片,绿色表示正常,黄色表示设备待检,红色表示故障。鼠标悬停301教室卡片,出现“编辑”按钮,点击弹出无遮罩层的快捷编辑浮层,只显示“名称”、“容纳人数”、“投影仪状态”三个字段,修改后回车即保存,无需跳转页面。

技术实现上,Vue用<teleport>把浮层挂载到body下,避免z-index层级问题;后端用@RequestBody Map<String, Object>接收任意字段更新,通过BeanUtils.copyProperties()映射到Room实体,再用MyBatis-Plus的UpdateWrapper动态构建SQL:update room set capacity = ? where id = ?

另一个细节是批量操作的可靠性。教务员常要“给200个新生统一开通选课权限”。传统方案是前端循环调用200次API,网络抖动就失败。本系统用POST /api/admin/batch-enable-selection,后端开启事务:① 查询200个学生ID;② 批量插入course_selection_permission表;③ 记录操作日志。即使中途失败,事务回滚,数据零污染。

实操心得:后台表格千万别用el-tableshow-overflow-tooltip!教务员要看的是完整课程名(如“人工智能导论(双语教学版)”),不是截断后的“人工智能导论...”。我们改用CSSwhite-space: nowrap; overflow: visible;,配合横向滚动条,宁可牺牲一点美观,也要保证信息完整。

4. 全栈开发实操:从环境搭建到上线部署,一份不跳步的流水账

4.1 后端SpringBoot环境:避开JDK和Maven的那些坑

JDK版本:必须用JDK 17(LTS版本)。SpringBoot 2.7.x官方支持JDK 17,但很多教程还在用JDK 8——后者无法编译record类(系统里AttendanceRecord就是record)。安装后验证:java -version输出应为17.0.1
Maven配置settings.xml里必须配置阿里云镜像源,否则下载spring-boot-starter-data-redis等依赖极慢:

<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>Aliyun Maven</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>

数据库初始化:不要用schema.sql自动建表!高校MySQL常禁用CREATE TABLE权限。我们提供university_db_init.sql脚本,包含:① 创建university数据库(字符集utf8mb4);② 手动建表语句(含索引);③ 插入基础数据(如管理员账号、默认教室列表)。执行命令:mysql -u root -p < university_db_init.sql

关键配置项application-prod.yml):

spring: datasource: url: jdbc:mysql://localhost:3306/university?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: univ_admin password: your_secure_password # 必须用强密码,非明文 redis: host: localhost port: 6379 database: 0 lettuce: pool: max-active: 20 max-idle: 10 min-idle: 0 servlet: context-path: /api # 所有后端接口前缀,避免与前端冲突

注意:server.servlet.context-path设为空,但spring.servlet.context-path设为/api——这是SpringBoot 2.7的规范,旧教程的server.context-path已废弃。

4.2 前端Vue环境:Vue3 + Composition API的实战取舍

Vue版本:用Vue 3.2.47(非最新版)。系统基于Vue CLI 4.5构建,强行升级到Vue 3.4会导致vue-router兼容问题。创建项目:vue create university-system,选择“Manually select features”,勾选Babel、Router、Vuex、CSS Pre-processors(Sass),取消Linter。
关键依赖安装

npm install axios@1.6.7 element-plus@2.3.4 @vueuse/core@10.6.1 # VueUse提供useMouse、useStorage等实用Hook npm install -D vite-plugin-vue-inspector@3.2.0 # 开发时点击组件高亮源码,调试神器

路由配置router/index.js):

const routes = [ { path: '/', redirect: '/login' }, { path: '/login', component: () => import('@/views/Login.vue') }, { path: '/admin', component: () => import('@/layout/AdminLayout.vue'), children: [ { path: 'dashboard', component: () => import('@/views/admin/Dashboard.vue') }, { path: 'students', component: () => import('@/views/admin/StudentList.vue') } ] } ]

重点是AdminLayout.vue:它不是简单包裹<router-view>,而是用<slot>注入侧边栏、顶部导航、面包屑,所有子页面复用同一套UI框架,避免样式混乱。

Axios拦截器utils/request.js):

const service = axios.create({ baseURL: '/api' }) // 请求拦截:自动携带token service.interceptors.request.use(config => { const token = localStorage.getItem('token') if (token) config.headers.Authorization = `Bearer ${token}` return config }) // 响应拦截:统一错误处理 service.interceptors.response.use( response => response.data, // 直接返回data,省去response.data.data error => { if (error.response?.status === 401) router.push('/login') // token过期跳登录页 ElMessage.error(error.response?.data?.message || '网络错误') return Promise.reject(error) } )

4.3 前后端联调与部署:Nginx反向代理的黄金配置

开发联调:前端.env.developmentVUE_APP_BASE_API = '/api',后端application-dev.ymlserver.port=8080。启动顺序:先mvn spring-boot:run,再npm run serve。此时访问http://localhost:8080/api/health应返回{"status":"UP"},证明后端OK;访问http://localhost:8080能看到Vue首页,证明Nginx代理正确。

生产部署Nginx配置/etc/nginx/conf.d/university.conf):

upstream backend { server 127.0.0.1:8080; } server { listen 80; server_name university.example.com; # 前端静态文件 location / { root /var/www/university/dist; try_files $uri $uri/ /index.html; } # 后端API代理 location /api { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 关键!防止WebSocket断连 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } # 静态资源缓存 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; } }

提示:proxy_pass http://backend;末尾不能加/!否则/api/attendance/sign会被代理成http://backend/attendance/sign,丢掉api前缀。这是90%新手踩的坑。

5. 常见问题排查与避坑指南:那些文档里不会写的血泪经验

5.1 考勤定位失败的5种真实原因及速查表

现象可能原因排查命令/步骤解决方案
学生APP显示“定位失败,请检查GPS”手机未开启高精度定位设置→定位服务→模式选“高精度”在Vue端加提示:“请前往设置开启GPS+Wi-Fi+蓝牙”
定位成功但签到失败教室Wi-Fi BSSID未录入系统SELECT * FROM wifi_fingerprint WHERE classroom_id = 301后台“Wi-Fi管理”页面手动添加,或用curl命令批量导入
多个学生同时签到,部分超时MySQL连接池耗尽show status like 'Threads_connected';查看连接数spring.datasource.hikari.maximum-pool-size=20,并检查wait_timeout是否过短
签到成功但教师端无提醒Redis连接异常redis-cli -h 127.0.0.1 ping检查application.yml中Redis密码是否正确,防火墙是否开放6379端口
地理围栏误判(操场签到成功)多边形坐标点顺序错误用QGIS打开GeoJSON,检查是否顺时针闭合重绘多边形,确保顶点按顺时针排列,最后一个点等于第一个点

5.2 Vue前端性能瓶颈:当页面卡顿,先查这3个地方

问题1:v-for列表渲染卡顿
现象:学生选课页面加载100门课时,滚动卡顿。
原因:Vue默认对每个<li>做响应式追踪,100个元素开销巨大。
解决:用v-memo指令缓存不变部分:

<li v-for="course in courses" :key="course.id" v-memo="[course.status]"> <span>{{ course.name }}</span> <el-tag :type="course.status === 'OPEN' ? 'success' : 'info'">{{ course.status }}</el-tag> </li>

v-memo只在course.status变化时重新渲染,大幅提升性能。

问题2:路由切换白屏
现象:从首页跳转到课程详情页,空白2秒。
原因:import('@/views/CourseDetail.vue')是Webpack动态导入,但未做预加载。
解决:在路由配置中加webpackPrefetch: true

{ path: '/course/:id', component: () => import(/* webpackPrefetch: true */ '@/views/CourseDetail.vue') }

浏览器空闲时会预加载该组件,点击时秒开。

问题3:Element Plus组件样式错乱
现象:<el-table>表头和内容列宽不一致。
原因:Vue 3的<style scoped>作用域限制,导致Element Plus的全局样式未生效。
解决:在main.js中全局引入样式:

import 'element-plus/theme-chalk/display.css' // 必须引入 import 'element-plus/theme-chalk/index.css'

并在组件中用::v-deep(.el-table)覆盖样式,而非scoped下的.el-table

5.3 SpringBoot生产环境致命陷阱:这些配置不改,上线必崩

陷阱1:spring.jackson.date-format未配置
现象:前端收到的时间字符串是2023-10-01T08:00:00.000+0000,无法用new Date()解析。
后果:考勤记录时间显示为Invalid Date
修复:在application.yml中加:

spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: Asia/Shanghai

陷阱2:spring.servlet.context-path与Nginx代理冲突
现象:Nginx配置location /api,但后端server.servlet.context-path=/api,导致请求变成/api/api/attendance/sign
后果:404错误。
修复:后端配置server.servlet.context-path=(空字符串),所有接口由Nginx统一加/api前缀。

陷阱3:@Scheduled定时任务未启用
现象:每日考勤统计报表没生成。
原因:@EnableScheduling注解漏加,或spring.task.scheduling.enabled=true未配置。
修复:在主启动类加@EnableScheduling,并在application.yml中加:

spring: task: scheduling: enabled: true

最后分享一个小技巧:在src/main/resources/static下放一个health.html文件,内容为<h1>Backend OK</h1>。Nginx配置location /health { alias /var/www/university/dist/health.html; }。运维人员用curl http://university.example.com/health就能秒级确认后端是否存活,比查进程、看日志快十倍。这个系统跑了18个月,零重大事故,靠的就是这些不起眼但致命的细节把控。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 2:02:42

数据源备注与多数据源实践:让智能问数更准确的Spring Boot方案

背景&#xff1a;SQLBot 与智能问数为什么依赖“备注”1.1 SQLBot 到底解决什么问题SQLBot&#xff0c;简单理解就是一个“用自然语言查询数据库”的智能助手。用户不需要写 SQL&#xff0c;只需要用业务语言描述需求&#xff0c;例如“查一下最近 7 天每个支付渠道的订单金额”…

作者头像 李华
网站建设 2026/9/3 2:02:08

YOLOv12+PyQt5交通应急车辆识别实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 2:01:13

Android智慧医疗预约挂号App毕业设计:全栈开发实战指南

简介&#xff1a;本资源是一套面向计算机专业本科生的毕业设计级智慧医疗应用实战案例&#xff0c;聚焦医院预约挂号核心业务&#xff0c;适用于Android移动开发课程设计、毕设选题与健康医疗类App开发能力提升。项目采用Android Studio原生开发&#xff0c;包含完整客户端与轻…

作者头像 李华
网站建设 2026/9/3 1:59:09

Python数据分析实战:演唱会热度与粉丝行为可视化项目全解析

简介&#xff1a;本资源是一份面向Python数据分析初学者与高校课程设计者的综合性大作业实践项目&#xff0c;聚焦演唱会市场这一典型文化消费场景&#xff0c;解决从数据采集、清洗、分布式分析到Web可视化落地的全流程问题。压缩包共65个文件&#xff0c;约11.86MB&#xff0…

作者头像 李华
网站建设 2026/9/3 1:58:59

MiniMax H3 新更新:官方 Skills 与 Turbo Lora 本地部署实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 1:58:23

从RAG到智能体:构建动态交互式检索增强问答系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华